cBotのバックテストと最適化

cBots (自動売買)

バックテストは、事前に定義された条件の下で、歴史的な市場データを使用してcBotを評価するためのツールです。

バックテストを行うと、cBotインスタンスを過去の市場動向に基づいて実行できます。その後、cTraderは、cBotによって実行された取引操作および最終的な資産/バランス統計に関する詳細なレポートを生成します。

注意

バックテスト時に行われた取引操作は、いかなるアカウントにも影響を与えません。バックテストは実際の資金を扱うことを目的としていません。この機能はあくまで分析のために存在します。

cBotをバックテストするには、インスタンスの1つを選択し、「バックテスト」タブに切り替えます。

Image title

バックテスト設定

バックテストの設定を行うには、左上隅にある「歯車」アイコンをクリックします。cTraderは以下のメニューを開くはずです。

Image title

このメニューのオプションは次のように定義されています。すべての金銭に関連するパラメーター(例:開始資本)はUSDで指定されます。

オプション名アクションと説明
開始資本cBotが取引を行う際の開始資本を定義します。
手数料取引された百万単位ごとの手数料率を設定します。
データcBotをテストするためのタイムシリーズデータを選択します。利用可能なオプションは次のとおりです。

  • サーバーからのティックデータ。データはサーバーからティックごとに直接取得されます。これが最も正確な履歴データソースです。
  • サーバーからのM1バー。データはサーバーによって生成された1分バーから取得されます。
  • CSVファイルのM1バー。データはローカルに保存されたCSVファイルで定義された1分バーから取得されます。
  • サーバーからのH1バー データはサーバーによって生成された1時間バーから取得されます。
スプレッドバックテスト中に適用されるスプレッド値を選択します。次のオプションが利用可能です。

  • 固定値。バックテスト全体で1つの値のみが適用されます。ドロップダウンメニューから選択するか、カスタム値を入力するか、現在のシンボルスプレッドに合わせることができます(ティックごとに更新されます)。
  • ランダム。最小および最大のスプレッドレートを設定します。cBotが注文を行うと、この注文には選択されたレート範囲内のランダムなスプレッド値が適用されます。

サンプルCSV M1データ

ローカルマシンから取引データを取得するには、以下のデータを含むカンマ区切りのCSVファイルを作成してください。

  • 日付
  • 時間
  • 始値
  • 高値
  • 安値
  • 終値
  • 出来高

1
2
3
4
2003.06.18,16:01,1.11423,1.11428,1.11332,1.11374,19
2003.06.18,16:02,1.11364,1.11436,1.11361,1.11405,7
2003.06.18,16:03,1.11402,1.11455,1.11400,1.11440,5
2003.06.18,16:04,1.11446,1.11461,1.11401,1.11447,14

バックテスト手順とモード

テストする期間を指定するには、以下のコントロールを使用します。

  • バックテスト‘タブの上部にあるインタラクティブなスライダーを使用します。
  • スライダーの左側と右側にあるカレンダーメニューから必要な値を選択します。
  • スライダーの両側にあるフィールドにカスタム値(DD:MM:YYYY形式を使用)を入力します。

Image title

バックテストを以下のモードで実行できます。

  • 非リアルタイムテスト。ボットは必要なすべての操作を順番に実行します。その後、取引統計、資産チャートなどの最終結果のみが表示されます。
  • リアルタイム(ビジュアルモード)テスト。提供された履歴データが指定された再生速度でcBotに渡されます。その結果、注文が配置される様子を確認できます。また、すべての取引統計は選択した再生速度で更新されます。

非リアルタイムテスト

設定が完了したら、スライダーの右側にある「再生」ボタンをクリックします。指定された期間の長さやローカルマシンの仕様によっては、cTraderが結果を生成するまでに数分かかることがあります。

リアルタイム(ビジュアルモード)バックテスト

テスト期間を含む必要な設定を指定し、カレンダースライダーの下にある「ビジュアルモード」フラグを有効にします。

Image title

速度」スライダーをドラッグするか、その右側にあるメニューを使用して、データ再生速度を調整します。設定が完了したら、「再生」ボタンを押します。

cTraderは、指定された期間の取引チャートをリアルタイムで選択した再生速度で表示し始めます。再生中に再生速度を動的に調整できることに注意してください。

選択した期間と再生速度によっては、ビジュアルモードのテストに時間がかかることがあります。それでも、cBotが期待どおりに動作しない場合、ビジュアルモードのテストとカスタム取引データを使用して、さまざまな市場条件に対するcBotの反応をテストできます。

レンコチャートとレンジバーを使用したバックテスト

cTraderは、レンコチャートおよびレンジバーチャートでのcBotのバックテストをサポートしています。そのようなバックテストを実行するには、新しいcBotインスタンスを作成し、トレーディングチャートとしてレンコ/レンジバーチャートを選択します。

Image title

あるいは、すでに選択されたcBotインスタンスで、画面上部のチャートセレクターメニューを使用し、「三点リーダー」アイコンをクリックします。表示されたメニューで、レンコレンガまたはレンジバーを生成するための利用可能なボリュームしきい値の1つを選択します。

Image title

cTraderが選択されたシンボルのレンコ/レンジバーチャートを生成したら、「バックテスト」タブに切り替えます。このタブで、通常どおりバックテストモード/設定を構成します。「再生」アイコンをクリックして、選択したチャートでバックテストを実行します。

バックテスト結果

cTraderは、バックテスト結果を表示するために、いくつかの取引統計を生成します。このデータを表示するには、取引チャートのすぐ下にあるタブに進みます。

Image title

資産チャート

バックテストが実行されると(ビジュアルモードを使用するかどうかにかかわらず)、cTraderは取引数をX軸に、アカウント残高をY軸にして資産チャートを生成します。このチャートには次の統計が含まれます。

  • 黄色の線は、取引ごとに変化するアカウント残高を示します。
  • 灰色のゾーンは、ボットによって行われた取引に応じて、総資産が増加または減少する様子を強調しています。

資産チャートが何を示しているのかを理解するために、上記の例を考えてみてください。この例では、ボットがバックテスト中に290回以上の取引を行っていることがわかります。アカウント残高の変動ごとに、総資産の変動も確認できます。

取引統計

取引統計」タブには、バックテスト中にcBotがどのようにパフォーマンスを発揮したかに関するデータが含まれています。このタブには次のフィールドが含まれています。

フィールド名定義
純利益すべての取引の純利益合計。
プロフィットファクター総純利益を総純損失で割った比率。
手数料cBotによって行われた取引に対して支払われた手数料の合計額。
最大残高ドローダウン残高の最大ドローダウン額。
最大資産ドローダウン資産の最大ドローダウン額。
取引合計cBotによって実行された取引の総数。
勝ちトレード利益を生んだ取引の総数。
最大連勝取引連続して利益を生んだ最大取引数。
最大勝ちトレード1つの取引で得られた最大の利益。
負けトレード損失を生んだ取引の総数。
最大連敗取引連続して損失を生んだ最大取引数。
最大負けトレード1つの取引で生じた最大の損失額。
平均取引すべての取引の平均実現P&L。

ポジション

ポジション」タブには、cBotによって現在開かれているすべてのポジションが表示されます。これは通常の「TradeWatch」ディスプレイの「ポジション」タブと同様の構造で、同じデータが含まれています。

Image title

右下隅の「歯車」アイコンをクリックして、中央のテーブルに表示されるデータをカスタマイズします。

注文

注文」タブには、cBotによって行われた注文に関する情報が含まれています。その構造と外観は、メインの「TradeWatch」ディスプレイの「注文」タブと同様です。

Image title

履歴

履歴」タブには、バックテスト中に記録されたすべての取引および終了取引の統計が表示されます。他のタブと同様に、これは「TradeWatch」ディスプレイの「履歴」タブのコピーです。

Image title

イベント

イベント」タブには、サーバー関連の通信がすべて表示され、これらのイベントのさまざまなパラメーターが表示されます。

Image title

ログ

最後に、「ログ」タブには、バックテスト中にcBotが出力したメッセージが表示されます。メッセージリストは完全に検索可能で、イベントタイプおよびインスタンスごとにフィルタリング可能です。

Image title

最適化

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

この機能を使用するには、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)
{
    // 勝ちトレード/負けトレード比率を最大化します。
    return args.WinningTrades / 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))

/* 'sign'変数は、値が0より小さい基準があるかどうかによって、+`または-1のいずれかになります。*/
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ファイルは、さまざまな最適化設定およびメトリックを表すキーと値のペアのコレクションに過ぎません。

ヒント

.optresファイルを使用して、進行状況を失うことなく、複数のローカルマシンでcBotsの微調整を続けることができます。また、このファイルからのデータを生成AIツールに「フィード」して、cBotが完了したパスのパターンを検出しようとすることもできます。

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

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

目次

このページについて