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分経ったので今日はここまで。

↓次


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