Channel Breakout Bot for bitflyer-FX (by Connie-Wild氏)読解メモ53

の続きです。
題材は https://github.com/Connie-Wild/ChannelBreakoutBot です。

optimizationメソッドの続きから。

    logging.info("======Optimization finished======")
    channelBreakOut = channel.ChannelBreakOut()
    channelBreakOut.entryTerm = entryAndCloseTerm[result['i']][0]
    channelBreakOut.closeTerm = entryAndCloseTerm[result['i']][1]
    channelBreakOut.rangeTh = rangeThAndrangeTerm[result['j']][0]
    channelBreakOut.rangeTerm = rangeThAndrangeTerm[result['j']][1]
    channelBreakOut.waitTerm = waitTermAndwaitTh[result['k']][0]
    channelBreakOut.waitTh = waitTermAndwaitTh[result['k']][1]
    channelBreakOut.rangePercent = rangePercentList[result['l']][0]
    channelBreakOut.rangePercentTerm = rangePercentList[result['l']][1]
    channelBreakOut.candleTerm = str(candleTerm[result['m']]) + "T"
    channelBreakOut.cost = cost
    channelBreakOut.fileName = fileName
    channelBreakOut.showTradeDetail = showTradeDetail

返ってきた結果を使ってバックテスト詳細結果を得るためにChannelBreakOutインスタンスを生成し値を設定します。

    logging.info("======Best pattern======")
    logging.info('candleTerm:%s mlMode:%s',channelBreakOut.candleTerm,mlMode)
    logging.info('entryTerm:%s closeTerm:%s',channelBreakOut.entryTerm,channelBreakOut.closeTerm)
    logging.info('rangePercent:%s rangePercentTerm:%s',channelBreakOut.rangePercent,channelBreakOut.rangePercentTerm)
    logging.info('rangeTerm:%s rangeTh:%s',channelBreakOut.rangeTerm,channelBreakOut.rangeTh)
    logging.info('waitTerm:%s waitTh:%s',channelBreakOut.waitTerm,channelBreakOut.waitTh)
    logging.info("======Backtest======")
    channelBreakOut.describeResult()

最適解のパラメータをログ出力し、
バックテストを走らせます。
describeResultメソッド内でバックテスト結果が出力されます。

    #config.json設定用ログ
    print("======config======")
    print("    \"entryTerm\" : ", channelBreakOut.entryTerm, ",", sep="")
    print("    \"closeTerm\" : ", channelBreakOut.closeTerm, ",", sep="")
    if channelBreakOut.rangePercent is None:
        print("    \"rangePercent\" : ", "null,", sep="")
    else:
        print("    \"rangePercent\" : ", channelBreakOut.rangePercent, ",", sep="")
    if channelBreakOut.rangePercentTerm is None:
        print("    \"rangePercentTerm\" : ", "null,", sep="")
    else:
        print("    \"rangePercentTerm\" : ", channelBreakOut.rangePercentTerm, ",", sep="")
    if channelBreakOut.rangeTerm is None:
        print("    \"rangeTerm\" : ", "null,", sep="")
    else:
        print("    \"rangeTerm\" : ", channelBreakOut.rangeTerm, ",", sep="")
    if channelBreakOut.rangeTh is None:
        print("    \"rangeTh\" : ", "null,", sep="")
    else:
        print("    \"rangeTh\" : ", channelBreakOut.rangeTh, ",", sep="")
    print("    \"waitTerm\" : ", channelBreakOut.waitTerm, ",", sep="")
    print("    \"waitTh\" : ", channelBreakOut.waitTh, ",", sep="")
    print("    \"candleTerm\" : \"", channelBreakOut.candleTerm, "\",", sep="")
    print("==================")

最後に最適解のconfig設定を出力します。
この出力をconfig.jsonにそのまま貼り付ければ最適解で動作します。
メイン処理に戻ります。

    optimization(cost=config["cost"], fileName=config["fileName"], hyperopt=config["hyperopt"], mlMode=config["mlMode"], showTradeDetail=config["showTradeDetail"])
    logging.info('total processing time: %s', time.time() - start)

最後に最適化にかかった時間を出力します。

これでChannelBreakoutBotを全て読み終わりました。
スナフキン氏のチャネルブレイクアウトコードをベースにしているためかぶっているところも多かったですが、
改善されている点も多々ありました。
特筆すべきはやはりバックテストで、ほとんど理解できていないですがhyperoptに触れられたのは勉強になりました。

スナフキン氏のチャネルブレイクアウトbot、
magito氏のMarketMakerBOT、
Connie-Wild氏のChannel Breakout Bot for bitflyer-FX、
をこれまで読んできました。
コードレビュー力が少しは上がったのではないかと思います。
bot力も少しは強くなっていればいいな(遠い目
100日超えて記事を書けたのは初めてでした。
ネタ元の諸氏に感謝です。
素晴らしいbotコードの無料公開ありがとうございました。

すこしこのやり方に飽きてきたので読解メモシリーズはここで終わりにします。
無料公開botも少ないですし。

読んでいただいた方、ありがとうございました。

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