iClose/iOpen 시계열 등에 대한 액세스 작업 시 MQL5 버그

 
여기요!
 

#property tester_everytick_calculate로 문제를 해결할 수 있습니까?

24. MQL5: 사용자 지정 표시기 #property tester_everytick_calculate에 대한 새 속성을 추가했습니다. 전략 테스터에서 사용되며 각 틱에서 지표 계산을 강제할 수 있습니다.

25. 테스터: 이제 비시각적 테스트/최적화 중에 사용된 모든 지표(표준 및 사용자 지정)는 데이터 요청 시에만 계산됩니다. 예외는 함수 호출을 포함하는 표시기입니다.   이벤트 차트 사용자 지정   핸들러 사용   온타이머 . 이전에는 전략 테스터에서 틱이 도착하면(심지어 다른 사람의 기호에서도) 모든 지표가 무조건 계산되었습니다. 혁신을 통해 테스트 및 최적화 속도를 크게 높일 수 있었습니다.

각 틱에서 표시기 계산을 강제 실행하려면 #property tester_everytick_calculate 속성을 프로그램에 추가하십시오.

이전 버전의 컴파일러에서 컴파일된 표시기는 각 틱에서 이전과 같이 계산됩니다.
 

또한 다른 사람의 시간 프레임으로 작업하는 경우 1분에 한 번 이 시간 프레임(모든 CopyXXXX 기능)에서 OHLC를 수신해야 한다는 것이 항상 권장되었습니다.

여기에서 다른 사람의 시간 프레임으로 작업할 때 iXXXX 격세를 사용할 필요가 없지만 CopyXXXX 기능을 사용해야 합니다.

 
Vladimir Karputov :

또한 다른 사람의 시간 프레임으로 작업하는 경우 1분에 한 번 이 시간 프레임(모든 CopyXXXX 기능)에서 OHLC를 수신해야 한다는 것이 항상 권장되었습니다.

여기 에서 다른 사람의 시간 프레임으로 작업할 때 iXXXX 격세를 사용할 필요가 없지만 CopyXXXX 기능을 사용해야 합니다.

심각하지 않습니다!

그렇다면 왜: iHigh ( Symbol (), TF , i);

추신: MT4에서는 창단 첫날부터 아무 문제 없이 잘 돌아가고 있는데, MT5에서도 탬버린과 함께 춤을 추지 않도록 해보는 건 어떨까요? MT4에서 작동하면 MT5에서도 작업을 설정할 수 있습니다.
 
Vitaly Muzichenko :

심각하지 않습니다!

그렇다면 왜: iHigh ( Symbol (), TF , i);

추신: MT4에서는 창단 첫날부터 아무 문제 없이 잘 돌아가고 있는데, MT5에서도 탬버린과 함께 춤을 추지 않도록 해보는 건 어떨까요? MT4에서 작동하면 MT5에서도 작업을 설정할 수 있습니다.

또한 다른 사람의 시간 프레임으로 작업하는 경우 1분에 한 번 이 시간 프레임(모든 CopyXXXX 기능)에서 OHLC를 수신해야 한다는 것이 항상 권장되었습니다. 항상 그래왔다.

 
double high_k = NormalizeDouble ( iHigh ( Symbol (),TimeFrames, k),DigitsM);
double low_k = NormalizeDouble ( iLow ( Symbol (),TimeFrames, k),DigitsM);
double open_k = NormalizeDouble ( iOpen ( Symbol (),TimeFrames, k),DigitsM);
double close_k = NormalizeDouble ( iClose ( Symbol (),TimeFrames, k),DigitsM);

RefreshRates를 사용하기 전에 따옴표를 업데이트하십시오.

 
Dmitry Fedorchenko :

RefreshRates를 사용하기 전에 따옴표를 업데이트하십시오.

"RefreshRates"는 존재하지 않는 기능입니다.

 
Vladimir Karputov :

"RefreshRates"는 존재하지 않는 기능입니다.

나는 약
https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/csymbolinfo/csymbolinforefreshrates

어드바이저에만 비슷한 문제가 있었는데 도움이 되었습니다.

 
Farkhat Guzairov :
이 표시기의 MQL4 버전은 2년 이상 작동했으며 이러한 문제/오류는 발견된 적이 없습니다.

CopyXXX는 당신을 도울 수 없습니다. 이것은 30번째 빌드부터 시작되어 44개까지 수정되지 않은 MT5 버그입니다. 마지막 5-6페이지 https://www.mql5.com/ru/forum/285631/page29 를 읽으면 혼자가 아님을 알 수 있습니다.

Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
  • 2018.11.13
  • www.mql5.com
26 октября 2018 года будет выпущена обновленная версия платформы MetaTrader 5...
 
Farkhat Guzairov :

안녕하세요!

현재 MQL4에서 MQL5로 이전에 작성된 지표 를 전송하고 있습니다. 탬버린과 함께 큰 춤은 아니지만 모든 것이 괜찮아 보이지만 ....

어느 시점에서 표시기 데이터 업데이트가 중지됩니다. 오랫동안 오류가 발생한 위치를 정확히 이해할 수 없었습니다. 순전히 우연히 iClose / iOpen 값 등을 알아차렸습니다. 어느 시점에서 그들은 업데이트를 중지합니다. 같은 값을 반환합니다.

재미있는 점은 소스 코드를 다시 컴파일하더라도 표시기는 여전히 잘못된 데이터를 제공하지만 표시기는 다음 기능을 수행하는 것을 볼 수 있다는 것입니다.

표시기 속성을 열고 "확인"을 통해 닫는 경우에만 데이터가 업데이트되고 올바르게 반영되지만 특정 시점까지는 언제든지 발생할 수 있습니다(하지만 100% 발생). 이 경우 지표는 2018.11.14 00:00에 데이터 업데이트를 중지했으며 일반적으로 일정 시간이 지나면 정기적으로 발생합니다.

이전에 공개된 또 다른 버그는 iBars(Symbol(),TimeFrames)/Bars(Symbol(),TimeFrames) 함수가 null 값을 반환한다는 것입니다. 다행스럽게도 이 버그는 영구적인 오류의 성격을 가지고 있지는 않지만 발생하므로 사용자가 제어해야 합니다.

MQ가 MQL4에 대한 지원을 중단하는 것으로 나타났습니다. 이는 훌륭하지만 MQL5에서 관찰되는 이러한 버그로 인해 모든 것이 매우 슬플 것입니다.

그렇다면 위에서 설명한 문제는 어떻게 해결됩니까?

1) 하나의 OnTick/OnCalculate 계산의 실행 시간을 마이크로초 단위로 측정하고 로그에 출력합니다.

이렇게 하면 하나의 틱을 계산하는 데 얼마나 많은 시간이 소요되는지 확인할 수 있습니다. 그런 다음 이 속도로 초당 계산할 수 있는 틱 수를 평가하십시오. 확실히 12개 이하의 틱이 있으며 초당 더 많은 틱이 있음이 밝혀졌습니다.


2) 데이터를 추출하는 차트/시간 프레임에 첨부된 지표에서 각 OnCalculate의 계산 시간을 측정합니다.

아마 비슷한 상황이 있을 것입니다. 느린 계산으로 인해 터미널은 계산된 symbol:timeframe이 잠금 해제될 때까지 기다립니다. 다른 사람들의 차트 반환을 동결시키는 것은 특히 깊은 역사에서 브레이크 표시기입니다.


지표를 개발할 때 성과 문제와 경제적 재계산을 가장 먼저 고려해야 합니다. 그렇지 않으면 주변의 모든 것을 죽일 것입니다.

 
Renat Fatkhullin :

다른 사람들의 차트 반환을 동결시키는 것은 특히 깊은 역사에서 브레이크 표시기입니다.

그럼 왜 내 동결 현상이 일어나는지 말해주세요. OnTick의 내 데이터 반환은 표시기 폴링 기능으로 고정됩니다. 즉, M1에 의한 CopyTime 업데이트는 OnTick에서 나머지 처리를 시작하는 트리거 역할을 하며 CopyTime 전에 기능이나 표시기 폴링이 없습니다.

그리고 30번째 빌드 이전에는 왜 그런 문제가 없었고 2017년 10월 이후로 모든 것이 완벽하게 작동했습니까?