pe氏pybottersinagoflyer読み解き殴り書きメモ
最近botを作成するにあたってとても参考にさせていただいてるpe氏の記事
ただ、前の記事に書いたように本職が全く違う系統のため、プログラムをさらさら読むこともままならない。
なので、少しずつ読み解いて理解しようという根端。
なお、自分用のメモなので、参考にならないかもしれません。
前回は、mmbotの記事のわからないところだけを読み解いた。
今回は、2作目のinagoflyerの記事を最初から読みといて理解することを目標とする。
ここまでのボリュームのプログラムを無料で公開してくれているpe氏、pybottersを公開してくれてるまちゅけん氏にはとても感謝しています。
問題、間違いがあったら指摘してください。
import
importされてるモジュールから見ていく
from __future__ import annotations
from typing import TYPE_CHECKING, Callable, Generator, Union
if TYPE_CHECKING:
from pybotters.store import DataStoreManager
import asyncio
from collections import deque
import loguru
import numpy as np
import pandas as pd
import pybotters
import pybotters.models.bitflyer
早速一行目のfutureからはまる
参考にさせていただいた記事は以下
とりあえず、型アノテーションっていうものがあって、今までなにかしらの関数をインポートしなきゃいけなかったっぽいけど省略できるものらしい。
続いて二行目ではまる
typingに関しては以下の記事がまとめてくれてたので参考にさせていただいた
typingというモジュールは型を記載するのに必要らしい
また、TYPE_CHECKINGは以下のサイトを参考にした
これに関しては完全に理解できなかったけど、循環参照っていうのを防ぐためにするらしい
asyncioやpybottersに関してはまちゅけんさんの記事がわかりやすい
dequeに関しても調べた。
なにか処理をする際にリストをいじくるより便利らしい。今のところまだ使用するタイミングはわからない
loguruはlogを出力するのに使いやすくするもの
pandas、numpyは計算や処理をするのに使う
起動
上から順にみていくより、私は起動の順番で見ないとまだ読んでいけないので次にmain処理の起動から読む
if __name__ == "__main__":
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument("--api_key", required=True, help="apiキーが入ったJSONファイル")
parser.add_argument("--symbol", default="FX_BTC_JPY", help="取引通過")
parser.add_argument(
"--side", default="BOTH", choices=["BUY", "SELL", "BOTH"], help="エントリーサイド"
)
parser.add_argument("--size", default=0.01, type=float, help="注文サイズ")
parser.add_argument("--bar_unit_seconds_long", default=60, type=int, help="長期足")
parser.add_argument("--bar_unit_seconds_short", default=5, type=int, help="短期足")
parser.add_argument("--bar_maxlen", default=999, type=int, help="足の最大履歴")
parser.add_argument(
"--lower_threshold",
default=1,
type=float,
help="短期足のボリューム(log)がこの閾値以上であればエントリー待機",
)
parser.add_argument(
"--upper_threshold",
default=float("inf"),
type=float,
help="短期足のボリューム(log)がこの閾値以下であればエントリー待機",
)
parser.add_argument(
"--entry_patience_seconds", default=3, type=int, help="閾値クリア後の経過観察時間"
)
parser.add_argument(
"--entry_price_change", default=500, type=int, help="経過観察後の価格変動がこの閾値以上であればエントリー"
)
parser.add_argument("--trail_margin", default=2000, type=int, help="トレイル値幅")
args = parser.parse_args()
try:
asyncio.run(main(args))
except KeyboardInterrupt:
pass
様々な引数をここでmainに渡している
ここで出てきた、ArgumentParserというのは
とのこと。この引用先のサイトがとても丁寧に説明してくれてた。
瞬時にパラメータを変更できるのは、何度もフォワードテストを行う上で便利なのかな?
引数に関しては大体helpで記載してくれてるため、調べなくてもよさそう
ただし、api_keyだけに関してはrequiredがTrueになっているため、コマンドラインから起動する際に必ず引数として渡さなければならないっぽい。
とりあえずここまで。
次はmain処理を見ていこうと思います。
この記事が気に入ったらサポートをしてみませんか?