实时的提基 - 页 12 1...5678910111213141516171819...26 新评论 prostotrader 2020.01.31 16:49 #111 Sergey Chalyshev: 我想提醒你,OnTick接收两个独立的线程,信息和交易,COPY_TICKS_INFO和COPY_TICKS_ALL 并进行预处理 。 这些线程之间并不同步,所以如果你将OnBookEvent与 OnTick进行比较,你应该采取TICKS_INFO。 根据定义,OnBookEvent应该更快,因为它不需要经过预处理。 这些测试不能可靠地确定谁更快,因为我们不知道蜱虫的存活时间,与蜱虫不同。 虽然,我们曾多次要求开发商增加库存时间!! p.s. 除了速度,tumblr也比OnTick有优势。 如前所述,在OnTick 中不可能获得更好的买入和卖出价格。 而OnTick 没有其他符号的数据,对于分析几个符号的专家顾问来说,它是没有用 的。 将COPY_TICKS_ALL 改为COPY_TICKS_INFO 结果 2020.01.31 19:45:17.893 Ticks_test (GOLD-3.20,M1) OnTick: 2020.01.31 19:45:11.360 Ask=1591.4 2020.01.31 19:45:17.894 Ticks_test (GOLD-3.20,M1) OnBookEvent: 2020.01.31 19:45:09.384 Ask=1591.3 2020.01.31 19:45:17.973 Ticks_test (GOLD-3.20,M1) OnTick: 2020.01.31 19:45:11.570 Ask=1591.1 2020.01.31 19:45:17.973 Ticks_test (GOLD-3.20,M1) OnBookEvent: 2020.01.31 19:45:09.384 Ask=1591.3 2020.01.31 19:45:18.060 Ticks_test (GOLD-3.20,M1) OnBookEvent: 2020.01.31 19:45:09.384 Ask=1591.3 2020.01.31 19:45:18.077 Ticks_test (GOLD-3.20,M1) OnTick: 2020.01.31 19:45:11.712 Bid=1591.4 2020.01.31 19:45:18.077 Ticks_test (GOLD-3.20,M1) OnTick: 2020.01.31 19:45:11.712 Bid=1591.4 2020.01.31 19:45:18.078 Ticks_test (GOLD-3.20,M1) OnBookEvent: 2020.01.31 19:45:09.384 Ask=1591.3 2020.01.31 19:45:18.356 Ticks_test (GOLD-3.20,M1) OnBookEvent: 2020.01.31 19:45:10.574 Ask=1591.2 2020.01.31 19:45:18.356 Ticks_test (GOLD-3.20,M1) OnBookEvent: 2020.01.31 19:45:10.742 Bid=1591.2 2020.01.31 19:45:18.356 Ticks_test (GOLD-3.20,M1) OnBookEvent: 2020.01.31 19:45:11.360 Ask=1591.4 2020.01.31 19:45:18.356 Ticks_test (GOLD-3.20,M1) OnBookEvent: 2020.01.31 19:45:11.570 Ask=1591.1 2020.01.31 19:45:18.356 Ticks_test (GOLD-3.20,M1) OnBookEvent: 2020.01.31 19:45:11.570 Ask=1591.4 2020.01.31 19:45:18.356 Ticks_test (GOLD-3.20,M1) OnBookEvent: 2020.01.31 19:45:11.712 Bid=1591.4 2020.01.31 19:45:18.356 Ticks_test (GOLD-3.20,M1) OnBookEvent: 2020.01.31 19:45:11.712 Bid=1591.4 2020.01.31 19:45:18.356 Ticks_test (GOLD-3.20,M1) OnBookEvent: 2020.01.31 19:45:12.14 Ask=1591.2 标记为黄色--同样的打勾! 毕竟代码中可能有不准确的地方......? Andrey Khatimlianskii 2020.01.31 18:25 #112 有那么一瞬间,你似乎有意愿把事情弄清楚,这将有助于缓和你的自尊心。 不,它只是看起来是这样的。 一般来说,问题已经解决了,任何人都可以观看你和fxsaber以及我的代码,并得出结论。 和你在一起,我停止了对话,除了你的大声喊叫,什么都没有,在接受信息的时候,你的大脑根本不工作。 祝FORTS好运。 Andrey Khatimlianskii 2020.01.31 18:29 #113 Sergey Chalyshev: 我想提醒你,OnTick接收两个独立的线程,信息和交易,COPY_TICKS_INFO和COPY_TICKS_ALL 并进行预处理 。 这些线程之间并不同步,所以如果你将OnBookEvent与 OnTick进行比较,你应该采取TICKS_INFO。 Sergei,我们使用On-functions只是作为一个切入点。 问题是哪个入口点会先出现(同时给出关于最后一个勾的同样正确的信息)。 运行我的EA,并看看日志。事件的时间(精确到毫秒)和最后一个已知刻度的时间(也是毫秒)会在日志中输出。 只要分析一下 "谁是最早的 "几个单独的点就可以了。 谢尔盖-查尔舍夫。 根据定义,OnBookEvent应该更快,因为它不需要经过预处理。 我不认为OnTick会这样做。而且测试证实了这一点,没有任何延迟。 谢尔盖-查尔舍夫。 正如已经说过的,在OnTick中不可能获得更好的买入和卖出价格。 可能是用CopyTicks。 Тики в реальном времени 2020.01.31www.mql5.com Всем доброго времени суток. Появилась необходимость протестировать торговый алгоритм на реальных тиках брокера "Открытие... Andrey Khatimlianskii 2020.01.31 18:45 #114 Andrey Khatimlianskii: 运行我的EA,并看看日志。 事件的时间(精确到毫秒)和最后一个已知刻度的时间(也是毫秒)被输出到日志。 只需分析几个单独的刻度,看看 "谁先来"。 一个常见的情况是,OnBook与OnTick同时出现,或者晚1-2ms。但也有滞后的情况。 Andrey Khatimlianskii 2020.01.31 18:48 #115 在5个小时的时间里。 2020.01.31 20:45:48.214 TestTicks (GOLD-3.20,M15) 63906 USE_BOOK events received 2020.01.31 20:45:52.782 TestTicks (GOLD-3.20,M15) 31199 USE_TICK events received 两倍于OnBook活动的数量。可惜不是所有的人都带着有用的负荷(如果需要最佳出价/报价和翻牌)。 Sergey Chalyshev 2020.01.31 20:15 #116 Andrey Khatimlianskii: Sergey,我们只是把On-functions作为一个入口点。 问题是哪个入口点会先出现(同时给出关于最后一个勾的同样正确的信息)。 运行我的EA,并看看日志。 事件的时间(精确到毫秒)和最后一个已知刻度的时间(也是毫秒)会在日志中输出。 只要分析一下 "谁是最早的 "几个单独的点就可以了。 这是你做错了。也许tumblr事件已经到来,但还没有进入tick历史。你应该比较买入价和卖出价,而不是挖空心思去研究历史。 我认为OnTick没有通过。而且测试证实了这一点,没有任何延误。 在进入历史记录之前,蜱虫必然会被处理,也会被分配到所有必要的图表、指标和专家顾问。而这一切在MT5中是按顺序进行的(不是并联)。 也许在CopyTicks的帮助下。 不,用CopyTicks也不可能得到最好的价格,如果是你的订单站在最好的位置怎么办。 Sergey Chalyshev 2020.01.31 20:22 #117 Просто проанализируйте несколько отдельных тиков на предмет "кто раньше". 我有不同的做事方法。 蓝线是OnBook。 红色的是OnCalculat = OnTick。 如果你有兴趣,我可以给你看代码 prostotrader 2020.01.31 20:33 #118 Sergey Chalyshev :我的理解不同:蓝线是OnBook ,红色OnTick 。如果有兴趣,我可以显示指标代码没有塞雷扎!必须承认OnBookEvent() 和 OnTick() 所有刻度都是相同的(我在代码中有一个错误),但其他 DOM 更改不会以任何方式反映在 OnTick() 中这对外汇交易者来说并不重要。(来自上面消息的谨慎引用:“有 2 倍以上的 OnBook 事件。遗憾的是,并非所有事件都带有有效负载(如果您需要最佳出价/要价和最后一个)” . )更正的代码: //+------------------------------------------------------------------+ //| Ticks_test.mq5 | //| Copyright 2019 prostotrader | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2019 prostotrader" #property link "https://www.mql5.com" #property version "1.00" //--- bool is_book; MqlTick ticks[]; ulong last_time, mem_cnt, tot_cnt; bool is_first; int t_cnt, result; enum ENUM_BOOK_OR_TICK { USE_BOOK, // Use OnBookEvent USE_TICK // Use OnTick }; input ENUM_BOOK_OR_TICK Mode = USE_BOOK; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit () { tot_cnt = 0 ; if (Mode == USE_BOOK) is_book = MarketBookAdd ( Symbol ()); result = CopyTicks ( Symbol (), ticks, COPY_TICKS_ALL , 0 , 1 ); if (result > 0 ) { last_time = ulong (ticks[ 0 ].time_msc); //запоминаем время последнего известного тика is_first = true ; } else { is_first = false ; Alert ( "No start time!" ); return ( INIT_FAILED ); } ArraySetAsSeries (ticks, true ); return ( INIT_SUCCEEDED ); } //+------------------------------------------------------------------+ //| возвращает строковое описание тика | //+------------------------------------------------------------------+ string GetTickDescription( MqlTick &tick) { string res = string (tick.time) + "." + string (tick.time_msc% 1000 ); // bool buy_tick = ((tick.flags& TICK_FLAG_BUY )== TICK_FLAG_BUY ); bool sell_tick = ((tick.flags& TICK_FLAG_SELL )== TICK_FLAG_SELL ); bool ask_tick = ((tick.flags& TICK_FLAG_ASK )== TICK_FLAG_ASK ); bool bid_tick = ((tick.flags& TICK_FLAG_BID )== TICK_FLAG_BID ); bool last_tick = ((tick.flags& TICK_FLAG_LAST )== TICK_FLAG_LAST ); bool volume_tick = ((tick.flags& TICK_FLAG_VOLUME )== TICK_FLAG_VOLUME ); // if ((buy_tick== true ) || (sell_tick == true )) { res = res + (buy_tick? StringFormat ( " Buy Tick: Last=%G Volume=%d " ,tick.last,tick.volume): "" ); res = res + (sell_tick? StringFormat ( " Sell Tick: Last=%G Volume=%d " ,tick.last,tick.volume): "" ); res = res + (ask_tick? StringFormat ( " Ask=%G " ,tick.ask): "" ); res = res + (bid_tick? StringFormat ( " Bid=%G " ,tick.bid): "" ); } else { res = res + (ask_tick? StringFormat ( " Ask=%G " ,tick.ask): "" ); res = res + (bid_tick? StringFormat ( " Bid=%G " ,tick.bid): "" ); res = res + (last_tick? StringFormat ( " Last=%G " ,tick.last): "" ); res = res + (volume_tick? StringFormat ( " Volume=%d " ,tick.volume): "" ); } return res; } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit ( const int reason) { if (Mode == USE_BOOK) { Print ( "USE_BOOK ticks received: " , tot_cnt); if (is_book == true ) MarketBookRelease ( Symbol ()); } else { Print ( "USE_TICK ticks received: " , tot_cnt); } } //+------------------------------------------------------------------+ //| BookEvent function | //+------------------------------------------------------------------+ void OnBookEvent ( const string &symbol) { if ( Mode != USE_BOOK || symbol != Symbol () ) return ; tot_cnt++; if (is_first == true ) { result = CopyTicks ( Symbol (), ticks, COPY_TICKS_ALL , last_time, 0 ); //копируем все вновь пришедшие тики от последнего известного времени if (result > 0 ) { t_cnt = 0 ; for ( int i= 0 ; i<result; i++) { if (ticks[i].time_msc == ticks[ 0 ].time_msc) t_cnt++; //Считаем кол-во тиков с одинаковым временем Print ( __FUNCTION__ , ": " ,GetTickDescription(ticks[i])); } is_first = false ; last_time = ulong (ticks[ 0 ].time_msc); //Запоминаем время последнего тика } } else { result = CopyTicks ( Symbol (), ticks, COPY_TICKS_ALL , last_time, 0 ); //забираем тики из последнего (посчитанного пакета тикив и считываем тики из нового пакета) if (result > 0 ) { if (result > t_cnt) { mem_cnt = t_cnt; t_cnt = 0 ; for ( int i= 0 ; i<(result - int (mem_cnt)); i++) { if (ticks[i].time_msc == ticks[ 0 ].time_msc) t_cnt++; //Считаем кол-во тиков с одинаковым временем Print ( __FUNCTION__ , ": " ,GetTickDescription(ticks[i])); } if (last_time == ulong (ticks[ 0 ].time_msc)) { t_cnt += int (mem_cnt); } else last_time = ulong (ticks[ 0 ].time_msc); } else { Print ( __FUNCTION__ , ": Pending order!" ); //Изменения стакана (добавлен/удален отложенный ордер) } } else { Print ( __FUNCTION__ , ": Pending order!" ); //Изменения стакана (добавлен/удален отложенный ордер) } } } //+------------------------------------------------------------------+ //| OnTick function | //+------------------------------------------------------------------+ void OnTick () { if ( Mode != USE_TICK ) return ; tot_cnt++; if (is_first == true ) { result = CopyTicks ( Symbol (), ticks, COPY_TICKS_ALL , last_time, 0 ); //копируем все вновь пришедшие тики от последнего известного времени if (result > 0 ) { t_cnt = 0 ; for ( int i= 0 ; i<result; i++) { if (ticks[i].time_msc == ticks[ 0 ].time_msc) t_cnt++; //Считаем кол-во тиков с одинаковым временем Print ( __FUNCTION__ , ": " ,GetTickDescription(ticks[i])); } is_first = false ; last_time = ulong (ticks[ 0 ].time_msc); //Запоминаем время последнего тика } } else { result = CopyTicks ( Symbol (), ticks, COPY_TICKS_ALL , last_time, 0 ); //забираем тики из последнего (посчитанного пакета тикив и считываем тики из нового пакета) if (result > 0 ) { if (result > t_cnt) { mem_cnt = t_cnt; t_cnt = 0 ; for ( int i= 0 ; i<(result - int (mem_cnt)); i++) { if (ticks[i].time_msc == ticks[ 0 ].time_msc) t_cnt++; //Считаем кол-во тиков с одинаковым временем Print ( __FUNCTION__ , ": " ,GetTickDescription(ticks[i])); } if (last_time == ulong (ticks[ 0 ].time_msc)) { t_cnt += int (mem_cnt); } else last_time = ulong (ticks[ 0 ].time_msc); } else { Print ( __FUNCTION__ , ": Pending order!" ); //Изменения стакана (добавлен/удален отложенный ордер) } } else { Print ( __FUNCTION__ , ": Pending order!" ); //Изменения стакана (добавлен/удален отложенный ордер) } } } //+------------------------------------------------------------------+ Результат (фрагмент) 2020.01 . 31 23 : 35 : 24.092 Ticks_test (GOLD- 3.20 ,M1) OnTick : 2020.01 . 31 23 : 35 : 17.571 Bid= 1593.7 2020.01 . 31 23 : 35 : 24.093 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : 2020.01 . 31 23 : 35 : 17.571 Bid= 1593.7 2020.01 . 31 23 : 35 : 24.144 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 24.163 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 24.844 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 24.851 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 24.865 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 25.215 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 25.222 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 25.241 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 25.254 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 25.286 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 25.462 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 25.474 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 25.482 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 25.503 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 25.545 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 25.995 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 26.003 Ticks_test (GOLD- 3.20 ,M1) OnTick : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 2020.01 . 31 23 : 35 : 26.003 Ticks_test (GOLD- 3.20 ,M1) OnTick : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 2020.01 . 31 23 : 35 : 26.003 Ticks_test (GOLD- 3.20 ,M1) OnTick : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 2020.01 . 31 23 : 35 : 26.003 Ticks_test (GOLD- 3.20 ,M1) OnTick : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 2020.01 . 31 23 : 35 : 26.003 Ticks_test (GOLD- 3.20 ,M1) OnTick : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 2020.01 . 31 23 : 35 : 26.003 Ticks_test (GOLD- 3.20 ,M1) OnTick : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 2020.01 . 31 23 : 35 : 26.003 Ticks_test (GOLD- 3.20 ,M1) OnTick : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 2020.01 . 31 23 : 35 : 26.004 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 2020.01 . 31 23 : 35 : 26.004 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 2020.01 . 31 23 : 35 : 26.004 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 2020.01 . 31 23 : 35 : 26.004 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 2020.01 . 31 23 : 35 : 26.004 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 2020.01 . 31 23 : 35 : 26.004 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 2020.01 . 31 23 : 35 : 26.004 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : 2020.01 . 31 23 : 35 : 19.483 Buy Tick: Last= 1593.8 Volume= 1 2020.01 . 31 23 : 35 : 26.011 Ticks_test (GOLD- 3.20 ,M1) OnTick : 2020.01 . 31 23 : 35 : 19.484 Ask= 1593.9 Bid= 1593.8 2020.01 . 31 23 : 35 : 26.012 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : 2020.01 . 31 23 : 35 : 19.484 Ask= 1593.9 Bid= 1593.8 2020.01 . 31 23 : 35 : 26.061 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 26.075 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 26.142 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 26.155 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 26.162 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 26.191 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 26.213 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 27.293 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 27.345 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 27.936 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 27.943 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 28.166 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 28.172 Ticks_test (GOLD- 3.20 ,M1) OnTick : 2020.01 . 31 23 : 35 : 21.657 Ask= 1594.1 Bid= 1593.9 2020.01 . 31 23 : 35 : 28.172 Ticks_test (GOLD- 3.20 ,M1) OnTick : 2020.01 . 31 23 : 35 : 21.650 Buy Tick: Last= 1593.9 Volume= 1 2020.01 . 31 23 : 35 : 28.172 Ticks_test (GOLD- 3.20 ,M1) OnTick : 2020.01 . 31 23 : 35 : 21.650 Buy Tick: Last= 1593.9 Volume= 1 2020.01 . 31 23 : 35 : 28.172 Ticks_test (GOLD- 3.20 ,M1) OnTick : 2020.01 . 31 23 : 35 : 21.650 Buy Tick: Last= 1593.9 Volume= 1 2020.01 . 31 23 : 35 : 28.172 Ticks_test (GOLD- 3.20 ,M1) OnTick : 2020.01 . 31 23 : 35 : 21.650 Buy Tick: Last= 1593.9 Volume= 1 2020.01 . 31 23 : 35 : 28.172 Ticks_test (GOLD- 3.20 ,M1) OnTick : 2020.01 . 31 23 : 35 : 21.650 Buy Tick: Last= 1593.9 Volume= 1 2020.01 . 31 23 : 35 : 28.173 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : 2020.01 . 31 23 : 35 : 21.657 Ask= 1594.1 Bid= 1593.9 2020.01 . 31 23 : 35 : 28.173 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : 2020.01 . 31 23 : 35 : 21.650 Buy Tick: Last= 1593.9 Volume= 1 2020.01 . 31 23 : 35 : 28.173 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : 2020.01 . 31 23 : 35 : 21.650 Buy Tick: Last= 1593.9 Volume= 1 2020.01 . 31 23 : 35 : 28.173 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : 2020.01 . 31 23 : 35 : 21.650 Buy Tick: Last= 1593.9 Volume= 1 2020.01 . 31 23 : 35 : 28.173 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : 2020.01 . 31 23 : 35 : 21.650 Buy Tick: Last= 1593.9 Volume= 1 2020.01 . 31 23 : 35 : 28.173 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : 2020.01 . 31 23 : 35 : 21.650 Buy Tick: Last= 1593.9 Volume= 1 2020.01 . 31 23 : 35 : 28.191 Ticks_test (GOLD- 3.20 ,M1) OnTick : 2020.01 . 31 23 : 35 : 21.661 Ask= 1594 2020.01 . 31 23 : 35 : 28.192 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : 2020.01 . 31 23 : 35 : 21.661 Ask= 1594 2020.01 . 31 23 : 35 : 28.255 Ticks_test (GOLD- 3.20 ,M1) OnBookEvent : Pending order! 2020.01 . 31 23 : 35 : 29.516 Ticks_test (GOLD- 3.20 ,M1) USE_BOOK ticks received: 153 2020.01 . 31 23 : 35 : 29.892 Ticks_test (GOLD- 3.20 ,M1) OnTick : 2020.01 . 31 23 : 35 : 23.367 Ask= 1594.1 2020.01 . 31 23 : 35 : 31.660 Ticks_test (GOLD- 3.20 ,M1) USE_TICK ticks received: 27 Sergey Chalyshev 2020.01.31 21:24 #119 prostotrader: 没有谢尔盖! 我不得不承认,OnBookEvent()和OnTick()所有的刻度都是重合的(我在代码中出现了一个错误)。 但玻璃中的其他变化并没有反映在OnTick()中。 对于外汇交易者来说,这并不重要。(谨慎地引用上面的帖子:"2倍的OnTick事件。太糟糕了,不是所有的人都带着有用的负荷(如果你需要最佳出价/报价和炒股)"。) 纠正了代码。 结果(片段)。 历史上的刻度当然会匹配,但在上图中,事实证明并非所有的信息刻度都能进入历史,或者在OnCalculat中被跳过。 我不知道是否有错误,我将在星期一尝试修复它。 Roman 2020.02.01 13:00 #120 prostotrader: 或者也许是实时的,而不是 MqlTick ticks[]; result = CopyTicks(Symbol(), ticks, COPY_TICKS_ALL, 0, 1); 使用 MqlTick ticks[1]; bool success = SymbolInfoTick(_Symbol, ticks); //Возвращает текущие цены. 如果你能立即得到当前的价格,为什么还要复制? 理论上说,CopyTicks在其内部有额外的参数检查,从而增加了函数体中的代码长度。 但是SymbolInfoTick没有额外的参数,理论上来说,这个函数的实现应该包含更少的代码。 更少的代码意味着更快的执行。 唯一不好的是,SymbolInfoTick函数没有类似于CopyTicks的详细文档,它的工作原理并不完全清楚。 它是否进行了缓存,或者是否立即返回了原始数据。 1...5678910111213141516171819...26 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我想提醒你,OnTick接收两个独立的线程,信息和交易,COPY_TICKS_INFO和COPY_TICKS_ALL 并进行预处理 。
这些线程之间并不同步,所以如果你将OnBookEvent与 OnTick进行比较,你应该采取TICKS_INFO。
根据定义,OnBookEvent应该更快,因为它不需要经过预处理。
这些测试不能可靠地确定谁更快,因为我们不知道蜱虫的存活时间,与蜱虫不同。
虽然,我们曾多次要求开发商增加库存时间!!
p.s. 除了速度,tumblr也比OnTick有优势。
如前所述,在OnTick 中不可能获得更好的买入和卖出价格。
而OnTick 没有其他符号的数据,对于分析几个符号的专家顾问来说,它是没有用 的。
将COPY_TICKS_ALL 改为COPY_TICKS_INFO
结果
标记为黄色--同样的打勾!
毕竟代码中可能有不准确的地方......?有那么一瞬间,你似乎有意愿把事情弄清楚,这将有助于缓和你的自尊心。
不,它只是看起来是这样的。
一般来说,问题已经解决了,任何人都可以观看你和fxsaber以及我的代码,并得出结论。
和你在一起,我停止了对话,除了你的大声喊叫,什么都没有,在接受信息的时候,你的大脑根本不工作。
祝FORTS好运。
我想提醒你,OnTick接收两个独立的线程,信息和交易,COPY_TICKS_INFO和COPY_TICKS_ALL 并进行预处理 。
这些线程之间并不同步,所以如果你将OnBookEvent与 OnTick进行比较,你应该采取TICKS_INFO。
Sergei,我们使用On-functions只是作为一个切入点。
问题是哪个入口点会先出现(同时给出关于最后一个勾的同样正确的信息)。
运行我的EA,并看看日志。事件的时间(精确到毫秒)和最后一个已知刻度的时间(也是毫秒)会在日志中输出。
只要分析一下 "谁是最早的 "几个单独的点就可以了。
根据定义,OnBookEvent应该更快,因为它不需要经过预处理。
我不认为OnTick会这样做。而且测试证实了这一点,没有任何延迟。
正如已经说过的,在OnTick中不可能获得更好的买入和卖出价格。
可能是用CopyTicks。
运行我的EA,并看看日志。 事件的时间(精确到毫秒)和最后一个已知刻度的时间(也是毫秒)被输出到日志。
只需分析几个单独的刻度,看看 "谁先来"。
一个常见的情况是,OnBook与OnTick同时出现,或者晚1-2ms。但也有滞后的情况。
在5个小时的时间里。
两倍于OnBook活动的数量。可惜不是所有的人都带着有用的负荷(如果需要最佳出价/报价和翻牌)。
Sergey,我们只是把On-functions作为一个入口点。
问题是哪个入口点会先出现(同时给出关于最后一个勾的同样正确的信息)。
运行我的EA,并看看日志。 事件的时间(精确到毫秒)和最后一个已知刻度的时间(也是毫秒)会在日志中输出。
只要分析一下 "谁是最早的 "几个单独的点就可以了。
这是你做错了。也许tumblr事件已经到来,但还没有进入tick历史。你应该比较买入价和卖出价,而不是挖空心思去研究历史。
我认为OnTick没有通过。而且测试证实了这一点,没有任何延误。
在进入历史记录之前,蜱虫必然会被处理,也会被分配到所有必要的图表、指标和专家顾问。而这一切在MT5中是按顺序进行的(不是并联)。
也许在CopyTicks的帮助下。
Просто проанализируйте несколько отдельных тиков на предмет "кто раньше".
我有不同的做事方法。
蓝线是OnBook。
红色的是OnCalculat = OnTick。
如果你有兴趣,我可以给你看代码
我的理解不同:
蓝线是OnBook ,
红色OnTick 。
如果有兴趣,我可以显示指标代码
没有塞雷扎!
必须承认OnBookEvent() 和 OnTick() 所有刻度都是相同的(我在代码中有一个错误),
但其他 DOM 更改不会以任何方式反映在 OnTick() 中
这对外汇交易者来说并不重要。(来自上面消息的谨慎引用:“有 2 倍以上的 OnBook 事件。遗憾的是,并非所有事件都带有有效负载(如果您需要最佳出价/要价和最后一个)” . )
更正的代码:
Результат (фрагмент)
没有谢尔盖!
我不得不承认,OnBookEvent()和OnTick()所有的刻度都是重合的(我在代码中出现了一个错误)。
但玻璃中的其他变化并没有反映在OnTick()中。
对于外汇交易者来说,这并不重要。(谨慎地引用上面的帖子:"2倍的OnTick事件。太糟糕了,不是所有的人都带着有用的负荷(如果你需要最佳出价/报价和炒股)"。)
纠正了代码。
结果(片段)。
历史上的刻度当然会匹配,但在上图中,事实证明并非所有的信息刻度都能进入历史,或者在OnCalculat中被跳过。
我不知道是否有错误,我将在星期一尝试修复它。
或者也许是实时的,而不是
使用
如果你能立即得到当前的价格,为什么还要复制?
理论上说,CopyTicks在其内部有额外的参数检查,从而增加了函数体中的代码长度。
但是SymbolInfoTick没有额外的参数,理论上来说,这个函数的实现应该包含更少的代码。
更少的代码意味着更快的执行。
唯一不好的是,SymbolInfoTick函数没有类似于CopyTicks的详细文档,它的工作原理并不完全清楚。
它是否进行了缓存,或者是否立即返回了原始数据。