MT5와 속도 - 페이지 86

 
fxsaber :

@Anton , 많은 일반 함수에서 문자 대신 NULL을 지정할 수 있습니다. 실행 속도에 영향을 줍니까?

아니면 터미널/테스터에 차이가 없습니까?

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

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

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

 
Slava :

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

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

Slava, 당신은 논평할 수 있습니다: 주식에서, 기호 사양의 틱 가격은 '0'으로 설정됩니다. 지원팀은 다음과 같이 말합니다.

"기술 부서로부터 확인을 받았습니다. 주식에 대한 "Tick price" 매개변수를 채울 수 없음을 알려드립니다. 값은 기본적으로 0으로 표시됩니다.
문의해 주셔서 감사합니다!"


정말 사실인가요? 주식에 대한 틱의 가격이 0이라는 것은 기호의 사양에 있습니까?

 
Vladimir Karputov :

Slava, 당신은 논평할 수 있습니다: 주식에서, 기호 사양의 틱 가격은 '0'으로 설정됩니다. 지원팀은 다음과 같이 말합니다.

"기술 부서로부터 확인을 받았습니다. 주식에 대한 "Tick price" 매개변수를 채울 수 없음을 알려드립니다. 값은 기본적으로 0으로 표시됩니다.
문의해 주셔서 감사합니다!"


정말 사실인가요? 주식에 대한 틱의 가격이 0이라는 것은 기호의 사양에 있습니까?

네. 뉘앙스가 있습니다.

0으로 설정하면 자신을 계산해야 합니다. 브로커에게 공식에 대해 문의하십시오.

 
fxsaber :

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

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

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

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

 
Renat Fatkhullin :

아니다.

프로그램의 어느 곳에서나 항상 임의의 지연을 포착합니다. 모든 것을 따라 시작하고 Windows의 현실에 경악하십시오. 이미 여러 번 자세히 설명했습니다.

우리는 또한 시스템 WinAPI 기능에서 0ms 대신 60-80ms의 임의 방출을 포착했을 때 놀랐습니다.


이제 우리는 대부분의 Windows 솔루션을 특별히 탈지된 Windows Server 2019 Core 버전으로, .NET Core 웹 프로젝트를 Linux로 대규모로 전송하고 있습니다. 그 결과 시스템 리소스가 크게 절약되고 시스템 대기 시간이 크게 줄어듭니다.

MataTrader 5 터미널 그리스 제거의 첫 번째 단계로 작업 관리자를 도입하여 리소스 소비를 즉석에서 모니터링하기 시작했습니다. 우리는 더 많은 정보를 수집합니다.

우리는:

  • 초과 흐름을 너무 오랫동안 유지
  • 과도한 스케일링
  • 캐시 과다 노출
다음 릴리스에서는 일부 리소스 문제를 단계별로 수정할 것입니다.

그것은 여전히 나쁘지 않고 텐치 아래의 터미널))))

 
Slava :

네. 뉘앙스가 있습니다.

0으로 설정하면 자신을 계산해야 합니다. 공식에 대해 중개인에게 문의하십시오

SymbolInfoXXXX 를 통해 모든 것이 정확합니다. 문제는 그들이 주식의 경우 사양에 '0'이 설정되어 있다고 말하는 이유였습니다. 그들은 그들이 말한다, 그래서 분명합니다 - 1틱은 1센트와 같습니다. 하지만 이것이 스펙에 '0'을 넣어야 하는 이유는 아니겠죠?

 
fxsaber :

함수 내에서 여전히 해당 눈금 기호로 이동해야 합니다. 문자열 변수를 구문 분석할 시간입니다. NULL을 사용하면 이것은 불필요합니다.

그런 다음 확인했습니다 . 성능에서 큰 차이를 찾지 못했습니다. 자신을 확인할 수 있습니다

 
Slava :

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

정보 주셔서 감사합니다! 이렇게하는 것이 더 나은 것으로 나타났습니다.

 // Быстрый SymbolInfoTick.
bool SymbolInfoTickFast( const string &Symb, MqlTick &Tick )
{
   return ((Symb == _Symbol ) ? SymbolInfoTick ( _Symbol , Tick)
                           : SymbolInfoTick (Symb, Tick));
}
 
fxsaber :

정보 주셔서 감사합니다! 이렇게하는 것이 더 나은 것으로 나타났습니다.

기술적 인 세부 사항이 없어도 내 기능에서 어떻게 다르게 수행 될 수 있는지 상상할 수 없었습니다 ...

이 구성이 표준 SymbolInfoTick() 보다 더 빨라야 하는 이유는 무엇입니까?

 
Artyom Trishkin :

이 구성이 표준 SymbolInfoTick() 보다 더 빨라야 하는 이유는 무엇입니까?

더 빠르게.