ホーム システムトレード 投稿

MetaTrader 5での最適化結果のリアルタイム可視化

添付ファイル
914.zip (13.48 KB, ダウンロード 0回)

MetaTrader 5のストラテジーテスターを使えば、各テストパス後にトレーディングシステムの統計パラメータを取得できます。

統計パラメータは、TesterStatistics() 関数を使用して取得できます。この関数は OnTester()OnDeinit() 関数内で呼び出されます。

最適化結果を扱うための関数(FrameFirst(), FrameFilter(), FrameNext(), FrameInputs() および FrameAdd())が導入されたことで、トレーダーは視覚的な最適化が可能になりました。必要なデータは、エキスパートアドバイザーの最適化中や数学的問題解決中に処理・表示できます。

この記事では、最適化中のエキスパートアドバイザーのテスト結果を可視化する例について考察します。詳しくは、記事「MetaTrader 5テスターで戦略を視覚化する」を参照してください。


1. 最適化中のバランスの動態の可視化

1.1. ファイルのダウンロード

Moving Averages_With_Frames.mq5 エキスパートアドバイザーを terminal_data_folder\MQL5\Experts にコピーしてください。

エキスパートアドバイザーの動作に使用されるファイルは以下の通りです:

  • FrameGenerator.mqh - 最適化結果を表示するためのCFrameGeneratorクラス;
  • SpecialChart.mqh - 複数のバランスチャートを描画するためのCSpecialChartクラス;
  • SimpleTable.mqh - 2列の単純なテーブルを持つCSimpleTableクラス;
  • ColorProgressBar.mqh - 2色を使用した進捗バーを持つCColorProgressBarクラス。

これらのファイルは terminal_data_folder\MQL5\Include にコピーしてください。

Code Baseプログラムは、MetaTrader 5ターミナルを通じて自動的にダウンロードできます(「ツールボックス」ウィンドウの CodeBase タブ)。そのためには、「ダウンロード」を選択してください。すべてのコードがダウンロードされ、各フォルダーに配置されます。

Fig. 1. CodeBaseプログラムのダウンロード

Fig. 1. CodeBaseプログラムのダウンロード


1.2. エキスパートアドバイザーのテスト

Moving Averages_With_Frames.mq5 エキスパートアドバイザーをストラテジーテスターで起動してください。

テスト設定:

Moving Averages_With_Frames.mq5のテスト設定

Fig. 2. Moving Averages_With_Frames.mq5のテスト設定

最適化オプション:

Moving Averages_With_Frames.mq5の最適化パラメータ

Fig. 3. Moving Averages_With_Frames.mq5の最適化パラメータ


最適化中、エキスパートアドバイザーはバランス動態と最適化パスの統計データを表示します:

Fig. 4. Moving Averages_With_Frames.mq5の最適化

Fig. 4. Moving Averages_With_Frames.mq5の最適化

最適化プロセス:




1.3. エキスパートアドバイザーの動作原理

Moving Averages_With_Frames.mq5 エキスパートアドバイザーは、MetaTrader 5の標準パッケージに含まれるMoving Averages.mq5を基に作成されています(MQL5\Experts\Examples\Moving Average)。

結果の可視化のために以下のコードが追加されています:

//--- 最適化結果を扱うコードを接続
#include <FrameGenerator.mqh>
//--- フレームジェネレーター
CFrameGenerator fg;
//+------------------------------------------------------------------+
//| テスター関数                                                  |
//+------------------------------------------------------------------+
double OnTester()
  {
//--- 最適化基準計算関数をここに挿入
   double TesterCritetia=MathAbs(TesterStatistics(STAT_SHARPE_RATIO)*TesterStatistics(STAT_PROFIT));
   TesterCritetia=TesterStatistics(STAT_PROFIT)>0?TesterCritetia:(-TesterCritetia);
//--- 各テスト後に呼び出し、最適化基準を引数として送信
   fg.OnTester(TesterCritetia);
//---
   return(TesterCritetia);
  }
//+------------------------------------------------------------------+
//| テスター初期化関数                                              |
//+------------------------------------------------------------------+
void OnTesterInit()
  {
//--- 複数のバランスラインを表示するためのチャートを準備
   fg.OnTesterInit(3); // パラメータはチャート上のバランスラインの数を設定
  }
//+------------------------------------------------------------------+
//| テスター通過関数                                              |
//+------------------------------------------------------------------+
void OnTesterPass()
  {
//--- 得られたテスト結果を処理し、グラフィックを表示
   fg.OnTesterPass();
  }
//+------------------------------------------------------------------+
//| テスター終了関数                                              |
//+------------------------------------------------------------------+
void OnTesterDeinit()
  {
//--- 最適化終了
   fg.OnTesterDeinit();
  }
//+------------------------------------------------------------------+
//|  チャートイベント処理                                           |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
//--- ヘッダーをクリックすると最適化終了後にフレームを表示
   fg.OnChartEvent(id,lparam,dparam,sparam,100); // 100はショット間のmsの遅延
  }
//+------------------------------------------------------------------+

このコードは、他のエキスパートアドバイザーでも同様に使用できます。

CFrameGeneratorクラスは、最適化結果を扱うために使用されます。このクラスには、ストラテジーテスターイベント(OnTester(), OnTesterInit(), OnTesterPass(), OnTesterDeinit())を処理するためのメソッドと、チャートイベント(OnChartEvent())を処理するメソッドが含まれています。使用されるグラフィカルオブジェクトは、CFrameGeneratorクラスのOnTesterInit()メソッドで準備されます。

CFrameGeneratorクラスのOnTester()メソッドは、各テストパスの後にテストエージェントで呼び出されます。このメソッドは、取引結果に基づいてバランスカーブの動態を計算します。バランスカーブチャートは一次元配列で、その長さは実行された取引の数に依存します。

次に、TesterStatistics()関数を使用して統計データ(純利益、利益率、回復係数、取引数、最大ドローダウン率など)を要求し、フレーム(テストパスデータ配列)が生成され、FrameAdd()関数を使用してターミナルに送信されます。

フレームはCFrameGeneratorクラスのOnTesterPass()メソッドで受信され、処理されます。フレームの読み取り操作はFrameNext()関数によって行われます。フレームが生成されたエキスパートアドバイザーの入力パラメータの要求は、FrameInputs()関数を使用して行われます。

データを取得した後は、CSimpleTable、CColorProgressBar、CSpecialChartクラスのメソッドを使用して表示および更新されます。

OnTester()処理関数の実行は、テストエージェント上で次の現在の最適化パスが終了した後に行われます。これにより、MQL5 Cloud Networkの分散ネットワーク能力を使用して複雑な数学計算を実行できます。これを行うには、計算部分をOnTesterイベントハンドラーに配置します。

最適化を使用して数学計算を加速する例(ワイエルシュトラス関数の連続ウェーブレット変換)については、トピック「リアルタイムでの最適化プロセスの管理とエージェントからMetaTrader 5への大量データの転送」を参照してください。


2. CSimpleTable、CColorProgressBar、CSpecialChartクラスの使用例

添付のTest_SimpleTable.mq5およびTest_CSpecialChart.mq5スクリプトには、CSimpleTable、CColorProgressBar、CSpecialChartクラスの使用例が含まれています。これらは terminal_data_folder\MQL5\Scripts にコピーしてください。

Fig. 5. Test_SimpleTable.mq5スクリプトの操作結果

Fig. 5. Test_SimpleTable.mq5スクリプトの操作結果

Fig. 6. Test_CSpecialChart.mq5スクリプトの操作結果

Fig. 6. Test_CSpecialChart.mq5スクリプトの操作結果


関連記事

コメント (0)