안녕하세요, 트레이더 여러분! 오늘은 MQL5 위자드를 활용하여 모닝 스타 및 이브닝 스타 패턴을 기반으로 한 매매 신호를 생성하는 방법에 대해 알아보겠습니다. 이 과정은 MetaTrader 5에서도 쉽게 진행할 수 있습니다.
MQL5 위자드는 고객 터미널과 함께 제공되는 표준 라이브러리 클래스를 기반으로 하는 전문가 조언자(Expert Advisor, EA)를 만들 수 있게 해줍니다. 이를 통해 자신의 거래 아이디어를 빠르게 점검할 수 있습니다. 필요한 것은 자신만의 거래 신호 클래스를 만드는 것입니다. 클래스의 구조와 예제는 MQL5 위자드: 거래 신호 모듈 생성 방법에서 확인할 수 있습니다.
기본적인 아이디어는 거래 신호 클래스가 CExpertSignal에서 파생되어야 하며, LongCondition()와 ShortCondition() 가상 메서드를 자신의 메서드로 오버라이드해야 한다는 것입니다.
거래 전략에 관한 많은 정보가 담긴 책 "최고의 트레이더 전략들"이 있습니다. 이 책에서는 다양한 거래 전략을 다루고 있으며, 우리는 그 중에서도 모닝 스타와 이브닝 스타라는 반전 캔들 패턴에 집중하겠습니다. 이 패턴은 스토캐스틱, CCI, MFI, RSI와 같은 오실레이터에 의해 확인됩니다.
1. 모닝 스타와 이브닝 스타 반전 캔들 패턴
1.1. 모닝 스타
모닝 스타 패턴은 하락 추세의 반전을 나타내며, 세 개의 캔들로 구성됩니다 (그림 1 참조). 긴 검은 캔들 뒤에 작은 몸체를 가진 캔들이 오는데, 이 캔들은 검은 캔들의 몸체를 벗어나 있습니다. 작은 몸체는 강세와 약세의 힘이 같다는 것을 의미하며, 시장이 추세를 바꿀 준비가 되었다는 신호입니다.
패턴의 세 번째 캔들은 강세 캔들로, 그 몸체는 두 번째 캔들의 몸체와 겹치지 않으며, 마감 가격은 첫 번째(하락) 캔들의 몸체 안에 위치합니다. 만약 두 번째 캔들이 도지와 유사하다면, 이 모델은 "모닝 도지 스타"로 불립니다.

그림 1. 모닝 스타 및 모닝 도지 스타 캔들 패턴
모닝 스타 패턴의 식별은 CheckPatternMorningStar() 및 CheckPatternMorningDoji() 메서드에서 구현됩니다.
//+------------------------------------------------------------------+ //| 모닝 스타 패턴 형성 검사 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternMorningStar() { //--- 모닝 스타 if((Open(3)-Close(3)>AvgBody(1)) && // 하락 캔들, 몸체는 평균 캔들 몸체보다 큼 (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // 두 번째 캔들은 작은 몸체를 가짐 (평균 몸체의 절반보다 작음) (Close(2)<Close(3)) && // 두 번째 캔들의 마감 가격이 첫 번째 캔들의 마감 가격보다 낮음 (Open(2)<Open(3)) && // 두 번째 캔들의 시작 가격이 첫 번째 캔들의 시작 가격보다 낮음 (Close(1)>MidOpenClose(3))) // 마지막 캔들의 마감 가격이 첫 번째 캔들의 중간 가격보다 높음 return(true); //--- return(false); } //+------------------------------------------------------------------+
1.2. 이브닝 스타
이 패턴은 상승 추세의 반전을 나타내며, 세 개의 캔들로 구성됩니다 (그림 2 참조). 긴 흰 캔들 뒤에 작은 몸체를 가진 캔들이 오며, 이 캔들은 흰 캔들의 몸체를 벗어나 있습니다. 작은 몸체는 강세와 약세의 힘이 같다는 것을 나타내며, 시장이 추세를 바꿀 준비가 되었음을 알립니다.
패턴의 세 번째 캔들은 하락 캔들로, 그 몸체는 두 번째 캔들의 몸체와 겹치지 않으며, 마감 가격은 첫 번째(상승) 캔들의 몸체 안에 위치합니다. 만약 두 번째 캔들이 도지와 유사하다면, 이 모델은 "이브닝 도지 스타"로 불립니다.

그림 2. 이브닝 스타 및 이브닝 도지 스타 캔들 패턴
이브닝 스타 패턴의 식별은 CheckPatternEveningStar() 및 CheckPatternEveningDoji() 메서드에서 구현됩니다.
2. MFI 지표에 의해 확인된 매매 신호
롱 포지션 또는 숏 포지션을 열기 위한 매매 신호는 MFI 지표에 의해 확인되어야 합니다. MFI 지표의 값은 롱 포지션의 경우 40 미만이어야 하고, 숏 포지션의 경우 60 초과여야 합니다.
열린 포지션의 마감은 MFI 지표의 값에 따라 결정됩니다. 마감은 두 가지 경우에 이루어질 수 있습니다:
- MFI가 반대의 임계 수준(롱 포지션의 경우 70, 숏 포지션의 경우 30)에 도달했을 때
- 반전 신호가 확인되지 않았을 때 (MFI 지표가 다음 수준에 도달했을 때: 롱 포지션은 30, 숏 포지션은 70)

그림 3. MFI 지표에 의해 확인된 모닝 스타 패턴
int CMS_ES_MFI::LongCondition()- 롱 포지션을 열기 위한 조건을 검사하며 (80 반환) 숏 포지션을 마감합니다 (40 반환);int CMS_ES_MFI::ShortCondition()- 숏 포지션을 열기 위한 조건을 검사하며 (80 반환) 롱 포지션을 마감합니다 (40 반환).
2.1. 롱 포지션 열기/숏 포지션 마감하기
"모닝 스타" 패턴의 형성이 MFI 지표에 의해 확인되어야 합니다: MFi(1)<40 (마지막 완료된 바의 MFI 지표 값이 40 미만이어야 합니다).
숏 포지션은 MFI 지표가 임계 수준(70 또는 30)을 상향 돌파했을 때 마감해야 합니다.
//+------------------------------------------------------------------+ //| 시장 진입 및 퇴장 조건 검사 | //| 1) 시장 진입 (롱 포지션 열기, 결과=80) | //| 2) 시장 퇴장 (숏 포지션 마감, 결과=40) | //+------------------------------------------------------------------+ int CMS_ES_MFI::LongCondition() { int result=0; //--- 인덱스는 전문가 조언자의 작업 모드를 결정하는 데 사용될 수 있습니다. //--- idx=0 - 이 경우 EA는 각 틱마다 거래 조건을 검사합니다. //--- idx=1 - 이 경우 EA는 뉴스 바에서만 거래 조건을 검사합니다. int idx =StartIndex(); //--- 롱 포지션을 열기 위한 조건 검사 //--- 모닝 스타 패턴 형성과 MFI<40 if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (MFI(1)<40)) result=80; //--- 숏 포지션 마감 조건 검사 //--- 과매수/과매도 수준의 신호선 교차 (상향 30, 하향 70) if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70))) result=40; //--- 결과 반환 return(result); }
2.2. 숏 포지션 열기/롱 포지션 마감하기
"이브닝 스타" 패턴의 형성이 MFI 지표에 의해 확인되어야 합니다: MFI(1)>60 (마지막 완료된 바의 MFI 지표 값이 60보다 커야 합니다).
롱 포지션은 MFI 지표가 임계 수준(70 또는 30)을 상향 돌파했을 때 마감해야 합니다.
//+------------------------------------------------------------------+ //| 시장 진입 및 퇴장 조건 검사 | //| 1) 시장 진입 (숏 포지션 열기, 결과=80) | //| 2) 시장 퇴장 (롱 포지션 마감, 결과=40) | //+------------------------------------------------------------------+ int CMS_ES_MFI::ShortCondition() { int result=0; //--- 인덱스는 전문가 조언자의 작업 모드를 결정하는 데 사용될 수 있습니다. //--- idx=0 - 이 경우 EA는 각 틱마다 거래 조건을 검사합니다. //--- idx=1 - 이 경우 EA는 뉴스 바에서만 거래 조건을 검사합니다. int idx =StartIndex(); //--- 숏 포지션을 열기 위한 조건 검사 //--- 이브닝 스타 패턴 형성과 MFI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (MFI(1)>60)) result=80; //--- 롱 포지션 마감 조건 검사 //--- 신호선 교차 과매수/과매도 수준 (상향 70, 하향 30) if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30))) result=40; //--- 결과 반환 return(result); }
2.3. MQL5 위자드를 이용한 EA 생성하기
CMS_ES_MFI 클래스는 표준 라이브러리 클래스에 포함되어 있지 않으므로, 사용하려면 ams_es_mfi.mqh 파일을 다운로드하여 client_terminal_data_folder\MQL5\Include\Expert\Signal\MySignals에 저장해야 합니다. 같은 방식으로 acandlepatterns.mqh 파일도 저장해야 합니다. 이후 MetaEditor를 재시작하면 MQL5 위자드에서 사용할 수 있습니다.
전문가 조언자를 생성하려면 MQL5 위자드를 실행하세요:

그림 4. MQL5 위자드를 이용한 전문가 조언자 생성
전문가 조언자의 이름을 지정합니다:

그림 5. 전문가 조언자의 일반 속성
이후에 사용될 거래 신호 모듈을 선택해야 합니다.

그림 6. 전문가 조언자의 신호 속성
우리의 경우에는 하나의 매매 신호 모듈만 사용합니다.
"MFI에 의해 확인된 모닝 스타/이브닝 스타 기반 신호" 거래 신호 모듈을 추가합니다:

그림 7. 전문가 조언자의 신호 속성
거래 신호 모듈이 추가되었습니다:

그림 8. 전문가 조언자의 신호 속성
원하는 트레일링 속성을 선택할 수 있지만, 우리는 "트레일링 스탑 미사용"을 선택하겠습니다:

그림 9. 전문가 조언자의 트레일링 속성
자금 관리 속성에 대해서는 "고정 거래량으로 거래"를 사용하겠습니다:

그림 10. 전문가 조언자의 자금 관리 속성
"완료" 버튼을 눌러 생성된 전문가 조언자의 코드를 얻습니다. 이 코드는 terminal_data_folder\MQL5\Experts\에 저장됩니다.
생성된 전문가 조언자의 기본 입력 매개변수는 다음과 같습니다:
//--- 주요 신호의 입력 input int Signal_ThresholdOpen =10; // 포지션을 열기 위한 신호 임계값 [0...100] input int Signal_ThresholdClose =10 // 포지션을 닫기 위한 신호 임계값 [0...100] input double Signal_PriceLevel =0.0 // 거래를 실행할 가격 수준 input double Signal_StopLevel =50.0 // 손절매 수준 (포인트 단위) input double Signal_TakeLevel =50.0 // 이익 실현 수준 (포인트 단위)
다음과 같이 변경해야 합니다:
//--- 주요 신호의 입력 input int Signal_ThresholdOpen =40; // 포지션을 열기 위한 신호 임계값 [0...100] input int Signal_ThresholdClose =20 // 포지션을 닫기 위한 신호 임계값 [0...100] input double Signal_PriceLevel =0.0 // 거래를 실행할 가격 수준 input double Signal_StopLevel =0.0 // 손절매 수준 (포인트 단위) input double Signal_TakeLevel =0.0 // 이익 실현 수준 (포인트 단위)
Signal_ThresholdOpen/Signal_ThresholdClose 입력 매개변수를 통해 포지션의 개설 및 마감 임계 수준을 지정할 수 있습니다.
LongCondition() 및 ShortCondition() 메서드의 코드에서는 고정된 임계값을 설정했습니다:
- 포지션 개설: 80;
- 포지션 마감: 40.
2.4. 백테스트 결과
전문가 조언자의 백테스트를 진행해 보겠습니다 (EURUSD H1, 테스트 기간: 2010.01.01-2011.03.16, PeriodMFI=49, MA_period=3).
전문가 조언자 생성 시 고정 볼륨(고정 로트 거래, 0.1)을 사용하였으며, 트레일링 스탑 알고리즘은 사용하지 않았습니다 (트레일링 미사용).

그림 11. 모닝/이브닝 스타 + MFI를 기반으로 한 전문가 조언자 테스트 결과
최적의 입력 매개변수 세트는 MetaTrader 5 클라이언트 터미널의 전략 테스터를 이용하여 찾을 수 있습니다.
MQL5 위자드로 생성된 전문가 조언자의 코드는 expert_ams_es_mfi.mq5로 첨부되어 있습니다.