MT5와 속도 - 페이지 50

 

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

MT5와 속도

fxsaber , 2020.10.07 11:13

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

void OnTick ()
{
  _BV( Print ( "" ), 1 );
}

느린 VPS에서 어떻게 될지 확인할 수 없습니다.

OrderSend 후에 일부 출력물(예: 주문 전송 결과)을 만든 경우 문자열 변수에 누적하고 On-function이 종료될 때 출력하도록 전송하는 것이 좋습니다.

그렇지 않으면 Print-snapshot 과의 연결에서 많은 것을 잃을 수 있습니다. 얼마나 - 누군가가 VPS에서 위의 고문을 시작하면 대답할 수 있습니다.


위협 가장 간단한 구현.

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

class PRINT
{
private :
   string Str;
  
public :
  PRINT() : Str( NULL ) { :: StringSetLength ( this .Str, 5000 ); }
  ~PRINT() { if ( this .Str != NULL ) :: Print ( this .Str); }
  
   template < typename T>
   void Add( const T PrintStr ) { this .Str += (( this .Str == NULL ) ? NULL : "\n" ) + ( string )PrintStr; }
};

#define Print PrintObj.Add // Закомментируйте, чтобы посмотреть скорость обычного Print.

void OnTick ()
{  
  PRINT PrintObj; // Накопитель Print-ов.
  
   for ( int i = 0 ; i < 5 ; i++)
  {
    _BV( Print (i), 1 )
    
     Sleep ( 100 ); // Эмуляция OrderSend
  }
}

빠른 시스템에서 이 솔루션은 일반적인 접근 방식보다 훨씬 빠릅니다. VPS에 관해서는 - 모르겠습니다.

 
fxsaber :

OrderSend 후에 일부 출력물(예: 주문 전송 결과)을 만든 경우 문자열 변수에 누적하고 On-function이 종료될 때 출력하도록 전송하는 것이 좋습니다.

그렇지 않으면 Print-snapshot 과의 연결에서 많은 손실을 입을 수 있습니다. 얼마나 - 누군가가 VPS에서 위의 고문을 시작하면 대답할 수 있습니다.

내 VPS에서 $3

 2020.10 . 08 09 : 50 : 59.631 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 3121 mсs.
2020.10 . 08 09 : 50 : 59.724 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 50 : 59.724 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 78 mсs.
2020.10 . 08 09 : 50 : 59.837 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 50 : 59.837 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 86 mсs.
2020.10 . 08 09 : 50 : 59.930 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 50 : 59.931 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 159 mсs.
2020.10 . 08 09 : 51 : 00.036 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 00.036 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 84 mсs.
2020.10 . 08 09 : 51 : 00.138 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 00.138 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 94 mсs.
2020.10 . 08 09 : 51 : 00.243 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 00.243 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 86 mсs.
2020.10 . 08 09 : 51 : 00.380 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 00.380 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 54 mсs.
2020.10 . 08 09 : 51 : 00.973 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 00.973 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 79 mсs.
2020.10 . 08 09 : 51 : 01.129 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 01.129 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 91 mсs.
2020.10 . 08 09 : 51 : 01.186 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 01.186 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 60 mсs.
2020.10 . 08 09 : 51 : 01.320 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 01.321 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 75 mсs.
2020.10 . 08 09 : 51 : 01.402 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 01.402 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 86 mсs.
2020.10 . 08 09 : 51 : 01.546 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 01.555 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 72 mсs.
2020.10 . 08 09 : 51 : 02.158 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 02.158 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 67 mсs.
2020.10 . 08 09 : 51 : 04.651 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 04.651 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 74 mсs.
2020.10 . 08 09 : 51 : 04.929 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 04.930 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 200 mсs.
2020.10 . 08 09 : 51 : 07.200 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 07.200 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 58 mсs.
2020.10 . 08 09 : 51 : 07.330 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 07.330 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 68 mсs.
2020.10 . 08 09 : 51 : 07.452 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 07.460 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 77 mсs.
2020.10 . 08 09 : 51 : 07.728 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 07.728 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 64 mсs.
2020.10 . 08 09 : 51 : 07.870 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 07.870 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 72 mсs.
2020.10 . 08 09 : 51 : 07.967 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 07.967 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 58 mсs.
2020.10 . 08 09 : 51 : 08.130 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 08.130 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 56 mсs.
2020.10 . 08 09 : 51 : 11.274 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 11.275 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 63 mсs.
2020.10 . 08 09 : 51 : 11.409 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 11.409 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 73 mсs.
2020.10 . 08 09 : 51 : 11.903 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 11.903 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 86 mсs.
2020.10 . 08 09 : 51 : 12.022 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 12.022 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 79 mсs.
2020.10 . 08 09 : 51 : 12.699 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 12.700 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 69 mсs.
2020.10 . 08 09 : 51 : 12.977 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 12.977 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 67 mсs.
2020.10 . 08 09 : 51 : 13.226 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 13.226 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 98 mсs.
2020.10 . 08 09 : 51 : 13.412 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 13.412 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 93 mсs.
2020.10 . 08 09 : 51 : 13.854 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 13.854 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 59 mсs.
2020.10 . 08 09 : 51 : 14.000 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 14.000 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 62 mсs.
2020.10 . 08 09 : 51 : 18.343 Test Print (EURUSD,H1)  
2020.10 . 08 09 : 51 : 18.343 Test Print (EURUSD,H1)   Alert : Time[Test Print .mq5 5 : Print ()] = 86 mсs.
 
Edgar Akhmadeev :

내 VPS에서 $3

고맙습니다. 확실히 더 나은 해결 방법입니다.

 
fxsaber :


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

long GetAnotherChart()
{
   long Chart = :: ChartFirst ();
  
   while (Chart == ChartID ())
    Chart = ChartNext (Chart);
 
   return (Chart);     
}


void OnTick ()
{  
   const long Chart = GetAnotherChart();
  
   if (Chart)
    _B( EventChartCustom (Chart, 123 , 0 , 0 , NULL ), 1 );
  
  _B( EventChartCustom ( 0 , 123 , 0 , 0 , NULL ), 1 );
}

다른 사람의 차트로 보내는 것은 자신의 차트로 보내는 것보다 비용이 더 많이 듭니다.

다음과 같이 시도하십시오.

_B( EventChartCustom (- 1 , 123 , 0 , 0 , NULL ), 1 );
 
Anton :

다음과 같이 시도하십시오.

 // https://www.mql5.com/ru/forum/342090/page50#comment_18647171
class PRINT
{
private :
   string Str;
public :
  PRINT() : Str( NULL ) { :: StringSetLength ( this .Str, 5000 ); }
  ~PRINT() { if ( this .Str != NULL ) :: Print ( this .Str); }
  
   template < typename T>
   void Add( const T PrintStr ) { this .Str += (( this .Str == NULL ) ? NULL : "\n" ) + ( string )PrintStr; }
};

#define Alert PrintObj.Add

PRINT PrintObj;

//#define BENCHMARK_OFF // Выключение замеров.
#include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279

void OnTick ()
{  
  _B( EventChartCustom (- 1 , 123 , GetMicrosecondCount (), 0 , NULL ), 1 );
}

void OnChartEvent ( const int id, const long & lparam, const double & dparam, const string & sparam)
{
   if (id == 1123 )
     Print ( "Time[from OnTick To OnChartEvent] = " + ( string )( GetMicrosecondCount () - lparam) + " mcs." );
}


결과.

 2020.10 . 08 11 : 35 : 52.050 Benchmark.mqh: TimeAvg[GetMicrosecondsCount()] = 0 mcs.
2020.10 . 08 11 : 35 : 52.050 Benchmark.mqh is On.
2020.10 . 08 11 : 35 : 55.617 Time[from OnTick To OnChartEvent ] = 14 mcs.
2020.10 . 08 11 : 35 : 55.821 Time[from OnTick To OnChartEvent ] = 3 mcs.
2020.10 . 08 11 : 35 : 56.729 Time[from OnTick To OnChartEvent ] = 4 mcs.
2020.10 . 08 11 : 35 : 56.932 Time[from OnTick To OnChartEvent ] = 9 mcs.
2020.10 . 08 11 : 35 : 57.841 Time[from OnTick To OnChartEvent ] = 9 mcs.
2020.10 . 08 11 : 35 : 58.177 Bench_Stack = 0 , 1 <= Time[Test9.mq5 23 in OnTick : EventChartCustom (- 1 , 123 , GetMicrosecondCount (), 0 , NULL )] = 2 mcs.
2020.10 . 08 11 : 35 : 58.177 Bench_Stack = 0 , 1 <= Time[Test9.mq5 23 in OnTick : EventChartCustom (- 1 , 123 , GetMicrosecondCount (), 0 , NULL )] = 2 mcs.
2020.10 . 08 11 : 35 : 58.177 Bench_Stack = 0 , 1 <= Time[Test9.mq5 23 in OnTick : EventChartCustom (- 1 , 123 , GetMicrosecondCount (), 0 , NULL )] = 2 mcs.


측정이 꺼져 있을 때.

 2020.10 . 08 11 : 15 : 19.084 Benchmark.mqh: TimeAvg[GetMicrosecondsCount()] = 0 mcs.
2020.10 . 08 11 : 15 : 19.084 Benchmark.mqh is Off.
2020.10 . 08 11 : 15 : 24.171 Time[from OnTick To OnChartEvent ] = 4 mcs.
2020.10 . 08 11 : 15 : 24.376 Time[from OnTick To OnChartEvent ] = 3 mcs.
2020.10 . 08 11 : 15 : 27.010 Time[from OnTick To OnChartEvent ] = 3 mcs.
2020.10 . 08 11 : 15 : 31.859 Time[from OnTick To OnChartEvent ] = 5 mcs.
2020.10 . 08 11 : 15 : 32.266 Time[from OnTick To OnChartEvent ] = 4 mcs.
2020.10 . 08 11 : 15 : 32.470 Time[from OnTick To OnChartEvent ] = 3 mcs.
2020.10 . 08 11 : 15 : 32.670 Time[from OnTick To OnChartEvent ] = 6 mcs.


저것들. "OnEmpty"로의 전환은 10 µs 이내에 발생합니다.

0에 대해 동일한 작업을 수행하지 않는 이유는 무엇입니까?

 
fxsaber :

저것들. "OnEmpty"로의 전환은 10 µs 이내에 발생합니다.

0에 대해 동일한 작업을 수행하지 않는 이유는 무엇입니까?

다른 의미와 다른 실행 메커니즘. 0 - "자체" 차트 대기열의 이벤트입니다. -1 - 자체 대기열의 이벤트입니다.

 

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

MT5와 속도

fxsaber , 2020.10.07 12:41

어떤 이유로 TimeCurrentMsc는 반복 요청에도 불구하고 MQL5에 포함되지 않습니다.

할 것이다?

 
Anton :

다른 의미와 다른 실행 메커니즘. 0 - "자체" 차트 대기열의 이벤트입니다. -1 - 자체 대기열의 이벤트입니다.

-1을 통해 동일한 Alert의 비동기를 구현할 수 없다는 것이 밝혀졌습니다.

 
fxsaber :

저것들. "OnEmpty"로의 전환은 10 µs 이내에 발생합니다.

보시다시피, 당신의 도움으로 모든 것이 가장 낙관적 인 예측보다 빨리 해결되었으며 비밀 백도어가 있음이 밝혀졌습니다.

 
fxsaber :

할 것이다?

정확히 같지는 않지만 mcs 간격에 따른 카운터입니다.
, TimeCurrentMcs 가 더 좋을 것입니다. 소원에 참여합니다.

 //+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
{
   ulong mcs = 0 ;
   
   while (! _StopFlag )
   {
      mcs = GetMicrosecondCount ();
     
       switch (GetInterval(mcs, 5000000 )) //5 секунд
      { 
         case 1 : 
             Print (( string ) mcs); 
             break ;
         case 0 :       
             break ;             
      }    
   }
}

//--------------------------------------------------------------------
//Получить интервал 
ulong prevCount = 0 ;
int GetInterval( ulong currCount, ulong mcsIntrval)
{ 
   int res = 0 ;   
   switch ((currCount - prevCount) > mcsIntrval) 
   { 
       case 1 : 
         prevCount = currCount;
         res = 1 ; 
         break ; 
       default :
         break ;   
   } 
   
   return (res);
}
 2020.10 . 09 00 : 15 : 45.712 TestScript (MNQZ20,M1)   5000001
2020.10 . 09 00 : 15 : 50.712 TestScript (MNQZ20,M1)   10000002
2020.10 . 09 00 : 15 : 55.712 TestScript (MNQZ20,M1)   15000003
2020.10 . 09 00 : 16 : 00.712 TestScript (MNQZ20,M1)   20000004
2020.10 . 09 00 : 16 : 05.712 TestScript (MNQZ20,M1)   25000006
2020.10 . 09 00 : 16 : 10.712 TestScript (MNQZ20,M1)   30000007
2020.10 . 09 00 : 16 : 15.712 TestScript (MNQZ20,M1)   35000008
2020.10 . 09 00 : 16 : 20.712 TestScript (MNQZ20,M1)   40000009
2020.10 . 09 00 : 16 : 25.713 TestScript (MNQZ20,M1)   45000581
2020.10 . 09 00 : 16 : 30.713 TestScript (MNQZ20,M1)   50000582
사유: