MT5와 속도 - 페이지 59

 
Anton :

당신은 그것을 어떻게합니까?

6/8 에이전트가 실행 중일 때 브레이크를 재현했습니다.

 2020.10 . 20 11 : 00 : 33.069 Test9 (GBPUSD,H1)       Alert : Bench_Stack = 0 , 100 <= Time[Test9.mq5 7 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 101 mcs.
2020.10 . 20 11 : 00 : 34.292 Test9 (NZDCAD,H1)       Alert : Bench_Stack = 0 , 100 <= Time[Test9.mq5 7 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 5848 mcs.
2020.10 . 20 11 : 00 : 34.486 Test9 (GBPCHF,H1)       Alert : Bench_Stack = 0 , 100 <= Time[Test9.mq5 7 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 6359 mcs.
2020.10 . 20 11 : 00 : 43.717 Test9 (AUDCHF,H1)       Alert : Bench_Stack = 0 , 100 <= Time[Test9.mq5 7 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 114 mcs.
2020.10 . 20 11 : 00 : 44.222 Test9 (EURJPY,H1)       Alert : Bench_Stack = 0 , 100 <= Time[Test9.mq5 7 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 661 mcs.
2020.10 . 20 11 : 00 : 55.232 Test9 (AUDUSD,H1)       Alert : Bench_Stack = 0 , 100 <= Time[Test9.mq5 7 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 828 mcs.
2020.10 . 20 11 : 00 : 57.579 Test9 (NZDCAD,H1)       Alert : Bench_Stack = 0 , 100 <= Time[Test9.mq5 7 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 151 mcs.
2020.10 . 20 11 : 01 : 07.398 Test9 (NZDCHF,H1)       Alert : Bench_Stack = 0 , 100 <= Time[Test9.mq5 7 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 435 mcs.
2020.10 . 20 11 : 01 : 20.046 Test9 (GBPCHF,H1)       Alert : Bench_Stack = 0 , 100 <= Time[Test9.mq5 7 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 108 mcs.
2020.10 . 20 11 : 01 : 37.749 Test9 (AUDJPY,H1)       Alert : Bench_Stack = 0 , 100 <= Time[Test9.mq5 7 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 159 mcs.
2020.10 . 20 11 : 01 : 37.751 Test9 (AUDCAD,H1)       Alert : Bench_Stack = 0 , 100 <= Time[Test9.mq5 7 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 865 mcs.
2020.10 . 20 11 : 01 : 40.787 Test9 (EURCHF,H1)       Alert : Bench_Stack = 0 , 100 <= Time[Test9.mq5 7 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 197 mcs.
2020.10 . 20 11 : 01 : 42.615 Test9 (GBPCHF,H1)       Alert : Bench_Stack = 0 , 100 <= Time[Test9.mq5 7 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 207 mcs.
2020.10 . 20 11 : 01 : 46.362 Test9 (AUDCAD,H1)       Alert : Bench_Stack = 0 , 100 <= Time[Test9.mq5 7 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 278 mcs.
2020.10 . 20 11 : 01 : 54.377 Test9 (AUDUSD,H1)       Alert : Bench_Stack = 0 , 100 <= Time[Test9.mq5 7 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 165 mcs.
2020.10 . 20 11 : 01 : 55.789 Test9 (GBPCAD,H1)       Alert : Bench_Stack = 0 , 100 <= Time[Test9.mq5 7 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 228 mcs.
2020.10 . 20 11 : 02 : 04.892 Test9 (USDCAD,H1)       Alert : Bench_Stack = 0 , 100 <= Time[Test9.mq5 7 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 357 mcs.
2020.10 . 20 11 : 02 : 10.776 Test9 (GBPCHF,H1)       Alert : Bench_Stack = 0 , 100 <= Time[Test9.mq5 7 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 173 mcs.
2020.10 . 20 11 : 02 : 13.468 Test9 (CADCHF,H1)       Alert : Bench_Stack = 0 , 100 <= Time[Test9.mq5 7 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 161 mcs.
2020.10 . 20 11 : 02 : 26.274 Test9 (NZDCAD,H1)       Alert : Bench_Stack = 0 , 100 <= Time[Test9.mq5 7 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 448 mcs.
2020.10 . 20 11 : 02 : 30.687 Test9 (GBPUSD,H1)       Alert : Bench_Stack = 0 , 100 <= Time[Test9.mq5 7 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 101 mcs.
2020.10 . 20 11 : 03 : 01.429 Test9 (CADCHF,H1)       Alert : Bench_Stack = 0 , 100 <= Time[Test9.mq5 7 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 159 mcs.
2020.10 . 20 11 : 03 : 04.566 Test9 (AUDCHF,H1)       Alert : Bench_Stack = 0 , 100 <= Time[Test9.mq5 7 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 1329 mcs.
2020.10 . 20 11 : 03 : 14.940 Test9 (GBPCHF,H1)       Alert : Bench_Stack = 0 , 100 <= Time[Test9.mq5 7 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 1444 mcs.
2020.10 . 20 11 : 03 : 57.781 Test9 (EURCAD,H1)       Alert : Bench_Stack = 0 , 100 <= Time[Test9.mq5 7 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 134 mcs.
2020.10 . 20 11 : 04 : 00.115 Test9 (AUDCHF,H1)       Alert : Bench_Stack = 0 , 100 <= Time[Test9.mq5 7 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 543 mcs.
2020.10 . 20 11 : 04 : 03.998 Test9 (EURCHF,H1)       Alert : Bench_Stack = 0 , 100 <= Time[Test9.mq5 7 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 102 mcs.
 
fxsaber :

6/8 에이전트가 실행 중일 때 브레이크를 재현했습니다.

저것들. 문제는 CPU가 로드될 때입니다.

 // Демонстрация тормозов SymbolInfoTick
#include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279

void OnTick ()
{
   MqlTick Tick;
   const uint StartTime = GetTickCount ();
  
//  return;
  
   while (! IsStopped () && ( GetTickCount () - StartTime < 10000 ))
  {
    _B( SymbolInfoTick ( _Symbol , Tick), 500 );
    
//    Sleep(0); // Специально убрал.
  }
}


MQ-데모, 20개 차트, b2656. 기계에서 터미널만 실행되고 테스터는 작동하지 않습니다.

 2020.10 . 20 11 : 14 : 18.615 Test9 (EURNZD,H1)       Alert : Bench_Stack = 0 , 500 <= Time[Test9.mq5 13 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 1111 mcs.
2020.10 . 20 11 : 14 : 18.615 Test9 (AUDCHF,H1)       Alert : Bench_Stack = 0 , 500 <= Time[Test9.mq5 13 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 660 mcs.
2020.10 . 20 11 : 14 : 18.615 Test9 (USDRUB,H1)       Alert : Bench_Stack = 0 , 500 <= Time[Test9.mq5 13 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 657 mcs.
2020.10 . 20 11 : 14 : 18.615 Test9 (EURCAD,H1)       Alert : Bench_Stack = 0 , 500 <= Time[Test9.mq5 13 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 1055 mcs.
2020.10 . 20 11 : 14 : 18.615 Test9 (AUDCAD,H1)       Alert : Bench_Stack = 0 , 500 <= Time[Test9.mq5 13 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 1052 mcs.
2020.10 . 20 11 : 14 : 18.615 Test9 (XAUUSD,H1)       Alert : Bench_Stack = 0 , 500 <= Time[Test9.mq5 13 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 1077 mcs.
2020.10 . 20 11 : 14 : 18.616 Test9 (USDSGD,H1)       Alert : Bench_Stack = 0 , 500 <= Time[Test9.mq5 13 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 1178 mcs.
2020.10 . 20 11 : 14 : 18.616 Test9 (USDJPY,H1)       Alert : Bench_Stack = 0 , 500 <= Time[Test9.mq5 13 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 1291 mcs.
2020.10 . 20 11 : 14 : 18.616 Test9 (GBPUSD,H1)       Alert : Bench_Stack = 0 , 500 <= Time[Test9.mq5 13 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 1209 mcs.
2020.10 . 20 11 : 14 : 18.616 Test9 (USDZAR,H1)       Alert : Bench_Stack = 0 , 500 <= Time[Test9.mq5 13 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 1244 mcs.
2020.10 . 20 11 : 14 : 18.646 Test9 (GBPUSD,H1)       Alert : Bench_Stack = 0 , 500 <= Time[Test9.mq5 13 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 623 mcs.
2020.10 . 20 11 : 14 : 18.646 Test9 (USDJPY,H1)       Alert : Bench_Stack = 0 , 500 <= Time[Test9.mq5 13 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 696 mcs.
2020.10 . 20 11 : 14 : 18.646 Test9 (NZDUSD,H1)       Alert : Bench_Stack = 0 , 500 <= Time[Test9.mq5 13 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 702 mcs.
2020.10 . 20 11 : 14 : 18.684 Test9 (USDTRY,H1)       Alert : Bench_Stack = 0 , 500 <= Time[Test9.mq5 13 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 502 mcs.
2020.10 . 20 11 : 14 : 18.684 Test9 (NZDUSD,H1)       Alert : Bench_Stack = 0 , 500 <= Time[Test9.mq5 13 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 664 mcs.
2020.10 . 20 11 : 14 : 18.684 Test9 (USDJPY,H1)       Alert : Bench_Stack = 0 , 500 <= Time[Test9.mq5 13 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 677 mcs.
2020.10 . 20 11 : 14 : 18.685 Test9 (USDSGD,H1)       Alert : Bench_Stack = 0 , 500 <= Time[Test9.mq5 13 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 1201 mcs.
2020.10 . 20 11 : 14 : 18.685 Test9 (AUDCAD,H1)       Alert : Bench_Stack = 0 , 500 <= Time[Test9.mq5 13 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 708 mcs.
2020.10 . 20 11 : 14 : 18.685 Test9 (GBPUSD,H1)       Alert : Bench_Stack = 0 , 500 <= Time[Test9.mq5 13 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 730 mcs.
2020.10 . 20 11 : 14 : 18.685 Test9 (XAUUSD,H1)       Alert : Bench_Stack = 0 , 500 <= Time[Test9.mq5 13 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 763 mcs.
2020.10 . 20 11 : 14 : 18.685 Test9 (USDZAR,H1)       Alert : Bench_Stack = 0 , 500 <= Time[Test9.mq5 13 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 773 mcs.
2020.10 . 20 11 : 14 : 18.685 Test9 (EURCAD,H1)       Alert : Bench_Stack = 0 , 500 <= Time[Test9.mq5 13 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 800 mcs.
2020.10 . 20 11 : 14 : 18.685 Test9 (EURNZD,H1)       Alert : Bench_Stack = 0 , 500 <= Time[Test9.mq5 13 in OnTick : SymbolInfoTick ( _Symbol ,Tick)] = 808 mcs.
 
fxsaber :
fxsaber :

6/8 에이전트가 실행 중일 때 브레이크를 재현했습니다.

저것들. 문제는 CPU가 로드될 때입니다.

이것은 당신을 위한 새로운 정보입니까?

 
Anton :

이것은 당신을 위한 새로운 정보입니까?

CPU를 로드할 때 이러한 지연을 우회하는 것이 불가능한 이유를 완전히 이해하지 못합니다. 이 일에 무능할 가능성이 큽니다.


그러나 아래는 MT5의 가격 데이터 신선도 문제를 보여주는 깨끗한 테스트입니다. 코드가 주석 처리되었습니다. 간단히 말해서, 틱은 SymbolInfoTick/DOM 을 통해 취해지며 서로에 대해 확인됩니다. 특히, 간격이 없고 다른 소스의 동일한 틱 사이에 큰 지연이 없도록 합니다.

 // Демонстрация лагов OnTick и OnBookEvent.

input uint inMinInterval = 1000 ; // Минимальное время (в мкс.) лага

// Структура тика, которую удобно будет выводить в ArrayPrint.
struct PRICE
{
   double bid;
   double ask;
  
   bool onTick; // true - источник OnTick+SymbolInfoTick, false - источник OnBookEvent+MarketBookGet
  
   ulong Interval; // Временной интервал между соседними записями.
  
   void Set( const double &dBid, const double &dAsk, const bool bTick )
  {
     static ulong PrevTime = :: GetMicrosecondCount ();
     const ulong NewTime = :: GetMicrosecondCount ();

     this .bid = dBid;
     this .ask = dAsk;
    
     this .onTick = bTick;
    
     this .Interval = NewTime - PrevTime;
    
    PrevTime = NewTime;    
  }
  
   // Записи одинаковые, если обе соответствующие цены совпадают.
   bool operator ==( const PRICE &Price ) const
  {
     return (( this .bid == Price.bid) && ( this .ask == Price.ask));
  }
};

PRICE Prices[ 1000 ]; // Массив для записи тиков из разных источников.
int Amount = 0 ;     // Количество записанных тиков

// Возвращает bid/ask-цены из стакана.
bool GetCurrentPrices( double &bid, double &ask )
{
   MqlBookInfo Bands[];

   const bool Res = MarketBookGet ( _Symbol , Bands);

   if (Res)
     for ( int i = ArraySize (Bands) - 2 ; i >= 0 ; i--)
       if (Bands[i].type == BOOK_TYPE_SELL )
      {
        ask = Bands[i].price;
        bid = Bands[i + 1 ].price;
        
         break ;
      }
  
   return (Res);
}

// Если bid или ask стакана поменялся - записываем их.
bool SaveNewTick_Book()
{
   static double PrevBid = 0 ;
   static double PrevAsk = 0 ;
  
   double bid;
   double ask;
      
   const bool Res = ! IsStopped () && GetCurrentPrices(bid, ask) && ((PrevBid != bid) || (PrevAsk != ask));
  
   if (Res)
  {
    PrevBid = bid;
    PrevAsk = ask;
    
    Prices[Amount++].Set(bid, ask, false );
    
     if (Amount == ArraySize (Prices)) // Если достигли конца массива - выходим.
       ExpertRemove ();
  }
  
   return (Res);
}

// Записываем bid и ask
bool SaveNewTick_Tick()
{
   MqlTick Tick;
  
   const bool Res = ! IsStopped () && SymbolInfoTick ( _Symbol , Tick);
  
   if (Res)
  {
    Prices[Amount++].Set(Tick.bid, Tick.ask, true );
    
     if (Amount == ArraySize (Prices)) // Если достигли конца массива - выходим.
       ExpertRemove ();
  }
  
   return (Res);
}

// Проверка на наличие багов и задержек.
void Check()
{    
   if (Amount > 3 )
  {
     if ((Prices[Amount - 1 ].onTick == Prices[Amount - 2 ].onTick) && // Три подряд записи из одного источника - баг.
        (Prices[Amount - 2 ].onTick == Prices[Amount - 3 ].onTick))
       Alert ( "BUG!" );
     else if ((Prices[Amount - 1 ] == Prices[Amount - 2 ]) &&   // Если цены подряд идущих записей совпадают
             (Prices[Amount - 1 ].Interval > inMinInterval)) // И временной интервал между ними большой - информируем.
    {
       Alert ((Prices[Amount - 1 ].onTick ? "OnTick-lag! - " : "OnBook-lag! - " ) + ( string )Prices[Amount - 1 ].Interval + " mcs." );
      
       ArrayPrint (Prices, _Digits , NULL , Amount - 4 , 4 ); // Выводим подробно проблему.
    }
  }
}

int OnInit ()
{
   return (! MarketBookAdd ( _Symbol )); // Подписались на стакан.
}

void OnBookEvent ( const string &Symb )
{
   if ((Symb == _Symbol ) && SaveNewTick_Book()) // Если записали новые цены из стакана,
    Check();                                   // проверяем.
}

void OnTick ()
{
   if (SaveNewTick_Tick()) // Если записали цены тика,
    Check();               // проверяем.
}

void OnDeinit ( const int )
{
   MarketBookRelease ( _Symbol ); // Отписались от стакана.
  
   ArrayPrint (Prices, _Digits , NULL , 0 , Amount); // Вывод всех записей.
}


결과(하나의 MT5-b2656만 머신에서 실행되고 CPU 로드는 약 0이고 차트는 하나, 테스터는 사용되지 않음).

 2020.10 . 20 12 : 26 : 19.680 Test9 (AUDCAD,H1)       Alert : OnTick -lag! - 9573 mcs.
2020.10 . 20 12 : 26 : 19.680 Test9 (AUDCAD,H1)             [bid]   [ask] [onTick] [Interval]
2020.10 . 20 12 : 26 : 19.680 Test9 (AUDCAD,H1)       [ 0 ] 0.92777 0.92780      true        76478
2020.10 . 20 12 : 26 : 19.680 Test9 (AUDCAD,H1)       [ 1 ] 0.92777 0.92780      false          64
2020.10 . 20 12 : 26 : 19.680 Test9 (AUDCAD,H1)       [ 2 ] 0.92777 0.92781      false        50552
2020.10 . 20 12 : 26 : 19.680 Test9 (AUDCAD,H1)       [ 3 ] 0.92777 0.92781      true        9573 // В OnTick пришел тик на 9 мс позже, чем он был в стакане.

...

2020.10 . 20 12 : 26 : 33.899 Test9 (AUDCAD,H1)       Alert : OnBook-lag! - 22153 mcs.
2020.10 . 20 12 : 26 : 33.899 Test9 (AUDCAD,H1)             [bid]   [ask] [onTick] [Interval]
2020.10 . 20 12 : 26 : 33.899 Test9 (AUDCAD,H1)       [ 0 ] 0.92776 0.92783      true      358403
2020.10 . 20 12 : 26 : 33.899 Test9 (AUDCAD,H1)       [ 1 ] 0.92776 0.92783      false        2361
2020.10 . 20 12 : 26 : 33.899 Test9 (AUDCAD,H1)       [ 2 ] 0.92776 0.92784      true      2215506
2020.10 . 20 12 : 26 : 33.899 Test9 (AUDCAD,H1)       [ 3 ] 0.92776 0.92784      false        22153 // В стакан пришел тик на 22 мс позже, чем он был в OnTick.


재생을 확인하십시오.

 

빠르게 언로드된 기계의 소계.

 

개발자를 위한 질문입니다.

SymbolInfoTick에 5ms가 걸렸다고 가정해 보겠습니다. 눈금이 현재 시간 또는 5ms 전과 일치합니까?

 

SymbolInfoTick 브레이크의 주제를 닫습니다. 결론은 이것입니다.

CPU가 로드된 경우(예: 최적화가 모든 코어에 적용되지 않는 경우) SymbolInfoTick은 최대 수십 밀리초까지 실행할 수 있습니다. 터미널에서 가장 많이 요구되는 기능이 정기적으로 스냅샷되지 않는 이유 - 답이 없습니다. 가능하면 스냅샷을 찍습니다. 그리고 CPU 부하가 0인 경우에도 OnTick 기능은 터미널에 온 틱보다 수십 밀리초 늦게 작동할 수 있음을 잊지 마십시오.


대체적으로 좀 아쉽긴 한데 원시적으로 장사하시는 분들은 걱정 안하셔도 됩니다.

 
fxsaber :

SymbolInfoTick 브레이크의 주제를 닫습니다. 결론은 이것입니다.

CPU가 로드된 경우(예: 최적화가 모든 코어에 적용되지 않는 경우) SymbolInfoTick은 최대 수십 밀리초까지 실행할 수 있습니다. 터미널에서 가장 많이 요구되는 기능이 정기적으로 스냅샷되지 않는 이유 - 답이 없습니다. 가능하면 스냅샷을 찍습니다. 그리고 CPU 부하가 0인 경우에도 OnTick 기능은 터미널에 온 틱보다 수십 밀리초 늦게 작동할 수 있음을 잊지 마십시오.


대체적으로 좀 아쉽긴 한데 원시적으로 장사하시는 분들은 걱정 안하셔도 됩니다.

"원시적이지 않은" 거래를 하는 사람들을 위해: 철은 작업에 상응해야 합니다.

"모든 코어에도 적용되지 않음" - "6/8"에 대해 말씀하시는 건가요? 저것들. 6개의 프로세스가 있고 테스트 전체 기간 동안 각각 하나의 CPU 코어를 100% 사용합니까? 그리고 물리적 코어가 4개뿐인가요? 그리고 그러한 배경에 대해 테스트가 "느려진다"는 사실에 놀랐습니까?

이것이 정말로 당신의 이해 수준이라면 "공부하고, 공부하고, 다시 공부하십시오."

16-20개의 스레드로 CPU를 강간하고 싶다면 - 최소한 20개의 물리적 코어가 있는 CPU를 구입하십시오.

 
Anton :

"원시적이지 않은" 거래를 하는 사람들을 위해: 철은 작업에 상응해야 합니다.

"모든 코어에도 적용되지 않음" - "6/8"에 대해 말씀하시는 건가요? 저것들. 6개의 프로세스, 그리고 테스트의 전체 기간 동안 각각 하나의 CPU 코어를 사용하여 100%입니까? 그리고 물리적 코어가 4개뿐인가요? 그리고 그러한 배경에 대해 테스트가 "느려진다"는 사실에 놀랐습니까?

이것이 정말로 당신의 이해 수준이라면 "공부하고, 공부하고, 다시 공부하십시오."

16-20개의 스레드로 CPU를 강간하고 싶은 경우 - 최소한 20개의 물리적 코어가 있는 CPU를 구입하십시오.

귀하의 구현에서 현재 가격을 얻는 것이 매우 느리다는 것을 증명할 수 있다고 확신합니다. 그리고 CPU 로드는 MQL5에서 가장 중요한 기능을 잘못 구현했기 때문에 이러한 브레이크를 생성합니다.

 
fxsaber :

귀하의 구현에서 현재 가격을 얻는 것이 매우 느리다는 것을 증명할 수 있다고 확신합니다. 그리고 CPU 로드는 MQL5에서 가장 중요한 기능을 잘못 구현했기 때문에 이러한 브레이크를 생성합니다.

테스트 코드:

 void OnTick ()
  {
   MqlTick Tick;

   ulong gstart= GetMicrosecondCount ();

   int    count= 10000 ;
   for ( int i= 0 ; i<count; i++)
     {
       SymbolInfoTick ( _Symbol , Tick);
     }

   ulong gend= GetMicrosecondCount ()-gstart;
   Print (count, " iterations, total time " , DoubleToString (gend/ 1000.0 , 3 ), " ms; avr time: " , DoubleToString (gend/ 1000.0 /count, 3 ), " ms" );
  }
입증하다.