MQL5 위자드는 전문가 어드바이저(EA)를 자동으로 생성할 수 있는 훌륭한 도구입니다. 프로그램을 작성하지 않고도 EA를 만드는 방법에 대해서는 MQL5 위자드: 프로그래밍 없이 전문가 어드바이저 만들기를 참조하세요.
이번 포스팅에서는 B. Williams가 "Trading Chaos"에서 제시한 올리게이터 기술 지표를 기반으로 한 거래 신호에 대해 알아보겠습니다. 이 전략은 올리게이터 기반 신호라고 불리며, MQL5 위자드에서 EA를 자동으로 생성할 때 사용됩니다.
이 시스템은 세 가지 이동 평균(립스, 이빨, 턱선)과 이들 간의 차이를 이용하여 계산된 오실레이터를 기반으로 합니다. 거래 신호는 올리게이터 선들이 교차할 때 생성되며, 이들 선의 순서에 따라 추세가 결정됩니다. 상승 추세의 경우 립스 선이 가장 높고, 그 다음이 이빨 선, 마지막이 턱선입니다. 하락 추세의 경우는 반대입니다.
거래 신호는 다음과 같습니다:
- 롱 포지션 열기: 올리게이터 선의 교차와 상승 추세에서 선들 간의 거리 증가;
- 롱 포지션 닫기: 립스 선이 턱선과 교차할 때;
- 숏 포지션 열기: 올리게이터 선의 교차와 하락 추세에서 선들 간의 거리 증가;
- 숏 포지션 닫기: 립스 선이 턱선과 하향 교차할 때;
이 전략은 CSignalAlligator 클래스에 구현되어 있습니다.

올리게이터 기술 지표를 기반으로 한 거래 신호
거래 신호
이 거래 전략은 CSignalAlligator에 구현되어 있으며, 지표 값에 접근을 간소화하기 위한 몇 가지 보호 메서드를 가지고 있습니다:
double Jaw(int ind) // 바의 턱선 값 반환 double Teeth(int ind) // 바의 이빨 선 값 반환 double Lips(int ind) // 바의 립스 선 값 반환 double LipsTeethDiff(int ind) // 립스와 이빨 선의 차이 반환 double TeethJawDiff(int ind) // 이빨과 턱선의 차이 반환 double LipsJawDiff(int ind) // 립스와 턱선의 차이 반환 bool CheckCross(); 올리게이터 선의 교차 확인
1. 롱 포지션 열기
거래 조건 확인에는 립스, 이빨, 턱선의 이동에 따른 몇 가지 특징이 있습니다.
롱 포지션을 열기 위한 조건:
- CheckCross를 이용해 교차 여부와 선들 간의 거리 증가를 확인합니다;
- LipsTeethDiff(-2)>=LipsTeethDiff(-1) 및 LipsTeethDiff(-1)>=LipsTeethDiff(0); 립스와 이빨 선 간의 거리 증가 확인;
- LipsTeethDiff(0)>=0.0; 립스 선이 이빨 선보다 높음;
- TeethJawDiff(-2) >=TeethJawDiff(-1) 및 TeethJawDiff(-1) >=TeethJawDiff(0); 이빨과 턱선 간의 거리 증가 확인;
- TeethJawDiff(0) >=0.0; 이빨 선이 턱선보다 높음.
//+------------------------------------------------------------------+ //| 롱 포지션을 열기 위한 조건 확인 | //+------------------------------------------------------------------+ bool CSignalAlligator::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { if(CheckCross()) return(false); //--- price=0.0; sl =0.0; tp =0.0; //--- if(LipsTeethDiff(-2)>=LipsTeethDiff(-1) && LipsTeethDiff(-1)>=LipsTeethDiff(0) && LipsTeethDiff(0)>=0.0 && TeethJawDiff(-2) >=TeethJawDiff(-1) && TeethJawDiff(-1) >=TeethJawDiff(0) && TeethJawDiff(0) >=0.0) m_crossed=true; //--- return(m_crossed); }
2. 롱 포지션 닫기
롱 포지션을 닫기 위한 조건 (선의 이동에 주의):
- LipsTeethDiff(-1)<0; 다음 바의 립스 선이 이빨 선보다 낮음;
- LipsTeethDiff(0)>=0; 현재 바의 립스 선이 이빨 선보다 높거나 같음;
- LipsTeethDiff(1)>0; 이전 바의 립스 선이 이빨 선보다 높음.
//+------------------------------------------------------------------+ //| 숏 포지션을 열기 위한 조건 확인| //+------------------------------------------------------------------+ bool CSignalAlligator::CheckCloseLong(double& price) { price=0.0; //--- return(LipsTeethDiff(-1)<0 && LipsTeethDiff(0)>=0 && LipsTeethDiff(1)>0); }
3. 숏 포지션 열기
숏 포지션을 열기 위한 조건:
- CheckCross를 이용해 교차 여부와 선들 간의 거리 증가를 확인합니다;
- LipsTeethDiff(-2)<=LipsTeethDiff(-1) 및 LipsTeethDiff(-1)<=LipsTeethDiff(0); 립스와 이빨 선 간의 거리 증가 확인;
- LipsTeethDiff(0)<=0.0; 현재 바의 립스 선이 이빨 선보다 낮음;
- TeethJawDiff(-2)<=TeethJawDiff(-1) 및 TeethJawDiff(-1)<=TeethJawDiff(0); 이빨과 턱선 간의 거리 증가 확인;
- TeethJawDiff(0) <=0.0; 현재 바의 이빨 선이 턱선보다 낮음;
//+------------------------------------------------------------------+ //| 숏 포지션을 열기 위한 조건 확인| //+------------------------------------------------------------------+ bool CSignalAlligator::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { if(CheckCross()) return(false); //--- price=0.0; sl =0.0; tp =0.0; //--- if(LipsTeethDiff(-2)<=LipsTeethDiff(-1) && LipsTeethDiff(-1)<=LipsTeethDiff(0) && LipsTeethDiff(0)<=0.0 && TeethJawDiff(-2) <=TeethJawDiff(-1) && TeethJawDiff(-1) <=TeethJawDiff(0) && TeethJawDiff(0) <=0.0) m_crossed=true; //--- return(m_crossed); }
4. 숏 포지션 닫기
숏 포지션을 닫기 위한 조건:
- LipsTeethDiff(-1)>0; 다음 바의 립스 선이 이빨 선보다 높음;
- LipsTeethDiff(0)<=0; 현재 바의 립스 선이 이빨 선보다 낮거나 같음;
- LipsTeethDiff(1)<0; 이전 바의 립스 선이 이빨 선보다 낮음.
//+------------------------------------------------------------------+ //| 숏 포지션을 닫기 위한 조건 확인| //+------------------------------------------------------------------+ bool CSignalAlligator::CheckCloseShort(double& price) { price=0.0; //--- return(LipsTeethDiff(-1)>0 && LipsTeethDiff(0)<=0 && LipsTeethDiff(1)<0); }
전략을 기반으로 한 전문가 어드바이저 만들기
이 전략을 기반으로 한 트레이딩 로봇을 만들기 위해서는 MQL5 위자드의 "준비된 전문가 어드바이저 생성" 옵션에서 올리게이터 기반 신호를 선택해야 합니다:

MQL5 위자드에서 올리게이터 기반 신호 선택
다음으로 필요한 트레일링 스톱 알고리즘과 자금 및 리스크 관리 시스템을 지정해야 합니다. 전문가 어드바이저의 코드는 자동으로 생성되며, 이를 컴파일하고 전략 테스터에서 테스트할 수 있습니다.
테스트 결과
전문가 어드바이저의 백테스팅을 해보겠습니다. (EURUSD H1, 테스트 기간: 2010년 1월 1일~2011년 1월 5일, JawPeriod=13, JawShift=8, TeethPeriod=8, TeethShift=5, LipsPeriod=5, LipsShift=3, MaMethod=2, Applied=5, CrossMeasure=5).
전문가 어드바이저를 만들 때 고정 볼륨(고정 로트 거래, 0.1)을 사용하였으며, 트레일링 스톱 알고리즘은 사용하지 않았습니다 (트레일링 미사용).

올리게이터 지표 기반 전문가 어드바이저의 테스트 결과
거래 필터링을 사용하고 시간에 따라 시장 특성을 고려하면 수익을 늘릴 수 있습니다. CSignalITF 클래스를 사용하면 일중 시간 필터를 추가할 수 있습니다. 최적의 시간은 MetaTrader 5의 전략 테스터를 통해 찾을 수 있습니다. MQL5 위자드 - 두 개의 EMA 교차와 일중 시간 필터 기반 거래 신호에서 예제를 참고하세요.
첨부파일: SignalAlligator.mqh 파일은 terminal_data_folder\MQL5\Include\Expert\Signal 폴더에 위치해야 합니다.
expert_alligator.mq5 파일은 MQL5 위자드로 생성된 전문가 어드바이저의 코드를 포함하고 있습니다.