MT5와 속도 - 페이지 89

 
몇 가지 테스트를 실행하면 질문이 사라질 것입니까?
 
traveller00 :
몇 가지 테스트를 실행하면 질문이 사라질 것입니까?

아마도. 시간이 매우 제한되어 있고 직접 테스트를 수행할 기회가 없다는 것이 유감입니다 :(

 
traveller00 :
몇 가지 테스트를 실행하면 질문이 사라질 것입니까?

테스트는 처음 실행할 때만 차이를 보여줍니다.

 
Slava :

항목 Symbol(), _Symbol - NULL과 동일(여기서 기호 이름 대신 NULL이 허용됨)

이 경우 현재 심볼의 속성이 캐시되어 있기 때문에 현재 심볼의 존재 여부, Market Watch에서의 현재 심볼의 존재 여부 및 현재 심볼의 속성에 대한 불필요한 호출은 수행되지 않습니다.

즉, Symbol(), _Symbol 또는 NULL 대신 일반 문자열 매개변수가 지정되면 전체 프로그램 검사가 수행되고 다른 속성 쿼리가 수행됩니다.

보로스:

   string symbol= _Symbol ;
   SymbolInfoInteger (symbol,...)
   SymbolInfoInteger ( NULL ,...)

, - SymbolInfoXXX 에 대한 호출 동작, 이 두 경우에 체크 이상으로 차이가 날까요?

symbol==_Symbol

?

 
traveller00 :

그건 그렇고, MT5의 최신 릴리스 버전에서 오늘의 새로운 로그에서:

이들은 각각 자체 차트에 있는 1개의 기호에 대한 3명의 고문이었습니다. 요청이 매 틱마다 진행된다는 점을 감안할 때. 물론 이러한 이상치는 드물게 발생하지만 실제로 마지막 틱에서 오는 새 틱에 대한 1회의 요청에는 700ms가 소요되었습니다.

약 12시간 동안 모니터링하지만 모든 경계를 넘어선 지연이 이미 눈에 띕니다.

Time[Main.mqh 162 in ProcessTicks: CopyTicksRange ( _Symbol ,OldTicks, COPY_TICKS_INFO ,LastTickParsed.time_msc)] = 8589203 mcs.

각각 1개의 심볼에 있는 자체 차트에 있는 3명의 Expert Advisors는 CopyTicksRange를 통해 새로운 수신 틱에 대한 이전 틱의 이전 틱을 요청합니다. 그리고 지연은 거의 9초입니다. 그리고 이것이 한계가 아닌 것 같습니다. 틱 저장소는 동기화되어 액세스되는 공유 리소스일 가능성이 높지만 동기화가 매우 불량하더라도 이와 같은 시간은 있어서는 안 됩니다.

누군가는 이것이 일회성 결함이라고 말할 것입니다. 이 12시간의 모니터링 동안 불행히도 1초에 100개 이상의 출력이 있었습니다. 그리고 더 이상 일회성 폭발처럼 보이지 않습니다. 이 당시에는 종종 여러 개의 틱이 연속적으로 발생하여 그러한 파열이 발생한 것 같습니다.

3명의 Expert Advisors가 공동의 자원을 위해 싸웠다는 사실에 눈을 감아도, 또 다른 모니터링을 살펴보자.

ProcessTicks: CopyTicksRange ( _Symbol ,OldTicks, COPY_TICKS_INFO ,LastTickParsed.time_msc)] = 1401285 mcs.

그 상징에는 단 1명의 고문이 있었다. 아직 1초 반. 그는 더 이상 혼자가 아니었고 다른 기호에 다른 기호가 있었지만 멀티 스레딩과 같았습니까? 또는 다른 기호에 대한 눈금이 여전히 서로를 느리게 할 수 있습니까?

이것은 기본 Expert Advisor의 기본 기능입니다. 플랫폼은 알고리즘 트레이더로 위치합니다. 동시에 기본 기능은 강력한 질문을 제기합니다. 이에 대해 다시 한 번 살펴보시기 바랍니다. 확실히 개선의 여지가 있습니다. 또는 여기에 제안된 대로 함수가 호출된 이후 마지막 틱을 얻을 수 있는 기회에 대해 매우 감사할 것입니다.

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

MT5와 속도

fxsaber , 2021.03.01 07:28

그러한 기능을 고려하십시오.

 int SymbolInfoTicks( const string Symb, MqlTick &Ticks[] ); // Возвращает свежие тики (не более сотни), пришедшие с предыдущего вызова этой функции.


간격 없이 FRESH 틱을 얻는 문제는 이제 CopyTicks*를 통해서만 해결됩니다. 이것은 이 공통 작업에 대한 매우 성가신 메커니즘입니다. 참새에게 대포처럼.

따라서 브레이크, 거대한 캐시 보유 등이 있습니다.

 

SymbolInfoTick 및 CopyTicksRange 호출 수 최소화:

  • 스냅샷 SymbolInfoTick - 100 µs마다 한 번 이상 호출되지 않습니다.
  • 새로운 틱에 대한 CopyTicksRange는 실제로 새로운 틱이 Market Watch에 도착한 경우에만 호출됩니다.


이러한 부하가 있는 터미널 및 시스템(페이징 파일 비활성화됨).


결과적으로 일반 함수의 지연(호출이 적음)에 대한 메시지 수를 크게 줄일 수 있었습니다.


50분 동안 기록:

 2021.03 . 05 19 : 31 : 45.429 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 154 mcs.
2021.03 . 05 19 : 32 : 58.939 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 161 mcs.
2021.03 . 05 19 : 33 : 01.583 :: SymbolInfoTick ( _Symbol ,Tick)] = 158 mcs.
2021.03 . 05 19 : 36 : 01.682 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 143 mcs.
2021.03 . 05 19 : 36 : 31.229 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 234 mcs.
2021.03 . 05 19 : 36 : 31.229 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 913 mcs.
2021.03 . 05 19 : 39 : 08.716 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 139 mcs.
2021.03 . 05 19 : 39 : 30.994 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 315 mcs.
2021.03 . 05 19 : 39 : 32.858 :: CopyTicks ( _Symbol ,Tick, COPY_TICKS_ALL , 0 , 1 )] = 114 mcs.
2021.03 . 05 19 : 40 : 41.437 :: CopyTicks ( _Symbol ,Tick, COPY_TICKS_ALL , 0 , 1 )] = 101 mcs.
2021.03 . 05 19 : 42 : 26.104 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 116 mcs.
2021.03 . 05 19 : 42 : 28.849 :: SymbolInfoTick ( _Symbol ,Tick)] = 109 mcs.
2021.03 . 05 19 : 43 : 10.977 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 481 mcs.
2021.03 . 05 19 : 43 : 53.945 :: SymbolInfoTick ( _Symbol ,Tick)] = 130 mcs.
2021.03 . 05 19 : 49 : 20.352 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 101 mcs.
2021.03 . 05 19 : 51 : 31.242 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 102 mcs.
2021.03 . 05 19 : 51 : 44.986 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 107 mcs.
2021.03 . 05 19 : 52 : 05.590 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 219 mcs.
2021.03 . 05 19 : 53 : 56.013 :: SymbolInfoTick ( _Symbol ,Tick)] = 236 mcs.
2021.03 . 05 19 : 55 : 41.453 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 105 mcs.
2021.03 . 05 19 : 55 : 47.109 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 148 mcs.
2021.03 . 05 19 : 55 : 47.110 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 265 mcs.
2021.03 . 05 19 : 59 : 26.011 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 186 mcs.
2021.03 . 05 20 : 00 : 01.569 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 117 mcs.
2021.03 . 05 20 : 01 : 19.704 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 109 mcs.
2021.03 . 05 20 : 02 : 07.285 :: SymbolInfoTick ( _Symbol ,Tick)] = 177 mcs.
2021.03 . 05 20 : 02 : 07.286 :: SymbolInfoTick ( _Symbol ,Tick)] = 198 mcs.
2021.03 . 05 20 : 02 : 07.286 :: SymbolInfoTick ( _Symbol ,Tick)] = 202 mcs.
2021.03 . 05 20 : 04 : 40.170 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 364 mcs.
2021.03 . 05 20 : 04 : 45.905 :: SymbolInfoTick ( _Symbol ,Tick)] = 143 mcs.
2021.03 . 05 20 : 04 : 45.906 :: SymbolInfoTick ( _Symbol ,Tick)] = 158 mcs.
2021.03 . 05 20 : 04 : 45.907 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 504 mcs.
2021.03 . 05 20 : 04 : 48.259 :: SymbolInfoTick ( _Symbol ,Tick)] = 104 mcs.
2021.03 . 05 20 : 04 : 54.727 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 104 mcs.
2021.03 . 05 20 : 05 : 39.642 :: CopyTicks ( _Symbol ,Tick, COPY_TICKS_ALL , 0 , 1 )] = 101 mcs.
2021.03 . 05 20 : 07 : 40.189 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 101 mcs.
2021.03 . 05 20 : 09 : 21.844 :: SymbolInfoTick ( _Symbol ,Tick)] = 115 mcs.
2021.03 . 05 20 : 09 : 32.422 :: SymbolInfoTick ( _Symbol ,Tick)] = 107 mcs.
2021.03 . 05 20 : 10 : 02.423 :: SymbolInfoTick ( _Symbol ,Tick)] = 128 mcs.
2021.03 . 05 20 : 15 : 48.838 :: CopyTicks ( _Symbol ,Tick, COPY_TICKS_ALL , 0 , 1 )] = 149 mcs.
2021.03 . 05 20 : 16 : 36.001 :: SymbolInfoTick ( _Symbol ,Tick)] = 105 mcs.
2021.03 . 05 20 : 17 : 51.499 :: CopyTicks ( _Symbol ,Tick, COPY_TICKS_ALL , 0 , 1 )] = 480 mcs.
2021.03 . 05 20 : 17 : 51.638 :: SymbolInfoTick ( _Symbol ,Tick)] = 342 mcs.
2021.03 . 05 20 : 17 : 52.802 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 429 mcs.
2021.03 . 05 20 : 17 : 53.340 :: SymbolInfoTick ( _Symbol ,Tick)] = 142 mcs.
2021.03 . 05 20 : 19 : 21.512 :: SymbolInfoTick ( _Symbol ,Tick)] = 122 mcs.
2021.03 . 05 20 : 20 : 35.836 :: CopyTicks ( _Symbol ,Tick, COPY_TICKS_ALL , 0 , 1 )] = 116 mcs.


너무 무섭지 않은 것 같습니다. 동시에 무역 거래는 없었습니다. 그들과 마찬가지로 - 나는 볼 것입니다.


추신: 선택된 부분은 한 번에 세 명의 고문(서로 다른 기호)이 거의 동시에 지연을 수신했음을 보여줍니다. 저것들. 지연은 터미널에 보편적입니다.

 
Slava :

항목 Symbol(), _Symbol - NULL과 동일(여기서 기호 이름 대신 NULL이 허용됨)

이 경우 현재 심볼의 속성이 캐시되어 있기 때문에 현재 심볼의 존재 여부, Market Watch에서의 현재 심볼의 존재 여부 및 현재 심볼의 속성에 대한 불필요한 호출은 수행되지 않습니다.

즉, Symbol(), _Symbol 또는 NULL 대신 일반 문자열 매개변수가 지정되면 전체 프로그램 검사가 수행되고 다른 속성 쿼리가 수행됩니다.

때문에 다시 설명해주세요. 포럼 회원들로부터 귀하의 단어에 대한 다양한 해석.

 

하나의 어드바이저/차트/기호가 있는 터미널에서.


 2021.03 . 05 23 : 02 : 02.860 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 189 mcs.
2021.03 . 05 23 : 02 : 24.152 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 339 mcs.
2021.03 . 05 23 : 02 : 53.540 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 915 mcs.
2021.03 . 05 23 : 05 : 35.325 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 223 mcs.
2021.03 . 05 23 : 05 : 41.398 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 245 mcs.
2021.03 . 05 23 : 05 : 44.585 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 376 mcs.
2021.03 . 05 23 : 06 : 35.210 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 173 mcs.
2021.03 . 05 23 : 07 : 38.298 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 290 mcs.
2021.03 . 05 23 : 08 : 50.342 :: CopyTicksRange ( _Symbol ,Ticks, COPY_TICKS_INFO ,From)] = 102 mcs.
2021.03 . 05 23 : 14 : 58.216 :: SymbolInfoTick ( _Symbol ,Tick)] = 447 mcs.

15분 만에 이런 로그인이 됩니다. 아직 브레이크 윈도우에 있는 것 같습니다. 이 경우입니다.

 2021.03 . 05 23 : 49 : 20.792 Terminal        MetaTrader 5 x64 build 2815 started for MetaQuotes Software Corp.
2021.03 . 05 23 : 49 : 20.792 Terminal        Windows Server 2019 build 17763 , Intel Core i7- 7700 K  @ 4.20 GHz, 17 / 31 Gb memory, 3698 / 3725 Gb disk, IE 11 , RDP, UAC, GMT+ 2
 

Market Review가 야기하는 제동을 보여주는 예시.

프로세서 열의 값을 확인하십시오(오른쪽에서 두 번째).

 
서버 지연에 터미널 지연이 추가됩니다.

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

표시기: 핑

fxsaber , 2021.03.12 10:56

나는 이 훌륭한 지표에 대해 기억했습니다.

이것은 핑이 0인 기계의 사진입니다. 터미널의 내부 지연은 평균 ~2ms인 것으로 나타났습니다. 0-9ms 범위에서 점프합니다.


예를 들어, 두 개의 틱이 서버에 왔습니다. 첫 번째 틱은 10ms 후 - 두 번째입니다. 따라서 터미널에서 첫 번째 틱 이후 10ms가 아니라 10-19ms 후에 두 번째 틱을 얻을 수 있습니다. 평균적으로 12ms 후에.

시장에서 거래하는 경우(현재 가격의 시장 또는 예금), 특히 따라잡기가 어려울 것입니다. 여기서 개발자가 무언가를 개선할 수 있는지 여부를 말하기는 어렵습니다.

모스크바 증권 거래소를 보니 상황도 비슷합니다. 사실, MT5 알고리즘을 통한 거래는 불행히도 맛있는 것을 집어들 시간이 없는 실행 대기열의 끝에 있는 것이 거의 보장될 것입니다.

Акцептирование SL/TP-ордеров
Акцептирование SL/TP-ордеров
  • 2020.11.24
  • www.mql5.com
В этой ветке пойдет речь об ордерах, которые создаются в результате срабатывания SL/TP-уровней открытых позиций...