チャネルブレイクアウトbotコード(by スナフキン氏)読解メモ5

の続きです。
題材コードは https://sshuhei.com/entry/channelbreakout/ です。

while "status" in response:
 try:
     response = self.api.sendchildorder(
         product_code=self.product_code, child_order_type="MARKET",
         side=side,
         size=size, minute_to_expire=minute_to_expire)
 except:
     pass
 time.sleep(3)
return response

responseにstatusキーが入っている限り=成功レスポンスが来ない限りloopします。
必ず注文を入れる、ということですね。
たいていの場合有効に作用しますが、デメリットもあります。
例えばmarketメソッドを使っている場合に、bitflyerが数分間SUPER BUSY状態を継続しているとき、ずっと発注を繰り返してしまい、予定していた価格と大きく離れた場所で約定してしまうリスクがあります。
(このコードをもとにして書かれたChannelBreakoutBotではretry数が定められているのでリスクが減っています。 参考: https://github.com/Connie-Wild/ChannelBreakoutBot/blob/master/src/bforder.py

time.sleep(3)

は、loop時に短すぎる間隔で連投しないようにするための措置です。
bitflyerのAPIには下記制限があります。( https://lightning.bitflyer.com/docs?lang=ja#api%E5%88%B6%E9%99%90

HTTP API は、以下のとおり呼出回数を制限いたします。
Private API は 1 分間に約 200 回を上限とします。
IP アドレスごとに 1 分間に約 500 回を上限とします。

sleepを入れないと1分間に200の制限にすぐ引っかかってしまうでしょう。

limitメソッドとmarketメソッドを見てきましたが、(limitメソッドを見始めたつもりがいつの間にかmarketメソッドのコードを見てしまっていた・・・)他のstop, stop_limit, trailingメソッドは渡すパラメータが異なるだけで処理の流れは同じなので読解割愛します。

ChannelBrakOutクラスの読解に進みます。

15分経ったので今日はここまで。

この記事が気に入ったらサポートをしてみませんか?