홈 > 블로그 > MQL5 OnTick과 OnTimer | EA 설계 구분법

MQL5EA 개발MT5

MQL5 OnTick과 OnTimer | EA 설계 구분법

공개일: 2026-10-29읽기 시간: 약 4분
⏱ 본 기사는 게시일 시점의 정보입니다. EA의 실적 수치(PF·DD·연율)는 운용 및 재검증으로 변동하므로 최신 값은 각 EA 페이지에서 확인하세요. 최신 EA 실적 보기 →

결론: 판단은 "새 봉"에서, 시간 기반 처리는 OnTimer로

먼저 결론부터 말씀드립니다. H1이나 H4처럼 비교적 긴 시간봉으로 매매를 결정하는 EA라면, 매매 판단은 "새 봉이 생긴 뒤 첫 번째 틱"에서만 수행해도 충분합니다. 틱이 올 때마다 같은 계산을 반복해도 판단 결과는 달라지지 않고 CPU만 소모됩니다. 반면 틱이 오지 않아도 실행하고 싶은 처리에는 OnTimer를 사용합니다. 주말에 상태를 기록하거나, 정해진 시각에 주문을 정리하는 처리가 그 예입니다.

다만 어느 쪽이 옳은지는 전략에 따라 달라집니다. 이 글에서는 두 방식의 차이와 EA를 고르는 입장에서 확인할 수 있는 포인트를 정리합니다.

추천 브로커 비교 →

🎁 무료 EA 다운로드

📧 무료 이메일 강좌(총 8통) + 구독자 전용 MT5 지표 13종 팩

가입 직후, 사이트의 MT5 지표 13종을 컴파일된 파일(.ex5)·소스 코드·사용 가이드로 묶은 구독자 전용 팩의 다운로드 링크를 보내 드립니다. 이어서 FX 자동매매의 본질, 백테스트를 올바르게 읽는 법, 브로커 선택 요령 등을 총 8통(처음 5일은 매일 1통, 이후 가입 7·14·30일 후)으로 전해 드립니다. MQL5 Market 판(출시가·판매량에 따라 단계적 인상)의 가격 인상 전 알림도 받으실 수 있습니다. 이 사이트의 EA는 제휴 브로커의 실계좌가 있으면 무료입니다.

※ 개인정보는 엄격히 보호. 언제든 구독 해지 가능.

동작 원리: 틱 기반과 시간 기반

OnTick (틱 기반)

OnTick은 EA가 실행 중인 종목에 새로운 가격(틱)이 들어올 때마다 호출됩니다. 변동성이 큰 시간대에는 1초에 여러 번 호출되고, 시장이 멈춘 주말에는 한 번도 호출되지 않습니다.

여기서 알아두어야 할 사양이 있습니다. 이전 OnTick 처리가 끝나기 전에 도착한 틱은 대기열에 쌓이지 않고 건너뛰어집니다. 즉, 1회 처리가 무거운 EA는 급격한 가격 변동 중에 틱을 놓치게 됩니다.

OnTimer (시간 기반)

OnTimer는 EventSetTimer()로 지정한 간격마다 호출됩니다. 가격 변동과 무관하게 동작하므로 시장이 닫혀 있는 동안에도 호출됩니다. 타이머는 EA 하나당 하나만 쓸 수 있고, 처리가 밀려 있으면 마찬가지로 건너뛰어집니다. 또한 지정한 간격에 정확히 맞춰 호출된다는 보장도 없습니다.

항목OnTickOnTimer
호출 계기가격 갱신일정 시간 경과
시장이 닫혀 있는 동안호출되지 않음호출됨
호출 횟수시장이 거칠수록 많음거의 일정
적합한 처리진입·청산 판단정기적인 집계, 시각으로 정해지는 처리
주요 주의점무거운 처리로 틱을 놓침새 가격이 없어도 동작함

저빈도 전략에서 CPU를 낭비하지 않는 작성법

H4 봉으로 판단하는 전략이라면, 한 봉이 이어지는 4시간 동안 OnTick이 수천 번 호출되어도 판단에 쓰는 확정 봉의 값은 변하지 않습니다. 그래서 저희는 다음과 같이 "봉이 바뀌었을 때만" 무거운 처리를 통과시키는 형태를 기본으로 하고 있습니다.

datetime g_lastBar = 0;

void OnTick()
{
   datetime cur = iTime(_Symbol, PERIOD_H4, 0);
   if(cur == g_lastBar) return;   // 같은 봉 동안에는 아무것도 하지 않음
   g_lastBar = cur;
   // 여기서 확정 봉(시프트 1)을 사용해 판단한다
}

인디케이터 핸들은 OnInit에서 한 번만 만들고, OnTick 안에서 매번 다시 만들지 않는 것도 중요합니다. OnTimer를 사용하는 경우에는 OnDeinit에서 EventKillTimer()를 호출해 타이머를 멈춥니다.

VPS에서 여러 차트에 EA를 올려 두면 이런 차이가 CPU 부하로 나타납니다. VPS를 고르는 기준은 VPS 정보에 정리해 두었습니다.

EA를 고르는 입장에서 확인할 수 있는 것

내부 코드를 볼 수 없더라도 다음 사항은 어느 정도 확인할 수 있습니다.

  • 설명서와 파라미터: "새 봉에서만 판단" 같은 설정이 있는지
  • VPS의 CPU 사용률: EA 하나를 제거했을 때 부하가 뚜렷하게 내려간다면, 매 틱마다 무거운 처리를 하고 있을 가능성이 있음
  • 전문가 로그: 같은 내용의 출력이 매 틱마다 늘어서 있지 않은지
  • 테스터 결과: 봉의 시가로 판단하는 EA라면 "시가만"과 "모든 틱"의 결과가 크게 달라지지 않아야 함. 크게 어긋난다면 봉 중간의 가격 변동에도 반응하고 있다는 뜻

EA 설치 방법과 설정의 기본은 EA 설정 방법을 참고하세요.

한계와 주의점

불리한 면도 함께 적어 둡니다.

  • 봉 중간의 리스크는 보지 않습니다: 판단을 새 봉으로 한정하면 봉 중간의 급변에는 반응하지 못합니다. 손절은 주문에 붙이는 역지정가(스톱)로 지키도록 설계하지 않으면 예상치 못한 손실을 허용하게 됩니다.
  • 새 봉 인식의 지연: 새 봉이 생겨도 그 봉의 첫 틱이 도착하기 전까지는 처리가 실행되지 않습니다. 가격 변동이 적은 종목이나 시간대에서는 판단이 봉의 시작보다 늦어질 수 있습니다.
  • OnTimer는 테스터와 실제 동작이 어긋나기 쉽습니다: 테스터에서는 타이머가 가상의 시각으로 호출되기 때문에 실제 계좌와 같은 간격이 된다고 장담할 수 없습니다.
  • 처리가 가벼워도 성과는 달라지지 않습니다: CPU 부하를 낮춘다고 더 잘 이기게 되는 것은 아닙니다. 전략의 좋고 나쁨은 별개의 문제입니다.

H4 봉 EA, 예를 들어 ETHEREUM EA처럼 거래가 적은 전략일수록 이런 설계 차이는 겉으로 드러나기 어렵습니다. 다만 외부에서 확인할 수 있는 범위에는 한계가 있습니다. 저희가 단언할 수 있는 것은 저희가 직접 작성한 코드에 대해서뿐입니다.

정리

  • OnTick은 가격이 들어왔을 때, OnTimer는 일정 시간마다 호출된다
  • 처리 중에 도착한 이벤트는 대기열에 쌓이지 않고 건너뛰어진다. 무거운 처리는 틱 누락으로 이어진다
  • 저빈도 전략은 "새 봉일 때만 판단"하는 형태로 만들면 CPU를 낭비하지 않는다
  • 틱이 없는 시간에도 실행하고 싶은 처리에는 OnTimer를 사용한다
  • 봉 중간의 리스크 대비는 역지정가로 한다. 가벼운 처리가 성과를 높여 주는 것은 아니다
  • 그 밖의 노하우는 EA·MT5 노하우에 정리해 두었습니다

📧 무료 이메일 강좌(총 8통) + 구독자 전용 MT5 지표 13종 팩

가입 직후, 사이트의 MT5 지표 13종을 컴파일된 파일(.ex5)·소스 코드·사용 가이드로 묶은 구독자 전용 팩의 다운로드 링크를 보내 드립니다. 이어서 FX 자동매매의 본질, 백테스트를 올바르게 읽는 법, 브로커 선택 요령 등을 총 8통(처음 5일은 매일 1통, 이후 가입 7·14·30일 후)으로 전해 드립니다. MQL5 Market 판(출시가·판매량에 따라 단계적 인상)의 가격 인상 전 알림도 받으실 수 있습니다. 이 사이트의 EA는 제휴 브로커의 실계좌가 있으면 무료입니다.

※ 개인정보는 엄격히 보호. 언제든 구독 해지 가능.

EA나 FX에 대해 궁금한 점이 있나요?

Nattzy 트레이딩 포럼에 질문을 올릴 수 있습니다(무료 가입). 이 글의 내용이 아니어도 EA 설정이나 브로커 선택 등 어떤 질문이든 환영합니다.

Nattzy에서 질문하기 ↗

댓글 및 질문