MT5와 속도 - 페이지 65

 
fxsaber :
컴퓨터에 있었다, 어떤 계산도 하지 않았다. CPU를 로드한 것이 없습니다.

SymbolInfoTick 실행에는 19ms와 48ms가 소요되었습니다. 지속 시간이 수백 마이크로초인 수십 가지 경우. 그러나 그는 그것들을 가져오지 않았습니다.


분명히 재생하려면 하루 동안 전투 고문을 실행 한 다음 시청해야합니다. 제 생각에는 그러한 지연의 개시자가 무엇인지 파악하는 것은 비현실적입니다.

때때로 컴퓨터는 업데이트를 다운로드하거나 일부 서비스 작업을 수행할 수 있습니다. 또 다른 전압 강하는 영향을 미칠 수 있습니다. 이 방법을 사용하면 하드웨어 수준에서 봇의 모든 논리가 연결된 프로그래밍 가능한 네트워크 카드에 도달할 수 있지만 양자 필드 변동과 관련된 지연도 발생합니다.
 
Maxim Dmitrievsky :
때때로 컴퓨터는 업데이트를 다운로드하거나 일부 서비스 작업을 수행할 수 있습니다. 또 다른 전압 강하는 영향을 미칠 수 있습니다. 이렇게 하면 하드웨어 수준에서 봇의 모든 논리가 연결된 프로그래밍 가능한 네트워크 카드에 도달할 수 있지만 양자 필드 변동과 관련된 지연도 발생합니다.

개발자들은 그들이 할 수 있는 모든 것을 했습니다. 그리고 이것이 없으면 스레드는 주문서가 Market Watch보다 뒤쳐지는 방식과 그 반대의 경우를 보여주는 코드를 제공합니다. 일련의 진드기가 어떻게 깨지고 아마도 다른 것입니다. 일반적으로 다른 상황을 재현하기 위해 불쾌한 유효한 코드가 배치됩니다.

 
Anton :

SymbolInfoTick은 브로커의 서버에서 받은 데이터를 반환합니다. 서버가 보낸 것은 당신이 얻는 것입니다.

말하다,   SymbolInfoTick() 함수   차단 모드 또는 비차단 모드로 실행 중입니까?

예를 들어, while 루프의 본문에 있고 연결이 끊어지거나 주말 동안 시장이 닫힙니다.
그러면 차단되어 주기가 중지됩니까? 아니면 비동기식으로 실행됩니까?

 
fxsaber :

주문서가 Market Watch보다 뒤처지는 방식과 그 반대의 경우.

즉, SymbolInfoTick 은 새 틱을 포착하고 주문서를 폴링하여(주문서 변경 이벤트를 기다리지 않고) 또 다른 Ask 및 Bid ? 약 1년 전만 해도 이것은 불가능했습니다. SymbolInfoTick 및 CopyTick 및 Depth of Market 폴링은 항상 동일한 틱으로 나타났습니다. 모든 종류의 OnXXX 기능을 통해 틱을 받으면 물론 일부 기능을 통해, 다른 기능을 통해 뭔가를 얻을 것입니다...

 
pivomoe :

즉, SymbolInfoTick은 새 틱을 포착하고 주문서를 폴링하여(주문서 변경 이벤트를 기다리지 않고) 또 다른 Ask 및 Bid ?

여기.

 
fxsaber :

여기.

내가 생각한대로 MarketBookGet 및 SymbolInfoTick이 아닌 OnBookEvent 및 OnTick을 테스트하고 있습니다. 이 계획에 따라 테스트하는 경우 모든 것이 동일합니다.

While( 1 )
{
 Sleep ( 1 )
 Запрос тика через SymbolInfoTick
 Запрос тика через стакан MarketBookGet
 Проверка на совпадение. 
}

ps. 아래 글을 읽어보세요. 나는 당신을보고 당신은 그것을 이해합니다. 왜 OnBookEvent와 OnTick이 필요합니까? 내 예에서 Sleep(1)은 1-2밀리초가 걸립니다. SymbloInfoTick을 사용한 요청 및 틱은 마이크로초 미만입니다. 틱이 없으면 프로세서는 이미 99.9%의 시간을 쉬고 있는 것입니다. OnBookEvent 및 OnTick을 사용하면 어떤 이점이 있습니까?

 
pivomoe :

내가 생각한대로 MarketBookGet 및 SymbolInfoTick이 아닌 OnBookEvent 및 OnTick을 테스트하고 있습니다. 이 계획에 따라 테스트하는 경우 모든 것이 동일합니다.

ps. 아래 글을 읽어보세요. 나는 당신을보고 당신은 그것을 이해합니다. 왜 OnBookEvent와 OnTick이 필요합니까? 내 예에서 Sleep(1)은 1-2밀리초가 걸립니다. SymbloInfoTick을 사용한 요청 및 틱은 마이크로초 미만입니다. 틱이 없으면 프로세서는 이미 99.9%의 시간을 쉬고 있는 것입니다. OnBookEvent 및 OnTick을 사용하면 어떤 이점이 있습니까?

외교의 힌트도 없이 당신은 헛소리를 하고 있습니다. Sleep(1)은 10밀리초입니다. 나는 오직 하나의 이론화를 본다.

OnTick의 사용자는 얼마 전에 터미널에 온 것이 아닌 새로운 틱을 보고 싶어합니다. MarketBookGet 직후에 SymbolInfoTick 을 소스 코드로 푸시할 수 있습니다.


개발자들은 침묵으로 두 가지 문제가 있음을 완전히 인정했습니다.

 
fxsaber :

외교의 힌트도 없이 당신은 헛소리를 하고 있습니다. Sleep(1)은 10밀리초입니다. 나는 오직 하나의 이론화를 본다.

OnTick의 사용자는 얼마 전에 터미널에 온 것이 아닌 새로운 틱을 보고 싶어합니다. MarketBookGet 직후에 SymbolInfoTick을 소스 코드로 푸시할 수 있습니다.


개발자들은 침묵으로 두 가지 문제가 있음을 완전히 인정했습니다.

항상 그런 것도 아니고 모든 곳에서 10밀리초도 아닙니다. 간단한 스크립트로 확인

 //+------------------------------------------------------------------+
//|                                                    TestSleep.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"

#define ITERATIONS 10000
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   ulong t1= GetMicrosecondCount ();
   for ( int i= 0 ; i<ITERATIONS; i++)
     {
       Sleep ( 1 );
     }
   ulong t2= GetMicrosecondCount ()-t1;
   PrintFormat ( "total %I64u microseconds (%.3f ms per iteration)" ,t2, double (t2)/(ITERATIONS* 1000.0 ));
  }
//+------------------------------------------------------------------+

여기 내 로그가 있습니다

 2020.11 . 04 13 : 14 : 31.590 TestSleep (EURUSD,H1)   total 17058138 microseconds ( 1.706 ms per iteration)

OnTick 사용자는 항상 최신 틱을 봅니다.

OnBookEvent 사용자는 항상 최신 틱을 봅니다.

그러나 OnTick에서 수신된 틱과 OnBookEvent에서 수신된 틱을 비교하려는 경우 이벤트 처리가 병렬이 아닌 순차적으로 수행되기 때문에 실망할 수 있습니다. 사용자 pivomo가 당신에게 말하려고 한 것

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 
Slava :

항상 그런 것도 아니고 모든 곳에서 10밀리초도 아닙니다. 간단한 스크립트로 확인

여기 내 로그가 있습니다

자, 여기 내 로그가 있습니다.

 #include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279

void OnStart ()
{
   for ( int i = 0 ; i < 5 ; i++)
    _BV( Sleep ( 1 ), 1 );
}

결과.

 2020.11 . 04 15 : 19 : 32.565 Alert : Bench_Stack = 0 , 1 <= Time[Test9.mq5 93 in OnStart : Sleep ( 1 )] = 5326 mcs.
2020.11 . 04 15 : 19 : 32.580 Alert : Bench_Stack = 0 , 1 <= Time[Test9.mq5 93 in OnStart : Sleep ( 1 )] = 14928 mcs.
2020.11 . 04 15 : 19 : 32.596 Alert : Bench_Stack = 0 , 1 <= Time[Test9.mq5 93 in OnStart : Sleep ( 1 )] = 15930 mcs.
2020.11 . 04 15 : 19 : 32.611 Alert : Bench_Stack = 0 , 1 <= Time[Test9.mq5 93 in OnStart : Sleep ( 1 )] = 14910 mcs.
2020.11 . 04 15 : 19 : 32.627 Alert : Bench_Stack = 0 , 1 <= Time[Test9.mq5 93 in OnStart : Sleep ( 1 )] = 15941 mcs.

OnTick 사용자는 항상 최신 틱을 봅니다.

OnBookEvent 사용자는 항상 최신 틱을 봅니다.

아무것도 사용하지 않는 시스템에서 단일 차트에서 Expert Advisor 를 실행한 결과입니다.

 2020.11 . 04 15 : 31 : 19.151 Test9 (EURUSD,H1)       Alert : OnBook-lag! - 6564 mcs.
2020.11 . 04 15 : 31 : 19.151 Test9 (EURUSD,H1)             [bid]   [ask] [onTick] [Interval]
2020.11 . 04 15 : 31 : 19.151 Test9 (EURUSD,H1)       [ 0 ] 1.17192 1.17192      true      108150
2020.11 . 04 15 : 31 : 19.151 Test9 (EURUSD,H1)       [ 1 ] 1.17192 1.17192      false          30
2020.11 . 04 15 : 31 : 19.151 Test9 (EURUSD,H1)       [ 2 ] 1.17189 1.17191      true        88210
2020.11 . 04 15 : 31 : 19.151 Test9 (EURUSD,H1)       [ 3 ] 1.17189 1.17191      false        6564
2020.11 . 04 15 : 31 : 30.260 Test9 (EURUSD,H1)       Alert : OnBook-lag! - 3888 mcs.
2020.11 . 04 15 : 31 : 30.260 Test9 (EURUSD,H1)             [bid]   [ask] [onTick] [Interval]
2020.11 . 04 15 : 31 : 30.260 Test9 (EURUSD,H1)       [ 0 ] 1.17192 1.17192      false      117471
2020.11 . 04 15 : 31 : 30.260 Test9 (EURUSD,H1)       [ 1 ] 1.17192 1.17192      true          11
2020.11 . 04 15 : 31 : 30.260 Test9 (EURUSD,H1)       [ 2 ] 1.17192 1.17193      true      882710
2020.11 . 04 15 : 31 : 30.260 Test9 (EURUSD,H1)       [ 3 ] 1.17192 1.17193      false        3888
2020.11 . 04 15 : 31 : 31.519 Test9 (EURUSD,H1)       Alert : OnTick -lag! - 4653 mcs.
2020.11 . 04 15 : 31 : 31.519 Test9 (EURUSD,H1)             [bid]   [ask] [onTick] [Interval]
2020.11 . 04 15 : 31 : 31.519 Test9 (EURUSD,H1)       [ 0 ] 1.17195 1.17195      true        86660
2020.11 . 04 15 : 31 : 31.519 Test9 (EURUSD,H1)       [ 1 ] 1.17195 1.17195      false          11
2020.11 . 04 15 : 31 : 31.519 Test9 (EURUSD,H1)       [ 2 ] 1.17194 1.17194      false      220122
2020.11 . 04 15 : 31 : 31.519 Test9 (EURUSD,H1)       [ 3 ] 1.17194 1.17194      true        4653

적절한 방법으로 다른 On-function에서 얻은 동일한 눈금을 표시했습니다. 예를 들어 하나의 차트가 아니라 6개의 차트에서 실행하면 지연 시간이 수십 밀리초에 이를 수 있습니다.

그러나 OnTick에서 수신된 틱과 OnBookEvent에서 수신된 틱을 비교하려는 경우 이벤트 처리가 병렬이 아닌 순차적으로 수행되기 때문에 실망할 수 있습니다. 사용자 pivomo가 당신에게 말하려고 한 것

거의 비어 있는 OnBookEvent/OnTick이 거의 비어 있는 해당 OnTick/OnBookEvent보다 20밀리초 늦게 발생하면 정상입니까?


위협 지점에 주의를 기울 이면 재생산 코드가 하나 더 있습니다 . 거기에서 진드기는 이전의 Market Watch 시간보다 빠른 시간으로 Market Watch에 도착합니다.

 
fxsaber :

거의 비어 있는 OnBookEvent/OnTick이 거의 비어 있는 해당 OnTick/OnBookEvent보다 20밀리초 늦게 발생하면 정상입니까?


전문가의 대기열은 차단 가능한 리소스입니다. 이벤트가 대기열에 기록되면 EA는 기다립니다(물론 EA가 현재 이벤트를 처리하고 있지 않는 한).

Expert Advisor에 대한 이벤트는 해당 차트의 이벤트 대기열에서 가져오고, 차례로 해당 심볼의 처리 주기에서 발생합니다. 그리고 이 처리 루프는 이벤트를 차트에 배포할 뿐만 아니라 다양한 작업을 수행합니다.

나는 이미 Windows가 실시간 운영 체제가 아니라고 말했습니다.

사유: