MT4-测试仪 VS MT5-测试仪

 
我终于实现了一个古老的想法

关于交易、自动交易系统和交易策略测试的论坛

关于 "MQL5向导的现成的EA在MetaTrader 4中工作 "的讨论

fxsaber, 2017.03.09 13:02

我建议使用 Tick Data Suite 试用版 (兼容: MT4 build 940 - 1052) 进行比较。

在MT5测试器中,选择 "按实际点数 "模式。保存它们并通过TDS将它们送入MT4测试器。

然后,两个测试器中的报价将100%重合,这将使他们不仅在交易方面,而且在速度方面进行比较。

这样就有可能在两个方向上比较转换/创建EA的情况。

MT4 build 1072, MT5 build 1596 交易服务器 Alpari-MT5.

截图中的MT4测试器设置

两个测试者的货币都是美元。这使得在同一个MT5测试器中,欧元兑美元不会再拉出转换符号的刻度。


现在,我们在两个测试器中运行以下跨平台专家顾问系统

// MQL4&5-code

#property strict

class FILE
{
private:
  const int handle;
  
  static string TickToString( const MqlTick &Tick, const string Delimeter = " " )
  {
    return(::DoubleToString(Tick.ask, _Digits) + Delimeter + ::DoubleToString(Tick.bid, _Digits));
  }
public:  
  FILE( const string FileName ) : handle(::FileOpen(FileName, FILE_WRITE | FILE_TXT | FILE_ANSI))
  {
  }
  
  ~FILE( void )
  {
    if (this.handle != INVALID_HANDLE)
      ::FileClose(handle);       
  }
  
  bool Write( const MqlTick &Tick ) const
  {
    return((this.handle != INVALID_HANDLE) && ::FileWriteString(this.handle, FILE::TickToString(Tick) + "\n"));
  }
};

const FILE File(::MQLInfoString(MQL_PROGRAM_NAME) + ".txt");

void OnTick()
{
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick))
    File.Write(Tick);
}


MT4-测试仪日志

2017.05.07 23:25:36.155 EURUSD,M1: 1865415 tick events (7292 bars, 1865515 bar states) processed in 0:00:02.528 (total time 0:00:03.292)


MT5-测试仪日志

2017.05.07 23:26:01.016 Core 1  EURUSD,M1: 1865415 ticks, 7192 bars generated. Test passed in 0:00:01.918 (including ticks preprocessing 0:00:00.203).

我们确认从每个测试者那里收到的文件是相同的--测试者的刻度线是一致的。


在这一点上,两个测试员对新服务的准备工作已经就绪。

 

专家顾问

// MQL4&5-code

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#ifdef __MQL5__
  #define Bid (SymbolInfoDouble(_Symbol, SYMBOL_BID))
  #define Ask (SymbolInfoDouble(_Symbol, SYMBOL_ASK))
#endif // __MQL5__

// Idea - https://www.mql5.com/ru/code/7464
#property strict

input int Shift = 3; 
input int Limit = 18;
input double Lots = 0.1;

int PriceToInteger( const double Price )
{
  return((int)(Price / _Point + 0.1));
}

void OnTick()
{
  static int PrevBid = PriceToInteger(Bid);
  static int PrevAsk = PriceToInteger(Ask);    

  const int IntBid = PriceToInteger(Bid);
  const int IntAsk = PriceToInteger(Ask);
  
  const bool TradeTime = (TimeCurrent() % (24 * 60 * 60) < D'1970.01.01 23:50'); // exclude swaps
  
  if (TradeTime && (IntAsk - IntBid < Limit))
  {
    if ((IntBid - PrevBid >= Shift)) 
      OrderSend(_Symbol, OP_SELL, Lots, Bid, 0, 0, 0);
    
    if (PrevAsk - IntAsk >= Shift) 
      OrderSend(_Symbol, OP_BUY, Lots, Ask, 0, 0, 0);
  }

  PrevBid = IntBid;
  PrevAsk = IntAsk;
  
  for (int i = OrdersTotal() - 1; i >= 0; i--) 
    if (OrderSelect(i, SELECT_BY_POS) && ((!TradeTime) || (OrderProfit() > 0) ||
        ((OrderType() == OP_BUY)  && (PriceToInteger(OrderOpenPrice()) - IntBid >= Limit)) ||
        ((OrderType() == OP_SELL) && (IntAsk - PriceToInteger(OrderOpenPrice()) >= Limit)))) 
      OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0); 
}


结果


MT4报告

Strategy Tester Report
幸运
MetaQuotes-Demo (Build 1072)

符号欧元兑美元(欧元对美元)
期间1分钟 (M1) 2017.04.10 00:00 - 2017.04.14 20:58 (2017.04.10 - 2017.04.16)
模型所有刻度线(基于所有最小的可用时间段的最准确方法)
参数Shift=3; Limit=18; Lots=0.1。
历史上的酒吧7292模拟的蜱虫1865515建模质量99.00%
图表不匹配错误0
初始存款100000.00传播变化的
净利润-10863.90利润总额2528.70全部损失-13392.60
盈利能力0.19预期报酬率-0.49
绝对缩水10864.70最大缩水10864.70 (10.86%)相对缩减10.86% (10864.70)
交易总额21954空头头寸(赢利百分比)12016 (68.60%)多头头寸(赢利百分比)9938 (67.03%)
盈利的交易(占全部的百分比)14904 (67.89%)亏损交易(占全部的百分比)7050 (32.11%)
最大的有利的贸易3.00亏损的交易-4.40
平均值有利的交易0.17亏损的交易-1.90
最大数量连赢155 (46.60)连续损失(亏损)115 (-210.10)
最大。连续获利(胜利次数)46.60 (155)连续损失(损失数量)-210.10 (115)
平均值连续赢利5连续损失2


MT5报告

战略测试仪报告
Alpari-MT5 (Build 1596)
设置
专家顾问。幸运
符号。欧元兑美元
期间。M1 (2017.04.10 - 2017.04.16)
参数。移位=3
限制=18
批量=0.1
经纪人。阿尔帕里国际有限公司
货币。美元
首次存款。100 000.00
杠杆。1:100
回溯测试。
故事质量。不适用
酒吧。7192提基。1865415角色。1
净利润。-10 863.90资产负债表上的绝对缩水。10 863.90资金的绝对缩减。10 864.70
总利润。2 528.70余额的最大提取量。10 863.90 (10.86%)资金的最大提取量。10 864.70 (10.86%)
全部损失。-13 392.60资产负债表上的相对缩减。10.86% (10 863.90)资金的相对缩减。10.86% (10 864.70)
盈利能力。0.19预期回报。-0.49保证金水平。863.58%
恢复因子。-1.00夏普比率。-0.50Z-score。-52.22 (99.74%)
AHPR。1.0000 (-0.00%)LR 相关性。-1.00OnTester结果。0
GHPR。1.0000 (-0.00%)LR标准误差。149.82
总交易量。21954空头交易(占赢家的百分比)。12016 (68.60%)多头交易(胜率)。9938 (67.03%)
总交易量。43908盈利的交易(占所有交易的百分比)。14904 (67.89%)亏损交易(占所有交易的百分比)7050 (32.11%)
最大的赢利交易3.00最大的亏损交易-4.40
平均盈利的交易。0.17平均亏损交易。-1.90
最多连胜次数(盈利)。155 (46.60)连续损失的最大数量(损失)。115 (-210.10)
最大连续利润(赢的次数)。46.60 (155)最大的连续损失(损失的数量)。-210.10 (115)
平均连续赢利。5平均连续损失。2


结果是吻合的!


业绩

MT4-log
2017.05.08 01:45:42.765 EURUSD,M1: 1865415 tick events (7292 bars, 1865515 bar states) processed in 0:00:03.682 (total time 0:00:04.400)


MT5-log

2017.05.08 02:04:53.278 Core 1  EURUSD,M1: 1865415 ticks, 7192 bars generated. Test passed in 0:00:12.309 (including ticks preprocessing 0:00:00.203).


MT4测试器的管理速度比MT5测试器快3倍。如果怀疑MT5记录是由使用第三方库造成的,那些愿意的人可以用自己的方式在MQL5中重写这个专家顾问的简单MT4逻辑,并检查其假设性。


HZ的MT5测试器工作得更慢,直到我用手清理了所有的Bases文件夹。结果是在考虑到这一点的情况下给出的。

 

在Alpari-MT5-Demo服务器的新版本中(将在一周内发布),通过快速访问交易历史,我已经成功了。

EURUSD,M1: 1865417 ticks, 7192 bars generated. Test passed in 0:00:05.578.

MT5有一个系统开销,用于将数据和任务本身传输给外部代理进程,在小的(秒)任务上,相比之下会引入一个大的错误。

而MT5中测试器的复杂性和质量要高得多:以毫秒级的精度同步模拟多个仪器,在滚动世界变化过程中的真实滑动/延迟,以及很多更多的小功能。这不像是有一个for循环。


慢了好几个数量级--你不是对初始化/同步化和上传所有数据感到困惑吗?一切都写在日志里。磁盘上的文件在任何情况下都不应该被触动。

我建议把%userdata%\MetaQuotes目录(如C:\Users\%username%\AppData\Roaming\MetaQuotes)放入防毒通。这是数据所在的地方,将杀毒软件加入到通行证中,极大地提高了对终端和测试者数据的访问速度。

否则,当他们看到metatester[64].exe在运行,打开网络端口和大量的大数据文件,由终端和测试器编写时,他们会非常兴奋。一些交易者的测试仪甚至设法脱落,因为杀毒软件甚至在几秒钟内没有时间检查metatester[64].exe文件,终端无法访问它。

 
Renat Fatkhullin:

MT5中测试器的复杂性和质量要高一个数量级:以毫秒级的精度对多个仪器进行同步建模,在滚动浏览世界变化时诚实地滑动/延迟,以及一堆小的功能。

MT4+TDS捆绑版也有这个功能。另外还有一些MT5所缺乏的功能...但当然没有多币种。

慢了好几个数量级。

起初我以为是TDS故意减慢MT5的速度,所以我清理了它的内存。我还清理了Bases-文件夹(我的磁盘空间已经用完了)。在那之后,MT5的单次运行速度快了两个数量级(之前重启并没有帮助)。关于TDS-块的假设无法得到证实,不过我尝试了一下。我的电脑上没有安装任何反病毒软件。

Alpari-MT5服务器是真的。


ZZY在完全执行的情况下运行MT4-优化器--14分钟。MT5(只剩下一个代理)--看起来将是许多小时。将在上午/下午公布总数。

 

幻灯片是从哪里来的?

你有一些完全不同的想法。在MT5测试器中玩玩延迟字段,你会发现它完全是另一种东西。即使是MQL5代码中通常的Sleep(2500),当在测试器中执行时,当整个世界不断模拟时,代码中会出现延迟。执行延迟字段有效地显示了如果你把你的100msping到服务器 那里,交易将如何执行。

不可能有一个数量级的滞后。而且,既然MT5本身运行良好,为什么还要有任何附加组件呢。

关于过度拍摄--没有设置,也没有限制。
 

关于缺乏杀毒软件--长期以来,自7以来的所有版本都有一个内部的、不显眼的Windows Defender,它在扫描所有文件方面做得很好。

有时它在文件操作中产生明显的滞后,甚至在SSD磁盘上也是如此。

 

过度杀戮(开始时为100,000美元)。


MT4中的滑点(刻度线历史中的毫秒数可以正常工作)和其他好处


 
Renat Fatkhullin:

关于缺乏杀毒软件--长期以来,从7开始的所有版本都有一个内部的、不显眼的Windows Defender,可以扫描所有文件。

残废。已经有了所有的数据,可以看到MT5在优化上的强烈减速。当MT5完成后,我将发布比较优化的结果
 
我不明白重复的想法

关于交易、自动交易系统和交易策略测试的论坛

虫子,虫子,问题

fxsaber, 2017.05.07 21:55

Alpari-MT5交易服务器

为什么在外汇交易历史中会出现重复的点数(买入和卖出相等)?

测试员在重复的东西上赛制EA,有一半的人。是否有必要获得适当的性能下降一半?

 

你还是不明白我说的滑板。原则上,它在MT4中是不起作用的。

不是在滴答声中,而是在mcl5程序的过程中,当它停止时,滴答声不断,世界在旋转。写下Sleep(3000),程序将等待3秒,在这段时间里,刻度线将滴答作响,市场将被模拟。

如果你在测试器中设置执行延迟字段为200ms,执行交易时的网络延迟将被模拟为200,这将给出市场滑点或重新报价

这是在一个多货币系统内,对市场过程进行的另一个完全强大的建模。而且更重要的是,在一个遥远的异化过程中。例如,一个10,000公里的代理在执行任务时突然收到动态请求,要求访问代码中缺失的符号,并能够从主站请求这些数据,将其嵌入市场世界并继续旋转。

 
Renat Fatkhullin:

你还是不明白我说的滑板。原则上,它在MT4中是不起作用的。

不是在滴答声中,而是在mcl5程序的过程中,当它停止时,滴答声不断,世界在旋转。写下Sleep(3000),程序将等待3秒,在这段时间里,刻度线将被勾选,市场将被模拟。

现在这在MT4中不起作用。

如果你在测试器中设置执行延迟字段为200ms,它将模拟执行交易时的净延迟为200,这将给出市场滑点或重新报价。

这在MT4中现在是可行的。

这是在一个多货币系统内,对市场过程进行的另一个完全强大的建模。而且更重要的是,在一个遥远的异化过程中。例如,一个10,000公里的代理在执行任务时突然收到动态请求,要求访问代码中缺失的符号,并能够从主站请求这些数据,将其嵌入市场世界并继续旋转。

我没有诋毁MT5的目的。我只是在做一个可重复的比较。当然,MT5测试器的一些参数是无法达到的,但MT4测试器能够提供的东西,在MT5中不存在,但确实需要。我们已经看到,在MT4上对真实的自定义刻度线进行准确的测试是100%的。嗯,还有测试员的各种设置(佣金、缩进、待定订单的激活规则等)的规定也在那里。一般来说,有些东西在MT5中还没有实现。