专家顾问
// 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报告
符号 | 欧元兑美元(欧元对美元) | ||||
期间 | 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.50 | Z-score。 | -52.22 (99.74%) | |||||||
AHPR。 | 1.0000 (-0.00%) | LR 相关性。 | -1.00 | OnTester结果。 | 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 |
结果是吻合的!
业绩
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文件,终端无法访问它。
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磁盘上也是如此。
你还是不明白我说的滑板。原则上,它在MT4中是不起作用的。
不是在滴答声中,而是在mcl5程序的过程中,当它停止时,滴答声不断,世界在旋转。写下Sleep(3000),程序将等待3秒,在这段时间里,刻度线将被勾选,市场将被模拟。
现在这在MT4中不起作用。
如果你在测试器中设置执行延迟字段为200ms,它将模拟执行交易时的净延迟为200,这将给出市场滑点或重新报价。
这在MT4中现在是可行的。
这是在一个多货币系统内,对市场过程进行的另一个完全强大的建模。而且更重要的是,在一个遥远的异化过程中。例如,一个10,000公里的代理在执行任务时突然收到动态请求,要求访问代码中缺失的符号,并能够从主站请求这些数据,将其嵌入市场世界并继续旋转。
关于交易、自动交易系统和交易策略测试的论坛
关于 "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测试器中,欧元兑美元不会再拉出转换符号的刻度。
现在,我们在两个测试器中运行以下跨平台专家顾问系统
MT4-测试仪日志
MT5-测试仪日志
我们确认从每个测试者那里收到的文件是相同的--测试者的刻度线是一致的。
在这一点上,两个测试员对新服务的准备工作已经就绪。