MQL5 위자드를 사용하면 자동으로 전문가 어드바이저(EA)의 코드를 생성할 수 있습니다. 자세한 내용은 MQL5 위자드에서 준비된 EA 만들기를 참고하세요.
이번 포스트에서는 두 개의 지수 이동 평균(빠른 EMA와 느린 EMA)의 교차를 기반으로 한 거래 전략을 살펴보겠습니다. 이 전략은 “두 EMA의 교차 기반 신호”라고 불리며, MQL5 위자드에서 EA를 자동으로 생성할 때 사용됩니다.
거래 신호:
- 매수: 빠른 EMA가 느린 EMA를 위로 교차할 때
- 매도: 빠른 EMA가 느린 EMA를 아래로 교차할 때
이 전략은 CSignalCrossEMA 클래스에 구현되어 있습니다.

그림 1. 두 개의 지수 이동 평균 교차 기반 거래 신호
거래 신호
거래 전략은 CSignalCrossEMA 클래스에 구현되어 있으며, 지표 값에 쉽게 접근할 수 있도록 몇 가지 보호된 메소드를 제공합니다:
double FastEMA(int ind) // 빠른 이동 평균의 바 값 반환 double SlowEMA(int ind) // 느린 이동 평균의 바 값 반환 double StateEMA(int ind) // 빠른 EMA와 느린 EMA의 차이 반환
1. 롱 포지션 열기
롱 포지션을 열기 위한 조건:
- StateEMA(1) > 0 및 StateEMA(2) < 0: 마지막 완료된 바에서 빠른 EMA가 느린 EMA를 위로 교차했습니다.
//+------------------------------------------------------------------+ //| 롱 포지션 열기 조건 체크 | //+------------------------------------------------------------------+ bool CSignalCrossEMA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { if(!(StateEMA(2)<0 && StateEMA(1)>0)) return(false); //--- price=0.0; sl =0.0; tp =0.0; //--- return(true); }
2. 롱 포지션 닫기
롱 포지션을 닫기 위한 조건:
- StateEMA(1) < 0 및 StateEMA(2) > 0: 마지막 완료된 바에서 빠른 EMA가 느린 EMA를 아래로 교차했습니다.
//+------------------------------------------------------------------+ //| 롱 포지션 닫기 조건 체크 | //+------------------------------------------------------------------+ bool CSignalCrossEMA::CheckCloseLong(double& price) { if(!(StateEMA(2)>0 && StateEMA(1)<0)) return(false); //--- price=0.0; //--- return(true); }
3. 숏 포지션 열기
숏 포지션을 열기 위한 조건은 롱 포지션을 닫기 위한 조건과 동일합니다.
//+------------------------------------------------------------------+ //| 숏 포지션 열기 조건 체크 | //+------------------------------------------------------------------+ bool CSignalCrossEMA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { if(!(StateEMA(2)>0 && StateEMA(1)<0)) return(false); //--- price=0.0; sl =0.0; tp =0.0; //--- return(true); }
4. 숏 포지션 닫기
숏 포지션을 닫기 위한 조건은 롱 포지션을 열기 위한 조건과 동일합니다.
//+------------------------------------------------------------------+ //| 숏 포지션 닫기 조건 체크 | //+------------------------------------------------------------------+ bool CSignalCrossEMA::CheckCloseShort(double& price) { if(!(StateEMA(2)<0 && StateEMA(1)>0)) return(false); //--- price=0.0; //--- return(true); }
MQL5 위자드를 사용한 전문가 어드바이저 생성하기
전략 기반의 거래 로봇을 만들기 위해서는 신호 속성을 “두 EMA의 교차 기반 신호”로 선택해야 합니다. MQL5 위자드의 준비된 전문가 어드바이저 만들기 옵션에서 선택하세요:

그림 2. MQL5 위자드에서 “두 EMA의 교차 기반 신호” 선택하기
다음으로 필요한 트레일링 스톱 알고리즘과 자금 및 리스크 관리 시스템을 지정해야 합니다. 전문가 어드바이저의 코드는 자동으로 생성되며, 이를 컴파일하고 메타트레이더 5 클라이언트 터미널의 전략 테스터에서 테스트할 수 있습니다.
추가로, 표준 라이브러리 클래스에는 CSignalCrossMA 클래스에서 구현된 “두 MA의 교차 기반 신호”가 포함되어 있습니다. 거래 아이디어는 유사하지만, 추가 기능이 많습니다(유형, 이동 평균 방법, 손익 수준 지정 등).

그림 3. MQL5 위자드에서 “두 MA의 교차 기반 신호” 선택하기
테스트 결과
전문가 어드바이저의 히스토리 데이터(EURUSD H1, 테스트 기간: 2010년 1월 1일 ~ 2011년 5월 1일, FastPeriod=12, SlowPeriod=24)를 백테스트 해보겠습니다.
전문가 어드바이저 생성 시 고정 볼륨(고정 로트 거래, 0.1)을 사용하였으며, 트레일링 스톱 알고리즘은 사용하지 않았습니다(트레일링 미사용).

그림 4. 두 EMA 교차 기반 전문가 어드바이저의 히스토리 백테스트 결과
첨부파일: CSignalCrossEMA 클래스가 포함된 SignalCrossEMA.mqh 파일을 terminal_data_folder\MQL5\Include\Expert\Signal 폴더에 배치해야 합니다. crossover_2ema.mq5는 MQL5 위자드를 사용해 생성된 전문가 어드바이저의 코드입니다.