チャネルブレイクアウトbotコード(by スナフキン氏)読解メモ35
の続きです。
題材コードは https://sshuhei.com/entry/channelbreakout/ です。
judgeメソッドの続きから。
def judge(self, df_candleStick, entryHighLine, entryLowLine, closeHighLine,
closeLowLine, entryTerm):
"""
売り買い判断.ローソク足の高値が期間高値を上抜けたら買いエントリー.
(2)ローソク足の安値が期間安値を下抜けたら売りエントリー.
judgementリストは[買いエントリー,売りエントリー,買いクローズ(売り),売りクローズ(買い)]
のリストになっている.
(二次元リスト)リスト内リストはの要素は,0(シグナルなし),価格(シグナル点灯)を取る.
"""
judgement = [[0, 0, 0, 0] for i in range(len(df_candleStick.index))]
for i in range(len(df_candleStick.index)):
# 上抜けでエントリー
if df_candleStick["high"][i] > entryHighLine[i] and i >= entryTerm:
judgement[i][0] = entryHighLine[i]
# 下抜けでエントリー
if df_candleStick["low"][i] < entryLowLine[i] and i >= entryTerm:
judgement[i][1] = entryLowLine[i]
# 下抜けでクローズ
if df_candleStick["low"][i] < closeLowLine[i] and i >= entryTerm:
judgement[i][2] = closeLowLine[i]
# 上抜けでクローズ
if df_candleStick["high"][i] > closeHighLine[i] and i >= entryTerm:
judgement[i][3] = closeHighLine[i]
#
else:
pass
return judgement
# 下抜けでクローズ
if df_candleStick["low"][i] < closeLowLine[i] and i >= entryTerm:
judgement[i][2] = closeLowLine[i]
ローソク足の安値がentryTerm毎の安値よりも下かつループの回数がentryTerm以上であれば、judgement配列のi行2列にentryTerm毎の安値を入れます。
# 上抜けでクローズ
if df_candleStick["high"][i] > closeHighLine[i] and i >= entryTerm:
judgement[i][3] = closeHighLine[i]
ローソク足の高値がentryTerm毎の高値よりも上かつループの回数がentryTerm以上であれば、judgement配列のi行3列にentryTerm毎の高値を入れます。
else:
pass
return judgement
条件に当てはまらなければ何もせず、forブロックがloopし終わったら生成したjudgement配列を返します。
describeResultメソッドに戻ります。
judgement = self.judge(df_candleStick, entryHighLine, entryLowLine,
closeHighLine, closeLowLine, entryTerm)
judgeメソッドで生成したjudgement配列を受け取ります。
pl, buyEntrySignals, sellEntrySignals, buyCloseSignals,\
sellCloseSignals, nOfTrade, plPerTrade \
= self.backtest(
judgement, df_candleStick, 1, rangeTh, rangeTerm,
originalWaitTerm=originalWaitTerm, waitTh=waitTh,
cost=cost)
backtestメソッドを実行します。
backtestメソッドを見ていきます。
# エントリーラインおよびクローズラインで約定すると仮定する.
def backtest(self, judgement, df_candleStick, lot, rangeTh, rangeTerm,
originalWaitTerm=10, waitTh=10000, cost=0):
コメントによると、先ほど生成したjudgement配列に格納されているエントリーラインとクローズラインで約定すると仮定したテストを行うようです。
# エントリーポイント,クローズポイントを入れるリスト
buyEntrySignals = []
sellEntrySignals = []
buyCloseSignals = []
sellCloseSignals = []
nOfTrade = 0
pos = 0
pl = []
pl.append(0)
# トレードごとの損益
plPerTrade = []
# 取引時の価格を入れる配列.この価格でバックテストのplを計算する.(ので,どの価格で約定するかはテストのパフォーマンスに大きく影響を与える.)
buy_entry = []
buy_close = []
sell_entry = []
sell_close = []
テスト実行中に格納していくための空配列を生成します。
# 各ローソク足について,レンジ相場かどうかの判定が入っている配列
isRange = self.isRange(df_candleStick, rangeTerm, rangeTh)
isRangeメソッドは↓あたりで見たので割愛します。
isRangeにはレンジ相場かどうかを表すTrue, Falseが入っています。j
# 基本ロット.勝ちトレードの直後はロットを落とす.
originalLot = lot
# 勝ちトレード後,何回のトレードでロットを落とすか.
waitTerm = 0
実取引処理でも見た勝った後にlotを落とすための準備です。
15分経ったので今日はここまで。
↓次
この記事が気に入ったらサポートをしてみませんか?