MQL5 위자드는 전문가 고문(EA)의 코드를 자동으로 생성할 수 있는 도구입니다. 자세한 내용은 MQL5 위자드에서 준비된 전문가 고문 만들기를 참조하세요.
이번 포스트에서는 이동 평균(MA) 지표를 활용한 가격 교차 기반의 트레이딩 전략을 소개할게요. 이 전략은 "MA를 통한 가격 교차 기반의 신호"라고 불리며, MQL5 위자드에서 EA를 자동으로 생성할 때 사용됩니다.
트레이드 신호
- 매수: 가격이 이동 평균을 상향으로 교차할 때
- 매도: 가격이 이동 평균을 하향으로 교차할 때
- MA의 상승/하락 체크로 잘못된 신호를 필터링합니다.
이 전략은 CSignalMA 클래스에서 구현되어 있으며, MQL5 표준 라이브러리의 트레이딩 전략 클래스에 포함되어 있습니다 (MQL5\Include\Expert\Signal\SignalMA.mqh 위치에 있음).

이동 평균을 통한 가격 교차 기반의 트레이드 신호
트레이딩 전략의 구현
이 트레이딩 전략은 CSignalMA 클래스에 구현되어 있으며, 지표와 가격 값에 접근하는 데 도움을 주는 여러 보호된 메소드가 있습니다:
double MA(int ind) // 바의 이동 평균 값 반환 double Open(int ind) // 바의 시가 반환 double Close(int ind) // 바의 종가 반환 double StateMA(int ind) // 평균이 상승하면 양수, 하락하면 음수 반환 double StateOpen(int ind) // 시가와 이동 평균의 차이 반환 double StateClose(int ind) // 종가와 이동 평균의 차이 반환
1. 롱 포지션 오픈
롱 포지션을 열기 위한 조건(가격이 MA를 교차하고 MA 상승 확인):
- Open(1)<MA(1): 시가가 이동 평균보다 낮음;
- Close(1)>MA(1): 종가가 이동 평균보다 높음;
- MA(1)>MA(2): 이동 평균의 상승을 확인하여 잘못된 신호 필터링.
//+------------------------------------------------------------------+ //| 롱 포지션 오픈 조건 체크 | //+------------------------------------------------------------------+ bool CSignalMA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { price=0.0; sl =0.0; tp =0.0; //--- 가격이 MA를 상향 교차하고 MA가 상승함 return(StateOpen(1)<0 && StateClose(1)>0 && StateMA(1)>0); }
2. 롱 포지션 종료
롱 포지션을 종료하기 위한 조건(가격이 MA를 교차하고 MA 하락 확인):
- Open(1)>MA(1): 시가가 이동 평균보다 높음;
- Close(1)<MA(1): 종가가 이동 평균보다 낮음;
- MA(1)<MA(2): 이동 평균의 하락을 확인하여 잘못된 신호 필터링.
//+------------------------------------------------------------------+ //| 롱 포지션 종료 조건 체크 | //+------------------------------------------------------------------+ bool CSignalMA::CheckCloseLong(double& price) { price=0.0; //--- 가격이 이동 평균을 하향 교차하고 이동 평균이 하락함 return(StateOpen(1)>0 && StateClose(1)<0 && StateMA(1)<0); }
3. 숏 포지션 오픈
숏 포지션을 열기 위한 조건은 롱 포지션 종료 조건과 동일합니다.
//+------------------------------------------------------------------+ //| 숏 포지션 오픈 조건 체크 (판매) | //+------------------------------------------------------------------+ bool CSignalMA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { price=0.0; sl =0.0; tp =0.0; //--- 가격이 이동 평균을 상향 교차하고 이동 평균이 하락함 return(StateOpen(1)>0 && StateClose(1)<0 && StateMA(1)<0); }
4. 숏 포지션 종료
숏 포지션을 종료하기 위한 조건은 롱 포지션 오픈 조건과 동일합니다.
//+------------------------------------------------------------------+ //| 숏 포지션 종료 조건 체크 | //+------------------------------------------------------------------+ bool CSignalMA::CheckCloseShort(double& price) { price=0.0; //--- 가격이 이동 평균을 상향 교차하고 이동 평균이 상승함 return(StateOpen(1)<0 && StateClose(1)>0 && StateMA(1)>0); } //+------------------------------------------------------------------+
MQL5 위자드를 활용한 전문가 고문 만들기
이 전략 기반의 트레이딩 로봇을 만들기 위해서는 "MA를 통한 가격 교차 기반의 신호"를 신호 속성으로 선택한 후 MQL5 위자드의 "준비된 전문가 고문 만들기" 옵션에서 진행하면 됩니다:

MQL5 위자드에서 신호 선택하기
그 다음 필요한 트레일링 스톱 알고리즘과 자금 및 리스크 관리 시스템을 설정하면, EA의 코드가 자동으로 생성됩니다. 이후 이를 컴파일하고 전략 테스터에서 테스트할 수 있습니다.
테스트 결과
이제 이 전문가 고문을 과거 데이터(EURUSD H1, 사용자 정의 기간: 2010.01.01-2011.05.01, MA_period=12, MA_Shift=0)를 이용해 백테스트해보겠습니다.
전문가 고문 제작 시 고정 볼륨(고정 로트 거래, 0.1)을 사용하였으며, 트레일링 스톱 알고리즘은 사용하지 않았습니다 (트레일링 미사용).

이동 평균 교차 백테스트 결과
첨부 파일: SignalMA.mqh 파일과 CSignalMA 클래스를 포함한 파일은 MQL5\Include\Expert\Signal 폴더에 위치해 있습니다. crossoverma.mq5 파일은 MQL5 위자드를 사용하여 생성된 전문가 고문의 코드가 포함되어 있습니다.