最適化のためのカスタムフィットネス関数

cBots (自動売買)

cBotの最適化とは、ライブ取引に展開する前にcBotの最適なパラメータ値を決定するプロセスです。cTraderでは、利益の最大化やエクイティドローダウンの最小化など、幅広い組み込みの基準に対してcBotを最適化することができます。しかし、カスタムフィットネス関数を記述して最適化することも可能で、cBotに独自のパフォーマンス基準を適用したい場合に便利です。本記事と対応する動画では、カスタムフィットネス関数の仕組みについて解説します。

なお、この「ハウツー」では組み込みの基準を使用したcBotの最適化プロセスはカバーしていません。このプロセスについて詳しく知りたい場合は、こちらをクリックしてください。

カスタムフィットネス関数の定義

カスタムフィットネス関数は、GetFitness() メソッドのオーバーライドに過ぎません。

1
2
3
4
protected override double GetFitness(GetFitnessArgs args)
{
}

オーバーライドは、カスタムフィットネス関数と見なされるために、GetFitness argsタイプの単一の引数を受け入れる必要があります。

カスタムフィットネス関数の作成

GetFitness() メソッドは double を返す必要があるため、このメソッドの本文にはこのタイプの数値を評価する計算が含まれている必要があります。

例えば、cBotが行った勝ちトレードの総数を二乗し、この値を負けトレードの総数で割るシンプルなカスタムフィットネス関数を作成できます。これにより、勝ちトレードにより多くの「重み」を割り当て、最適化されたcBotがリスクの高いプレイをいくつか行うことを許容します。

フィットネス関数は以下のようになります。

1
2
3
4
protected override double GetFitness(GetFitnessArgs args)
{
    return Math.Pow(args.WinningTrades, 2) / args.LosingTrades;
}

この時点で、オーバーライドを任意のcBotに追加し、保存してビルドすることができます。

最適化でカスタムフィットネス関数を使用する

関数を追加した後、残るのは選んだcBotのインスタンスを追加し、「バックテスト」タブに切り替えることだけです。カスタム関数を使用した最適化を行うには、「最適化基準」セクションを開いて「カスタム」オプションを選択するだけです。その後、通常通りに最適化を実行できます。

最適化中、cBotが勝ちトレード数の二乗と負けトレード数の比率を最大化したパスには、より高いフィットネススコアが割り当てられます。

カスタムフィットネス関数の修正

また、カスタム関数に戻って以下のように修正することもできます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
protected override double GetFitness(GetFitnessArgs args)
{
    if (args.TotalTrades > 20)
    {
        return Math.Pow(args.WinningTrades, 2) / args.LosingTrades;
    }
    else
    {
        return double.MinValue;
    }
}

この関数は以前のアルゴリズムに従っていますが、cBotによって20回以上の取引が行われた場合にのみカスタム計算を適用します。それ以外の場合、関数は可能な限り低い double を返します。理論的には、これにより統計的バイアスの可能性が減少し、結果が改善されるはずです。

ボットを再ビルドして最適化を再度実行すると、cBotによって行われた総取引数が少ないため、非常に低いフィットネススコアを得るパスがいくつか見られるはずです。

最後に、まだアクティブな取引を奨励しつつ、エクイティドローダウンを最小限に抑えたいと考えています。

1
2
3
4
5
6
7
8
if (args.TotalTrades > 20 && args.MaxEquityDrawdownPercentages < 50)
{
    return Math.Pow(args.WinningTrades, 2) / args.LosingTrades;
}
else
{
    return double.MinValue;
}

最適化を再度実行すると、私たちの取引戦略に基づく最適なパスが表示されるはずです。

まとめ

カスタムフィットネス関数は、独自の取引アプローチに適した最適なパラメータ値を決定するための優れたツールを提供します。このチュートリアルが役に立ったことを願っています!新しいチュートリアルを公開するたびに通知を受け取るために、私たちのYouTubeチャンネルを購読することを検討してください。

私たちのYouTubeチャンネルを購読してください