リアルタイムで見るTiki - ページ 12 1...5678910111213141516171819...26 新しいコメント prostotrader 2020.01.31 16:49 #111 Sergey Chalyshev: OnTickは、情報と取引という2つの独立したスレッド、COPY_TICKS_INFOとCOPY_TICKS_ALLを 受け取り、前処理を 受けることを思い出して頂きたいと思います。 これらのスレッドは互いに同期していないので、OnBookEventと OnTickを比較した場合、TICKS_INFOを 取る必要があります。 定義によれば、OnBookEventは 前処理を経ないため、より高速であるべき です。 このテストでは、ティックのストック時間が分からないため、どちらが速いかを確実に判断することはできません。 しかし、私たちは何度も開発者に「ADD STOCK TIME!!! p.s. 速度以外にも、tumblrはOnTickより優れています。 既に述べたように、OnTickでは BidとAskの価格をより良くすることはできません。 であり、OnTickは 他のシンボルからのデータを持たないため、複数のシンボルを分析するExpert Advisorでは役に立ちません。 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は、情報と取引という2つの独立したスレッド、COPY_TICKS_INFOとCOPY_TICKS_ALLを 受け取り、前処理を 受けることを思い出して頂きたいと思います。 これらのスレッドは互いに同期していないので、OnBookEventと OnTickを比較した場合、TICKS_INFOを 取る必要があります。 セルゲイ On-functionは、単に入り口として使っているだけです。 問題は、どちらのエントリーポイントが先に来るか(最後のティックについては同じように正しい情報を与えながら)であった。 私のEAを 実行し、ログを見てください。イベントの発生時刻(ms単位で正確)と最後に判明したtickの時刻(同じくms単位)がログに出力されます。 ただ、「誰が一番早いか」については、個々のティックをいくつか分析します。 セルゲイ・チャリシェフ OnBookEventは 前処理を経ないため、定義上、より高速であるべき です。 OnTickはそうではないと思います。そして、検査で確認することで、遅れはないのです。 セルゲイ・チャリシェフ すでに言われているように、OnTickではBidとAskの価格をより良くすることは不可能です。 CopyTicksを使った可能性。 Тики в реальном времени 2020.01.31www.mql5.com Всем доброго времени суток. Появилась необходимость протестировать торговый алгоритм на реальных тиках брокера "Открытие... Andrey Khatimlianskii 2020.01.31 18:45 #114 Andrey Khatimlianskii: 私のEAを 実行し、ログを見てください。 イベントの発生時刻(ms単位で正確)と最後に判明したティックの時刻(同じくms単位で正確)をログに出力します。 ただ、「誰が一番早いか」については、個々のティックをいくつか分析します。 よくあるのは、OnTickと同時にOnBookが来るか、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のイベント数は2倍。ベストビッド/アスクとフリッパーが必要な場合)すべてが有用なロードを運ぶわけではないのが残念です。 Sergey Chalyshev 2020.01.31 20:15 #116 Andrey Khatimlianskii: Sergey On関数は、単にエントリーポイントとして使っているだけです。 問題は、どちらのエントリーポイントが先に来るか(最後のティックについては同じように正しい情報を与えながら) であった。 私のEAを 実行し、ログを見てください。 イベントの発生時刻(ms単位で正確)と最後に判明したtickの時刻(同じくms単位)がログに出力されます。 ただ、「誰が一番早いか」については、個々のティックをいくつか分析します。 これは、あなたのやり方が間違っているのです。おそらく、tumblrのイベントは到着したものの、まだティック履歴に残っていないのでしょう。ティック履歴を掘り下げるのではなく、Bid Askの価格を比較すべきなのです。 OnTickは通らないと思います。そして、検査で確認すると、遅れはない。 履歴に入る前に、ティックは必ず処理され、また、すべての必要なチャート、指標、Expert Advisorに配信されます。そして、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()にはまったく反映されません。これは外国為替トレーダーにとって重要ではありません(上記のメッセージからの慎重な引用:「 OnBookイベントは2倍あります。すべてがペイロードを運ぶわけではないのは残念です(最高のビッド/アスクとラストが必要な場合)」 。 )修正されたコード: //+------------------------------------------------------------------+ //| 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()に反映 されません。 FOREXをやっている人には関係ない話ですが。ベストビッド/アスクとフリッパーが必要な場合)有用なロードを持つものばかりでないのが残念」。) コードを修正しました。 結果(スニペット)。 もちろん履歴のチックは一致しますが、上の図では、すべての情報チックが履歴に残らないか、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千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
OnTickは、情報と取引という2つの独立したスレッド、COPY_TICKS_INFOとCOPY_TICKS_ALLを 受け取り、前処理を 受けることを思い出して頂きたいと思います。
これらのスレッドは互いに同期していないので、OnBookEventと OnTickを比較した場合、TICKS_INFOを 取る必要があります。
定義によれば、OnBookEventは 前処理を経ないため、より高速であるべき です。
このテストでは、ティックのストック時間が分からないため、どちらが速いかを確実に判断することはできません。
しかし、私たちは何度も開発者に「ADD STOCK TIME!!!
p.s. 速度以外にも、tumblrはOnTickより優れています。
既に述べたように、OnTickでは BidとAskの価格をより良くすることはできません。
であり、OnTickは 他のシンボルからのデータを持たないため、複数のシンボルを分析するExpert Advisorでは役に立ちません。
COPY_TICKS_ALL をCOPY_TICKS_INFO に変更しました。
結果
黄色いマークは、同じダニです。
やはりコードに不正確な部分があるのでしょうか...?一瞬、物事を整理したいという気持ちがあるように見えたし、プライドを抑えることにもなる。
いや、そう思えただけです。
一般的には、疑問は解決し、誰でもあなたやfxsaberさんや私のコードを見て、結論を出すことができるのです。
あなたと一緒にいると、対話が止まり、あなたの大声以外何も出てこなくなり、情報を受け取ったあなたの脳は全く働かなくなるのです。
FORTSで頑張ってください。
OnTickは、情報と取引という2つの独立したスレッド、COPY_TICKS_INFOとCOPY_TICKS_ALLを 受け取り、前処理を 受けることを思い出して頂きたいと思います。
これらのスレッドは互いに同期していないので、OnBookEventと OnTickを比較した場合、TICKS_INFOを 取る必要があります。
セルゲイ On-functionは、単に入り口として使っているだけです。
問題は、どちらのエントリーポイントが先に来るか(最後のティックについては同じように正しい情報を与えながら)であった。
私のEAを 実行し、ログを見てください。イベントの発生時刻(ms単位で正確)と最後に判明したtickの時刻(同じくms単位)がログに出力されます。
ただ、「誰が一番早いか」については、個々のティックをいくつか分析します。
OnBookEventは 前処理を経ないため、定義上、より高速であるべき です。
OnTickはそうではないと思います。そして、検査で確認することで、遅れはないのです。
すでに言われているように、OnTickではBidとAskの価格をより良くすることは不可能です。
CopyTicksを使った可能性。
私のEAを 実行し、ログを見てください。 イベントの発生時刻(ms単位で正確)と最後に判明したティックの時刻(同じくms単位で正確)をログに出力します。
ただ、「誰が一番早いか」については、個々のティックをいくつか分析します。
よくあるのは、OnTickと同時にOnBookが来るか、1-2ms後に来る場合です。しかし、ラグもあります。
5時間後
OnBookのイベント数は2倍。ベストビッド/アスクとフリッパーが必要な場合)すべてが有用なロードを運ぶわけではないのが残念です。
Sergey On関数は、単にエントリーポイントとして使っているだけです。
問題は、どちらのエントリーポイントが先に来るか(最後のティックについては同じように正しい情報を与えながら) であった。
私のEAを 実行し、ログを見てください。 イベントの発生時刻(ms単位で正確)と最後に判明したtickの時刻(同じくms単位)がログに出力されます。
ただ、「誰が一番早いか」については、個々のティックをいくつか分析します。
これは、あなたのやり方が間違っているのです。おそらく、tumblrのイベントは到着したものの、まだティック履歴に残っていないのでしょう。ティック履歴を掘り下げるのではなく、Bid Askの価格を比較すべきなのです。
OnTickは通らないと思います。そして、検査で確認すると、遅れはない。
履歴に入る前に、ティックは必ず処理され、また、すべての必要なチャート、指標、Expert Advisorに配信されます。そして、MT5ではすべてシーケンシャルに行われます(パラレルではありません)。
おそらく、CopyTicksの力を借りて。
Просто проанализируйте несколько отдельных тиков на предмет "кто раньше".
やり方が違うんです。
青線はOnBook。
赤いのがOnCalculat = OnTick です。
もしご興味があれば、コードをお見せします。
私はそれを別の方法で取得します:
青い線はOnBook 、
赤いOnTick 。
興味があれば、インジケーターコードを表示できます
セレザじゃない!
OnBookEvent()とOnTick()のすべてのティックが同じであることを認める必要があります(コードにバグがありました)。
ただし、他のDOMの変更はOnTick()にはまったく反映されません。
これは外国為替トレーダーにとって重要ではありません(上記のメッセージからの慎重な引用:「 OnBookイベントは2倍あります。すべてがペイロードを運ぶわけではないのは残念です(最高のビッド/アスクとラストが必要な場合)」 。 )
修正されたコード:
Результат (фрагмент)
セリョーシがいない!?
OnBookEvent()とOnTick()の全てのティックが一致している(コードに間違いがあった)ことを認めざるを 得ない。
が、それ以外のガラスの変化はOnTick()に反映 されません。
FOREXをやっている人には関係ない話ですが。ベストビッド/アスクとフリッパーが必要な場合)有用なロードを持つものばかりでないのが残念」。)
コードを修正しました。
結果(スニペット)。
もちろん履歴のチックは一致しますが、上の図では、すべての情報チックが履歴に残らないか、OnCalculatでスキップされることが判明しました。
エラーがあるかどうかはわかりませんので、月曜日に直してみます。
の代わりに、リアルタイム用とか。
使い道
現在の価格を すぐに知ることができるのに、なぜコピーするのか?
理論的には、CopyTicksはその根底に余分なパラメータチェックを持ち、その結果、関数本体のコードの長さが長くなっています。
しかし、SymbolInfoTickには追加のパラメータがなく、理論的には、この関数の実装はより少ないコードで済むはずです。
コードが少なければ、実行速度も速くなります。
唯一の悪い点は、SymbolInfoTick関数にはCopyTicksのような詳細なドキュメントがなく、どのように動作するのか完全に明確でないことです。
キャッシュしているのか、生データをすぐに返しているのか。