시스템트레이딩 게시글

MQL5 위자드를 활용한 CCI 기반의 Bullish/Bearish Engulfing 전략

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

안녕하세요, 트레이더 여러분! 오늘은 MQL5 위자드를 이용해 표준 라이브러리 클래스를 기반으로 한 EA(전문가 어드바이저)를 만드는 방법에 대해 알아보겠습니다. 이 방법을 통해 여러분의 트레이드 아이디어를 간편하게 테스트할 수 있으며, 자신만의 거래 신호 클래스를 만들어 볼 수 있습니다. 자세한 내용은 MQL5 위자드: 거래 신호 모듈 만드는 방법를 참고하세요.

거래 신호 클래스는 CExpertSignal에서 파생되며, LongCondition()ShortCondition() 가상 메소드를 자신의 메소드로 오버라이드해야 합니다.

오늘은 Bullish EngulfingBearish Engulfing 반전 캔들 패턴을 이용한 거래 신호에 대해 다룰 것이며, 이 패턴들은 CCI 지표로 확인됩니다. 이 거래 신호 모듈은 CCandlePattern 클래스를 기반으로 하며, 캔들 패턴으로 거래 신호를 생성하는 간단한 예시입니다.

1. Bullish Engulfing과 Bearish Engulfing 반전 캔들 패턴

1.1. Bullish Engulfing

Bullish Engulfing 반전 패턴은 하락세에서 형성되며, 작은 검은색 캔들 다음에 큰 흰색 캔들이 나타나며 이전 날의 캔들을 완전히 감싸는 형태입니다. 작은 캔들의 그림자는 짧아야 하며, 큰 캔들의 본체가 이전 날의 캔들을 덮을 수 있어야 합니다.

Bullish Engulfing 반전 캔들 패턴

Fig. 1. Bullish Engulfing 캔들 패턴

Bullish Engulfing 패턴의 인식은 CheckPatternBullishEngulfing() 메소드에서 구현됩니다:

//+------------------------------------------------------------------+
//| Bullish Engulfing 캔들 패턴 체크 |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishEngulfing()
  {
//--- Bullish Engulfing
   if((Open(2)>Close(2))
             && (Close(1)-Open(1)>AvgBody(1))
             && (Close(1)>Open(2))
             && (MidOpenClose(2)<CloseAvg(2))
             && (Open(1)<Close(2)))
       return (true);
//---
   return (false);
  }

The CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) 메소드를 통해 Bullish Engulfing 패턴을 확인할 수 있습니다.


1.2. Bearish Engulfing

Bearish Engulfing 반전 패턴은 상승세에서 형성되며, 작은 흰색 캔들 다음에 큰 검은색 캔들이 나타나며 이전 날의 캔들을 완전히 감싸는 형태입니다. 작은 캔들의 그림자는 짧고, 큰 캔들의 본체가 이전 날의 캔들을 덮을 수 있어야 합니다.

Bearish Engulfing 반전 캔들 패턴

Fig. 2. Bearish Engulfing 캔들 패턴

Bearish Engulfing 패턴의 인식은 CheckPatternBearishEngulfing() 메소드에서 구현됩니다:

//+------------------------------------------------------------------+
//| Bearish Engulfing 캔들 패턴 체크 |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishEngulfing()
  {
//--- Bearish Engulfing
   if((Open(2)<Close(2))
            && (Open(1)-Close(1)>AvgBody(1))
             && (Close(1)<Open(2))
             && (MidOpenClose(2)>CloseAvg(2))
             && (Open(1)>Close(2)))
       return (true);
//---
   return (false);
  }

The CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) 메소드를 통해 Bearish Engulfing 패턴을 확인할 수 있습니다.


2. CCI 지표로 확인하는 거래 신호

롱 또는 숏 포지션을 열기 위한 거래 신호는 CCI 지표로 확인되어야 합니다. CCI 값은 -50 (롱 포지션) 또는 50 (숏 포지션)보다 커야 합니다.

열린 포지션의 종료는 CCI 값에 따라 결정됩니다. 두 가지 경우에 발생할 수 있습니다:

  • CCI 선이 반대의 기준 레벨 (롱 포지션의 경우 80, 숏 포지션의 경우 -80)에 도달했을 때
  • 반전 신호가 확인되지 않았을 때 (롱 포지션의 경우 -80, 숏 포지션의 경우 80에 도달했을 때)

CCI 지표로 확인된 Bullish Engulfing 패턴

Fig. 3. CCI로 확인된 Bullish Engulfing 패턴

  • int CBE_BE_CCI::LongCondition() - 롱 포지션을 열기 위한 조건 체크 (80 반환) 및 숏 포지션 종료 조건 체크 (40 반환);
  • int CBE_BE_CCI::ShortCondition() - 숏 포지션을 열기 위한 조건 체크 (80 반환) 및 롱 포지션 종료 조건 체크 (40 반환).

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

  1. Bullish Engulfing 패턴은 CCI 지표로 확인되어야 하며: CCI(1)<-50 (마지막 완성된 바의 CCI 값은 -50보다 작아야 함).

  2. 숏 포지션은 CCI 지표가 -80의 기준 레벨을 위로 넘거나 80의 기준 레벨을 아래로 넘었을 때 종료해야 합니다.

//+------------------------------------------------------------------+
//| 시장 진입 및 퇴출 조건 체크 |
//| 1) 시장 진입 (롱 포지션 열기, 결과=80) |
//| 2) 시장 퇴출 (숏 포지션 종료, 결과=40) |
//+------------------------------------------------------------------+
int CBE_BE_CCI::LongCondition()
  {
   int result=0;
   //--- 롱 포지션 열기 조건 체크
   //--- Bullish Engulfing 패턴 형성 및 CCI<-50
   if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (CCI(1)<-50))
     result=80;
   //--- 숏 포지션 종료 조건 체크
   //--- 신호 선이 과매도/과매수 레벨을 교차할 때 (아래로 -80, 아래로 -80)
   if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80)))
     result=40;
   //--- 결과 반환
   return(result);
  }

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

  1. Bearish Engulfing 패턴은 CCI 지표로 확인되어야 하며: CCI(1)>50 (마지막 완성된 바의 CCI 값은 50보다 커야 함).

  2. 롱 포지션은 CCI 지표가 -80 또는 80 레벨을 아래로 넘었을 때 종료해야 합니다.

//+------------------------------------------------------------------+
//| 시장 진입 및 퇴출 조건 체크 |
//| 1) 시장 진입 (숏 포지션 열기, 결과=80) |
//| 2) 시장 퇴출 (롱 포지션 종료, 결과=40) |
//+------------------------------------------------------------------+
int CBE_BE_CCI::ShortCondition()
  {
   int result=0;
   //--- 숏 포지션 열기 조건 체크
   //--- Bearish Engulfing 패턴 형성 및 CCI>50
   if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (CCI(1)>50))
     result=80;
   //--- 롱 포지션 종료 조건 체크
   //--- 신호 선이 과매도/과매수 레벨을 교차할 때 (아래로 -80, 아래로 80)
   if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))
     result=40;
   //--- 결과 반환
   return(result);
  }

2.3. MQL5 위자드를 이용한 EA 생성하기

CBE_BE_CCI 클래스는 표준 라이브러리 클래스에 포함되어 있지 않기 때문에, acbe_be_cci.mqh 파일을 다운로드하여 client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals 폴더에 저장해야 합니다. candlepatterns.mqh 파일도 같은 방법으로 처리하면 됩니다. 이후 MetaEditor를 재시작하면 MQL5 위자드에서 사용할 수 있습니다.

EA를 생성하기 위해 MQL5 위자드를 실행하세요:

MQL5 위자드를 이용한 EA 생성

Fig. 4. MQL5 위자드를 이용한 EA 생성

EA의 이름을 지정해 줍니다:

EA의 일반 속성

Fig. 5. EA의 일반 속성

그 후 사용하고자 하는 거래 신호 모듈을 선택하세요.

EA의 신호 속성

Fig. 6. EA의 신호 속성

이번에는 하나의 거래 신호 모듈만 사용할 것입니다.

"CCI로 확인된 Bullish/Bearish Engulfing 기반 신호" 모듈을 추가합니다:

EA의 신호 속성

Fig. 7. EA의 신호 속성

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

EA의 신호 속성

Fig. 8. EA의 신호 속성

모든 트레일링 속성을 선택할 수 있지만, "트레일링 스톱 미사용"으로 설정하겠습니다:

EA의 트레일링 속성

Fig. 9. EA의 트레일링 속성

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

EA의 자금 관리 속성

Fig. 10. EA의 자금 관리 속성

"완료" 버튼을 누르면 생성된 EA의 코드가 Expert_ABE_BE_CCI.mq5로 저장되며, terminal_data_folder\MQL5\Experts\에 위치하게 됩니다.

생성된 EA의 기본 입력 매개변수는 다음과 같습니다:

//--- 주요 신호 입력
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 위자드로 생성된 EA는 거래 신호 모듈의 "투표"를 이용해 포지션을 열고 닫습니다. 주요 모듈의 투표 결과도 사용되지만, LongCondition() 및 ShortCondition() 메소드는 항상 0을 반환합니다.

주요 모듈의 투표 결과는 "투표" 평균화에도 사용됩니다. 이번 경우에는 주요 모듈 + 1 개의 거래 신호 모듈이므로, 임계값 설정 시 이 점을 고려해야 합니다. 이로 인해 ThresholdOpen과 ThresholdClose는 각각 40=(0+80)/2, 20=(0+40)/2로 설정해야 합니다.

Signal_StopLevel과 Signal_TakeLevel 입력 매개변수의 값이 0으로 설정된 것은, 조건이 충족될 때만 포지션이 종료된다는 의미입니다.


2.4. 역사적 백테스트 결과

Expert Advisor의 역사적 데이터(EURUSD H1, 테스트 기간: 2010.01.01-2011.03.16, PeriodCCI=49, MA_period=11)에 대한 백테스트를 살펴보겠습니다.

Expert Advisor를 생성할 때 고정 볼륨 (고정 로트 거래, 0.1)을 사용했으며, 트레일링 스톱 알고리즘은 사용하지 않았습니다 (트레일링 미사용).

Bullish Engulfing/Bearish Engulfing + CCI 기반의 Expert Advisor 테스트 결과

Fig. 11. Bullish Engulfing/Bearish Engulfing + CCI 기반의 Expert Advisor 테스트 결과


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

MQL5 위자드로 생성된 Expert Advisor의 코드는 expert_abe_be_cci.mq5로 첨부되어 있습니다.

연관 포스트

댓글 (0)