MT5와 속도 - 페이지 57

 
Renat Fatkhullin :

대규모 병렬 액세스의 경우 수십 배 더 빠릅니다.

다른 경우에는 프로세서, 메모리 및 OS만 업그레이드하면 됩니다.

LS에서는 동일한 시스템의 비교 로그입니다.

 
fxsaber :

이것은 CopyTicks에 대한 일회성 호출입니다. OnInit에서 이러한 진드기에 대한 가상 백테스트를 실제 생활에서 수행한 다음 실시간으로 계속 진행하여 신선한 진드기만 공급하기 위해 수행됩니다.

타협으로 CopyTicks가 OnInit에서 호출된 후 즉시 터미널에서 메모리를 해제하는 것이 좋습니다. 그러면 강제 냉각 기능 CopyTicks에 들어갈 수 없습니다.

이제 절전 냉각 옵션은 매우 중요합니다. 그러나 위에서 이 목발이 어떻게 메모리를 절약하는지 보여주었습니다.


이제 20명의 고문이 느린 VPS에서도 빠르게 쟁기질하는 것으로 나타났습니다. 그러나 그들의 시작은 심각한 문제입니다.

얼마 전 당신 자신은 스트레스 테스트를 실행했으며 실제로 각 틱 에 대한 즉각적인 틱 발행을 요구했습니다.

즉, 귀하와 100% 다른 개발자 모두 전체 캐시를 기다리는 쿼리 전략을 사용해 왔으며 앞으로도 계속 사용할 것입니다. 매번 점점 더 많은 비용과 정면 전문가들이 글을 씁니다.

따라서 어떤 경우에도 캐시를 취소하지 않지만 16-32GB의 메모리를 설치하고 문제와 지연을 잊어 버리는 것이 좋습니다.

VPS의 동작 및 절약(512MB-1GB 이내로 유지)은 우리를 전혀 괴롭히지 않습니다.

 
Renat Fatkhullin :

얼마 전 당신 자신은 스트레스 테스트를 실행했으며 실제로 각 틱 에 대한 즉각적인 틱 발행을 요구했습니다.

즉, 귀하와 100% 다른 개발자 모두 전체 캐시를 기다리는 쿼리 전략을 사용해 왔으며 앞으로도 계속 사용할 것입니다. 매번 점점 더 많은 비용과 정면 전문가들이 글을 씁니다.

따라서 어떤 경우에도 캐시를 취소하지 않지만 16-32GB의 메모리를 설치하고 문제와 지연을 잊어 버리는 것이 좋습니다.

VPS(512MB-1GB 이내로 유지)의 동작 및 절약은 우리를 전혀 괴롭히지 않습니다.

위의 코드로 내 게시물을 업데이트했습니다. 우리는 다른 것이 아니라 OnInit에 대해 이야기하고 있습니다. Hot CopyTicks는 매우 필요하지만 OnInit에서는 필요하지 않습니다.

 
fxsaber :

타협으로 CopyTicks가 OnInit에서 호출된 후 즉시 터미널에서 메모리를 해제하는 것이 좋습니다.

어떠한 경우에도!
그러나 반대로 OnInit에서 캐시를 올려 나중에 지체 없이 작업할 수 있게 하면 어떻게 될까요?

터미널 캐시를 언로드하는 기능을 도입하는 것이 좋습니다.
틱뿐만 아니라 시계열 및 지표에도 필요합니다(5K 계측기 및 5개 TF에 대한 스크리너 작성 시도).

@르낫?

 
Andrey Khatimlianskii :

어떠한 경우에도!
그러나 반대로 OnInit에서 캐시를 올려 나중에 지체 없이 작업할 수 있게 하면 어떻게 될까요?

틱 캐시는 10초만 지속됩니다.

 

스크립트 형태의 틱 이력 스크리너(터미널에서 작동하는 유일한 프로그램)는 5개월 동안 견적을 받으면 최대 6GB를 먹습니다.

기계와 인터넷이 빠를수록 메모리 부하가 커집니다. 저것들. 10초 안에 터미널의 내부 캐시가 여러 심볼에 대해 누적됩니다.

 
빠른 차, 9명의 고문.
 2020.10 . 19 22 : 32 : 06.965          Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1229 mcs.
2020.10 . 19 22 : 33 : 23.727          Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1250 mcs.
2020.10 . 19 22 : 34 : 29.802          Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1281 mcs.
2020.10 . 19 22 : 35 : 58.747          Bench_Stack = 2 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1164 mcs.
2020.10 . 19 22 : 37 : 20.196          Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1045 mcs.
2020.10 . 19 22 : 38 : 24.920          Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1907 mcs.
2020.10 . 19 22 : 39 : 48.359          Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1387 mcs.
2020.10 . 19 22 : 40 : 03.623          Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1302 mcs.
2020.10 . 19 22 : 40 : 44.569          Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1271 mcs.
2020.10 . 19 22 : 41 : 09.393          Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1482 mcs.
2020.10 . 19 22 : 41 : 19.831          Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1024 mcs.
2020.10 . 19 22 : 41 : 19.975          Alert : Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 8026 mcs.
2020.10 . 19 22 : 41 : 50.137          Bench_Stack = 2 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1040 mcs.
2020.10 . 19 22 : 42 : 05.876          Bench_Stack = 2 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1346 mcs.
2020.10 . 19 22 : 43 : 21.478          Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1523 mcs.
2020.10 . 19 22 : 43 : 21.557          Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1245 mcs.
2020.10 . 19 22 : 43 : 21.843          Alert : Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 4675 mcs.
2020.10 . 19 22 : 43 : 21.854          Alert : Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 7567 mcs.
2020.10 . 19 22 : 44 : 01.181          Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 1052 mcs.
2020.10 . 19 22 : 44 : 33.124          Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 2714 mcs.
2020.10 . 19 22 : 44 : 54.967          Alert : Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 13626 mcs.
2020.10 . 19 22 : 45 : 07.561          Bench_Stack = 3 , 100 <= Time[NewTicks.mqh 33 in NEWTICKS::GetMarketWatchTick: :: SymbolInfoTick ( _Symbol ,Tick)] = 2800 mcs.
나는 그러한 지연을 극복하는 방법을 모릅니다. OnTick이 실행되는 동안 새로운 틱이 나타났는지 알 수 있는 다른 방법은 생각하지 않았습니다.
 
fxsaber :
OnTick이 실행되는 동안 새로운 틱이 나타났는지 알 수 있는 다른 방법은 생각하지 않았습니다.

세 가지 옵션.

 // Идентификация нового тика
bool IsNewTick_CopyRates()
{
   static MqlRates PrevRates = { 0 };
   MqlRates Rates[ 1 ];
    
   const bool Res = (:: CopyRates ( _Symbol , PERIOD_CURRENT , 0 , 1 , Rates) == 1 ) &&
//                   (_R(PrevRates) != Rates[0]); // TypeToBytes.mqh
                   ((Rates[ 0 ].time != PrevRates.time) ||
                    (Rates[ 0 ].tick_volume > PrevRates.tick_volume) ||
                    (Rates[ 0 ].close != PrevRates.close)); // Лишнее условие, но на всякий случай.
                   
   if (Res)
    PrevRates = Rates[ 0 ];
    
   return (Res);
}

// Идентификация нового тика
bool IsNewTick_SymbolInfoTick()
{
   static MqlTick PrevTick = { 0 };
   MqlTick Tick;
  
   const bool Res = :: SymbolInfoTick ( _Symbol , Tick) &&
//                   (_R(PrevTick) != Tick); // TypeToBytes.mqh
                   ((PrevTick.time_msc != Tick.time_msc) ||
                    (PrevTick.bid != Tick.bid) ||
                    (PrevTick.ask != Tick.ask));
                   
   if (Res)
    PrevTick = Tick;
    
   return (Res);
}

// Идентификация нового тика
bool IsNewTick_CopyTicks()
{
   static MqlTick PrevTick = { 0 };
   MqlTick Tick[ 1 ];
  
   const bool Res = (:: CopyTicks ( _Symbol , Tick, COPY_TICKS_ALL , 0 , 1 ) == 1 ) &&
//                   (_R(PrevTick) != Tick[0]); // TypeToBytes.mqh
                   ((PrevTick.time_msc != Tick[ 0 ].time_msc) ||
                    (PrevTick.bid != Tick[ 0 ].bid) ||
                    (PrevTick.ask != Tick[ 0 ].ask));
                   
   if (Res)
    PrevTick = Tick[ 0 ];
    
   return (Res);
}

#define PRINT(A)            \
   if (!A)                   \
     Print ( #A + " = false" );


void OnTick ()
{
  PRINT(IsNewTick_CopyTicks());       // true
  PRINT(IsNewTick_SymbolInfoTick()); // true
  PRINT(IsNewTick_CopyRates())       // false
}

막대를 통해 새 눈금을 정의하지 않는 것이 좋습니다.

 
CopyTicks가 SymbolInfoTick보다 얼마나 오래 지연될 수 있는지 명확해졌습니다.
 // Замер длительности синхронизации CopyTicks и SymbolInfoTick.

#include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280

bool IsSynch()
{
   MqlTick Tick;
   MqlTick Ticks[ 1 ];
  
   return ( SymbolInfoTick ( _Symbol , Tick) && ( CopyTicks ( _Symbol , Ticks, COPY_TICKS_ALL , 0 , 1 ) == 1 ) && (_R(Tick) == Ticks[ 0 ]));
}

ulong WaitSynch( int &Count )
{
   while (! IsStopped () && IsSynch())
     Sleep ( 0 );
    
   const ulong StartTime = GetMicrosecondCount ();
  Count = 0 ;
  
   while (! IsStopped () && !IsSynch())
    Count++;
    
   return ( GetMicrosecondCount () - StartTime);
}

void OnTick ()
{
   int Count;
   const uint StartTime = GetTickCount ();

   while ( GetTickCount () - StartTime < 10000 )
     Print ( "Cинхронизация CopyTicks и SymbolInfoTick длилась " + ( string )(WaitSynch(Count) / 1000 )  + " ms., число проверок = " + ( string )Count);
}


결과는 ( inAmount = 15 )입니다.

 2020.10 . 20 00 : 32 : 46.316 Test9 (GBPAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 163 ms., число попыток = 391432
2020.10 . 20 00 : 32 : 46.894 Test9 (GBPAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 221 ms., число попыток = 526533
2020.10 . 20 00 : 32 : 50.839 Test9 (GBPAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 69 ms., число попыток = 112339
2020.10 . 20 00 : 32 : 50.839 Test9 (EURAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 385 ms., число попыток = 837204
2020.10 . 20 00 : 32 : 51.958 Test9 (EURAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 74 ms., число попыток = 166407
2020.10 . 20 00 : 32 : 52.044 Test9 (EURAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 80 ms., число попыток = 180256
2020.10 . 20 00 : 32 : 52.797 Test9 (EURAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 737 ms., число попыток = 1469883
2020.10 . 20 00 : 33 : 04.229 Test9 (EURAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 8550 ms., число попыток = 14608891
2020.10 . 20 00 : 33 : 04.319 Test9 (GBPAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 159 ms., число попыток = 150630
2020.10 . 20 00 : 33 : 04.324 Test9 (AUDCHF,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 85 ms., число попыток = 78591
2020.10 . 20 00 : 33 : 07.340 Test9 (EURAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 2947 ms., число попыток = 4899320
2020.10 . 20 00 : 33 : 08.076 Test9 (EURAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 727 ms., число попыток = 1209371
2020.10 . 20 00 : 33 : 08.138 Test9 (EURAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 55 ms., число попыток = 73155
2020.10 . 20 00 : 33 : 14.233 Test9 (EURCAD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 107 ms., число попыток = 149697
2020.10 . 20 00 : 33 : 15.985 Test9 (EURCAD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 190 ms., число попыток = 230501
2020.10 . 20 00 : 33 : 16.114 Test9 (GBPJPY,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 208 ms., число попыток = 275639
2020.10 . 20 00 : 33 : 41.328 Test9 (GBPJPY,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 9457 ms., число попыток = 14426849
2020.10 . 20 00 : 33 : 46.000 Test9 (GBPCHF,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 53622 ms ., число попыток = 109127013
2020.10 . 20 00 : 33 : 47.936 Test9 (GBPJPY,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 1302 ms., число попыток = 3104323
2020.10 . 20 00 : 33 : 55.715 Test9 (GBPAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 59 ms., число попыток = 87263
2020.10 . 20 00 : 33 : 55.776 Test9 (GBPJPY,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 88 ms., число попыток = 125641
2020.10 . 20 00 : 33 : 55.869 Test9 (GBPJPY,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 86 ms., число попыток = 140282
2020.10 . 20 00 : 33 : 55.974 Test9 (GBPJPY,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 95 ms., число попыток = 91802
2020.10 . 20 00 : 33 : 56.004 Test9 (GBPAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 125 ms., число попыток = 127590
2020.10 . 20 00 : 33 : 56.202 Test9 (GBPJPY,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 214 ms., число попыток = 311277
2020.10 . 20 00 : 34 : 40.522 Test9 (GBPAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 31 ms., число попыток = 48189
2020.10 . 20 00 : 34 : 40.672 Test9 (GBPAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 69 ms., число попыток = 99619
2020.10 . 20 00 : 34 : 41.094 Test9 (GBPAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 412 ms., число попыток = 613382
2020.10 . 20 00 : 34 : 41.864 Test9 (GBPAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 768 ms., число попыток = 1136798
2020.10 . 20 00 : 34 : 46.035 Test9 (GBPAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 2012 ms., число попыток = 2955715
2020.10 . 20 00 : 34 : 46.124 Test9 (GBPAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 79 ms., число попыток = 109796
2020.10 . 20 00 : 34 : 46.239 Test9 (GBPAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 98 ms., число попыток = 152433
2020.10 . 20 00 : 34 : 47.261 Test9 (GBPAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 1009 ms., число попыток = 1300923
2020.10 . 20 00 : 34 : 47.337 Test9 (GBPAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 73 ms., число попыток = 66414
2020.10 . 20 00 : 34 : 47.850 Test9 (AUDCHF,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 885 ms., число попыток = 832072
2020.10 . 20 00 : 34 : 48.383 Test9 (GBPAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 1040 ms., число попыток = 1239140
2020.10 . 20 00 : 34 : 49.093 Test9 (EURCAD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 46 ms., число попыток = 43232
2020.10 . 20 00 : 34 : 49.839 Test9 (GBPAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 1445 ms., число попыток = 2065046
2020.10 . 20 00 : 34 : 51.474 Test9 (GBPCHF,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 55801 ms. , число попыток = 119517920
2020.10 . 20 00 : 34 : 51.755 Test9 (GBPAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 1498 ms., число попыток = 1625714
2020.10 . 20 00 : 34 : 52.269 Test9 (GBPJPY,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 403 ms., число попыток = 693015
2020.10 . 20 00 : 34 : 59.175 Test9 (AUDCAD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 9413 ms., число попыток = 16211601
2020.10 . 20 00 : 35 : 00.398 Test9 (EURAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 6302 ms., число попыток = 11626079
2020.10 . 20 00 : 35 : 05.587 Test9 (AUDCHF,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 3645 ms., число попыток = 8637511
2020.10 . 20 00 : 35 : 07.247 Test9 (EURAUD,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 133 ms., число попыток = 205326
2020.10 . 20 00 : 35 : 09.033 Test9 (AUDCHF,H1)       Cинхронизация CopyTicks и SymbolInfoTick длилась 3427 ms., число попыток = 8060967

동기화되지 않는 기간은 최대 1분입니다. 어딘가에 잼.

 

Parallel Access에서 SymbolInfoTick을 제동하는 이유인 것 같습니다.

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

void OnTick ()
{
   const uint StartTime = GetTickCount ();

   while (! IsStopped () && ( GetTickCount () - StartTime < 10000 ))
  {
    _B( SymbolInfoInteger ( _Symbol , SYMBOL_TIME_MSC), 100000 );
    
//    Sleep(0); // Специально убрал.
  }
}


결과는 ( inAmount = 15 )입니다.

 2020.10 . 20 01 : 01 : 30.517 Test9 (EURAUD,H1)       Alert : Bench_Stack = 0 , 100000 <= Time[Test9.mq5 97 in OnTick : SymbolInfoInteger ( _Symbol ,SYMBOL_TIME_MSC)] = 105941 mcs.
2020.10 . 20 01 : 01 : 37.596 Test9 (USDCAD,H1)       Alert : Bench_Stack = 0 , 100000 <= Time[Test9.mq5 97 in OnTick : SymbolInfoInteger ( _Symbol ,SYMBOL_TIME_MSC)] = 103045 mcs.
2020.10 . 20 01 : 01 : 38.968 Test9 (EURCHF,H1)       Alert : Bench_Stack = 0 , 100000 <= Time[Test9.mq5 97 in OnTick : SymbolInfoInteger ( _Symbol ,SYMBOL_TIME_MSC)] = 103305 mcs.
2020.10 . 20 01 : 01 : 41.307 Test9 (EURUSD,H1)       Alert : Bench_Stack = 0 , 100000 <= Time[Test9.mq5 97 in OnTick : SymbolInfoInteger ( _Symbol ,SYMBOL_TIME_MSC)] = 106121 mcs.
2020.10 . 20 01 : 01 : 42.573 Test9 (USDCAD,H1)       Alert : Bench_Stack = 0 , 100000 <= Time[Test9.mq5 97 in OnTick : SymbolInfoInteger ( _Symbol ,SYMBOL_TIME_MSC)] = 128241 mcs.
2020.10 . 20 01 : 01 : 45.175 Test9 (GBPCHF,H1)       Alert : Bench_Stack = 0 , 100000 <= Time[Test9.mq5 97 in OnTick : SymbolInfoInteger ( _Symbol ,SYMBOL_TIME_MSC)] = 120367 mcs.
2020.10 . 20 01 : 01 : 46.394 Test9 (EURCHF,H1)       Alert : Bench_Stack = 0 , 100000 <= Time[Test9.mq5 97 in OnTick : SymbolInfoInteger ( _Symbol ,SYMBOL_TIME_MSC)] = 104458 mcs.
2020.10 . 20 01 : 01 : 57.832 Test9 (GBPCHF,H1)       Alert : Bench_Stack = 0 , 100000 <= Time[Test9.mq5 97 in OnTick : SymbolInfoInteger ( _Symbol ,SYMBOL_TIME_MSC)] = 125348 mcs.

> SymbolInfoTick을 실행하는 데 100ms. 코드가 석궁임이 분명합니다. 하지만 일반 Expert Advisors에서 브레이크가 미끄러지는 이유를 보여줍니다.