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

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

ついにご本人に見つかってしまった・・!

紹介までして頂いて恐縮です・・!ありがとうございます!
(noteのアラートがかつてないことになっている。。これがインフルエンサーか・・!ありがてえありがてえ🙏)

閑話休題

backtestメソッドの続きから。

                   # 値幅
                   plRange = buy_close[-1] - buy_entry[-1]

closeするので損益を計算します。
直前でbuy_closeには値を入れてあります。
buy_closeとbuy_entryの末尾要素を取得し減算することで値幅を得ます。

                    pl[-1] = pl[-2] + (plRange - self.cost) * lot

plの後ろから2番目に、先ほど計算した値幅からcostを引いたものにロットを掛けて加算したものを、plの末尾にいれます。
forブロック冒頭にあった、lastPL=pl[-1], pl.append(lastPL)の処理はおそらくここの処理が行われなかった場合のデフォルト値を入れているのでしょう。
エントリーした際はplの末尾要素は(値的には)変化せず、closeした場合に変化するということです。
costはクラス初期化時に指定されているものです。
ファイル冒頭を見てみます。

       # 注文執行コスト.遅延などでこの値幅を最初から取られていると仮定する
       self._cost = 3000

この場合、closeが3000円不利な価格で約定することになります。
backtestメソッドに戻ります。

                    buyCloseSignals.append(df_candleStick.index[i])

buyCloseSignals配列にローソク足を追加します。

                    plPerTrade.append((plRange - self.cost) * lot)

値幅からコストを引いてロットを掛けたものをplPerTradeに加算します。
plPerTradeにはclose時にしか追加しません。
エントリーからクローズまでを1トレードととらえて、1トレードごとの損益を出すために使われるものと考えられます。

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

↓次


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