English Русский Español Deutsch 日本語 Português 한국어 Français Italiano Türkçe
利用 MetaTrader 5 测试仪实现策略可视化

利用 MetaTrader 5 测试仪实现策略可视化

MetaTrader 5示例 | 24 九月 2013, 08:53
3 064 0
MetaQuotes
MetaQuotes

我们都知道有一个“百闻不如一见”的说法。关于巴黎和威尼斯,有各种各样的书可供您阅读,但是根据想像,您永远都不会懂夜间漫步于这些神话般城市的街头会有怎样的感受。可视化的诸多优势,可以很容易地投射到我们生活的方方面面,其中就包括市场活动。比如说:基于采用指标的图表的价格分析,当然还有策略测试的可视化。

每个人都清楚策略测试仪的可能性吗?

实践表明,并非如此。与竞争对手相比,MetaTrader 5 交易平台的优势不仅在于更加便利的用户友好型界面和此终端与MQL5 提供的大量机会,还在于一种利用 MQL5 云网络提供云计算可能性的多货币测试仪以及许许多多的其它选项。交易者所需的所有工具都一站式提供,亦为优势之一。

本文旨在再为交易者介绍 MetaTrader 5 的一种重要功能 - 即策略测试与优化的可视化。根据历史数据和最佳参数的选择对某“EA 交易”行为的分析并非只是对数字、交易、结余、净值等等进行费心分析。安心坐到椅子上,舒舒服服地带上 3D 眼镜,我们开始吧。

然后我会对自己说:世界图表真美好……

代码库市场中发布“EA 交易”时,作者通常都会随附一份有关其测试的统计报告,以及结余与净值图。而策略测试仪 "Results" (结果)选项卡的统计信息中,还有更多有趣的可用图表:

测试结果图表

根据这些图表,您可以分析各个月、各天或各个小时中,您的“EA 交易”什么时间交易最佳,什么时间主动进入市场。您还可以就下述方面对“EA 交易”的性能进行评估:是否于恰当时机平盈利仓位,“EA 交易”是否基于 MFE (最大有利变动幅度)与 MAE (最大不利变动幅度)分布图对损失“坐视不管”:

MFE/MAE 分布图

再向下滚动测试结果,您将看到另一个图解:

利润与持仓时间的分布

此图显示的是持仓利润整个生命周期的依赖性。此图解对于即将到来的2012 自动交易锦标赛非常有帮助。有一项 ATC 规则禁止超短线交易。测试您的“EA 交易”,并确保遵规则编译。

历史影片或可视化测试

可视化测试模式是策略测试仪的革命性功能之一。这样,按日期实施的交易分析、图表的绘制以及其它“有趣”的例行流程,即构成了一个相当复杂的过程。然而,该策略测试仪就像是给您一个视频遥控器,您按下 "Play" (播放)就能观赏历史影片了。您可以慢放或快进影片,暂停以分析相关状况。您可以实时看到如何根据模拟的历史数据构造图表,以及“EA 交易”如何应对价格变化。



与策略测试仪相似,此观测仪完全支持多货币。本视频中的“EA 交易”采用 4 种货币对交易。图表和 Market Watch (市场报价) 中都提供所有的模块价格。

2D 优化结果

三维图像在电视生产商中已经变得十分流行,在介绍它之前,我们先来看看策略测试仪中的二维可视化。乍一看这些矩形可能会感觉怪怪的,它们允许您查看两个优化参数基于优化规范(本例中是最大结余值)的相互影响。绿色的明暗度越深,结余越高:

2D 优化结果

我们看到关系是一种波状特征,而且会在使用时段平均值和移动平均线位移时达到最大值。这些都是移动平均线“EA 交易”的优化值,终端的标配包中会有提供。您甚至可以在这里找到一些乐趣。

现在是 3D

三维图像会实现更好的可视化选项。下面是两个参数的相同依赖关系及最终结果。您可以利用 Optimization Graph (优化图)选项卡的上下文菜单切换到此高级模式。

3D 优化结果

MetaTrader 5 策略测试仪中出现三维优化后,交易者开始在论坛上发布自己的数学计算可视化示例:

三维图形为完全交互式 - 您可以放大、缩小或是旋转到某个方便的角度等等。重要的是任何测试与优化结果都可以作为图像或 XML/HTML 报告导出。

可视化优化

最后,欢迎使用优化结果!想要处理这些结果,交易者必须制备数据,在某个地方下载它们并予以处理。现在,您可以在优化期间当场执行处理!想要示范这种可能性,我们需要多个实现此类处理最简单示例的头文件。

下载下附的 MQH 文件,并将其保存于 MQL5\Include 文件夹。选择任何一个“EA 交易”,并将此代码块粘贴到其代码末尾:

//--- 增加代码用于处理优化结果
#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);
//--- 在每一个测试结束时调用,把优化条件作为传入参数
   fg.OnTester(TesterCritetia);
//---
   return(TesterCritetia);
  }
//+------------------------------------------------------------------+
//| TesterInit 函数                                                  |
//+------------------------------------------------------------------+
void OnTesterInit()
  {
//--- 准备图表,显示结余图像
   fg.OnTesterInit(3); //此参数设置图表中结余线的数量
  }
//+------------------------------------------------------------------+
//| TesterPass 函数                                                  |
//+------------------------------------------------------------------+
void OnTesterPass()
  {
//--- 处理测试结果并显示图像
   fg.OnTesterPass();
  }
//+------------------------------------------------------------------+
//| TesterDeinit 函数                                                |
//+------------------------------------------------------------------+
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 是以毫秒为单位的帧之间的暂停时间
  }
//+------------------------------------------------------------------+

我们使用标配包中提供的 Moving Averages.mq5 “EA 交易”。粘贴代码,并将“EA 交易”保存为 Moving Averages With Frames.mq5。编译并运行此优化。


由此,交易者现在可以运行可视化优化,并可以在优化期间处理其结果或显示必需信息。

还想要更多吗?

我们一直扩展 MetaTrader 5 交易平台的可能性,不断添加新工具以帮助交易者。针对如何进一步改善策略测试仪中的可视化,发表您的评论、分享您的观点。我们会努力实现其中最有趣、最有用的部分。

如何使用文件

所有带有 .mqh 扩展名的文件均置于 MQL5\Include 文件夹,编译器会在编译 Moving Average_With_Frames.mq5 “EA 交易”时到这里寻找相关文件。“EA 交易”文件可放入 MQL5\Experts 文件夹或其任何子文件夹中。

自行于 MetaTrader 5 策略测试仪中启动随附的“EA 交易”,为本文的阅读添加更多乐趣。您一定会喜欢它的。

本文由MetaQuotes Ltd译自俄文
原文地址: https://www.mql5.com/ru/articles/403

附加的文件 |
multimovings.mq5 (10.25 KB)
framegenerator.mqh (25.35 KB)
simpletable.mqh (19.4 KB)
specialchart.mqh (13.16 KB)
采用跟踪止损的赚钱算法 采用跟踪止损的赚钱算法
本文旨在研究带有不同的交易进入和采用跟踪止损的退出的算法盈利能力。待用的条目类型为随机进场与反向进场交易。止损订单用于跟踪止损与跟踪止盈。本文讲述的是年盈利能力约达30%的赚钱算法。
以MQL5 编写的EA 交易程序的测试与优化指南 以MQL5 编写的EA 交易程序的测试与优化指南
本文解释识别和解决代码错误的步进式过程以及EA交易程序输入参数的测试与优化的步骤。您将了解如何使用 MetaTrader 5 客户端的策略测试程序为您的 EA 交易程序寻找最佳交易品种和一组输入参数。
如何很快地制作一个交易机器人 如何很快地制作一个交易机器人
于金融市场中交易存在许多风险,其中就包括最为严重的一种 - 做出错误交易决策的风险。每一位交易者都梦寐以求有一个交易机器人,它能始终保持良好状态,而且不会受制于人类的诸多弱点 - 恐惧、贪婪和没耐心。
MetaTrader 5 中的交易事件 MetaTrader 5 中的交易事件
监视交易帐户的当前状态意味着控制未平持仓和订单。在一个交易信号变为成交之前,它应作为一个请求从客户端发送到交易服务器,在服务器中,它将被放入等待处理的订单队列中。交易服务器收到请求时,依据情况将其作为过期请求删除,或进行成交 - 所有这些操作之后都会导致交易事件的发生;并且交易服务器会向客户端通知这些事件。