私たちのファンページに参加してください
リアルタイムでの最適化の可視化 - MetaTrader 5のためのエキスパート
- ビュー:
- 1225
- 評価:
- パブリッシュ済み:
- 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の実行に使います:- FrameGenerator.mqh - 最適化結果の表示のクラスCFrameGenerator;
- SpecialChart.mqh - いくつかの資産曲線の描写のクラスCSpecialChart ;
- SimpleTable.mqh - CSimpleTable は、2つの列のシンプルな表;
- ColorProgressBar.mqh - CСolorProgressBar は2色のバー
上記を terminal_data_folder\MQL5\Include にコピーします。
コードベースプログラムはMetaTrader 5経由で自動的にダウンロード可能です ("Toolbox" ウィンドウのコードベースタブ)。 実行するには "Download"を選択してください。全コードは指定のフォルダにダウンロードされます。
図1. MetaTrader 5 経由のコードベースプログラムのダウンロード
1.2. EAのテスト
Moving Averages_With_Frames.mq5 をストラテジーテスターで実行します。
テスト設定:
図2. Moving Averages_With_Frames.mq5 テスト設定
最適化設定:
図3. Moving Averages_With_Frames.mq5 テスト設定
最適化の間、EAは資産推移と最適化パスの統計的データを表示します:
図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 スクリプロ実行結果
図6. Test_CSpecialChart.mq5 スクリプト実行結果
MetaQuotes Ltdによってロシア語から翻訳されました。
元のコード: https://www.mql5.com/ru/code/914
MACD のサンプルEAは、MACDのメインとシグナルのクロスでトレードします。このEAは、EA開発におけるオブジェクト指向の一例です。
Moving Average移動平均EAは価格と移動平均線のクロスでトレードを行います。
インディケータ ColorSchaffJJRSXTrendCycleは、入力パラメータのインディケータの時間軸を変更することができます。
ColorZerolagJJRSX_HTFインディケータ ColorZerolagJJRSXは、入力パラメータの中のインディケータの時間軸を変更することができます。