MT5和速度在行动 - 页 48 1...414243444546474849505152535455...94 新评论 fxsaber 2020.10.07 09:42 #471 fxsaber:打印和警报不是异步的? 我想让这些函数成为异步的。试着通过ChartEvent实现--它可以工作。但它非常缓慢。我已经把这个挖出来了。 #include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279 void OnTick() { _B(EventChartCustom(ChartFirst(), 123, 0, 0, NULL), 1); } 2020.10.07 12:38:04.579 Alert: Time[Test9.mq5 5 in OnTick: EventChartCustom(ChartFirst(),123,0,0,NULL)] = 100 mсs. 2020.10.07 12:38:06.842 Alert: Time[Test9.mq5 5 in OnTick: EventChartCustom(ChartFirst(),123,0,0,NULL)] = 170 mсs. 2020.10.07 12:38:07.924 Alert: Time[Test9.mq5 5 in OnTick: EventChartCustom(ChartFirst(),123,0,0,NULL)] = 765 mсs. 2020.10.07 12:38:08.359 Alert: Time[Test9.mq5 5 in OnTick: EventChartCustom(ChartFirst(),123,0,0,NULL)] = 377 mсs. 2020.10.07 12:38:09.246 Alert: Time[Test9.mq5 5 in OnTick: EventChartCustom(ChartFirst(),123,0,0,NULL)] = 66 mсs. 2020.10.07 12:38:14.645 Alert: Time[Test9.mq5 5 in OnTick: EventChartCustom(ChartFirst(),123,0,0,NULL)] = 692 mсs. 2020.10.07 12:38:14.729 Alert: Time[Test9.mq5 5 in OnTick: EventChartCustom(ChartFirst(),123,0,0,NULL)] = 6427 mсs. 2020.10.07 12:38:15.140 Alert: Time[Test9.mq5 5 in OnTick: EventChartCustom(ChartFirst(),123,0,0,NULL)] = 479 mсs. 2020.10.07 12:38:15.222 Alert: Time[Test9.mq5 5 in OnTick: EventChartCustom(ChartFirst(),123,0,0,NULL)] = 125 mсs. 2020.10.07 12:38:15.373 Alert: Time[Test9.mq5 5 in OnTick: EventChartCustom(ChartFirst(),123,0,0,NULL)] = 606 mсs. 在关键的地方放弃了这样一个昂贵的功能。 关于警报的问题。 到目前为止,我们可以肯定地说,在关键的地方不可能出现警报。需要异步性。 fxsaber 2020.10.07 10:41 #472 重现了SymbolInfoTick的刹车。而且没有压力测试。实际需要使你这样写。 #include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279 // Возвращает время Обзора рынка в миллисекундах. long TimeCurrentMsc() { long Res = 0; MqlTick Tick; for (int i = SymbolsTotal(true); i >= 0; i--) { const string Symb = SymbolName(i, true); if (_B(SymbolInfoTick(Symb, Tick), 10) && (Tick.time_msc > Res)) Res = Tick.time_msc; } return(Res); } void OnTick() { TimeCurrentMsc(); } 按照这个指示进行快速回放。 关于交易、自动交易系统和交易策略测试的论坛 同步订单发送报告成功执行的速度比ping到交易服务器更快 fxsaber, 2020.09.30 20:36 在RannForex服务器 上开设一个模拟账户。 在市场概览中打开外汇符号并允许自动交易。 在一个单一的图表上启动这个EA。 把这个脚本 扔在同一个图表上--它将在其他符号上克隆这个EA。运行时,inAmount = 15。 等待这类信息并观察日志。 在快速的机器上,市场观察中30个字符的结果。 2020.10.07 13:28:01.931 Test9 (NZDCHF,H1) Alert: Bench_Stack = 0, Time[Test9.mq5 14 in TimeCurrentMsc: SymbolInfoTick(Symb,Tick)] = 65 mсs. 2020.10.07 13:28:02.344 Test9 (EURAUD,H1) Alert: Bench_Stack = 0, Time[Test9.mq5 14 in TimeCurrentMsc: SymbolInfoTick(Symb,Tick)] = 11 mсs. 2020.10.07 13:28:02.730 Test9 (EURAUD,H1) Alert: Bench_Stack = 0, Time[Test9.mq5 14 in TimeCurrentMsc: SymbolInfoTick(Symb,Tick)] = 15 mсs. 2020.10.07 13:28:02.800 Test9 (AUDCHF,H1) Alert: Bench_Stack = 0, Time[Test9.mq5 14 in TimeCurrentMsc: SymbolInfoTick(Symb,Tick)] = 11 mсs. 2020.10.07 13:28:05.471 Test9 (GBPAUD,H1) Alert: Bench_Stack = 0, Time[Test9.mq5 14 in TimeCurrentMsc: SymbolInfoTick(Symb,Tick)] = 30 mсs. 2020.10.07 13:28:08.675 Test9 (NZDCHF,H1) Alert: Bench_Stack = 0, Time[Test9.mq5 14 in TimeCurrentMsc: SymbolInfoTick(Symb,Tick)] = 28 mсs. 2020.10.07 13:28:08.675 Test9 (GBPAUD,H1) Alert: Bench_Stack = 0, Time[Test9.mq5 14 in TimeCurrentMsc: SymbolInfoTick(Symb,Tick)] = 120 mсs. 2020.10.07 13:28:09.697 Test9 (CADCHF,H1) Alert: Bench_Stack = 0, Time[Test9.mq5 14 in TimeCurrentMsc: SymbolInfoTick(Symb,Tick)] = 13 mсs. 2020.10.07 13:28:10.063 Test9 (EURCAD,H1) Alert: Bench_Stack = 0, Time[Test9.mq5 14 in TimeCurrentMsc: SymbolInfoTick(Symb,Tick)] = 29 mсs. 2020.10.07 13:28:11.741 Test9 (CADJPY,H1) Alert: Bench_Stack = 0, Time[Test9.mq5 14 in TimeCurrentMsc: SymbolInfoTick(Symb,Tick)] = 32 mсs. 2020.10.07 13:28:12.597 Test9 (EURCAD,H1) Alert: Bench_Stack = 0, Time[Test9.mq5 14 in TimeCurrentMsc: SymbolInfoTick(Symb,Tick)] = 33 mсs. 我希望我不是唯一在繁殖的人。当然,滞后的程度并不像前面显示的那样大。但在这里将有可能更快地找到原因。 ZZY TimeCurrentMsc在MQL5中由于某种原因没有输入,尽管反复要求。 A100 2020.10.07 11:30 #473 fxsaber:在关键的地方放弃了这样一个昂贵的功能。 这是一个显著的缺点。因为MQL事件模型是不完整的--没有零事件,即当队列中没有其他事件时被调用的事件。它可以通过一个自定义事件 来模拟。但考虑到这个 缺点,基于事件的模式对于那些对速度感兴趣的人来说是没有意义的 Andrey Khatimlianskii 2020.10.07 11:32 #474 fxsaber:EventChartCustom很贵。 没有ChartFirst() 怎么办? fxsaber 2020.10.07 11:53 #475 Andrey Khatimlianskii:没有ChartFirst()怎么样? #include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279 long GetAnotherChart() { long Chart = ::ChartFirst(); while (Chart == ChartID()) Chart = ChartNext(Chart); return(Chart); } void OnTick() { const long Chart = GetAnotherChart(); if (Chart) _B(EventChartCustom(Chart, 123, 0, 0, NULL), 1); _B(EventChartCustom(0, 123, 0, 0, NULL), 1); } 2020.10.07 14:49:09.786 Alert: Bench_Stack = 0, Time[Test9.mq5 19 in OnTick: EventChartCustom(Chart,123,0,0,NULL)] = 349 mсs. 2020.10.07 14:49:09.786 Alert: Bench_Stack = 0, Time[Test9.mq5 21 in OnTick: EventChartCustom(0,123,0,0,NULL)] = 81 mсs. 2020.10.07 14:49:09.866 Alert: Bench_Stack = 0, Time[Test9.mq5 19 in OnTick: EventChartCustom(Chart,123,0,0,NULL)] = 248 mсs. 2020.10.07 14:49:09.866 Alert: Bench_Stack = 0, Time[Test9.mq5 21 in OnTick: EventChartCustom(0,123,0,0,NULL)] = 24 mсs. 2020.10.07 14:49:10.095 Alert: Bench_Stack = 0, Time[Test9.mq5 19 in OnTick: EventChartCustom(Chart,123,0,0,NULL)] = 163 mсs. 2020.10.07 14:49:10.095 Alert: Bench_Stack = 0, Time[Test9.mq5 21 in OnTick: EventChartCustom(0,123,0,0,NULL)] = 116 mсs. 2020.10.07 14:49:10.810 Alert: Bench_Stack = 0, Time[Test9.mq5 19 in OnTick: EventChartCustom(Chart,123,0,0,NULL)] = 600 mсs. 2020.10.07 14:49:10.811 Alert: Bench_Stack = 0, Time[Test9.mq5 21 in OnTick: EventChartCustom(0,123,0,0,NULL)] = 53 mсs. 2020.10.07 14:49:10.870 Alert: Bench_Stack = 0, Time[Test9.mq5 19 in OnTick: EventChartCustom(Chart,123,0,0,NULL)] = 137 mсs. 2020.10.07 14:49:10.870 Alert: Bench_Stack = 0, Time[Test9.mq5 21 in OnTick: EventChartCustom(0,123,0,0,NULL)] = 54 mсs. 寄给别人的图表比寄给自己的更贵。 Renat Fatkhullin 2020.10.07 14:23 #476 A100:这是一个重大的缺陷。因为MQL事件模型是不完整的--没有空事件,即当队列中没有其他事件时被调用的事件。它可以通过一个自定义事件 来模拟。但考虑到这个 缺点,基于事件的模式对于那些对速度感兴趣的人来说是没有意义的 OnTimer允许你以高达16毫秒的速度进行背景通话。 A100 2020.10.07 15:23 #477 Renat Fatkhullin: OnTimer允许你以高达16ms的频率进行背景通话。 正确,也就是说,我们至少损失了16ms,什么都没有了(我们最早可以回来)。而且如果有免费的零点活动或免费的定制活动,我们也不能失去他们。而现在,下面案例中的事件模型的作用是有限的。 关于交易、自动交易系统和交易策略测试的论坛 MT5和速度在行动 fxsaber, 2020.10.06 01:27 你完全脱离了这个圈子。假设你需要在OnTick中开设两个头寸。第一个OrderSend是几毫秒的时间。在这之后,你必须做一个快照。然后应该调用第二个OrderSend。 只有OnTick可以执行数百毫秒。你建议拍一些OnTimer的快照。 而OnTimer已经被释放出来用于其他用途 A100 2020.10.07 15:50 #478 而且,OnTimer不允许我们确定我们收到的是一个空事件,因为它似乎比其他处理程序有更高的优先级,这可能是主要的反驳意见。 Roman 2020.10.07 16:00 #479 fxsaber:关于警报的问题。就目前而言,可以说Alert不能用在关键的地方。需要异步性。 对印刷品的警觉性,你可以尝试在某个地方用快速书写来代替它。 我想到了内存中的Native sql fxsaber 2020.10.07 16:22 #480 Renat Fatkhullin: 我不是在建议快照,我是在回答一个关于毫秒计时器的直接问题。 它是存在的,尽管在目前的测试器中,它仍然以1秒的频率被触发。 在我们正在编写的新测试器中,我们将尝试改变这一点。 我经常使用的事实是,测试器正好有一个毫秒级的计时器,而不是一个秒级的计时器。证明。 // Демонстрация корректной работы миллисекундного таймера в Тестере. #include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006 #define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK) void OnTick() { static bool FirstRun = true; if (FirstRun) { MqlTick Tick; if (SymbolInfoTick(_Symbol, Tick) && Tick.bid && Tick.ask) FirstRun = !EventSetMillisecondTimer(29); // 29 мс таймер. } } void OnTimer() { static int Count = 0; if (Count < 10) { if ((bool)((++Count) & 1)) // Попеременно OrderSend(_Symbol, OP_BUY, 0.1, Ask, 0, 0, 0); // Открываем позицию else if (OrderSelect(0, SELECT_BY_POS)) OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0); // Закрываем позицию } } void OnDeinit( const int ) { // Распечатали историю в конце бэктеста. for (int i = OrdersHistoryTotal() - 1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) OrderPrint(); } 结果。 2020.10.07 19:17:59.232 Core 1 2020.10.06 23:59:57 #11 2020.10.06 00:00:00.320 buy 0.10 EURUSD 1.17859 0.00000 0.00000 2020.10.06 00:00:00.349 1.17827 0.00 0.00 -3.20 0 2020.10.07 19:17:59.232 Core 1 2020.10.06 23:59:57 #9 2020.10.06 00:00:00.262 buy 0.10 EURUSD 1.17859 0.00000 0.00000 2020.10.06 00:00:00.291 1.17827 0.00 0.00 -3.20 0 2020.10.07 19:17:59.232 Core 1 2020.10.06 23:59:57 #7 2020.10.06 00:00:00.204 buy 0.10 EURUSD 1.17859 0.00000 0.00000 2020.10.06 00:00:00.233 1.17827 0.00 0.00 -3.20 0 2020.10.07 19:17:59.232 Core 1 2020.10.06 23:59:57 #5 2020.10.06 00:00:00.146 buy 0.10 EURUSD 1.17859 0.00000 0.00000 2020.10.06 00:00:00.175 1.17827 0.00 0.00 -3.20 0 2020.10.07 19:17:59.232 Core 1 2020.10.06 23:59:57 #3 2020.10.06 00:00:00.088 buy 0.10 EURUSD 1.17859 0.00000 0.00000 2020.10.06 00:00:00.117 1.17827 0.00 0.00 -3.20 0 2020.10.07 19:17:59.232 Core 1 2020.10.06 23:59:57 #1 2020.10.06 00:00:00.000 balance 0.00 0.00000 0.00000 0.00000 2020.10.06 00:00:00.000 0.00000 0.00 0.00 100000000.00 0 位置的打开 和关闭 时间 之间正好有29毫秒。 1...414243444546474849505152535455...94 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
打印和警报不是异步的?
我想让这些函数成为异步的。试着通过ChartEvent实现--它可以工作。但它非常缓慢。我已经把这个挖出来了。
在关键的地方放弃了这样一个昂贵的功能。
关于警报的问题。
到目前为止,我们可以肯定地说,在关键的地方不可能出现警报。需要异步性。
重现了SymbolInfoTick的刹车。而且没有压力测试。实际需要使你这样写。
按照这个指示进行快速回放。
关于交易、自动交易系统和交易策略测试的论坛
同步订单发送报告成功执行的速度比ping到交易服务器更快
fxsaber, 2020.09.30 20:36
在快速的机器上,市场观察中30个字符的结果。
我希望我不是唯一在繁殖的人。当然,滞后的程度并不像前面显示的那样大。但在这里将有可能更快地找到原因。
ZZY TimeCurrentMsc在MQL5中由于某种原因没有输入,尽管反复要求。
在关键的地方放弃了这样一个昂贵的功能。
这是一个显著的缺点。因为MQL事件模型是不完整的--没有零事件,即当队列中没有其他事件时被调用的事件。它可以通过一个自定义事件 来模拟。但考虑到这个 缺点,基于事件的模式对于那些对速度感兴趣的人来说是没有意义的
EventChartCustom很贵。
没有ChartFirst() 怎么办?
没有ChartFirst()怎么样?
寄给别人的图表比寄给自己的更贵。
这是一个重大的缺陷。因为MQL事件模型是不完整的--没有空事件,即当队列中没有其他事件时被调用的事件。它可以通过一个自定义事件 来模拟。但考虑到这个 缺点,基于事件的模式对于那些对速度感兴趣的人来说是没有意义的
OnTimer允许你以高达16ms的频率进行背景通话。
正确,也就是说,我们至少损失了16ms,什么都没有了(我们最早可以回来)。而且如果有免费的零点活动或免费的定制活动,我们也不能失去他们。而现在,下面案例中的事件模型的作用是有限的。
关于交易、自动交易系统和交易策略测试的论坛
MT5和速度在行动
fxsaber, 2020.10.06 01:27
你完全脱离了这个圈子。假设你需要在OnTick中开设两个头寸。第一个OrderSend是几毫秒的时间。在这之后,你必须做一个快照。然后应该调用第二个OrderSend。
只有OnTick可以执行数百毫秒。你建议拍一些OnTimer的快照。
关于警报的问题。
就目前而言,可以说Alert不能用在关键的地方。需要异步性。
对印刷品的警觉性,你可以尝试在某个地方用快速书写来代替它。
我想到了内存中的Native sql
我不是在建议快照,我是在回答一个关于毫秒计时器的直接问题。
我经常使用的事实是,测试器正好有一个毫秒级的计时器,而不是一个秒级的计时器。证明。
结果。
位置的打开 和关闭 时间 之间正好有29毫秒。