사용자 정의 기호. 오류, 버그, 질문, 제안. - 페이지 25

 
jaffer wilson :

내 쪽에서 작동하지 않습니다.

이것은 내 MT5 버전 세부 정보입니다.


시스템 시간 오류를 변경해 보십시오.

 //+------------------------------------------------------------------+
//|                                           SpeedupSystemTimer.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property description "Уменьшает погрешность системного таймера до 1 ms"

#import "winmm.dll"
   int timeBeginPeriod( uint per);
#import

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
void OnInit ()
{
   timeBeginPeriod( 1 );
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick ()
{
   ExpertRemove ();
}
//+------------------------------------------------------------------+
 
Roman :


시스템 시간 오류를 변경해 보십시오.

난 노력 했어. 파일을 확인해주세요. 그리고 비디오. 당신은 배울 것이다. 사회자에게 첨부파일을 보라고 하기도 합니다.

커스텀 캐릭터 도 마찬가지입니다.

파일:
 
jaffer wilson :

난 노력 했어. 파일을 확인해주세요. 그리고 비디오. 당신은 배울 것이다. 사회자에게 첨부파일을 보라고 하기도 합니다.

사용자 지정 기호도 마찬가지입니다.

TimeCurrent() 문서 읽기

 
Roman :

TimeCurrent() 문서 읽기

나는 당신이 파일을 실행하지 않았다고 가정합니다. 옆에서 한 번 실행해 주세요. 내 프로그램은 초가 0 이하가 되는 현재 시간을 얻기 위해 TimeCurrent ()를 사용합니다. 그러면 SetTime() 함수가 호출됩니다.

그런 다음 남은 시간이 50초이면 TimeCurrent()를 확인하지 않고 초를 감소시킵니다. OnTimer()가 호출될 때 표시되어야 한다고 생각합니다. 그러나 그것은 보이지 않습니다. 한 번 확인해주세요.

 
jaffer wilson :

나는 당신이 파일을 실행하지 않았다고 가정합니다. 옆에서 한 번 실행해 주세요. 내 프로그램은 초가 0 이하가 되는 현재 시간을 얻기위해 TimeCurrent ()를 사용합니다. 그러면 SetTime() 함수가 호출됩니다.

그런 다음 남은 시간이 50초이면 TimeCurrent()를 확인하지 않고 초를 감소시킵니다. OnTimer()가 호출될 때 표시되어야 한다고 생각합니다. 그러나 그것은 보이지 않습니다. 한 번 확인해주세요.

나는 당신의 파일을 실행했지만 당신의 코드에서 핸들러를 우선시했습니다.
이 두 표시기는 TimeCurrent() 함수의 특성을 고려하여 거의 동일하게 작동합니다.


추가되었습니다.
이 게시물에서 OnTimer() 지연에 대한 개발자의 관심을 끌고 싶습니다.

파일:
 
Roman :

이 게시물에서 OnTimer() 지연에 대한 개발자의 관심을 끌고 싶습니다.

타이머는 밀리초 단위로 정확하다고 보장되지 않습니다. 하드웨어 제한으로 인해 보장되지 않습니다.
 
Roman :

이 게시물에서 OnTimer() 지연에 대한 개발자의 관심을 끌고 싶습니다.

16밀리초 - 밀리초가 표시되는 모든 것의 정확도. 어딘가에서 이것은 이미 논의되었습니다.
마이크로초의 경우 정확도는 정상이지만 속도는 느립니다.
 
Nikolai Semko :
16밀리초 - 밀리초가 표시되는 모든 것의 정확도. 어딘가에서 이것은 이미 논의되었습니다.
마이크로초의 경우 정확도는 정상이지만 속도는 느립니다.

시스템 정확도가 ~16밀리초라는 것은 분명합니다.
예제에서는 16개 이상으로 설정되었습니다. EventSetMillisecondTimer(20);
즉, OnTimer() 핸들러는 20밀리초 단위로 실행됩니다.
그러나 댓글에 표시된 카운터는 몇 밀리초 동안 정지된 것 같습니다.
OnTimer() 핸들러가 느려지거나 차트 이벤트 처리 대기열이 느려지는 이유는 명확하지 않습니다.

 
Roman :

시스템 정확도가 ~16밀리초라는 것은 분명합니다.
예제에서는 16개 이상으로 설정되었습니다. EventSetMillisecondTimer(20);
즉, OnTimer() 핸들러는 20밀리초 단위로 실행됩니다.
그러나 댓글에 표시된 카운터는 몇 밀리초 동안 정지된 것 같습니다.
OnTimer() 핸들러가 느려지거나 차트 이벤트 처리 대기열이 느려지는 이유는 명확하지 않습니다.

설립하다

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

각 밀리초를 처리하는 함수를 만드는 방법은 무엇입니까?

니콜라이 셈코 , 2018.09.13 04:45

응 그게 맞아. (주파수만 아니라 주기. 최대 주파수 = 64Hz)

설명을 추가하겠습니다.

타이머 기간 단계 = 15.625밀리초.

저것들. EventSetMillisecondTimer(1) 명령 및 EventSetMillisecondTimer(10) 명령을 사용하면 실제 기간은 15.625ms가 됩니다.

EventSetMillisecondTimer(21) 명령 및 EventSetMillisecondTimer(30) 명령을 사용하면 실제 기간은 31.25ms가 됩니다.

EventSetMillisecondTimer(95) 명령 및 EventSetMillisecondTimer(105) 명령을 사용하면 실제 기간은 109.375ms가 됩니다.

등.

GetTickCount() 값을 1/(2^6)=1/64초(15625마이크로초)마다 변경합니다.
 
Nikolai Semko :

설립하다

GetTickCount() 값을 1/(2^6)=1/64초(15625마이크로초)마다 변경합니다.

감사합니다. 이제 그 이유를 알았습니다.
시스템 타이머 를 변경하는 단계는 여전히 15.625의 배수입니다.

추가되었습니다.
하지만 timeBeginPeriod(1) 함수로 win API 시스템 타이머의 기간을 변경했습니다.
저것들. 이론상 이제 시스템 타이머는 1밀리초로 오버클럭됩니다.
그리고 시스템 타이머 단계는 1밀리초여야 합니다. 맞죠?
그렇다면 왜 카운터는 여전히 해설에 매달려 있습니까?