MQL5 위자드를 활용한 Bullish Harami/Bearish Harami와 RSI 기반의 트레이딩 신호

Mike 2011.03.17 19:46 79 0 0
첨부파일

안녕하세요, 트레이더 여러분! 오늘은 MQL5 위자드를 이용하여 Bullish Harami와 Bearish Harami 패턴을 기반으로 한 트레이딩 신호를 생성하는 방법에 대해 알아보겠습니다. 이 방법은 MetaTrader 5에서 Expert Advisor(이하 EA)를 생성하는 데 매우 유용합니다.

MQL5 위자드는 미리 준비된 EA를 생성할 수 있도록 도와주는 기능입니다. 여러분의 트레이딩 아이디어를 빠르게 확인하고 싶다면, 자신만의 트레이딩 신호 클래스를 만들어보세요. 이 클래스의 구조와 예시는 MQL5 위자드: 트레이딩 신호 모듈 생성 방법에서 확인할 수 있습니다.

1. Bullish Harami 및 Bearish Harami 패턴 이해하기

1.1. Bullish Harami

Bullish Harami 패턴은 하락 추세에서 큰 캔들이 작은 캔들로 이어지는 형상입니다. 두 번째 캔들의 몸체가 첫 번째 캔들의 몸체 내에 위치하게 됩니다. 이 패턴은 하락 추세가 반전될 수 있음을 시사하며, 롱 포지션에 진입하기에 좋은 시점임을 나타냅니다. 두 번째 캔들은 갭업으로 시작하는 것이 일반적입니다.

Bullish Harami 패턴

Fig. 1. Bullish Harami 캔들 패턴

Bullish Harami 패턴 인식은 CheckPatternBullishHarami() 메서드에서 구현됩니다:

//+------------------------------------------------------------------+
//| Bullish Harami 패턴 인식 함수 |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishHarami()
  {
//--- Bullish Harami
   if((Close(1)>Open(1)) && // 마지막 캔들이 상승 캔들
     ((Open(2)-Close(2)>AvgBody(1)) && // 이전 캔들이 하락 캔들
     ((Close(1)<Open(2)) && // 상승 캔들의 종가가 하락 캔들의 시가보다 낮음
      (Open(1)>Close(2)) && // 상승 캔들의 시가가 하락 캔들의 종가보다 높음
      (MidPoint(2)<CloseAvg(2))) // 하락 추세
      return(true);
//---
   return(false);
  }

이 메서드는 Bullish Harami 패턴 형성을 체크하는 데 사용됩니다.

1.2. Bearish Harami

Bearish Harami 패턴은 상승 추세에서 큰 캔들이 작은 캔들로 이어지는 형상입니다. 이 패턴은 상승 추세가 반전될 수 있음을 시사하며, 숏 포지션에 진입하기에 좋은 시점입니다. 두 번째 캔들은 갭다운으로 시작하는 것이 일반적입니다.

Bearish Harami 패턴

Fig. 2. Bearish Harami 캔들 패턴

Bearish Harami 패턴 인식은 CheckPatternBearishHarami() 메서드에서 구현됩니다:

//+------------------------------------------------------------------+
//| Bearish Harami 패턴 인식 함수 |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishHarami()
  {
//--- Bearish Harami
   if((Close(1)<Open(1)) && // 마지막 캔들이 하락 캔들
     ((Close(2)-Open(2)>AvgBody(1)) && // 이전 캔들이 상승 캔들
     ((Close(1)>Open(2)) && // 하락 캔들의 종가가 상승 캔들의 시가보다 높음
      (Open(1)<Close(2))) && // 하락 캔들의 시가가 상승 캔들의 종가보다 낮음
      (MidPoint(2)>CloseAvg(2))) // 상승 추세
      return(true);
//---
   return(false);
  }

이 메서드는 Bearish Harami 패턴 형성을 체크하는 데 사용됩니다.

2. RSI 지표로 확인하는 트레이딩 신호

Bullish Harami 및 Bearish Harami 패턴으로 생성된 트레이딩 신호는 반드시 RSI 지표로 확인되어야 합니다. RSI 값이 각각 롱 포지션의 경우 40, 숏 포지션의 경우 60을 기준으로 설정되어야 합니다.

포지션을 청산하는 방법은 다음과 같습니다:

  1. RSI가 반대의 기준 수준(롱 포지션의 경우 70, 숏 포지션의 경우 30)에 도달했을 때
  2. 역방향 신호가 확인되지 않았을 때 (RSI가 30에 도달했을 때 롱 포지션, 70에 도달했을 때 숏 포지션)

Bullish Harami 패턴과 RSI 지표

Fig. 3. Bullish Harami 패턴, RSI 지표로 확인됨

  • int CBH_BH_RSI::LongCondition() - 롱 포지션을 열기 위한 조건을 체크하고, 숏 포지션을 청산할 때 사용 (결과는 80);
  • int CBH_BH_RSI::ShortCondition() - 숏 포지션을 열기 위한 조건을 체크하고, 롱 포지션을 청산할 때 사용 (결과는 40).

2.1. 롱 포지션 열기 및 숏 포지션 청산하기

  1. Bullish Harami 패턴이 RSI 지표로 확인되어야 합니다: RSI(1) < 40 (마지막 바의 RSI 값은 40보다 작아야 합니다).

  2. RSI 지표가 상향으로 70 또는 30의 기준 수준을 넘어설 때 숏 포지션을 청산해야 합니다.

//+------------------------------------------------------------------+
//| 시장 진입 및 퇴출 조건 검사 |
//+------------------------------------------------------------------+
int CBH_BH_RSI::LongCondition()
  {
   int result=0;
   //--- 롱 포지션을 열기 위한 조건 체크
  if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (RSI(1)<40))
     result=80;
   //--- 숏 포지션 청산 조건 체크
  if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70)))
     result=40;
   //--- 결과 반환
   return(result);
  }

2.2. 숏 포지션 열기 및 롱 포지션 청산하기

  1. Bearish Harami 패턴이 RSI 지표로 확인되어야 합니다: RSI(1) > 60 (마지막 바의 RSI 값은 60보다 커야 합니다).

  2. RSI 지표가 하향으로 70 또는 30의 기준 수준을 넘어갈 때 롱 포지션을 청산해야 합니다.

//+------------------------------------------------------------------+
//| 시장 진입 및 퇴출 조건 검사 |
//+------------------------------------------------------------------+
int CBH_BH_RSI::ShortCondition()
  {
   int result=0;
   //--- 숏 포지션을 열기 위한 조건 체크
  if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (RSI(1)>60))
     result=80;
   //--- 롱 포지션 청산 조건 체크
  if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30)))
     result=40;
   //--- 결과 반환
   return(result);
  }

2.3. MQL5 위자드를 사용한 Expert Advisor 생성하기

CBH_BH_RSI 클래스는 표준 라이브러리 클래스에 포함되어 있지 않으므로, acml_rsi.mqh 파일을 다운로드하여 client_terminal_data\MQL5\Include\Expert\Signal\MySignals에 저장해야 합니다. acandlepatterns.mqh 파일도 같은 방식으로 처리해야 하며, 이후 MetaEditor를 재시작하면 MQL5 위자드에서 사용할 수 있습니다.

EA를 생성하기 위해 MQL5 위자드를 실행합니다:

MQL5 위자드 실행

Fig. 4. MQL5 위자드 실행

EA의 이름을 지정합니다:

EA 일반 속성

Fig. 5. EA 일반 속성

그 다음, 사용할 트레이딩 신호 모듈을 선택합니다.

EA 신호 속성

Fig. 6. EA 신호 속성

이번 경우에는 하나의 트레이딩 신호 모듈만 사용할 것입니다.
"RSI로 확인된 Bullish Harami/Bearish Harami 기반 신호" 모듈을 추가합니다:

EA 신호 모듈 추가

Fig. 7. EA 신호 모듈 추가

모듈이 추가되었습니다:

EA 신호 모듈 추가 완료

Fig. 8. EA 신호 모듈 추가 완료

트레일링 속성은 아무것도 사용하지 않도록 설정할 수 있습니다:

EA 트레일링 속성

Fig. 9. EA 트레일링 속성

자금 관리 속성은 고정된 거래량으로 거래하도록 설정합니다:

EA 자금 관리 속성

Fig. 10. EA 자금 관리 속성

"완료" 버튼을 누르면 생성된 EA 코드가 Expert_ABH_BH_RSI.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을 반환합니다.

메인 모듈의 투표 결과는 "투표" 평균화에 사용됩니다. 따라서, 두 개의 모듈이 있을 경우 임계값을 설정할 때 이 점을 고려해야 합니다. 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.11, PeriodRSI=37, MA_period=7).

EA 생성 시 고정 볼륨(Trading Fixed Lot, 0.1)을 사용하였으며, 트레일링 스탑 알고리즘은 사용하지 않았습니다 (트레일링 사용하지 않음).

EA 테스트 결과

Fig. 11. Bullish Harami/Bearish Harami + RSI 기반 EA 테스트 결과

최적의 입력 매개변수 세트를 찾기 위해서는 MetaTrader 5 클라이언트 터미널의 전략 테스터를 활용하시기 바랍니다.

MQL5 위자드로 생성된 EA의 코드는 expert_aml_rsi.mq5에 첨부되어 있습니다.

목록
댓글 0