下载MetaTrader 5

请观看如何免费下载自动交易

有趣的脚本?
因此发布一个链接 -
让其他人评价

喜欢这个脚本? 在MetaTrader 5客户端尝试它

2013.11.07 10:53
EA

优化结果的实时可视化 - MetaTrader 5EA

| Chinese English Русский Español Deutsch 日本語 Português

显示:
658
等级:
投票: 43

MetaTrader 5的智能交易测试允许在每次测试完成后得到交易系统的统计参数。

统计参数可使用 TesterStatistics() 函数来获得, 它在 OnTester()OnDeinit() 函数中被调用。

随着可操作优化结果的函数 (FrameFirst(), FrameFilter(), FrameNext(), FrameInputs()FrameAdd())的引入,交易者现在能够执行可视化优化。必要的数据现在可以在优化EA交易或解决数学问题的过程中就被处理和显示。

我们将以 "MetaTrader 5智能交易测试中策略可视化"一文中描述的EA优化为例来考察EA交易测试结果可视化的细节。


1. 在优化过程中资金动态的可视化

1.1. 下载文件

EA交易文件Moving Averages_With_Frames.mq5应被拷贝到terminal_data_folder\MQL5\Experts。

下列文件被EA交易操作使用:
  1. FrameGenerator.mqh - CFrameGenerator类用来显示优化结果;
  2. SpecialChart.mqh - CSpecialChart类用来绘画各种资金图表;
  3. SimpleTable.mqh - CSimpleTable类是一个有两列的表格;
  4. ColorProgressBar.mqh - CСolorProgressBar类是一个使用两种颜色的进度条。

它们应该被拷贝到terminal_data_folder\MQL5\Include。

代码基地程序可通过MetaTrader 5终端自动下载 ("工具箱"窗口的CodeBase标签)。要做到这一点,选择“下载”。所有代码将被下载并放置在自己的文件夹中。

图1. 通过MetaTrader 5终端下载代码基地程序

图1. 通过MetaTrader 5终端下载代码基地程序


1.2. 测试EA交易

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交易的工作原理

EA交易Moving Averages_With_Frames.mq5 Expert Advisor是基于包含在标准MetaTrader 5终端包的EA交易Moving Averages.mq5(MQL5\Experts\Examples\Moving Average)而创建。

下面的代码被添加用于结果的可视化:
//--- 结合下面的代码来操作优化结果
#include <FrameGenerator.mqh>
//--- 帧产生器
CFrameGenerator fg;
//+------------------------------------------------------------------+
//| Tester函数                                                        |
//+------------------------------------------------------------------+
double OnTester()
  {
//--- 在这儿插入计算你的优化条件的函数
   double TesterCritetia=MathAbs(TesterStatistics(STAT_SHARPE_RATIO)*TesterStatistics(STAT_PROFIT));
   TesterCritetia=TesterStatistics(STAT_PROFIT)>0?TesterCritetia:(-TesterCritetia);
//---在每次测试后调用并将优化条件作为参数提交
   例如OnTester(TesterCritetia);
//---
   return(TesterCritetia);
  }
//+------------------------------------------------------------------+
//| TesterInit函数                                                    |
//+------------------------------------------------------------------+
void OnTesterInit()
  {
//--- 准备显示几条资金线的图表
  例如OnTesterInit(3); // 设置图表上资金线数量的参数
  }
//+------------------------------------------------------------------+
//| TesterPass 函数                                                   |
//+------------------------------------------------------------------+
void OnTesterPass()
  {
//---处理获取的测试结果并显示图形
   例如OnTesterPass();
  }
//+------------------------------------------------------------------+
//| TesterDeinit函数                                                  |
//+------------------------------------------------------------------+
void OnTesterDeinit()
  {
//--- 优化结束
   例如OnTesterDeinit();
  }
//+------------------------------------------------------------------+
//|  图表事件处理                                                      |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
//---在优化结束后点击标题时加载对话框
   fg.OnChartEvent(id,lparam,dparam,sparam,100); // 100是不同镜头间暂停的毫秒数
  }
//+------------------------------------------------------------------+

这个代码可被类似地使用在任何EA交易。

CFrameGenerator类被用于操作优化结果。该类包含处理智能交易测试事件的方法((OnTester)(OnTesterInit)(OnTesterPass)(OnTesterDeinit))和图表事件的方法((OnChartEvent))。使用的图形对象在CFrameGenerator类的OnTesterInit()方法中准备。

每次测试通过后,CFrameGenerator类的OnTester()方法被在测试代理上调用。这个方法提供了基于交易结果的资金曲线动态的计算。资金曲线图是一维数组,其长度依赖于已执行交易的数量。

然后, TesterStatistics()函数被调用来获取统计数据(净利润,利润因子,采收率,交易数量,成交数量,最大资金回撤比,自定义优化标准值),从而产生帧(在我们的例子中是一个测试通过数据数组) ,并由FrameAdd()函数将帧发送到(来自测试代理的)终端。

帧在CFrameGenerator类的OnTesterPass()方法里被接收和处理。帧的读取操作通过FrameNext()函数执行。获取产生该帧时EA交易所使用的输入参数,通过FrameInputs()函数来执行。

取得数据后,使用CSimpleTable,CColorProgressBar和CSpecialChart类的方法来显示和更新。

应该注意的是OnTester()处理函数是在另一个当前优化过程已经完成后在测试代理上被执行的。这允许使用MQL5云网络的分布式网络能力进行复杂的数学计算。要达到这一点,要把计算部分放置到OnTester事件处理程序中。

使用最优化加快数学计算(魏尔斯特拉斯函数的连续小波变换)的例子在“实时管理最优化过程和从代理传输大量数据到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 Software Corp. 撰写的俄文原文
官方代码: https://www.mql5.com/ru/code/914

DRAW_COLOR_CANDLES DRAW_COLOR_CANDLES

DRAW_COLOR_CANDLES样式(如同DRAW_CANDLES)基于存储开盘价,最高价,最低价和收盘价的四个指标缓存数组的值绘制蜡烛。 此外,它可以让你为每个蜡烛指定颜色集中的某个颜色。

DRAW_COLOR_BARS DRAW_COLOR_BARS

DRAW_COLOR_BARS样式基于存储开盘价,最高价,最低价和收盘价的四个指标缓存数组的值绘制柱体。 这是DRAW_BARS样式的高级版本,允许你从预定义的颜色集里为每个柱体指定单独的颜色。

EA_OBJPROP_CHART_ID EA_OBJPROP_CHART_ID

该EA交易是像传统图表那样操作OBJ_CHART对象的示例。您可以设置自定义颜色设置,附加指标等。

IndicatorParameters() 用法示例 IndicatorParameters() 用法示例

这个专家交易演示了使用 IndicatorParameters()函数来获取关于输入参数的数量,类型及其数值的信息。