시스템트레이딩 게시글

MQL5 위자드를 활용한 매매 신호 생성: 모닝 스타와 이브닝 스타 + MFI

첨부파일
323.zip (6.46 KB, 다운로드 0회)

안녕하세요, 트레이더 여러분! 오늘은 MQL5 위자드를 활용하여 모닝 스타 및 이브닝 스타 패턴을 기반으로 한 매매 신호를 생성하는 방법에 대해 알아보겠습니다. 이 과정은 MetaTrader 5에서도 쉽게 진행할 수 있습니다.

MQL5 위자드는 고객 터미널과 함께 제공되는 표준 라이브러리 클래스를 기반으로 하는 전문가 조언자(Expert Advisor, EA)를 만들 수 있게 해줍니다. 이를 통해 자신의 거래 아이디어를 빠르게 점검할 수 있습니다. 필요한 것은 자신만의 거래 신호 클래스를 만드는 것입니다. 클래스의 구조와 예제는 MQL5 위자드: 거래 신호 모듈 생성 방법에서 확인할 수 있습니다.

기본적인 아이디어는 거래 신호 클래스가 CExpertSignal에서 파생되어야 하며, LongCondition()ShortCondition() 가상 메서드를 자신의 메서드로 오버라이드해야 한다는 것입니다.

거래 전략에 관한 많은 정보가 담긴 책 "최고의 트레이더 전략들"이 있습니다. 이 책에서는 다양한 거래 전략을 다루고 있으며, 우리는 그 중에서도 모닝 스타와 이브닝 스타라는 반전 캔들 패턴에 집중하겠습니다. 이 패턴은 스토캐스틱, CCI, MFI, RSI와 같은 오실레이터에 의해 확인됩니다.

1. 모닝 스타와 이브닝 스타 반전 캔들 패턴

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. 이브닝 스타 및 이브닝 도지 스타 캔들 패턴

그림 2. 이브닝 스타 및 이브닝 도지 스타 캔들 패턴

이브닝 스타 패턴의 식별은 CheckPatternEveningStar()CheckPatternEveningDoji() 메서드에서 구현됩니다.

2. MFI 지표에 의해 확인된 매매 신호

롱 포지션 또는 숏 포지션을 열기 위한 매매 신호는 MFI 지표에 의해 확인되어야 합니다. MFI 지표의 값은 롱 포지션의 경우 40 미만이어야 하고, 숏 포지션의 경우 60 초과여야 합니다.

열린 포지션의 마감은 MFI 지표의 값에 따라 결정됩니다. 마감은 두 가지 경우에 이루어질 수 있습니다:

  • MFI가 반대의 임계 수준(롱 포지션의 경우 70, 숏 포지션의 경우 30)에 도달했을 때
  • 반전 신호가 확인되지 않았을 때 (MFI 지표가 다음 수준에 도달했을 때: 롱 포지션은 30, 숏 포지션은 70)

그림 3. MFI 지표에 의해 확인된 모닝 스타 패턴

그림 3. MFI 지표에 의해 확인된 모닝 스타 패턴


  • int CMS_ES_MFI::LongCondition() - 롱 포지션을 열기 위한 조건을 검사하며 (80 반환) 숏 포지션을 마감합니다 (40 반환);
  • int CMS_ES_MFI::ShortCondition() - 숏 포지션을 열기 위한 조건을 검사하며 (80 반환) 롱 포지션을 마감합니다 (40 반환).

2.1. 롱 포지션 열기/숏 포지션 마감하기

  1. "모닝 스타" 패턴의 형성이 MFI 지표에 의해 확인되어야 합니다: MFi(1)<40 (마지막 완료된 바의 MFI 지표 값이 40 미만이어야 합니다).

  2. 숏 포지션은 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. 숏 포지션 열기/롱 포지션 마감하기

  1. "이브닝 스타" 패턴의 형성이 MFI 지표에 의해 확인되어야 합니다: MFI(1)>60 (마지막 완료된 바의 MFI 지표 값이 60보다 커야 합니다).

  2. 롱 포지션은 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 위자드를 이용한 전문가 조언자 생성

그림 4. MQL5 위자드를 이용한 전문가 조언자 생성

전문가 조언자의 이름을 지정합니다:

그림 5. 전문가 조언자의 일반 속성

그림 5. 전문가 조언자의 일반 속성

이후에 사용될 거래 신호 모듈을 선택해야 합니다.

그림 6. 전문가 조언자의 신호 속성

그림 6. 전문가 조언자의 신호 속성

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

그림 7. 전문가 조언자의 신호 속성

그림 7. 전문가 조언자의 신호 속성

거래 신호 모듈이 추가되었습니다:

그림 8. 전문가 조언자의 신호 속성

그림 8. 전문가 조언자의 신호 속성

원하는 트레일링 속성을 선택할 수 있지만, 우리는 "트레일링 스탑 미사용"을 선택하겠습니다:

그림 9. 전문가 조언자의 트레일링 속성

그림 9. 전문가 조언자의 트레일링 속성

자금 관리 속성에 대해서는 "고정 거래량으로 거래"를 사용하겠습니다:

그림 10. 전문가 조언자의 자금 관리 속성

그림 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를 기반으로 한 전문가 조언자 테스트 결과

그림 11. 모닝/이브닝 스타 + MFI를 기반으로 한 전문가 조언자 테스트 결과


최적의 입력 매개변수 세트는 MetaTrader 5 클라이언트 터미널의 전략 테스터를 이용하여 찾을 수 있습니다.

MQL5 위자드로 생성된 전문가 조언자의 코드는 expert_ams_es_mfi.mq5로 첨부되어 있습니다.

연관 포스트

댓글 (0)