Channel Breakout Bot for bitflyer-FX (by Connie-Wild氏)読解メモ40
の続きです。
題材は https://github.com/Connie-Wild/ChannelBreakoutBot です。
describeResultメソッドの続きから。
maxProfit = max(plPerTrade, default=0)
maxLoss = min(plPerTrade, default=0)
トレードのうち最大利益額をmaxProfitに、最大損益額をmaxLossに入れます。
try:
winAve = winTotal / winTrade
except:
winAve = 0
try:
loseAve = loseTotal / loseTrade
except:
loseAve = 0
勝ちトレードの平均額をwinAveに、負けトレードの平均額をloseAveに入れます。
例外が飛んだ場合は0を入れます。
winDec = winPer / 100
ev = round(winDec * winAve + (1-winDec) * loseAve, 3)
勝率百分率を100で割って最大1の確率をwinDecに入れます。
勝率と勝ちトレード平均額の積と敗率と負けトレードの平均額の積を加算して小数第三位まで表したもの(期待値)をevに入れます。
logging.info('showFigure :%s, sendFigure :%s',self.showFigure, self.sendFigure)
logging.info('Period: %s > %s', df_candleStick.index[0], df_candleStick.index[-1])
logging.info("Total pl: {}JPY".format(int(pl[-1])))
logging.info("The number of Trades: {}".format(nOfTrade))
logging.info("The Winning percentage: {}%".format(winPer))
logging.info("Expected value: {}".format(ev))
logging.info("The profitFactor: {}".format(profitFactor))
logging.info("The maximum Profit and Loss: {}JPY, {}JPY".format(maxProfit, maxLoss))
logging.info("The average Profit and Loss: {}JPY, {}JPY".format(winAve, loseAve))
ここまでで算出した数値をlogに出します。
if self.showTradeDetail:
logging.info("==Trade detail==")
for log in tradeLog:
profit = log[3] if len(log) > 3 else ''
logging.info("%s %s %s %s", log[0], log[1], log[2], profit)
logging.info("============")
showTradeDetailフラグが立っている場合の処理です。
trade detailを表示する旨ログを出力します。
tradeLogの中身をforで回します。
logの長さが3より大きい場合はprofitとしてlog配列の3番目を入れます。
これはbacktestで求めたplRange*lot(損益値幅*lot)です。
logの長さが3以下の場合はprofitに空文字列を入れます。
logの中身をloggerで出力します。
return pl[-1], profitFactor, maxLoss, winPer, ev
最後に最終損益、プロフィットファクター、最大損失、勝率、期待値を返します。
これでbacktest.pyに紐づく処理を見終えました。
次はoptimization.pyを見ていきます。
15分経ったので今日はここまで。
↓次
この記事が気に入ったらサポートをしてみませんか?