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


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

loopメソッドの続きから。

                    elif waitTerm > 0:
                       waitTerm -= 1
                       lot = round(originalLot / 10, 3)

waitTermが0より大きければwaitTermを1減算します。
lotは1/10のままです。
loopが1回回るたびに1減算されるため、waitTerm回の間は1/10のlotになります。

                    if waitTerm == 0:
                       lot = originalLot

waitTermが0の場合はlotにoriginalLotを代入します。

            elif pos == -1:
               # ショートクローズ
               if judgement[3]:
                   print(datetime.datetime.now())
                   self.order.market(size=lot, side="BUY")
                   pos += 1
                   plRange = lastPositionPrice - best_ask
                   pl.append(pl[-1] + plRange * lot)
                   message = "Short close. Lot:{}, Price:{}, pl:{}".format(lot,
                                                                           best_ask,
                                                                           pl[
                                                                               -1])
                   fileName = self.describePLForNotification(pl,
                                                             df_candleStick)
                   self.lineNotify(message, fileName)
                   # 一定以上の値幅を取った場合,次の10トレードはロットを1/10に落とす.
                   if plRange > waitTh:
                       waitTerm = originalWaitTerm
                       lot = round(originalLot / 10, 3)
                   elif waitTerm > 0:
                       waitTerm -= 1
                       lot = round(originalLot / 10, 3)
                   if waitTerm == 0:
                       lot = originalLot

ショートクローズはロングクローズを反転して考えればよいので省略します。

            time.sleep(0.5)

0.5秒sleepするので、0.5秒毎にloop処理実行することになります。

            message = "Waiting for channelbreaking."

            if datetime.datetime.now().minute % 5 == 0 \
                    and datetime.datetime.now().second < 1:
                print(message)
                self.lineNotify(message)

messageを指定し、
現在時刻の分が5で割り切れてかつ秒が1未満の場合はLINEにメッセージを送ります。
botがちゃんと動いていることを確認するためのものと思われます。

ここまでで実際の取引処理はすべて読んだことになります。
自分としては、レンジ判定が行われている点、一定幅以上取った後にロットを下げる点がとても勉強になりました。
また、pythonやpandasの未知のメソッドについてもいくつか知れたので自分のbotに適用したりしました。

しかし自分が最も興味があるのは残された部分、バックテストです。
describeResultメソッドを見ていきます。

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

↓次


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