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

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

backtestメソッドの続きから。

               # ショートエントリー
               elif judgement[i][1] != 0:
                   pos -= 1
                   sell_entry.append(judgement[i][1])
                   sellEntrySignals.append(df_candleStick.index[i])

クローズと同時にショートできる場合の処理です。
posに1減算し、
sell_entry配列にjudgement価格を入れ、
sellEntrySignals配列にローソク足の時間情報を入れます。

       # 最後にポジションを持っていたら,期間最後のローソク足の終値で反対売買.
       if pos == 1:

forブロック完了後、 ポジションを持っている場合は決済します。
まずはpositionが1の場合、ロングポジションを持っている場合の処理です。

            buy_close.append(df_candleStick["close"][-1])

buy_close配列にローソク足の終値を追加します。

            plRange = buy_close[-1] - buy_entry[-1]
            pl[-1] = pl[-2] + plRange * lot
            pos -= 1

値幅を計算し、pl配列に追加して、ポジションを1減算します。

           buyCloseSignals.append(df_candleStick.index[-1])
           nOfTrade += 1
           plPerTrade.append(plRange * lot)

buyCloseSignals配列にローソク足の時間情報を入れ、
nOfTradeに1加算し、
plPerTrade配列に値幅*lotの値を追加します。

       elif pos == -1:
           sell_close.append(df_candleStick["close"][-1])
           plRange = sell_entry[-1] - sell_close[-1]
           pl[-1] = pl[-2] + plRange * lot
           pos += 1
           sellCloseSignals.append(df_candleStick.index[-1])
           nOfTrade += 1
           plPerTrade.append(plRange * lot)

ショートポジションを持っている場合の処理はロング時の反転なので割愛します。

        return (pl, buyEntrySignals, sellEntrySignals, buyCloseSignals,
               sellCloseSignals, nOfTrade, plPerTrade)

ここまでで作ってきた値を返します。
plはトレードの損益履歴、
buyEntrySignalsはロングエントリー時のローソク足の時間情報、
sellEntrySignalsはショートエントリー時のローソク足の時間情報、
buyCloseSignalsはロングクローズ時のローソク足の時間情報、
sellCloseSignalsはショートクローズ時のローソク足の時間情報、
nOfTradeは取引回数、
plPerTradeは取引ごとの損益、
が入っています。

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

↓次


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