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

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

describeメソッドの続きから。

    if is_blacklist:
        pl = 0
        profitFactor = 0
    else:
        #テスト
        pl, profitFactor, maxLoss, winPer, ev = channelBreakOut.describeResult()
    return [pl, profitFactor, i, l, j, k, m, is_blacklist]

blacklistに載ったパラメータであればplとprofitFactorは0にします。
blacklistに載っていないパラメータであればバックテストを行います。
describeResultはbacktest.pyを見たときに読んだので割愛します。
describeメソッドの冒頭でChannelBreakouインスタンスを生成しパラメータを指定してあるため、ここではdescribeResultを呼ぶだけでバックテストできます。
バックテストの結果とパラメータ、ブラックリスト対象パラメータかどうかを配列にして返します。

optimizationメソッドに戻ります。

    if core == 1:
        # 同期処理
        for param in params:
            result = describe(param)
            paramList.append(result)
            logging.info('[%s/%s]',len(paramList),total)

describeの返り値をresultに入れ、paramList配列にresultを入れます。
paramListの数(テスト済み数)と試行組み合わせ総数をログ出力します。

    else:
        # 非同期処理
        with ProcessPoolExecutor(max_workers=core) as executor:

coreが1でない場合は非同期処理します。
ProcessPoolExecutorでマルチプロセス実行します。
1組み合わせのパラメータでもテストにそれなりに時間がかかるため、複数CPUコアを活用します。
各コアを100%近く使うことになるため何コアかは残しておくことをおすすめします。

            for result in executor.map(describe, params):
               skiped = '(skip)' if result[7] == True else ''

executor.mapに実行メソッドと引数を渡します。
実行結果がresultに入ります。
result[7]、つまりis_blacklistがTrueの場合はskiped変数に(skip)と入れ、True出ない場合は''と入れます。

15分経ったので今日はここまで。

↓次



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