チャネルブレイクアウト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分経ったので今日はここまで。
↓次
この記事が気に入ったらサポートをしてみませんか?