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

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

describeメソッドの続きから。

    pl, profitFactor, maxLoss, winPer, ev = channelBreakOut.describeResult()

バックテスト結果を取得します。

    if "PFDD" in mlMode:
        result = profitFactor/maxLoss
    elif "PL" in mlMode:
        result = -pl
    elif "PF" in mlMode:
        result = -profitFactor
    elif "DD" in mlMode:
        result = -maxLoss
    elif "WIN" in mlMode:
        result = -winPer
    elif "EV" in mlMode:
        result = -ev

mlModeによってresultに入れるものを分けます。
このresultを後でreturnしますが、describeメソッドが渡されているfminは渡された関数が最小の値を返すパラメータ組み合わせを求めるため、
それに合った値をresultに入れる必要があります。

PFDDの場合はプロフィットファクターを最大損失で割った値を入れます。
最大損失が大きくなればなるほどresultは小さくなるのでこの値にもマイナスをつけたほうがよさそうな気がします。
気が向いたらPullRequest出します。

PLの場合は最終損益額にマイナスをつけてresultにいれます。

PFの場合はプロフィットファクターにマイナスをつけてresultに入れます。

DDの場合は最大損失額にマイナスをつけてresultに入れます。

WINの場合は勝率にマイナスをつけてresultに入れます。

EVの場合は期待値にマイナスをつけてresultに入れます。

    logging.info("===========Assessment===========")
    logging.info('Result:%s',result)
    return result

resultをログに出力してからretunします。

optimizationメソッドに戻ります。

    result = fmin(describe,space,algo=tpe.suggest,max_evals=hyperopt)

tpe.suggestというのが気になったのですこしググってみたのですがあまり出てきません。
かろうじて引っかかったのが https://dev.classmethod.jp/machine-learning/use-jubakit/ ですが、hyperoptの記事ではないので参考程度に。

  # 最適化の方法
  # ベイズ最適化か(tpe.suggest)かランダム(rand.suggest)かを選択できる
  algo = tpe.suggest

どうやらベイズ最適化のようです。
といってもそのロジックを理解していませんし一朝一夕に理解できるものでもないので一旦そのようなものが使われているということを把握してスルーします。

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

↓次


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