문제점
대부분의 뉴스 필터는 MQL5 경제 캘린더(CalendarValueHistory)를 참조합니다. 이 캘린더는 전략 테스터(Strategy Tester)에 존재하지 않기 때문에, 백테스트 시 해당 필터들은 아무런 동작도 하지 않습니다. 그 결과, EA는 NFP, CPI 또는 금리 결정 시점에 바로 매매를 진행하게 되며, 백테스트 결과는 실제 시장 상황과 더 이상 일치하지 않게 됩니다. 제가 진행한 테스트 중 하나에서, XAUUSD에 대한 보류 주문이 미국 CPI 발표 5분 전에 체결되었고, 스톱 로스가 45 USD의 슬리피지를 동반하며 실행되었습니다. 단 한 번의 거래로 계획된 위험 금액의 6.5배를 손실 본 셈입니다.
두 번째로, 잘 알려지지 않은 문제가 있습니다. 터미널은 과거 캘린더 시간을 현재 서버 오프셋을 기준으로 변환합니다. GMT+2/GMT+3 브로커에서 여름철에 데이터를 내보내면, 모든 겨울철 이벤트가 1시간 늦게 표시됩니다(서버 시간 기준 15:30이 아닌 16:30에 NFP 발표). 이러한 시간을 기준으로 구축된 필터는 1년 중 절반 동안 잘못된 시간을 차단해 버립니다.
해결책 - 세 개의 파일
NewsCalendarExport.mq5 (스크립트) - 이벤트를 Terminal\Common\Files\NewsCalendar.csv로 내보내고, 각 이벤트를 해당 날짜의 서버 오프셋을 적용하여 재계산합니다. 마지막으로 자체 점검 결과를 출력합니다: USD 이벤트가 가장 빈번하게 발생하는 시간은 겨울과 여름에 동일해야 합니다.
NewsFilter.mqh (CNewsFilter 클래스) - 실시간 거래와 백테스트 모두에 사용되는 단일 필터입니다. 실시간 거래 시에는 경제 캘린더를 읽으며(분당 최대 1회 조회), 전략 테스터에서는 CSV 파일을 읽습니다. 해당 심볼의 통화만 사용됩니다(EURUSD: EUR + USD, XAUUSD: USD, USD로 표시되는 지수 CFD: USD).
NewsFilter_Example.mq5 - 뉴스 창이 시작되고 끝날 때 메시지를 출력하고, 차트에 차단된 창을 표시하는 최소한의 EA로, 테스터의 시각 모드에서 필터가 작동하는 모습을 확인할 수 있습니다.
사용 방법
NewsFilter.mqh 파일을 MQL5\Include 폴더로, NewsCalendarExport.mq5 파일을 MQL5\Scripts 폴더로, NewsFilter_Example.mq5 파일을 MQL5\Experts 폴더로 복사하십시오. 스크립트와 예제 파일을 컴파일하십시오(.mqh 파일은 이들과 함께 자동으로 컴파일됩니다).
연결된 터미널의 아무 차트에서든 NewsCalendarExport를 한 번 실행하십시오. Experts 탭에 "OK: same time in winter and summer"가 표시되어야 합니다.
EA에 다음 코드를 추가하십시오:
C++
#include <NewsFilter.mqh>
CNewsFilter news;
int OnInit()
{
news.Init(_Symbol, 30, 30); // 각 이벤트 전후 30분 동안 차단
return(INIT_SUCCEEDED);
}
void OnTick()
{
if(news.IsBlocked())
return; // 뉴스 기간 중 새로운 항목 없음
// ... 진입 로직 ...
}
평소처럼 백테스트를 실행합니다. 저널에는 해당 종목에 대해 몇 개의 이벤트가 로드되었는지 표시됩니다.
스크립트 입력값
이벤트 내보내기 시작일: 내보내기를 시작할 날짜.
또한 향후 N일 동안 예정된 이벤트도 내보내기: 향후 발생할 이벤트를 포함합니다.
통화: 쉼표로 구분된 목록 (기본값: USD, EUR, GBP, JPY, CAD, AUD, NZD, CHF).
중요도: 영향도가 높은 이벤트만, 또는 중간 및 높은 영향도의 이벤트.
브로커 서버 일광 절약 시간제(DST) 규칙: 미국 규칙(기본값, 서버 = 뉴욕 + 7시간, 대부분의 GMT+2/+3 브로커), EU 규칙 또는 일광 절약 시간제 없음.
파일 이름: Terminal\Common\Files에 저장됩니다.
CNewsFilter::Init(symbol, minutesBefore, minutesAfter, mediumToo = false, csvFile = "NewsCalendar.csv")
참고 사항 및 제한 사항
FTMO(GMT+2 / GMT+3, 미국 DST 규칙) 및 IC Markets EU에서 테스트되었습니다. 출력 예시: 5645건의 이벤트가 내보내졌으며, 그중 1897건이 1시간씩 이동되었습니다. 수정 전 가장 빈도가 높은 USD 시간은 겨울철 16:30, 여름철 15:30이었으나, 수정 후에는 두 계절 모두 15:30으로 변경되었습니다.
자가 진단 결과 여전히 겨울과 여름의 시간이 다르게 표시된다면, 다른 "브로커 서버 일광 절약 시간제 규칙"을 시도해 보십시오.
MQL5 캘린더의 기록은 제한적이며 터미널에 따라 다릅니다. 제 터미널에서는 2020년부터 시작되므로, 그 이전의 백테스트에는 이벤트가 포함되지 않습니다.
심볼의 통화만 사용되므로, 지수 및 상품의 경우 호가 통화에 따라 적용되는 이벤트가 결정됩니다.
원격 및 클라우드 에이전트는 Common\Files를 읽을 수 없으므로, 로컬 에이전트를 사용하여 최적화하십시오.
일부 통화(예: AUD)의 경우 MQL5 캘린더에 영향도가 높은 이벤트가 거의 없습니다. 이러한 통화의 경우 “중간 + 높은 영향도”를 사용하십시오.
이 필터는 EA에 새로운 거래를 열지 말아야 할 때만 알려줍니다. 이미 열린 포지션을 관리하는 것은 EA의 몫입니다.
새로운 이벤트를 반영하려면 수시로 스크립트를 다시 실행하십시오.
이 필터를 통합하는 데 도움이 필요하신가요?
코딩에 익숙하지 않으시면서 이 뉴스 필터를 기존 EA에 통합하고 싶으시거나, 프로프 펌 평가에 맞춰 맞춤형 리스크 관리 규칙이 필요하신 경우, 제 MQL5 프리랜서 프로필을 통해 직접 연락해 주세요. 기꺼이 코딩해 드리겠습니다!