OnTimer

이 함수는 터미널에서 일정한 시간 간격으로 생성되는 Timer 이벤트 동안 EA 단위로 호출됩니다.

void  OnTimer(void);

반환 값

반환값 없음

참고

Timer 이벤트는 클라이언트 터미널에서 주기적으로 EA에 대해 생성되며, 클라이언트 터미널은 EventSetTimer() 함수를 사용하여 타이머를 활성화합니다. 일반적으로 이 함수는 OnInit() 함수에서 호출됩니다. EA가 작동을 멈추면 EventKillTimer()를 사용하여타이머를 제거해야 하며, 이는 일반적으로 OnDeinit() 함수에서 호출됩니다.

각 Expert Advisor와 지표는 이 타이머에서만 이벤트를 수신하는 자체 타이머로 작동합니다. mql5 애플리케이션 종료 중에 타이머가 생성되었지만 EventKillTimer() 함수에 의해 비활성화되지 않은 경우 타이머가 강제로 폐기됩니다..

초당 한 번 이상 타이머 이벤트를 수신해야 하는 경우 EventSetMillisecondTimer()를 사용하여 고해상도 타이머를 생성하십시오.

일반적으로 타이머 시간이 줄어들면 타이머 이벤트 핸들러가 더 자주 호출되므로 테스트 시간이 늘어납니다. 실시간 모드에서 작업할 경우 하드웨어 제한으로 인해 타이머 이벤트가 10-16밀리초 내에 1회 이상 생성되지 않습니다.

각 프로그램에 대해 타이머를 하나만 시작할 수 있습니다. 각 mql5 애플리케이션 및 차트에는 새로 도착한 모든 이벤트가 배치되는 자체 이벤트 대기열이 있습니다. 대기열에 이미 Timer 이벤트가 포함되어 있거나 이 이벤트가 처리 단계에 있는 경우 새 Timer 이벤트가 mql5 애플리케이션 대기열에 추가되지 않습니다.

샘플 EA OnTimer() 핸들러 포함

//+------------------------------------------------------------------+
//|                                               OnTimer_Sample.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2000-2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property description "거래 서버 시간 계산에 타이머 사용 예제"
#property description "EA는 주말 전에 거래 주 말에 실행하는 것이 좋습니다."
//+------------------------------------------------------------------+
//| Expert 초기화 함수                                                |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 1초의 타이머를 생성
   EventSetTimer(1);
 
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert 초기화 해제 함수                                            |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- 작업 종료 후 타이머 제거
   EventKillTimer();
 
  }
//+------------------------------------------------------------------+
//| Expert 틱 함수                                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
 
  }
//+------------------------------------------------------------------+
//| 타이머 함수                                                       |
//+------------------------------------------------------------------+
void OnTimer()
  {
//--- OnTimer()의 첫 호출 시간
   static datetime start_time=TimeCurrent();
//--- 첫 번째 OnTimer() 호출 중 트레이드 서버 시간
   static datetime start_tradeserver_time=0;
//--- 거래 서버 시간 계산
   static datetime calculated_server_time=0;
//--- 현지 PC 시간
   datetime local_time=TimeLocal();
//--- 현재 예상 거래 서버 시간
   datetime trade_server_time=TimeTradeServer();
//--- 어떤 이유로 서버 시간을 알 수 없는 경우 미리 종료
   if(trade_server_time==0)
      return;
//--- 초기 트레이드 서버 값이 아직 설정되지 않은 경우
   if(start_tradeserver_time==0)
     {
      start_tradeserver_time=trade_server_time;
      //--- 거래 서버의 계산값 설정      
      Print(trade_server_time);
      calculated_server_time=trade_server_time;
     }
   else
     {
      //--- OnTimer()의 첫 호출 시간을 증가시킴
      if(start_tradeserver_time!=0)
         calculated_server_time=calculated_server_time+1;;
     }
//--- 
   string com=StringFormat("                  Start time: %s\r\n",TimeToString(start_time,TIME_MINUTES|TIME_SECONDS));
   com=com+StringFormat("                  Local time: %s\r\n",TimeToString(local_time,TIME_MINUTES|TIME_SECONDS));
   com=com+StringFormat("TimeTradeServer time: %s\r\n",TimeToString(trade_server_time,TIME_MINUTES|TIME_SECONDS));
   com=com+StringFormat(" EstimatedServer time: %s\r\n",TimeToString(calculated_server_time,TIME_MINUTES|TIME_SECONDS));
//--- 차트에 모든 카운터 값 표시
   Comment(com);
  }

더 보기

EventSetTimer, EventSetMillisecondTimer, EventKillTimer, GetTickCount, GetMicrosecondCount, Client terminal events