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

↓次


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