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も少ないですし。
読んでいただいた方、ありがとうございました。
この記事が気に入ったらサポートをしてみませんか?