实时优化结果可视化:MetaTrader 5的最佳实践

Mike 2012.06.14 00:46 36 0 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 - CSimpleTable 类是一个包含两列的简单表格;
  • ColorProgressBar.mqh - CColorProgressBar 类是一个使用两种颜色的进度条。

这些文件应复制到 terminal_data_folder\MQL5\Include 目录下。

可以通过MetaTrader 5终端自动下载代码库程序(在“工具箱”窗口的CodeBase标签中)。选择“下载”即可将所有代码下载并放置在相应的文件夹中。

图1. 通过MetaTrader 5终端下载CodeBase程序

图1. 通过MetaTrader 5终端下载CodeBase程序

1.2. 测试专家顾问

在策略测试器中启动 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 优化参数

在优化过程中,专家顾问会显示余额动态和优化经过的统计数据:

图4. Moving Averages_With_Frames.mq5 优化

图4. Moving Averages_With_Frames.mq5 优化

1.3. 专家顾问的运作原理

Moving Averages_With_Frames.mq5 专家顾问基于标准MetaTrader 5终端包中的 Moving Averages.mq5 创建。

已添加用于结果可视化的代码:

//--- 连接处理优化结果的代码
#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是每次快照之间的暂停时间(毫秒)
  }
//+------------------------------------------------------------------+

这段代码可以类似地用于任何专家顾问。

CFrameGenerator 类用于处理优化结果。该类包含用于处理策略测试器事件的函数 (OnTester(), OnTesterInit(), OnTesterPass(), OnTesterDeinit()) 和图表事件的函数 (OnChartEvent()). 在 CFrameGenerator 类的 OnTesterInit() 方法中准备了所使用的图形对象。

CFrameGenerator 类的 OnTester() 方法在每次测试后被调用。该方法根据交易结果计算余额曲线动态。余额曲线图是一个一维数组,其长度取决于执行的交易数量。

然后,使用 TesterStatistics() 函数请求统计数据(净利润、收益因子、回收因子、交易次数、交易数量、最大资金回撤百分比、自定义优化标准值),并生成一个框架(测试经过的数据数组),该框架通过 FrameAdd() 函数发送到终端(从测试代理)。

框架在 CFrameGenerator 类的 OnTesterPass() 方法中接收和处理。框架读取操作通过 FrameNext() 函数执行。请求生成框架的专家顾问输入参数通过 FrameInputs() 函数完成。

获得数据后,使用 CSimpleTable、CColorProgressBar 和 CSpecialChart 类的方法进行显示和更新。

需要注意的是,OnTester() 处理函数的执行是在当前优化经过结束后由 测试代理 执行的。这使得可以利用 MQL5云网络 的分布式网络能力进行复杂的数学计算。为此,将计算部分放置在 OnTester 事件处理程序中。

优化加速数学计算的示例(连续小波变换的 Weierstrass 函数)在主题 “实时管理优化过程并将大量数据从代理转移到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 脚本操作结果


列表
评论 0