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

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

       # 直近約定件数30件の高値と安値
       high = max([self.executions[-1 - i]["price"] for i in range(30)])
       low = min([self.executions[-1 - i]["price"] for i in range(30)])

`self.executions` を利用しています。
これはexecutionsProcessメソッドでpubnubで取得しているものです。

        class BFSubscriberCallback(SubscribeCallback):
           def message(self, pubnub, message):
               execution = message.message
               for i in execution:
                   executions.append(i)

このコールバックでexecutions配列に約定履歴がappendされています。

self.executions[-1 - i]["price"] for i in range(30)]

上記の処理で、executionsの後ろから順番に30個、price要素を取得しています。
その結果できた配列にmax()を実行しているため、highは直近30件の約定履歴の中で一番の高値が入ります。
lowも同様に安値が入ります。
この `30` というのは決め打ちですが、ここを変えることで成果をチューニングできるかもしれません。

while True:

whileブロック内に書かれた処理を(例外等で処理が終わらなければ)永遠に繰り返します。

            # 1分ごとに基準ラインを更新
           if datetime.datetime.now().second < 2:

datetime.datetime.now().secondで現在時刻の秒数を取得できるため、0秒か1秒であればifブロック内の処理をします。
厳密には「1分ごと」にはなりませんが、大体大丈夫ということでしょう。

               print("Renewing candleSticks")
               try:
                   candleStick = self.getCandlestick(50, "60")
               except:
                   print(
                       "Unknown error happend when you requested candleStick")

前にも出てきた処理です。
getCandlestickメソッドでローソク足情報を取得します。

               if candleTerm == None:
                   df_candleStick = self.fromListToDF(candleStick)
               else:
                   df_candleStick = self.processCandleStick(candleStick,
                                                            candleTerm)
               entryLowLine, entryHighLine = self.calculateLines(
                    df_candleStick, entryTerm)
               closeLowLine, closeHighLine = self.calculateLines(
                    df_candleStick, closeTerm)

これも前に出てきた処理です。
entryTerm毎の安値リスト・高値リストとcloseTerm毎の安値リスト・高値リストを取得します。

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

↓次


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