MQL5 위자드를 활용한 '해머/행잉맨' 패턴 기반 거래 신호 생성

Mike 2011.03.21 23:10 56 0 0
첨부파일

안녕하세요, 트레이더 여러분! 오늘은 MQL5 위자드를 활용하여 '해머'와 '행잉맨' 패턴에 기반한 거래 신호를 생성하는 방법에 대해 알아보겠습니다. 이 도구는 메타트레이더 5와 함께 제공되는 표준 라이브러리 클래스를 바탕으로 즉시 사용할 수 있는 전문가 고문(EA)을 만드는 데 도움을 줍니다. 여러분의 거래 아이디어를 빠르게 검토할 수 있는 좋은 방법입니다.

거래 신호 클래스를 생성하는 방법에 대한 자세한 내용은 MQL5 위자드: 거래 신호 모듈 만드는 법를 참고하세요. 기본 개념은 거래 신호 클래스가 CExpertSignal에서 파생되며, 여러분의 필요에 맞게 LongCondition()ShortCondition() 메서드를 오버라이드해야 한다는 것입니다.

여기서는 '해머'와 '행잉맨'이라는 반전 캔들 패턴을 다룰 것이며, 이 패턴들은 CCI 지표로 확인됩니다. 이 모듈은 CCandlePattern 클래스를 기반으로 하며, 캔들 패턴을 사용한 거래 신호를 생성하는 간단한 예시를 제공합니다.

1. '해머'와 '행잉맨' 반전 캔들 패턴

1.1. 해머

'해머'는 작은 몸체와 긴 하단 심지를 가진 캔들로, 하락세가 끝나고 형성됩니다. 이 패턴은 약세 추세의 종료를 나타냅니다. 캔들의 색상은 중요하지 않지만, 강세 해머는 더 높은 강세 잠재력을 나타냅니다. '해머' 패턴의 몸체는 종종 이전 캔들의 최저점 근처에서 형성됩니다.

해머 캔들 패턴

그림 1. '해머' 캔들 패턴

'해머' 패턴의 인식은 CheckPatternHammer() 메서드에서 구현됩니다:

//+------------------------------------------------------------------+
//| '해머' 캔들 패턴 형성 확인  |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternHammer()
  {
   //--- 해머
   if((MidPoint(1)2)) &&
   (<span class="functions">MathMin(Open(1),Close(1))>(High(1)-(High(1)-Low(1)/3.0)) &&
   (Close(1)2)) && (Open(1)2)))
   return(true);
   return(false);
  }

'해머' 캔들 패턴 형성 확인은 CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) 메서드를 통해 이루어집니다.

1.2. 행잉맨

'행잉맨'은 작은 몸체와 긴 하단 심지를 가진 캔들로, 상승세가 끝난 후 형성됩니다. 이 패턴은 강세 추세의 종료를 나타냅니다. 이 캔들의 색상 역시 중요하지 않지만, 약세 캔들은 더 높은 약세 잠재력을 시사합니다. '행잉맨' 패턴의 몸체는 종종 이전 캔들의 최대치 근처에서 형성됩니다.

행잉맨 캔들 패턴

그림 2. '행잉맨' 캔들 패턴

'행잉맨' 패턴의 인식은 CheckPatternHangingMan() 메서드에서 구현됩니다:

//+------------------------------------------------------------------+
//| '행잉맨' 캔들 패턴 형성 확인 |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternHangingMan()
  {
   //--- 행잉맨
   if((MidPoint(1)>CloseAvg(2)) &&
   (<span class="functions">MathMin(Open(1),Close(1)>(High(1)-(High(1)-Low(1)/3.0)) &&
   (Close(1)>Close(2)) && (Open(1)>Open(2)))
   return(true);
   return(false);
  }

'행잉맨' 캔들 패턴 형성 확인은 CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) 메서드를 통해 이루어집니다.

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

거래 신호는 반드시 CCI 지표로 확인되어야 합니다. CCI의 값이 기준 수준을 초과하거나 미만이 되어야 합니다 (-50은 매수 포지션, 50은 매도 포지션). 또한, 열려 있는 포지션의 종료는 CCI 값에 따라 이루어집니다. CCI가 다음의 기준 수준에 도달하면 종료할 수 있습니다:

  • CCI 선이 반대 기준 수준(매수: 80, 매도: -80)에 도달한 경우
  • 반전 신호가 확인되지 않은 경우 (CCI가 다음 수준에 도달했을 때: 매수: -80, 매도: 80)

CCI로 확인된 해머 패턴

그림 3. CCI로 확인된 '해머' 패턴

  • int CH_HM_CCI::LongCondition() - 매수 포지션을 열기 위한 조건을 체크합니다 (80 반환) 및 매도 포지션 종료 조건 (40 반환);
  • int CH_HM_CCI::ShortCondition() - 매도 포지션을 열기 위한 조건을 체크합니다 (80 반환) 및 매수 포지션 종료 조건 (40 반환).

2.1. 매수 포지션 열기/매도 포지션 닫기

  1. '해머' 패턴 형성이 CCI 지표로 확인되어야 합니다: CCI(1) < -50 (마지막 완료된 막대의 CCI 값이 -50 미만이어야 합니다).

  2. 매도 포지션은 CCI 지표가 기준 수준 -80을 상향 돌파하거나 기준 수준 80을 하향 돌파하면 종료됩니다.

//+------------------------------------------------------------------+
//| 시장 진입 및 종료 조건 확인 |
//| 1) 매수 포지션 진입 (결과=80) |
//| 2) 매도 포지션 종료 (결과=40) |
//+------------------------------------------------------------------+
int CH_HM_CCI::LongCondition()
  {
   int result=0;
   //--- 매수 포지션 진입 조건 확인
   if(CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (CCI(1)<-50))
     result=80;
   //--- 매도 포지션 종료 조건 확인
   if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>8040;
   //--- 결과 반환
   return(result);
  }

2.2. 매도 포지션 열기/매수 포지션 닫기

  1. '행잉맨' 패턴 형성이 CCI 지표로 확인되어야 합니다: CCI(1) > 50 (마지막 완료된 막대의 CCI 값이 50 초과해야 합니다).

  2. 매수 포지션은 CCI 지표가 -80 또는 80 수준을 하향 돌파하면 종료됩니다.

//+------------------------------------------------------------------+
//| 시장 진입 및 종료 조건 확인 |
//| 1) 매도 포지션 진입 (결과=80) |
//| 2) 매수 포지션 종료 (결과=40) |
//+------------------------------------------------------------------+
int CH_HM_CCI::ShortCondition()
  {
   int result=0;
   //--- 매도 포지션 진입 조건 확인
   if(CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (CCI(1)>50))
     result=80;
   //--- 매수 포지션 종료 조건 확인
   if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))
     result=40;
   //--- 결과 반환
   return(result);
  }

2.3. MQL5 위자드를 사용한 전문가 고문 생성

CH_HM_CCI 클래스는 표준 라이브러리 클래스에 포함되어 있지 않으므로, 이를 사용하려면 ach_hm_cci.mqh 파일을 다운로드하여 클라이언트 터미널 데이터 폴더의 MQL5\Include\Expert\Signal\MySignals에 저장해야 합니다. 동일한 작업을 candlepatterns.mqh 파일에도 수행해야 합니다. 메타에디터를 재시작한 후 MQL5 위자드에서 사용할 수 있습니다.

전문가 고문을 생성하려면 MQL5 위자드를 실행하세요:

MQL5 위자드를 통해 전문가 고문 생성

그림 4. MQL5 위자드를 통해 전문가 고문 생성

전문가 고문의 이름을 지정합니다:

전문가 고문의 일반 속성

그림 5. 전문가 고문의 일반 속성

그 후 사용하려는 거래 신호 모듈을 선택합니다.

전문가 고문의 신호 속성

그림 6. 전문가 고문의 신호 속성

이번 경우에는 하나의 거래 신호 모듈만 사용합니다.

'CCI로 확인된 해머/행잉맨 기반 신호' 거래 신호 모듈 추가:

전문가 고문의 신호 속성

그림 7. 전문가 고문의 신호 속성

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

전문가 고문의 신호 속성

그림 8. 전문가 고문의 신호 속성

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

전문가 고문의 트레일링 속성

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

머니 매니지먼트 속성에 대해서는 '고정 거래량으로 거래하기'를 선택합니다:

전문가 고문의 머니 매니지먼트 속성

그림 10. 전문가 고문의 머니 매니지먼트 속성

'완료' 버튼을 눌러 생성된 전문가 고문의 코드를 얻으면, Expert_AH_HM_CCI.mq5로 저장되어 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을 반환하므로 이 사실을 염두에 두어야 합니다.

이러한 이유로 인해 ThresholdOpen과 ThresholdClose는 40=(0+80)/2 및 20=(0+40)/2로 설정해야 합니다. Signal_StopLevel과 Signal_TakeLevel 입력 매개변수는 0으로 설정되어 있으므로, 포지션 종료는 조건이 충족될 때만 이루어집니다.

2.4. 히스토리 백테스팅 결과

이 전문가 고문의 히스토리 데이터에 대한 백테스트를 진행해 보겠습니다 (EURUSD H1, 테스트 기간: 2010.01.01-2011.03.16, PeriodCCI=25, MA_period=5).

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

전문가 고문의 테스트 결과

그림 11. '해머/행잉맨 + CCI' 기반 전문가 고문의 테스트 결과

최적의 입력 매개변수 세트는 전략 테스터를 통해 찾을 수 있습니다.

생성된 전문가 고문의 코드는 expert_ah_hm_cci.mq5에 첨부되어 있습니다.

목록
댓글 0