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

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

backtestメソッドの続きから。

                   # waitTh円以上の値幅を取った場合,次の10トレードはロットを1/10に落とす.
                   if plRange > waitTh:
                       waitTerm = originalWaitTerm
                       lot = originalLot / 10
                   elif waitTerm > 0:
                       waitTerm -= 1
                       lot = originalLot / 10
                   if waitTerm == 0:
                       lot = originalLot

loopメソッドにあった処理とほぼ同じです。
コメント通り、waitThで指定された以上の値幅を取った場合は次の10トレードのロットを1/10にします。
originalWaitTermで指定されたループ回数分はロットが1/10になります。

           # ショートクローズロジック
           elif pos == -1:
               # ショートクローズ
               if judgement[i][3] != 0:
                   nOfTrade += 1
                   pos += 1
                   sell_close.append(judgement[i][3])
                   plRange = sell_entry[-1] - sell_close[-1]
                   pl[-1] = pl[-2] + (plRange - self.cost) * lot
                   sellCloseSignals.append(df_candleStick.index[i])
                   plPerTrade.append((plRange - self.cost) * lot)
                   # waitTh円以上の値幅を取った場合,次の10トレードはロットを1/10に落とす.
                   if plRange > waitTh:
                       waitTerm = originalWaitTerm
                       lot = originalLot / 10
                   elif waitTerm > 0:
                       waitTerm -= 1
                       lot = originalLot / 10
                   if waitTerm == 0:
                       lot = originalLot

posが-1の場合はショートクローズを試みます。
ショートクローズはロングクローズを反転させたものなので読解割愛します。

           # さらに,クローズしたと同時にエントリーシグナルが出ていた場合のロジック.
           if pos == 0 and not isRange[i]:

クローズ時点でエントリーすべきタイミングの場合の処理です。
ここより上のtrade処理が終わった後でさらに判定をおこないます。
posが0かつレンジ相場でない場合の処理です。

               # ロングエントリー
               if judgement[i][0] != 0:

judgement配列のi列0行が0でない場合はロングします。
例えばループ処理開始時点でposが-1で、judgement配列のi列0行と3行が0でない場合にこのエントリーが起こります。
この場合、ショートクローズした上でこのif文でロングエントリーすることになります。

                   pos += 1
                   buy_entry.append(judgement[i][0])
                   buyEntrySignals.append(df_candleStick.index[i])

posに1加算し、
buy_entry配列にjudgement価格を入れ、
buyEntrySignals配列にローソク足を入れます。

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

↓次


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