チャネルブレイクアウトbotコード(by スナフキン氏)読解メモ40
の続きです。
題材コードは https://sshuhei.com/entry/channelbreakout/ です。
describeResultメソッドの続きから。
pl, buyEntrySignals, sellEntrySignals, buyCloseSignals,\
sellCloseSignals, nOfTrade, plPerTrade \
= self.backtest(
judgement, df_candleStick, 1, rangeTh, rangeTerm,
originalWaitTerm=originalWaitTerm, waitTh=waitTh,
cost=cost)
backtestメソッドから各種値が返ってきました。
plt.figure()
plt.subplot(211)
subplotは、
plt.subplot(行数, 列数, 何番目のプロットか)
で指定します。 考: http://bicycle1885.hatenablog.com/entry/2014/02/14/023734
211の間にカンマはないので、カンマなしでも問題ないのかもしれません。
plt.plot(df_candleStick.index, df_candleStick["high"])
plt.plot(df_candleStick.index, df_candleStick["low"])
x軸をローソク足の番号、y軸を高値もしくは安値としたグラフを描画します。
plt.ylabel("Price(JPY)")
y軸の名前を設定します。
ymin = min(df_candleStick["low"]) - 200
ymax = max(df_candleStick["high"]) + 200
グラフの分かりやすさのために、minを200減算し、maxを200加算します。
plt.vlines(buyEntrySignals, ymin, ymax, "blue", linestyles='dashed',
linewidth=1)
plt.vlines(sellEntrySignals, ymin, ymax, "red", linestyles='dashed',
linewidth=1)
plt.vlines(buyCloseSignals, ymin, ymax, "black", linestyles='dashed',
linewidth=1)
plt.vlines(sellCloseSignals, ymin, ymax, "green", linestyles='dashed',
linewidth=1)
エントリークローズした時間に縦線を引きます。
先ほどのグラフと合わせるとどういう価格でエントリーしてどういう価格でクローズしたかがわかりやすくなります。
plt.subplot(212)
plt.plot(df_candleStick.index, pl)
plt.hlines(y=0, xmin=df_candleStick.index[0],
xmax=df_candleStick.index[-1], colors='k',
linestyles='dashed')
plt.ylabel("PL(JPY)")
二つ目のグラフとして、損益履歴をプロットします。
# 各統計量の計算および表示.
winTrade = sum([1 for i in plPerTrade if i > 0])
loseTrade = sum([1 for i in plPerTrade if i < 0])
winPer = round(winTrade / (winTrade + loseTrade) * 100, 2)
勝ちトレードの回数と負けトレードの回数を計算し、勝率を算出します。
winTotal = sum([i for i in plPerTrade if i > 0])
loseTotal = sum([i for i in plPerTrade if i < 0])
profitFactor = round(winTotal / -loseTotal, 3)
勝ちトレードの利益と負けトレードの損失を計算し、プロフィットファクターを算出します。
maxProfit = max(plPerTrade)
maxLoss = min(plPerTrade)
最大利益と最大損失を算出します。
print("Total pl: {}JPY".format(int(pl[-1])))
print("The number of Trades: {}".format(nOfTrade))
print("The Winning percentage: {}%".format(winPer))
print("The profitFactor: {}".format(profitFactor))
print("The maximum Profit and Loss: {}JPY, {}JPY".format(maxProfit,
maxLoss))
バックテスト結果を表示します。
if showFigure:
plt.show()
else:
plt.clf()
showFigureが指定されている場合はグラフを描画します。
そうでない場合はクリアします。
参考: https://qiita.com/7of9/items/a478f84df3e8a8562cc0
return pl[-1], profitFactor
最終損益とプロフィットファクターを返します。
15分経ったので今日はここまで。
↓次
この記事が気に入ったらサポートをしてみませんか?