文章 "MQL5 对决 QLUA - 为什么在 MQL5 中交易操作速度快达 28 倍?" - 页 2 1234567 新评论 fxsaber 2016.09.13 16:21 #11 Rashid Umarov: 代码已经提供,任何人都可以自己检查,看看结论是否成立。这里没有问题。我的代码sinput int Interval = 30; // 以秒为单位的时间间隔 class BENCH { protected: MqlTick FirstTick; int Count; ulong StartTime; int GetAmountTicks( const ulong From = 0, const int Amount = 10000 ) const { MqlTick Ticks[]; return(::CopyTicks(this.symbol, Ticks, COPY_TICKS_ALL, From, Amount)); } void Init( void ) { this.Count = 0; this.GetAmountTicks(); // 热身 ::SymbolInfoTick(this.symbol, this.FirstTick); this.StartTime = ::GetMicrosecondCount(); return; } public: const string symbol; const int TimerInterval; BENCH( const int iTimerInterval, const string Symb = NULL ) : symbol((Symb == NULL) ? ::Symbol() : Symb), TimerInterval(iTimerInterval * (int)1 e6) { this.Init(); this.StartTime = 0; } ~BENCH( void ) { ::Comment(""); } void Refresh( const string Symb ) { if (Symb == this.symbol) { if (this.GetBenchTime() >= this.TimerInterval) { if (Count > 0) ::Alert(this.ToString()); this.Init(); } Count++; } return; } int GetBenchTime( void ) const { return((int)(::GetMicrosecondCount() - this.StartTime)); } string ToString( void ) const { const ulong BenchTime = this.GetBenchTime(); const int Amount = this.GetAmountTicks(this.FirstTick.time_msc); if ((BenchTime == 0) || (Amount == 0)) return(NULL); const double Velocity1 = 1 e6 * this.Count / BenchTime; const double Velocity2 = 1 e6 * Amount / BenchTime; return((string)this.Count + "/" + (string)Amount + " = " + ::DoubleToString(100.0 * Count / Amount, 2) + "%, ExChange_History = " + ::DoubleToString(Velocity2, 1) + " ticks/sec, MT5_RealTime = " + ::DoubleToString(Velocity1, 1) + " units/sec, Interval = " + ::DoubleToString(BenchTime / 1 e6, 1) + " sec."); } }; class BENCH_BOOK : public BENCH { public: BENCH_BOOK( const int iTimerInterval, const string Symb = NULL ) : BENCH(iTimerInterval, Symb) { ::MarketBookAdd(this.symbol); } ~BENCH_BOOK( void ) { ::MarketBookRelease(this.symbol); } }; /* BENCH Bench(Interval); void OnTick( void ) { Bench.Refresh(_Symbol); return; } */ BENCH_BOOK BenchBook(Interval); void OnBookEvent(const string &symbol ) { BenchBook.Refresh(symbol); return; }结果2016.09.13 17:18:35.667 Bench (Si-9.16,M1) 851/754 = 112.86%, ExChange_History = 25.1 ticks/sec, MT5_RealTime = 28.3 units/sec, Interval = 30.1 sec. 2016.09.13 17:18:05.524 Bench (Si-9.16,M1) 662/506 = 130.83%, ExChange_History = 16.9 ticks/sec, MT5_RealTime = 22.1 units/sec, Interval = 30.0 sec. 2016.09.13 17:17:35.424 Bench (Si-9.16,M1) 883/1610 = 54.84%, ExChange_History = 53.6 ticks/sec, MT5_RealTime = 29.4 units/sec, Interval = 30.0 sec. 2016.09.13 17:17:05.319 Bench (Si-9.16,M1) 834/2707 = 30.81%, ExChange_History = 90.1 ticks/sec, MT5_RealTime = 27.8 units/sec, Interval = 30.0 sec. 2016.09.13 17:16:35.196 Bench (Si-9.16,M1) 789/627 = 125.84%, ExChange_History = 20.9 ticks/sec, MT5_RealTime = 26.3 units/sec, Interval = 30.0 sec. 2016.09.13 17:16:05.110 Bench (Si-9.16,M1) 900/822 = 109.49%, ExChange_History = 27.4 ticks/sec, MT5_RealTime = 30.0 units/sec, Interval = 30.0 sec. 2016.09.13 17:15:34.993 Bench (Si-9.16,M1) 772/747 = 103.35%, ExChange_History = 24.8 ticks/sec, MT5_RealTime = 25.7 units/sec, Interval = 30.1 sec.您可以清楚地看到,即使在相邻的半分钟内,结果也有很大差异。眼镜的比较只能在同一时间进行! [删除] 2016.09.13 18:50 #12 Тестирование синхронных операций - 进行一系列 10 次同步连续买入交易操作,并在交易所确认每次交易成功。在收到交易服务器关于交易在交易所成功/失败的确认之前,不会执行后续操作。 执行速度取决于终端--交易服务器--交易所--交易服务器--终端的整个链条。同步交易操作的平均时间越短越好。//--- 运行操作循环 for(int i=0;i<Trades;i++) { req.price =SymbolInfoDouble(_Symbol,SYMBOL_ASK); req.comment=string(i+1); //--- 行动 if(!OrderSend(req,res)) { PrintFormat("OrderSend() failed, retcode=%d",res.retcode); } else { trades_finished++; PrintFormat("#%d Buy %s 1 lot",i+1,_Symbol); } }您提到的确认在哪里?我在代码中没有注意到。如果您指的是OrderSend() 的响应,那么可以从帮助中找到:返回值如果基本结构检查(指针检查)成功,则返回 true,但 这并不表示交易操作执行成功。要获得函数执行结果的更详细描述,应分析 结果结构的字段 。 请解释一下。 Renat Fatkhullin 2016.09.14 08:53 #13 fxsaber:视频显示的是会议的开始。文章中的视频是果汁。而数字不足以启动会话。请解释一下什么是 "排队 "和 "热身"。看看测试中的时间--这是安静的一天的中间,而不是课程的开始。因此,跳过少量刻度是合理的,这足以避免未选择刻度的潜在残差。我们并不是在论坛上让孩子们不知道如何进行测试测量,然后因为证据不足而输掉比赛。测试运行了几十次,以确保没有错误。然后才是发表。 Renat Fatkhullin 2016.09.14 08:57 #14 Alexey Kozitsyn:你说的确认在哪里?我在代码中没有注意到。如果您指的是 OrderSend() 的响应,那就是帮助中的响应: 请解释一下。OrderSend 是 100% 同步操作,需要等待服务器上完整订单的结果。也就是说,在外部交易所执行的情况下,它是一个完整的处理周期,交易所确认订单下达。 fxsaber 2016.09.14 08:59 #15 Renat Fatkhullin:看看测试中的时间--这是宁静的一天的中间,而不是会议的开始。 您的同事说的交易时段 交易时段 开始之前 ,堆栈会有几次单次更新。因此,脚本会跳过前 N 个刻度,以确保堆栈中确实有订单。之后才开始计算刻度。 如果代码与之前的视频保持一致,那就另当别论了。 Renat Fatkhullin 2016.09.14 09:00 #16 fxsaber:我的代码结果您可以清楚地看到,即使是相邻的半分钟,结果也有很大差异。眼镜的比较只能在同一时间进行!同时进行是指测量结果相差 10%左右。但是,如果几十次测试的结果稳定在 4-5 倍之间,那就没什么好讨论的了。 fxsaber 2016.09.14 09:05 #17 Alexey Kozitsyn:你说的确认在哪里?我在代码中没有注意到。如果您指的是 OrderSend() 的响应,那就是帮助中的响应: 请解释一下。OrderSend 返回的值与 OrderCheck 相同。但在这种情况下,如果返回值为 true,OrderSend 只有在交易服务器的响应到达时才会完成执行。交易服务器(网关)是通往交易所的管道,只对 GO 进行检查。因此,如果 GO 错误,订单将无法到达交易所。从这个意义上说,您检查MqlTradeResult 是正确的。但在这种情况下,GO 每次都是正确的,因此所有订单都发送到了交易所。OrderSend 在收到交易所的准确回复后就结束了工作。因此结果是正确的。 Renat Fatkhullin 2016.09.14 09:06 #18 fxsaber: 您的同事说到会话如果代码与之前的视频没有变化,那就不一样了。您与另一个视频混淆了,该视频展示了三个终端会话启动的视觉对比。在该视频https://www.youtube.com/watch?v=i5vvD66I3Ik 中,您可以很容易地看到 MT5 在数据更新速度方面的明显优势。在文章https://www.mql5.com/zh/articles/2635 中,我们证明了数据速度上的差异,并特别选取了一天中的中间时段(2016.09.12 13:57 GMT+1),这样就不会有人抱怨有人在市场开始时刹车的潜在可能性。文章https://www.youtube.com/watch?v=J5nqWGQ1zh8 中的视频显示了三分钟内干净利落的顺序测量,没有任何中断。 3markets 25082016 blur 2016.08.25www.youtube.com Запись стаканов в терминалах MetaTrader 5, Quik и SmartX 25 августа 2016. Инструмент Si-9.16 fxsaber 2016.09.14 09:13 #19 Renat Fatkhullin:您可能会对另一个视频感到困惑,该视频对三个终端的会话启动进行了直观比较。在该视频https://www.youtube.com/watch?v=i5vvD66I3Ik 中,您很容易注意到 MT5 在数据更新速度上的明显优势。在https://www.mql5.com/zh/articles/2635 一文中,我们证明了数据更新速度的差异,并特意选择了一天中的中间时段(13:57 GMT+1),这样就不会出现有人在市场开始时刹车的说法。文章https://www.youtube.com/watch?v=J5nqWGQ1zh8 中的视频显示了三分钟内的连续测量结果。 我只是对当前文章来源中的评论有疑问 关于交易、自动交易系统和交易策略测试的论坛 讨论文章 "MQL5 和 QLUA 的比较 - 为什么 MQL5 中的交易操作快达 28 倍? fxsaber, 2016.09.13:25 pm //--- 跳过初始队列清理和预热的第一个刻度点 tickcounter++; if(tickcounter<ExtSkipFirstTicks) return;需要澄清队列和预热对性能的影响。 如果它是一个基本要素(从之前的视频来看)--是一回事,如果不是--又是另一回事。 Renat Fatkhullin 2016.09.14 09:30 #20 fxsaber: 我只是对当前文章来源中的评论有一个疑问如果是基本的(从之前的视频中)--是一回事,如果不是--又是另一回事。任何测试都应包含冷启动保护。因此,跳过 N 个刻度就表明我们意识到并考虑到了这一点。这样做的目的是为了避免有人提出 "你们为什么不对冷启动的影响进行补偿 "的说法。关于三个终端会话开始的 视频是 2016 年 8 月 25 日为另一位声称 MT5 在会话开始时变慢的交易员准备的。后来的事实证明,该交易员根本没有使用 MT5,只是在论坛上散布了一些猜测。此外,一些交易员并不知道,外汇交易工具的图表不是根据出价(Bid),而是根据最后成交价(Last)绘制的。他们将堆栈中出价的变化及其在图表中的不显示视为 "MT5 制动器"。当然,并没有什么 "刹车"。 1234567 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
代码已经提供,任何人都可以自己检查,看看结论是否成立。这里没有问题。
我的代码
结果
您可以清楚地看到,即使在相邻的半分钟内,结果也有很大差异。眼镜的比较只能在同一时间进行!
您提到的确认在哪里?我在代码中没有注意到。如果您指的是OrderSend() 的响应,那么可以从帮助中找到:
返回值
如果基本结构检查(指针检查)成功,则返回 true,但 这并不表示交易操作执行成功。要获得函数执行结果的更详细描述,应分析 结果结构的字段 。
视频显示的是会议的开始。文章中的视频是果汁。而
数字不足以启动会话。请解释一下什么是 "排队 "和 "热身"。
看看测试中的时间--这是安静的一天的中间,而不是课程的开始。因此,跳过少量刻度是合理的,这足以避免未选择刻度的潜在残差。
我们并不是在论坛上让孩子们不知道如何进行测试测量,然后因为证据不足而输掉比赛。测试运行了几十次,以确保没有错误。然后才是发表。
你说的确认在哪里?我在代码中没有注意到。如果您指的是 OrderSend() 的响应,那就是帮助中的响应:
请解释一下。OrderSend 是 100% 同步操作,需要等待服务器上完整订单的结果。
也就是说,在外部交易所执行的情况下,它是一个完整的处理周期,交易所确认订单下达。
看看测试中的时间--这是宁静的一天的中间,而不是会议的开始。
交易时段 开始之前 ,堆栈会有几次单次更新。因此,脚本会跳过前 N 个刻度,以确保堆栈中确实有订单。之后才开始计算刻度。
我的代码
结果
您可以清楚地看到,即使是相邻的半分钟,结果也有很大差异。眼镜的比较只能在同一时间进行!
同时进行是指测量结果相差 10%左右。
但是,如果几十次测试的结果稳定在 4-5 倍之间,那就没什么好讨论的了。
你说的确认在哪里?我在代码中没有注意到。如果您指的是 OrderSend() 的响应,那就是帮助中的响应:
请解释一下。OrderSend 返回的值与 OrderCheck 相同。但在这种情况下,如果返回值为 true,OrderSend 只有在交易服务器的响应到达时才会完成执行。
交易服务器(网关)是通往交易所的管道,只对 GO 进行检查。因此,如果 GO 错误,订单将无法到达交易所。从这个意义上说,您检查MqlTradeResult 是正确的。但在这种情况下,GO 每次都是正确的,因此所有订单都发送到了交易所。OrderSend 在收到交易所的准确回复后就结束了工作。
因此结果是正确的。
您的同事说到会话
您与另一个视频混淆了,该视频展示了三个终端会话启动的视觉对比。在该视频https://www.youtube.com/watch?v=i5vvD66I3Ik 中,您可以很容易地看到 MT5 在数据更新速度方面的明显优势。
在文章https://www.mql5.com/zh/articles/2635 中,我们证明了数据速度上的差异,并特别选取了一天中的中间时段(2016.09.12 13:57 GMT+1),这样就不会有人抱怨有人在市场开始时刹车的潜在可能性。文章https://www.youtube.com/watch?v=J5nqWGQ1zh8 中的视频显示了三分钟内干净利落的顺序测量,没有任何中断。
您可能会对另一个视频感到困惑,该视频对三个终端的会话启动进行了直观比较。在该视频https://www.youtube.com/watch?v=i5vvD66I3Ik 中,您很容易注意到 MT5 在数据更新速度上的明显优势。
在https://www.mql5.com/zh/articles/2635 一文中,我们证明了数据更新速度的差异,并特意选择了一天中的中间时段(13:57 GMT+1),这样就不会出现有人在市场开始时刹车的说法。文章https://www.youtube.com/watch?v=J5nqWGQ1zh8 中的视频显示了三分钟内的连续测量结果。
关于交易、自动交易系统和交易策略测试的论坛
讨论文章 "MQL5 和 QLUA 的比较 - 为什么 MQL5 中的交易操作快达 28 倍?
fxsaber, 2016.09.13:25 pm
需要澄清队列和预热对性能的影响。
我只是对当前文章来源中的评论有一个疑问
任何测试都应包含冷启动保护。
因此,跳过 N 个刻度就表明我们意识到并考虑到了这一点。这样做的目的是为了避免有人提出 "你们为什么不对冷启动的影响进行补偿 "的说法。
关于三个终端会话开始的 视频是 2016 年 8 月 25 日为另一位声称 MT5 在会话开始时变慢的交易员准备的。后来的事实证明,该交易员根本没有使用 MT5,只是在论坛上散布了一些猜测。此外,一些交易员并不知道,外汇交易工具的图表不是根据出价(Bid),而是根据最后成交价(Last)绘制的。他们将堆栈中出价的变化及其在图表中的不显示视为 "MT5 制动器"。
当然,并没有什么 "刹车"。