시스템트레이딩 게시글

MQL5 마법사로 생성하는 거래 신호: 모닝 스타/이브닝 스타와 RSI 활용하기

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

안녕하세요, 트레이더 여러분! 오늘은 MQL5 마법사를 활용해 모닝 스타와 이브닝 스타 패턴을 기반으로 한 거래 신호를 생성하는 방법에 대해 이야기해보려고 합니다.

MQL5 마법사는 클라이언트 터미널과 함께 제공되는 표준 라이브러리 클래스를 기반으로 한 전문가 고문(EA)을 쉽게 생성할 수 있게 도와줍니다. 이 툴을 사용하면 여러분의 거래 아이디어를 빠르게 검증할 수 있습니다. 여러분만의 거래 신호 클래스를 만들어 보세요. 클래스의 구조와 예시는 MQL5 마법사: 거래 신호 모듈 만들기 기사를 참고하시면 됩니다.

기본적으로 거래 신호 클래스는 CExpertSignal로부터 파생됩니다. 이후에는 여러분만의 메서드로 LongCondition()ShortCondition() 가상 메서드를 재정의해야 합니다.

러시아어로 된 책 "최고의 트레이더의 전략들"에서는 여러 거래 전략이 다루어지고 있습니다. 우리는 그 중에서도 스토캐스틱, CCI, MFI, 그리고 RSI 오실레이터로 확인된 반전 촛대 패턴에 집중해보겠습니다.

가장 좋은 방법은 촛대 패턴 형성을 체크하기 위해 CExpertSignal로부터 파생된 별도의 클래스를 만드는 것입니다. 촛대 패턴에 의해 생성된 거래 신호를 확인하기 위해서는 CCandlePattern로부터 파생된 클래스를 작성하고 필요한 기능(예: 오실레이터에 의한 확인)을 추가하면 됩니다.

이번 포스트에서는 RSI 지표로 확인된 "모닝 스타/이브닝 스타" 반전 촛대 패턴에 기반한 신호를 다룰 것입니다. 거래 신호 모듈은 CCandlePattern 클래스를 기반으로 하며, 촛대 패턴을 이용한 거래 신호 생성의 간단한 예시가 포함되어 있습니다.

1. "모닝 스타"와 "이브닝 스타" 반전 촛대 패턴

1.1. 모닝 스타

이 패턴은 하락 추세의 반전을 나타내며, 세 개의 캔들로 구성됩니다. 첫 번째 캔들은 긴 검은색 캔들이고, 그 다음에는 작은 몸체를 가진 캔들이 있으며, 이 캔들은 검은색 캔들의 몸체 밖에 위치해야 합니다. 작은 몸체는 강세와 약세의 힘이 같다는 것을 의미하며, 시장이 추세를 바꿀 준비가 되었음을 나타냅니다.

세 번째 캔들은 강세 캔들로, 그 몸체는 두 번째 캔들과 겹치지 않으며, 종가는 첫 번째 (약세) 캔들의 몸체 안에 위치해야 합니다.

Fig. 1. 모닝 스타와 모닝 도지 스타 촛대 패턴

Fig. 1. 모닝 스타와 모닝 도지 스타 촛대 패턴

"모닝 스타" 패턴을 식별하는 방법은 CCandlePattern 클래스의 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);
  }
//+------------------------------------------------------------------+

CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) 및 CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI) 메서드는 "모닝 스타" 및 "모닝 도지 스타" 촛대 패턴의 형성을 확인하는 데 사용됩니다.

1.2. 이브닝 스타

이 패턴은 상승 추세의 반전을 나타내며, 세 개의 캔들로 구성됩니다. 첫 번째 캔들은 긴 흰색 캔들이고, 그 다음에는 작은 몸체를 가진 캔들이 있으며, 이 캔들은 흰색 캔들의 몸체 밖에 위치해야 합니다. 작은 몸체는 강세와 약세의 힘이 같음을 나타내며, 시장이 추세를 바꿀 준비가 되었음을 의미합니다.

세 번째 캔들은 약세 캔들로, 그 몸체는 두 번째 캔들과 겹치지 않으며, 종가는 첫 번째 (강세) 캔들의 몸체 안에 위치해야 합니다.

Fig. 2. 이브닝 스타와 이브닝 도지 스타 촛대 패턴

Fig. 2. 이브닝 스타와 이브닝 도지 스타 촛대 패턴

"이브닝 스타" 및 "이브닝 도지 스타" 패턴을 식별하는 방법은 다음과 같습니다:

//+------------------------------------------------------------------+
//| "이브닝 스타" 패턴 형성 확인                     |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningStar()
  {
//--- 이브닝 스타
   if((Close(3)-Open(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);
  }
//+------------------------------------------------------------------+

CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) 및 CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI) 메서드는 "이브닝 스타" 및 "이브닝 도지 스타" 촛대 패턴의 형성을 확인하는 데 사용됩니다.

2. RSI 지표로 확인된 거래 신호

롱 또는 숏 포지션을 열기 위한 거래 신호는 RSI 지표로 확인해야 합니다. RSI 값은 롱 포지션의 경우 40 이하, 숏 포지션의 경우 60 이상이어야 합니다.

열린 포지션의 종료는 RSI 값에 따라 달라집니다. 종료는 두 가지 경우에 이루어질 수 있습니다:

  • RSI가 반대의 기준 수준(롱 포지션의 경우 70, 숏 포지션의 경우 30)에 도달했을 때
  • 역 신호가 확인되지 않았을 때(RSI가 다음 수준에 도달할 때: 롱 포지션의 경우 30, 숏 포지션의 경우 70)

Fig. 3. 모닝 스타 패턴, RSI 지표로 확인됨

Fig. 3. 모닝 스타 패턴, RSI 지표로 확인됨

  • int CMS_ES_RSI::LongCondition() - 롱 포지션 열기 조건을 체크하며 (80 반환), 숏 포지션 종료 조건을 체크합니다 (40 반환);
  • int CMS_ES_RSI::ShortCondition() - 숏 포지션 열기 조건을 체크하며 (80 반환), 롱 포지션 종료 조건을 체크합니다 (40 반환).

2.1. 롱 포지션 열기/숏 포지션 종료

  1. "모닝 스타" 패턴 형성은 RSI 지표로 확인해야 하며, RSI(1)<40 (마지막 완료된 바의 RSI 값이 40 미만이어야 합니다).

  2. 숏 포지션은 RSI 지표가 기준 수준 70 또는 30을 상향 돌파할 경우 종료해야 합니다.

//+------------------------------------------------------------------+
//| 시장 진입 및 퇴출 조건 확인                 |
//| 1) 시장 진입 (롱 포지션 열기, 결과=80)                  |
//| 2) 시장 퇴출 (숏 포지션 종료, 결과=40)                 |
//+------------------------------------------------------------------+
int CMS_ES_RSI::LongCondition()
  {
   int result=0;
//--- idx는 전문가 고문 작업 모드를 결정하는 데 사용될 수 있습니다
//--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건을 체크합니다
//--- idx=1 - 이 경우 EA는 뉴스 바에서만 거래 조건을 체크합니다
  int idx   =StartIndex();
//--- 롱 포지션 열기 조건 확인
//--- 모닝 스타 패턴 형성 및 RSI<30
  if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (RSI(1)<40))
     result=80;
//--- 숏 포지션 종료 조건 확인
//--- 과매수/과매도 수준의 신호선 교차 (상향 30, 상향 70)
  if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70)))
     result=40;
//--- 결과 반환
   return(result);
  }

2.2. 숏 포지션 열기/롱 포지션 종료

  1. "이브닝 스타" 패턴 형성은 RSI 지표로 확인해야 하며: RSI(1)>60 (마지막 완료된 바의 RSI 값이 60 초과해야 합니다).

  2. 롱 포지션은 RSI 지표가 기준 수준 70 또는 30을 하향 돌파할 경우 종료해야 합니다.

//+------------------------------------------------------------------+
//| 시장 진입 및 퇴출 조건 확인                 |
//| 1) 시장 진입 (숏 포지션 열기, 결과=80)                 |
//| 2) 시장 퇴출 (롱 포지션 종료, 결과=40)                  |
//+------------------------------------------------------------------+
int CMS_ES_RSI::ShortCondition()
  {
   int result=0;
//--- idx는 전문가 고문 작업 모드를 결정하는 데 사용될 수 있습니다
//--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건을 체크합니다
//--- idx=1 - 이 경우 EA는 뉴스 바에서만 거래 조건을 체크합니다
  int idx   =StartIndex();
//--- 숏 포지션 열기 조건 확인
//--- 이브닝 스타 패턴 형성 및 RSI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (RSI(1)>60))
     result=80;
//--- 롱 포지션 종료 조건 확인
//--- 신호선 교차 (하향 70, 하향 30)
  if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30)))
     result=40;
//--- 결과 반환
   return(result);
  }

2.3. MQL5 마법사를 이용한 전문가 고문 생성

CMS_ES_RSI 클래스는 표준 라이브러리 클래스에 포함되어 있지 않으므로, 사용하려면 acms_es_rsi.mqh 파일을 다운로드하여 client_terminal_data_folder\MQL5\Include\Expert\Signal\MySignals에 저장해야 합니다. candlepatterns.mqh 파일도 동일하게 처리해야 합니다. MetaEditor를 재시작한 후 MQL5 마법사에서 사용할 수 있습니다.

전문가 고문을 생성하려면 MQL5 마법사를 실행하세요:

Fig. 4. MQL5 마법사로 전문가 고문 생성

Fig. 4. MQL5 마법사로 전문가 고문 생성

전문가 고문의 이름을 지정해봅시다:

Fig. 5. 전문가 고문의 일반 속성

Fig. 5. 전문가 고문의 일반 속성

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

Fig. 6. 전문가 고문의 신호 속성

Fig. 6. 전문가 고문의 신호 속성

우리의 경우, 하나의 거래 신호 모듈만 사용합니다.

"RSI로 확인된 모닝/이브닝 스타 기반 신호" 거래 신호 모듈 추가:

Fig. 7. 전문가 고문의 신호 속성

Fig. 7. 전문가 고문의 신호 속성

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

Fig. 8. 전문가 고문의 신호 속성

Fig. 8. 전문가 고문의 신호 속성

트레일링 속성을 선택할 수 있지만, 우리는 "트레일링 스탑 사용 안 함"을 사용할 것입니다:

Fig. 9. 전문가 고문의 트레일링 속성

Fig. 9. 전문가 고문의 트레일링 속성

자금 관리 속성에 관해서는 "고정 거래량으로 거래하기"를 사용할 것입니다:

Fig. 10. 전문가 고문의 자금 관리 속성

Fig. 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.

MQL5 마법사로 생성된 전문가 고문은 거래 신호 모듈의 "투표"를 사용하여 포지션을 열고 닫습니다. 주요 모듈의 투표 결과도 사용되며, 이 경우 LongCondition() 및 ShortCondition() 메서드는 항상 0을 반환합니다.

주요 모듈의 투표 결과는 "투표" 평균화에도 사용됩니다. 이 경우 주요 모듈 + 1개의 거래 신호 모듈이 있으므로, 기준 값을 설정할 때 이 점을 고려해야 합니다. 따라서 ThresholdOpen과 ThresholdClose는 각각 40=(0+80)/2와 20=(0+40)/2로 설정해야 합니다.

Signal_StopLevel 및 Signal_TakeLevel 입력 매개변수의 값이 0으로 설정되어 있으면, 포지션 종료는 오직 종료 조건이 충족될 때만 이루어집니다.


2.4. 이력 백테스팅 결과

전문가 고문의 이력 데이터를 기반으로 한 백테스팅을 살펴보겠습니다 (EURUSD H1, 테스트 기간: 2010.01.01-2011.03.04, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5).

전문가 고문 생성 시 고정 볼륨(고정 로트 거래, 0.1)을 사용했으며, 트레일링 스탑 알고리즘은 사용하지 않았습니다 (트레일링 미사용).

Fig. 11. 전문가 고문의 테스트 결과, 모닝/이브닝 스타 + RSI 기반

Fig. 11. 전문가 고문의 테스트 결과, 모닝/이브닝 스타 + RSI 기반


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

매개변수 연구는 전략 테스터의 3D 시각화 모드를 이용하면 매우 간편해집니다. 이 모드는 419 빌드부터 추가되었습니다 (Fig. 12):

Fig. 12. PeriodRSI와 MA_period 입력 매개변수를 기반으로 한 잔고

Fig. 12. PeriodRSI와 MA_period 입력 매개변수를 기반으로 한 잔고

MQL5 마법사로 생성된 전문가 고문의 코드는 expert_ms_es_rsi.mq5에 첨부되어 있습니다.


연관 포스트

댓글 (0)