無料でロボットをダウンロードする方法を見る
Twitter上で私たちを見つけてください。
私たちのファンページに参加してください
興味深いスクリプト?
それではリンクにそれを投稿してください。-
他の人にそれを評価してもらいます
記事を気に入りましたか?MetaTrader 5ターミナルの中でそれを試してみてください。
エキスパート

リアルタイムでの最適化の可視化 - MetaTrader 5のためのエキスパート

ビュー:
1146
評価:
(48)
パブリッシュ済み:
2015.11.27 08:00
アップデート済み:
2016.11.22 07:34
このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動

MetaTrader 5 のストラテジーテスターでは、各テスト過程で、トレード手法の統計的なパラメータを取得することが可能です。

統計的パラメータは、TesterStatistics()で取得できます。これはOnTester()OnDeinit() の内部で呼び出します。

最適化結果付きの関数のイントロダクションで(FrameFirst()FrameFilter(), FrameNext()FrameInputs()FrameAdd()), 利用者は可視化された最適化を実行することができます。必要なデータは、EAの最適化中もしくは数学的な問題を解いている間、正しく処理され表示されます。

最適化の間、記事"Visualize a Strategy in the MetaTrader 5 Tester"に記述されている、EAのテスト結果の可視化の具体例の詳細を考察しましょう。


1. 最適化中における資産の可視化

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

Moving Averages_With_Frames.mq5 を terminal_data_folder\MQL5\Expertsにコピーします。

下記のファイルをEAの実行に使います:
  1. FrameGenerator.mqh - 最適化結果の表示のクラスCFrameGenerator;
  2. SpecialChart.mqh - いくつかの資産曲線の描写のクラスCSpecialChart ;
  3. SimpleTable.mqh - CSimpleTable は、2つの列のシンプルな表;
  4. ColorProgressBar.mqh - CСolorProgressBar は2色のバー

上記を terminal_data_folder\MQL5\Include にコピーします。

コードベースプログラムはMetaTrader 5経由で自動的にダウンロード可能です ("Toolbox" ウィンドウのコードベースタブ)。 実行するには "Download"を選択してください。全コードは指定のフォルダにダウンロードされます。

図1. MetaTrader 5 経由のコードベースプログラムのダウンロード

図1. MetaTrader 5 経由のコードベースプログラムのダウンロード


1.2. EAのテスト

Moving Averages_With_Frames.mq5 をストラテジーテスターで実行します。

テスト設定:

Moving Averages_With_Frames.mq5 テスト設定

図2. Moving Averages_With_Frames.mq5 テスト設定

最適化設定:

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

図3. Moving Averages_With_Frames.mq5 テスト設定


最適化の間、EAは資産推移と最適化パスの統計的データを表示します:

図4. Moving Averages_With_Frames.mq5 の最適化

図4. Moving Averages_With_Frames.mq5 の最適化

最適化プロセス:




1.3. EA のオペレーション原理

Moving Averages_With_Frames.mq5 のEAは、MetaTrader 5の標準パックにあるMoving Average.mq5(MQL5\Experts\Examples\Moving Average)に基づいて生成されます。

下記コードが、結果の可視化に追加されます:
//--- connecting the code for working with optimization results
#include <FrameGenerator.mqh>
//--- frames generator
CFrameGenerator fg;
//+------------------------------------------------------------------+
//| Tester function                                                  |
//+------------------------------------------------------------------+
double OnTester()
  {
//--- insert your optimization criterion calculation function here
   double TesterCritetia=MathAbs(TesterStatistics(STAT_SHARPE_RATIO)*TesterStatistics(STAT_PROFIT));
   TesterCritetia=TesterStatistics(STAT_PROFIT)>0?TesterCritetia:(-TesterCritetia);
//--- invoking after each test and submitting optimization criterion as a parameter
   fg.OnTester(TesterCritetia);
//---
   return(TesterCritetia);
  }
//+------------------------------------------------------------------+
//| TesterInit function                                              |
//+------------------------------------------------------------------+
void OnTesterInit()
  {
//--- preparing the chart for displaying several balance lines
   fg.OnTesterInit(3); // parameter sets the number of balance lines on the chart
  }
//+------------------------------------------------------------------+
//| TesterPass function                                              |
//+------------------------------------------------------------------+
void OnTesterPass()
  {
//--- handling obtained test results and displaying graphics
   fg.OnTesterPass();
  }
//+------------------------------------------------------------------+
//| TesterDeinit function                                            |
//+------------------------------------------------------------------+
void OnTesterDeinit()
  {
//--- optimization end
   fg.OnTesterDeinit();
  }
//+------------------------------------------------------------------+
//|  Chart events handling                                           |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
//--- launches frames display after the optimization end when clicking on the header
   fg.OnChartEvent(id,lparam,dparam,sparam,100); // 100 is a pause in ms between the shots
  }
//+------------------------------------------------------------------+

このコードはどのEAにも同様に利用できます。

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

CFrameGenerator の OnTester() は、各テストパスの後、呼び出されます。このメソッドは、トレード結果に基づいた資産曲線を計算します。資産曲線チャートは1次元配列です。その長さは実行取引の数に依存しています。

そして、TesterStatistics() を、統計的データのリクエストに使います。 (純利益、プロフィットファクター、リカバリーファクター、トレード階数、取引数、最大ドローダウン比率、カスタム最適化基準値)  そしてフレーム(今回はテストパスデータ)が生成されます。これはFrameAdd()でターミナルに送られます。

フレームは受け取り、CFrameGenerator の OnTesterPass()で処理します。FrameNext()で、フレーム読み込み処理が実行されます。そのフレームが生成された、EAのパラメータのリクエストは、FrameInputs()を使って実行されます。

データを取得した後、CSimpleTable、CColorProgressBar 、 CSpecialChartで表示され、更新されます。

もう一つの実行中の最適化パスが終わった後、テストエージェントでOnTester() ハンドル関数が実行されます。複雑な数学的計算を実行する能力があるネットワークMQL5 Cloud Networkを使うことができます。このためには、計算部分を OnTester イベントハンドラにします。

数学的計算を加速させる最適化の利用例(Weierstrass functionの連続ウェーブレットの形成)は、 "Managing optimization processes in real time and transferring massive data from the agents to MetaTrader 5"にあります。


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

添付の Test_SimpleTable.mq5 と Test_CSpecialChart.mq5 スクリプトには、CSimpleTable、 CColorProgressBar、 CSpecialChart の活用例があります。terminal_data_folder\MQL5\Scripts にコピーしてください。

図5. Test_SimpleTable.mq5 スクリプロ実行結果

図5. Test_SimpleTable.mq5 スクリプロ実行結果

図6. Test_CSpecialChart.mq5 スクリプト実行結果

図6. Test_CSpecialChart.mq5 スクリプト実行結果

MetaQuotes Ltdによってロシア語から翻訳されました。
元のコード: https://www.mql5.com/ru/code/914

MACD Sample MACD Sample

MACD のサンプルEAは、MACDのメインとシグナルのクロスでトレードします。このEAは、EA開発におけるオブジェクト指向の一例です。

Moving Average Moving Average

移動平均EAは価格と移動平均線のクロスでトレードを行います。

ColorSchaffJJRSXTrendCycle_HTF ColorSchaffJJRSXTrendCycle_HTF

インディケータ ColorSchaffJJRSXTrendCycleは、入力パラメータのインディケータの時間軸を変更することができます。

ColorZerolagJJRSX_HTF ColorZerolagJJRSX_HTF

インディケータ ColorZerolagJJRSXは、入力パラメータの中のインディケータの時間軸を変更することができます。