MT5와 속도 - 페이지 46

 
Renat Fatkhullin :

밀리초 타이머는 오랫동안 사용되어 왔습니다. EventSetMillisecondTimer()

당신은 주제에서 완전히 벗어났습니다. OnTick에서 두 개의 위치를 열어야 한다고 가정해 보겠습니다. 첫 번째 OrderSend는 몇 밀리초입니다. 그 후에는 스냅샷을 찍어야 합니다. 그런 다음 두 번째 OrderSend를 호출합니다.

OnTick만으로도 수백 밀리초가 걸릴 수 있습니다. 그리고 일종의 OnTimer에서 스냅샷을 찍겠다고 제안합니다.

 
Renat Fatkhullin :

측정 라이브러리 자체에 대한 질문도 있습니다. 갑자기 오버 헤드를 포함하여 불필요한 것은 엉망이됩니다.

스튜디오에서 논쟁!

 
Renat Fatkhullin :

다음은 내 코드와 안정적인 실행 시간입니다. 병렬로 20개의 그래프에서 수백, 수천 마이크로초가 필요하지 않습니다.

몇 개의 코어와 프로세서가 있습니까? i7-2600?

8코어.

 2020.10 . 06 02 : 27 : 59.464 Terminal        MetaTrader 5 x64 build 2630 started for MetaQuotes Software Corp.
2020.10 . 06 02 : 27 : 59.465 Terminal        Windows 10 build 19042 , Intel Core i7- 2700 K  @ 3.50 GHz, 7 / 15 Gb memory, 19 / 29 Gb disk, IE 11 , Admin, GMT+ 3

수백만 개의 요청을 병렬로 사용하여 다시 숨겨진 스트레스 테스트를 하시겠습니까?

그는 자신이 전투 고문이라고 여러 번 말했습니다. 가능한 한 통화 횟수를 최소화하십시오. 이론상(바보처럼 측정하지 않음) OnTick당 최대 10개의 호출.


투명해야 합니다. 간단한 _B 호출 몇 개를 게시했다는 사실이 다른 주장의 증거가 아닙니다. 터무니없는 진술을 하자마자 코드와 조건에 대한 실제 설명을 갑자기 잊어버립니다.

마음속으로 아무 것도 상상할 필요가 없습니다. 실제로 호출하고 테스트하는 것을 말하고 보여줍니다. 찢어진 결과는 "알 수 없는 스트레스 테스트를 시작하고 경고가 세상에 표시되기를 기다리는 중"이 아니라 테스트의 전체 코드입니다.

전투 고문의 결과를 게시합니다. WinAPI를 포함하여 70mqh 파일이 있습니다. 말로는 아니지만 정말 이해가 된다면 소스코드를 제공하겠습니다. 브레이크를 꽤 빨리 밟으십시오.

 
fxsaber :

당신은 주제에서 완전히 벗어났습니다. OnTick에서 두 개의 위치를 열어야 한다고 가정해 보겠습니다. 첫 번째 OrderSend는 몇 밀리초입니다. 그 후에는 스냅샷을 찍어야 합니다. 그런 다음 두 번째 OrderSend를 호출합니다.

OnTick만 해도 수백 밀리초가 걸릴 수 있습니다. 그리고 일종의 OnTimer에서 스냅샷을 찍겠다고 제안합니다.

나는 스냅샷을 찍겠다고 제안하지 않았지만 밀리초 타이머 에 대한 직접적인 질문에 대답했습니다.

현재 테스터에서는 여전히 1초의 빈도로 작동하지만 그렇습니다. 우리가 작성하는 새 테스터에서 이것을 변경하려고 합니다.
 
fxsaber :

8코어.

그는 자신이 전투 고문이라고 여러 번 말했습니다. 가능한 한 통화 횟수를 최소화하십시오. 이론상(바보처럼 측정하지 않음) OnTick당 최대 10개의 호출.


전투 고문의 결과를 게시합니다. WinAPI를 포함하여 70mqh 파일이 있습니다. 말로는 아니지만 정말 이해가 된다면 소스코드를 제공하겠습니다. 브레이크를 꽤 빨리 밟으십시오.

알아내자, 출처를 밝혀라.
 
fxsaber :

스튜디오에서 논쟁!

전체 벤치마크 는 쓰레기로 가득 차 있으며 실제로 다음은 깨끗하고 이해할 수 있는 (코드를 쌓아올리는 것과는 달리) 버전입니다.


//--- benchmark macros
#define _B(_function,_alert_interval)               \
          {                                         \
           ulong _latency= GetMicrosecondCount ();    \
           _function;                               \
           _latency= GetMicrosecondCount ()-_latency; \
           if (_latency > _alert_interval)           \
              :: Alert ( "Time[" + __FILE__ + " " + ( string ) __LINE__ + " in " + __FUNCTION__ + ": " + #_function + "] = " + ( string )_latency + " mсs" ); \
          }



//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick ()
  {
   MqlTick Tick;
   
   _B( SymbolInfoTick ( _Symbol ,Tick), 0 );
   _B( SymbolInfoTick ( _Symbol ,Tick), 0 );
  }

어떤 문제가 있습니까?

  1. 읽을 수 없는 코드

  2. 오버헤드 매스가 있는 클래스에 바인딩

  3. 스택 스토리지 비용 50 결과
       static bool Set( const string Str )
      {
         if (BENCHMARK::Amount == BENCHMARK::ReserveSize)
          BENCHMARK::ReserveSize = :: ArrayResize (BENCHMARK::Bench, BENCHMARK::ReserveSize + BENCHMARK_RESERVE);
    
        BENCHMARK::Bench[BENCHMARK::Amount++].Set(Str);
    
         return ( true );
      }
    
  4. 결과 가져오기 - 개체 하네스에서 하나의 연속적인 오버헤드 및 가비지
       static ulong Get( const uint AlertInterval = 0 )
      {
         const int Pos = BENCHMARK::Amount - 1 ;
         const ulong Res = (Pos < 0 ) ? 0 : BENCHMARK::Bench[Pos].Get();
    
         if (Pos >= 0 )
        {
           if (AlertInterval && (Res > AlertInterval))
            :: Alert ( "Time[" + BENCHMARK::Bench[Pos].Str + "] = " + ( string )Res + " mсs." );
    
          BENCHMARK::Amount = Pos;
        }
    
         return (Res);
      }
    


테스트를 위한 코드 최적화 를 끄지 않았으면 좋겠습니다.

metaeditor.ini의 전역 매개변수 Optimize=0 을 의미합니다.

 
Renat Fatkhullin :

전체 벤치마크 는 쓰레기로 가득 차 있으며 실제로 다음은 깨끗하고 이해할 수 있는 (코드를 쌓아올리는 것과는 달리) 버전입니다.

귀하의 버전은 불행히도 편의를 이해하는 초기 단계입니다. 편리하게도 이것이 가능한 경우입니다.

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

라이브러리: 벤치마크

fxsaber , 2020.10.01 23:49

우리는 표준 버전에서 걸림돌이 어디에 있는지 찾으려고 노력하고 있습니다. 우리는 소스 코드에서 여러 문자를 규정합니다.

     for ( long Chart = _B2 (:: ChartFirst ()); (Chart != - 1 ) && !Res; Chart = _B2 (:: ChartNext (Chart)))
      Res = (Chart != chartID) && _B2 (:: ChartGetInteger (Chart, CHART_IS_MAXIMIZED ));

그리고 우리는 즉시 그 이유를 봅니다.

 2020.10 . 02 00 : 45 : 14.113 Alert : Time[Test9.mq5 36 in IsInvisible: :: ChartGetInteger (Chart, CHART_IS_MAXIMIZED )] = 878 mсs.
2020.10 . 02 00 : 45 : 14.114 Alert : Time[Test9.mq5 36 in IsInvisible: :: ChartGetInteger (Chart, CHART_IS_MAXIMIZED )] = 943 mсs.
2020.10 . 02 00 : 45 : 14.114 Alert : Time[Test9.mq5 36 in IsInvisible: :: ChartGetInteger (Chart, CHART_IS_MAXIMIZED )] = 297 mсs.
2020.10 . 02 00 : 45 : 14.116 Alert : Time[Test9.mq5 36 in IsInvisible: :: ChartGetInteger (Chart, CHART_IS_MAXIMIZED )] = 1787 mсs.
2020.10 . 02 00 : 45 : 14.116 Alert : Time[Test9.mq5 35 in IsInvisible: :: ChartNext (Chart)] = 2 mсs.
2020.10 . 02 00 : 45 : 14.117 Alert : Time[Test9.mq5 36 in IsInvisible: :: ChartGetInteger (Chart, CHART_IS_MAXIMIZED )] = 980 mсs.
2020.10 . 02 00 : 45 : 14.117 Alert : Time[Test9.mq5 35 in IsInvisible: :: ChartNext (Chart)] = 2 mсs.
2020.10 . 02 00 : 45 : 14.117 Alert : Time[Test9.mq5 36 in IsInvisible: :: ChartGetInteger (Chart, CHART_IS_MAXIMIZED )] = 59 mсs.
2020.10 . 02 00 : 45 : 14.118 Alert : Time[Test9.mq5 36 in IsInvisible: :: ChartGetInteger (Chart, CHART_IS_MAXIMIZED )] = 803 mсs.
2020.10 . 02 00 : 45 : 14.119 Alert : Time[Test9.mq5 36 in IsInvisible: :: ChartGetInteger (Chart, CHART_IS_MAXIMIZED )] = 1059 mсs.

CHART_IS_MAXIMIZED는 외국 차트의 경우 속도가 느려집니다. 버그 보고서가 준비되었습니다! 도서관이 있어서 아주 쉬웠습니다.


어떤 문제가 있습니까?

  1. 읽을 수 없는 코드

  2. 오버헤드 매스가 있는 클래스에 바인딩

  3. 스택 스토리지 비용 50 결과
  4. 결과 가져오기 - 개체 하네스에서 하나의 연속적인 오버헤드 및 가비지

사용 용이성은 적은 비용을 커버합니다. 구현 방법을 주의 깊게 살펴보면 빈약합니다. 예를 들어 ArrayResize는 오버헤드이므로 사용을 최소화합니다.

테스트를 위한 코드 최적화 를 끄지 않았으면 좋겠습니다.

metaeditor.ini의 전역 매개변수 Optimize=0 을 의미합니다.

제동 모드에 관심이 없습니다. 나는 물론 알고리즘 최적화와 컴파일러 최적화 모두에 주의를 기울이면서 전투 고문의 작업을 지켜봅니다.

 
Renat Fatkhullin :

전체 벤치마크 는 쓰레기로 가득 차 있으며 실제로 다음은 깨끗하고 이해할 수 있는 (코드를 쌓아올리는 것과는 달리) 버전입니다.

어떤 문제가 있습니까?

  1. 읽을 수 없는 코드

  2. 오버헤드 매스가 있는 클래스에 바인딩

  3. 스택 스토리지 비용 50 결과
  4. 결과 가져오기 - 개체 하네스에서 하나의 연속적인 오버헤드 및 가비지


테스트를 위한 코드 최적화 를 끄지 않았으면 좋겠습니다.

metaeditor.ini의 전역 매개변수 Optimize=0 을 의미합니다.

여기 C 스타일입니다. 모든 것이 간단하고 정말 쓰레기가 없습니다. 예를 들어 주셔서 감사합니다.

C 언어 교사 중 한 명이 사용자 이름에 밑줄 _B를 사용하지 않는 것이 좋습니다.
이 접두사는 라이브러리, 프로그램 등의 개발자가 사용하기 때문입니다.
그리고 교차로에 부딪히지 않으려면 사용하지 않는 것이 좋습니다.

그리고 mql5에서 당신의 이름과 교차할 기회가 있습니까?
아니면 사용자 이름이 MQ 이름으로부터 완전히 보호됩니까?

 
Roman :

C 언어 교사 중 한 명이 사용자 이름에 밑줄 _B를 사용하지 않는 것이 좋습니다.
이 접두사는 라이브러리, 프로그램 등의 개발자가 사용하기 때문입니다.
그리고 교차로에 부딪히지 않으려면 사용하지 않는 것이 좋습니다.

"_"로 시작하는 이름은 C에서 서비스, 시스템 또는 특수 이름으로 사용됩니다. 이 경우에는 받아들일 수 있다고 생각합니다. 왜냐하면 이 함수는 코드를 유지 관리하고 검사하는 데 사용됩니다.

 
Edgar Akhmadeev :

"_"로 시작하는 이름은 C에서 서비스, 시스템 또는 특수 이름으로 사용됩니다. 이 경우에는 받아들일 수 있다고 생각합니다. 왜냐하면 이 함수는 코드를 유지 관리하고 검사하는 데 사용됩니다.

mql5 외에도 MQ 개발자의 서비스 이름이 있다는 질문입니다.