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

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

           try:
               ticker = self.api.ticker(product_code=self.product_code)
           except:
               print("Unknown error happend when you requested ticker.")
           finally:
               pass
               ticker = self.api.ticker(product_code=self.product_code)

pybitflyerのtickerを使っています。
https://github.com/yagays/pybitflyer/blob/4d89e78bcd88b772cc785687dc7fe801a1de1296/pybitflyer/pybitflyer.py#L84 です。
利用している bitflyerAPI仕様は https://lightning.bitflyer.com/docs?lang=ja#ticker です。
tickerには下記形式の情報が入ります。

{
 "product_code": "BTC_JPY",
 "timestamp": "2015-07-08T02:50:59.97",
 "tick_id": 3579,
 "best_bid": 30000,
 "best_ask": 36640,
 "best_bid_size": 0.1,
 "best_ask_size": 5,
 "total_bid_depth": 15.13,
 "total_ask_depth": 20,
 "ltp": 31690,
 "volume": 16819.26,
 "volume_by_product": 6819.26
}

API通信失敗等で正しく取得できないことがあるので、try-exceptで囲っています。
例外時は標準出力でメッセージを表示して処理を進めます。
ticker情報がないと先の処理が正しく行われないかもしれないので、その場合はexcept節でcontinueした方がいいかもしれません。
(あるいはこの先でticker情報ない場合をハンドリングしている可能性も。)
finally節は例外が発生してもしなくても通る処理ですが、ここでは書かなくてもよいかもしれません(あっても問題ないです)。

           best_ask = ticker["best_ask"]
           best_bid = ticker["best_bid"]

ticker情報からbest_askとbest_bidだけを抜き出して変数に入れておきます。

           # ここからエントリー,クローズ処理
           if pos == 0 and not isRange[-1]:

posはポジションです。
このあと出てきますがlong約定で加算されshort約定で減算されます。
isRange[-1]を使っているので、直近のtermがレンジかどうかを判定しています。
このifブロックは、ポジション無しかつ直近期間がレンジでない場合に実行されることになります。

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

↓次


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