EA 로그 설계|사고를 나중에 재현하는 법
목차 (6)
목차
결론: 로그가 없는 EA는 사고가 나도 검증할 수 없다
결론부터 말씀드립니다. EA 로그에는 최소한 '판단에 사용한 값', '진입하지 않은 이유', '체결 결과' 세 가지를 각각 한 줄씩 남겨야 합니다. 이 세 가지가 있으면 예상 밖의 거래나 '아무 일도 일어나지 않은' 상황을 나중에 재현할 수 있습니다. 반대로 없으면 손실이 났을 때도, 거래가 계속 0건일 때도 원인이 EA의 로직인지, 시장인지, 브로커 쪽인지 가려낼 수 없습니다.
저희도 EA를 개발하면서 로그 덕분에 도움을 받은 적도 있고, 로그가 부족해 원인을 끝내 알지 못한 적도 있습니다. 이 글에서는 운용하는 입장에서 '좋은 로그'란 무엇인지 정리합니다.
추천 브로커 비교 →
🎁 무료 EA 다운로드📧 무료 이메일 강좌(총 8통) + 구독자 전용 MT5 지표 13종 팩
※ 개인정보는 엄격히 보호. 언제든 구독 해지 가능.
왜 세 종류의 로그가 필요한가
EA의 한 번의 판단은 대략 '값 계산 → 조건 판정 → 주문 → 체결'의 흐름입니다. 어느 단계에서 예상과 달라졌는지 나중에 찾아내려면 각 단계의 기록이 필요합니다.
| 로그 종류 | 남길 내용의 예 | 답할 수 있는 질문 |
|---|---|---|
| 판단값 | 확정봉 시각, 지표 값, 임계값, 스프레드 | "왜 거기서 진입했는가" |
| 스킵 이유 | 어떤 조건 때문에 보류했는가(시간대 외·스프레드 초과·기존 포지션 있음 등) | "왜 진입하지 않았는가" |
| 체결 | 요청 가격, 체결 가격, 슬리피지, 리턴 코드, 티켓 번호 | "의도한 대로 체결되었는가" |
판단값: 숫자를 남기지 않으면 '우연'과 구별할 수 없다
'매수 시그널 발생'만 찍는 로그는 별로 도움이 되지 않습니다. 그 시점의 지표 값과 임계값이 얼마나 떨어져 있었는지 모르면, 아슬아슬하게 조건을 충족했는지 확실히 충족했는지 판단할 수 없기 때문입니다. 또 어느 봉(확정봉의 시각)에서 판단했는지도 반드시 남깁니다.
스킵 이유: 가장 빠뜨리기 쉽지만 가장 중요한 로그
많은 EA는 '진입했을 때'만 로그를 남깁니다. 그러나 운용 중 가장 많이 받는 문의는 "전혀 진입하지 않는다"입니다. 보류 이유가 로그에 있다면, 그것이 사양대로의 보류인지 설정 실수나 서버 시각 어긋남 때문인지 확인할 수 있습니다.
저희 MEGAMAX DONCHIAN은 Exness 데모 계좌 포워드 테스트에서 2026년 11월 11일 기준 거래가 0건입니다. 보류 이유는 저희도 아직 확인하지 못했으며, 여기서 추측해서 쓰지는 않겠습니다. 다만 이런 상황에서 보류 이유 로그가 있는지 없는지에 따라 확인에 드는 수고가 크게 달라집니다. 거래 0건이 성적이 나쁘다는 뜻은 아니지만, 로그를 읽기 전에는 '정상적인 보류'라고 단정할 수도 없습니다.
체결: EA 바깥에서 일어난 일을 기록한다
주문이 거부되었는지, 체결되었지만 슬리피지가 컸는지는 EA의 로직과는 별개의 문제입니다. 리턴 코드와 체결 가격을 남겨 두면 EA의 문제와 브로커·회선의 문제를 나누어 생각할 수 있습니다.
한 줄에 무엇을 남길까: 작성 예시
저희는 한 번의 판단을 한 줄로 묶고, 나중에 검색하기 쉬운 고정 형식으로 기록합니다.
[EVAL] bar=2026.11.10 14:00 sig=BUY val=1.234 th=1.200 spread=18 -> ENTRY
[SKIP] bar=2026.11.10 15:00 reason=SPREAD spread=45 max=30
[FILL] ticket=123456 req=152.340 fill=152.346 slip=6 ret=10009
작성 시 포인트는 다음과 같습니다.
- 맨 앞에 종류 태그(EVAL / SKIP / FILL)를 붙여 grep이나 검색으로 찾을 수 있게 한다
- 봉 시각은 '판단에 사용한 확정봉'의 시각을 적는다(서버 시각임을 전제로 한다)
- 이유는 문장이 아니라 정해진 코드로 적는다(SPREAD, TIME, POSITION 등)
- 틱마다 출력하지 않고, 판단한 순간에만 출력한다
틱마다 출력하면 로그가 단기간에 거대해져 디스크를 압박하고 중요한 줄이 묻힙니다. '봉이 확정될 때 한 번'이 기본입니다.
운용하는 쪽의 확인 절차
EA를 사용하시는 분은 다음 순서로 확인하면 원인에 빨리 다가갈 수 있습니다.
- MT5의 '엑스퍼트' 탭에서 EA가 자체 로그를 출력하고 있는지 확인한다
- 예상 밖의 거래가 있었던 시각의 EVAL 줄을 찾아 판단값과 임계값을 본다
- 진입이 없는 기간에는 SKIP 줄을 보고 어떤 이유가 많은지 센다
- FILL 줄에서 요청 가격과 체결 가격의 차이, 리턴 코드를 확인한다
- '거래 내역' 탭(브로커 쪽 기록)과 시각을 대조한다
설정 점검은 EA 설정 방법, 상시 가동 환경 구축은 VPS 정보도 참고해 주세요.
한계와 주의점
로그는 만능이 아닙니다. 솔직하게 적어 둡니다.
- 로그에 적지 않은 것은 알 수 없습니다. 개발자가 예상하지 못한 사건은 애초에 기록되지 않습니다.
- 로그가 항상 옳다고는 할 수 없습니다. 로그를 출력하는 코드 자체에 버그가 있으면 잘못된 값이 기록됩니다.
- 시장 판단의 좋고 나쁨은 알 수 없습니다. 로그로 알 수 있는 것은 '사양대로 동작했는가'이지, 그 사양으로 이길 수 있는가가 아닙니다.
- 너무 많이 남기는 것도 사고의 원인이 됩니다. 대량의 로그는 용량을 압박하고, 읽는 사람도 놓치기 쉬워집니다.
- 백테스트와 데모·실계좌에서는 로그의 의미가 다릅니다. 테스터에서는 슬리피지나 거부가 실제와 똑같이 재현되지 않으므로, 체결 로그를 비교할 때는 환경의 차이를 전제로 하세요.
정리
- 로그에는 '판단값', '스킵 이유', '체결' 세 종류를 한 줄씩 남긴다
- 가장 빠뜨리기 쉬운 것은 보류 이유 로그이며, '움직이지 않는' 원인을 조사할 때 가장 도움이 된다
- 태그와 이유 코드를 정해 두면 나중에 검색해서 집계할 수 있다
- 출력은 확정봉마다 한 번만 하고, 틱마다 출력하지 않는다
- 로그로 알 수 있는 것은 '사양대로 동작했는가'까지이며, 이길 수 있는지는 별도의 검증이 필요하다
그 밖의 MT5 운용 노하우는 EA·MT5 노하우에 정리해 두었습니다.
관련 기사
📧 무료 이메일 강좌(총 8통) + 구독자 전용 MT5 지표 13종 팩
※ 개인정보는 엄격히 보호. 언제든 구독 해지 가능.
EA나 FX에 대해 궁금한 점이 있나요?
Nattzy 트레이딩 포럼에 질문을 올릴 수 있습니다(무료 가입). 이 글의 내용이 아니어도 EA 설정이나 브로커 선택 등 어떤 질문이든 환영합니다.
Nattzy에서 질문하기 ↗