コンテンツにスキップ

cTraderでcBotを最適化する

この記事では、cTrader WindowsとMacで取引ロボットを最適化する方法について説明します。

cBotの最適な初期パラメーターセットを指定するのは難しい場合があります。 幸いなことに、cTraderには組み込みのcBot最適化機能があります。 最適化では、コードを複数回実行し、各パスが様々なパラメーター値に基づいて行われます。 その後、カスタマイズ可能な結果セットを提示し、最適なパラメーター構成を定義するのに使用できます。

この機能を使用するには、cBotインスタンスを選択し、最適化タブに切り替えます。

Image title

その後、ドロップダウンカレンダーを使用するか、スライダーをドラッグして最適化のバックテスト期間を定義します。

Image title

最適化設定

最適化は本質的に一連のバックテストであるため、バックテストタブと同様にバックテスト設定を指定できます。

最適化パラメーター

カレンダースライダーの左側にあるパラメーターボタンをクリックします。 以下のようなウィンドウが表示されます。

Image title

最適化したいcBotパラメーターの横にあるフラグをチェックします。 時間枠パラメーターはすべてのcBotで利用可能です。

最適化基準

基準ボタンを最適化パラメーターボタンの右側にあるボタンを押してください。 cTraderは以下のタブを開きます。

Image title

最適化基準は、バックテスト後に最適化アルゴリズムが結果をランク付けする方法を定義します。 以下のオプションから選択できます:

  • 標準 - 最小化または最大化を目指すことができる一連の事前定義された基準です。 これを行うには、右側のドロップダウンメニューから基準を選択し、左側の関連メニューで最適化の方向を選択します。 新しい基準を追加するには、条件を追加をクリックします。
  • カスタム - 以下の例に示すように、GetFitness()メソッドを使用してcBotコード内で定義されたカスタム基準です。
1
2
3
4
5
protected override double GetFitness(GetFitnessArgs args)
{
    // Maximise the winning trades/losing trades ratio.
    return args.WinningTrades / args.LosingTrades;
}
1
2
3
4
5
6
protected override double GetFitness(GetFitnessArgs args)
{
    /* Maximise the winning trades/losing trades ratio
    while giving winning trades more weight. */
    return Math.Pow(args.WinningTrades, 2) / args.LosingTrades;
}

複数基準の計算

パラメーターの有効性を計算するために複数の基準が使用される場合、cTraderはそれらすべてを平等に使用して最適化パスのフィットネス値を計算します。

具体的には、プラットフォームはすべての最大化基準の値を掛け合わせ、別にすべての最小化基準の値を掛け合わせます。 その後、最大化基準の絶対乗算値を最小化基準の同じ値で割ります。

以下の疑似コードは、複数基準のフィットネス値がどのように計算されるかを正確に示しています。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
numerator = 1.0
if (valuesToMaximize.Length > 0)
    numerator = Abs(Multiply(criteriaValuesToMaximize))

denominator = 1.0
if (valuesToMinimize.Length > 0)
    denominator += Abs(Multiply(criteriaValuesToMinimize))

/* The 'sign' variable can be either +` or -1 depending on whether
there are criteria for which their values are less than 0. */
sign = criteriaValuesToMinimize.Concat(criteriaValuesToMaximize).Any(v => v < 0) ? -1 : 1

fitness =  sign * numerator / denominator

方法

方法ボタン(選択されたオプションに応じてGAまたは#として表示されます)をクリックします。 以下のメニューで、プラットフォームが使用する最適化方法を選択します。

Image title

以下のオプションが利用可能です:

  • 遺伝的アルゴリズム - アルゴリズムは生物学的進化プロセスをエミュレートします。 詳細な説明については、別のセクションをご覧ください。
  • グリッド (#) - アルゴリズムは可能なパラメーターの各セットを順次バックテストします。

注意

私たちの推定では、遺伝的アルゴリズムは最適なパラメーター値を見つけるのに大幅に速いです。

リソース

リソースボタンをクリックして、バックテストに割り当てるCPU負荷の割合を選択します。 スライダーを動かしてCPU使用率の割合を設定します。

割り当てるリソースが多いほど、最適化プロセスが早く完了します。 ただし、他のアプリケーションを使用する際にパフォーマンスの低下が見られる場合があります。

Image title

CPU リソースは最適化中にも調整できることに注意してください。

最適化手順を開始および管理します

最適化を進めるには、カレンダースライダーの右側にある再生ボタンをクリックします。 マシンのリソース、最適化設定、cBotの複雑さによっては、最適化に時間がかかる場合があります。

カレンダースライダーのすぐ下にあるUIバーは、完了したバックテストのパス数、経過時間、残り時間の見積もりに関する情報を提供します。

Image title

一方、最適化タブの中央画面では、アルゴリズムが完了したすべてのバックテストのパスに関する情報をリアルタイムのグリッドで提供します。

Image title

特定のパスでテストされたパラメーターセットを適用するには、適用ボタンをクリックします。 これは、現在実行中の最適化手順がない場合にのみアクティブになります。

あるいは、左上隅の最良のパスを自動選択フラグをチェックすると、cTraderが指定した最適化基準に従って最良の結果を達成したパス(およびパラメーター)を自動的に選択します。

最適化結果

最適化が完了すると、中央のテーブルにすべてのバックテストのパスとその結果の最終リストが表示されます。

このテーブルには以下の列があります。 グリッドは完全に設定可能であり、これらの列はドラッグアンドドロップしたり、テーブルを右クリックしてコンテキストメニューから選択解除することで完全に無効にすることができます。

フィールド 定義
パス パス番号。
フィットネス パスが最適化基準にどれだけ適合しているかを示す値。
有効証拠金 パス終了時の総有効証拠金。
口座残高 パス終了時の総口座残高。
純利益 最終口座残高と開始時の口座残高の差。
取引 決済済みポジションの総数。
勝利取引件数 パス中に達成した勝利取引の総数。
損失取引件数 パス中に達成した損失取引の総数。
プロフィットファクター 総利益/総損失の比率。
*最大有効証拠金ドローダウン (%) 有効証拠金ドローダウンの最大パーセンテージ。
最大口座残高ドローダウン(%) 口座残高ドローダウンの最大パーセンテージ。
最大有効証拠金ドローダウン 口座の預金通貨で指定された最大有効証拠金ドローダウン。
最大口座残高ドローダウン 口座の預金通貨で指定された最大口座残高ドローダウン。
平均取引 パス中に行われたすべての取引の平均利益。
パスのパラメーター この列の適用ボタンをクリックして、このパスのパラメーターをcBotに適用します。

パスを選択して、中央のグリッドの下のディスプレイで詳細な統計を表示します。

このディスプレイの最初の7つのタブは、バックテストウィンドウの同じタブと同じ情報を提供します。 パスのパラメータータブは最適化に固有のものです。

パスのパラメーター

パスのパラメータータブには以下の情報が表示されます。

Image title

cTraderは、最適化されたパラメーターを緑色で強調表示し、固定パラメーター(パラメーターメニューで有効化されていないもの)は強調表示されません。

最適化結果の保存と読み込み

cTraderでは、ローカルに保存された.optresファイルへの最適化結果の保存と読み込みも可能です。

注意

.optresファイルは、さまざまな最適化設定とメトリクスを表すキーと値のペアのコレクションです。

ヒント

.optresファイルを使用して、複数のローカルマシンでcBotの改良を続け、進捗を失うことなく作業を進めることができます。 また、このファイルのデータを生成AIツールにフィードして、cBotが完了したパスにパターンがあるかどうかを検出することもできます。

最適化結果を保存するには、プロセスが終了するまで待ち、保存アイコンをクリックします。 ファイルエクスプローラーダイアログで、ファイル名を入力し、ファイルを保存します。

最適化結果を読み込むには、読み込みアイコンをクリックし、ファイルエクスプローラーウィンドウで必要なファイルを選択します。

Image title