Channel Breakout Bot for bitflyer-FX (by Connie-Wild氏)読解メモ49
の続きです。
題材は https://github.com/Connie-Wild/ChannelBreakoutBot です。
optimizationメソッドの続きから。
#config.json設定用ログ
print("*********PF max*********")
print("PL", paramList[pF.index(max(pF))][0])
print("PF", paramList[pF.index(max(pF))][1])
print(" \"entryTerm\" : ", paramList[pF.index(max(pF))][2][0], ",", sep="")
print(" \"closeTerm\" : ", paramList[pF.index(max(pF))][2][1], ",", sep="")
トレードの際のconfigを設定するための情報を出力します。
プロフィットファクターが最大の時の
損益、プロフィットファクター、entryTerm設定値、closeTerm設定値を出力します。
if paramList[pF.index(max(pF))][3][0] is None:
print(" \"rangePercent\" : ", "null,", sep="")
else:
print(" \"rangePercent\" : ", paramList[pF.index(max(pF))][3][0], ",", sep="")
プロフィットファクターが最大の時のrangePercent設定がNoneの場合は"null"を文字列として出力します。
Noneでない場合はパラメータ値を出力します。
if paramList[pF.index(max(pF))][3][1] is None:
print(" \"rangePercentTerm\" : ", "null,", sep="")
else:
print(" \"rangePercentTerm\" : ", paramList[pF.index(max(pF))][3][1], ",", sep="")
if paramList[pF.index(max(pF))][4][1] is None:
print(" \"rangeTerm\" : ", "null,", sep="")
else:
print(" \"rangeTerm\" : ", paramList[pF.index(max(pF))][4][1], ",", sep="")
if paramList[pF.index(max(pF))][4][0] is None:
print(" \"rangeTh\" : ", "null,", sep="")
else:
print(" \"rangeTh\" : ", paramList[pF.index(max(pF))][4][0], ",", sep="")
rangePercentTerm、rangeTerm、rangeThも同様にパラメータが存在していれば出力します。
print(" \"waitTerm\" : ", paramList[pF.index(max(pF))][5][0], ",", sep="")
print(" \"waitTh\" : ", paramList[pF.index(max(pF))][5][1], ",", sep="")
print(" \"candleTerm\" : \"", paramList[pF.index(max(pF))][6], "T\",", sep="")
waitTerm、waitTh、candleTermの設定を出力します。
print("*********PL max*********")
print("PL", paramList[pL.index(max(pL))][0])
print("PF", paramList[pL.index(max(pL))][1])
print(" \"entryTerm\" : ", paramList[pL.index(max(pL))][2][0], ",", sep="")
print(" \"closeTerm\" : ", paramList[pL.index(max(pL))][2][1], ",", sep="")
損益額が最大の時の損益額、プロフィットファクター、entryTerm、closeTermを出力します。
if paramList[pL.index(max(pL))][3][0] is None:
print(" \"rangePercent\" : ", "null,", sep="")
else:
print(" \"rangePercent\" : ", paramList[pL.index(max(pL))][3][0], ",", sep="")
if paramList[pL.index(max(pL))][3][1] is None:
print(" \"rangePercentTerm\" : ", "null,", sep="")
else:
print(" \"rangePercentTerm\" : ", paramList[pL.index(max(pL))][3][1], ",", sep="")
if paramList[pL.index(max(pL))][4][1] is None:
print(" \"rangeTerm\" : ", "null,", sep="")
else:
print(" \"rangeTerm\" : ", paramList[pL.index(max(pL))][4][1], ",", sep="")
if paramList[pL.index(max(pL))][4][0] is None:
print(" \"rangeTh\" : ", "null,", sep="")
else:
print(" \"rangeTh\" : ", paramList[pL.index(max(pL))][4][0], ",", sep="")
print(" \"waitTerm\" : ", paramList[pL.index(max(pL))][5][0], ",", sep="")
print(" \"waitTh\" : ", paramList[pL.index(max(pL))][5][1], ",", sep="")
print(" \"candleTerm\" : \"", paramList[pF.index(max(pF))][6], "T\",", sep="")
他のパラメータもプロフィットファクター最大の時と同じように出力します。
main処理に戻ります。
logging.info('total processing time: %s', time.time() - start)
最後にoptimizationにかかった時間を出力します。
これでoptimization.pyを読み終わりました。
次はmachineLearning.pyを読んでいきます。
main処理から見ていきます。
if __name__ == '__main__':
#logging設定
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s %(levelname)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S')
logfile=logging.handlers.TimedRotatingFileHandler(
filename = 'log/optimization.log',
when = 'midnight'
)
logfile.setLevel(logging.INFO)
logfile.setFormatter(logging.Formatter(
fmt='%(asctime)s %(levelname)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'))
logging.getLogger('').addHandler(logfile)
logging.info('Wait...')
最初にログ出力設定をします。
#config.jsonの読み込み
f = open('config/config.json', 'r', encoding="utf-8")
config = json.load(f)
logging.info('cost:%s mlMode:%s fileName:%s',config["cost"],config["mlMode"],config["fileName"])
config読み込みを行います。
optimizationと異なる点は、mlModeを読み込んでいることです。
READMEによると、
機械学習で最適値を求める項目を選択する。
PL:利益 PF:利益率 DD:ドローダウン
WIN:勝率 PFDD:利益率/ドローダウン
EV:期待値[勝率 * 平均利益 - (1-勝率) * 平均損失]
とのことで、利益額、利益率、勝率、利益率/ドローダウン、期待値のいずれかを指定できるようです。
15分経ったので今日はここまで。
↓次
この記事が気に入ったらサポートをしてみませんか?