안녕하세요, 트레이더 여러분! 오늘은 MQL5 위자드를 사용하여 해머 및 행잉맨 패턴을 기반으로 한 트레이딩 신호를 생성하는 방법에 대해 알아보겠습니다. 이 도구는 메타트레이더 5에서 전문가 어드바이저(EA)를 쉽게 만들 수 있도록 도와줍니다.
먼저, 거래 아이디어를 빠르게 확인하기 위해 자신만의 거래 신호 클래스를 작성해야 합니다. 이 클래스의 구조와 예제는 MQL5 위자드: 거래 신호 모듈 만들기에서 찾아볼 수 있습니다.
기본 아이디어는 거래 신호 클래스가 CExpertSignal에서 파생된다는 것입니다. 이후 LongCondition()와 ShortCondition() 메소드를 오버라이드하여 자신만의 메소드를 만들어야 합니다.
우리는 반전 캔들 패턴 중 해머와 행잉맨 패턴을 다룰 것입니다. 이 패턴은 MFI 지표로 확인됩니다.
1. 해머 및 행잉맨 캔들 패턴
1.1. 해머
해머는 작은 몸체와 긴 하단 심지를 가진 캔들로, 하락세에서 형성됩니다. 해머 패턴은 하락 추세의 끝을 나타냅니다. 캔들 몸체의 색상은 중요하지 않지만, 상승 해머는 더 큰 상승 잠재력을 나타냅니다.

Fig. 1. 해머 캔들 패턴
해머 패턴 인식은 CheckPatternHammer() 메소드를 통해 이루어집니다. 아래는 그 코드입니다:
//+------------------------------------------------------------------+ //| 해머 캔들 패턴 형성 체크 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHammer() { //--- 해머 체크 if((MidPoint(1)2)) && // 하락 추세 (MathMin(Open(1),Close(1))>(High(1)-(High(1)-Low(1)/3.0)) && // 몸체가 상단 1/3에 위치 (Close(1) 2)) && (Open(1) 2))) return(true); return(false); }
1.2. 행잉맨
행잉맨은 작은 몸체와 긴 하단 심지를 가진 캔들로, 상승세에서 형성됩니다. 이 패턴은 상승 추세의 끝을 나타냅니다. 행잉맨 패턴의 색상은 중요하지 않지만, 하락 캔들은 더 큰 하락 잠재력을 나타냅니다.

Fig. 2. 행잉맨 캔들 패턴
행잉맨 패턴 인식은 CheckPatternHangingMan() 메소드를 통해 이루어집니다:
//+------------------------------------------------------------------+ //| 행잉맨 캔들 패턴 형성 체크 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHangingMan() { //--- 행잉맨 체크 if((MidPoint(1)>CloseAvg(2)) && // 상승 추세 (MathMin(Open(1),Close(1)>(High(1)-(High(1)-Low(1)/3.0)) && // 몸체가 상단 1/3에 위치 (Close(1)>Close(2)) && (Open(1)>Open(2))) return(true); return(false); }
2. MFI 지표로 확인되는 거래 신호
거래 신호를 열거나 닫기 위해서는 MFI 지표로 확인해야 합니다. MFI 값은 롱 포지션의 경우 40 미만, 숏 포지션의 경우 60 초과여야 합니다.
- 롱 포지션을 열기 위한 조건: MFI(1) < 40
- 숏 포지션을 닫기 위한 조건: MFI가 상향으로 70 또는 30의 임계 수준을 넘었을 경우

Fig. 3. 해머 패턴, MFI 지표로 확인
2.1. 롱 포지션 열기 / 숏 포지션 닫기
해머 패턴이 MFI 지표로 확인되어야 합니다: MFI(1) < 40.
숏 포지션은 MFI 지표가 70 또는 30의 임계 수준을 넘었을 때 닫아야 합니다.
//+------------------------------------------------------------------+ //| 시장 진입 및 퇴출 조건 체크 | int CH_HM_MFI::LongCondition() { int result=0; if(CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (MFI(1)<40)) result=80; return result; }
2.2. 숏 포지션 열기 / 롱 포지션 닫기
행잉맨 패턴이 MFI 지표로 확인되어야 합니다: MFI(1) > 60.
롱 포지션은 MFI 지표가 70 또는 30의 임계 수준을 넘었을 때 닫아야 합니다.
//+------------------------------------------------------------------+ //| 시장 진입 및 퇴출 조건 체크 | int CH_HM_MFI::ShortCondition() { int result=0; if(CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (MFI(1)>60)) result=80; return result; }
2.3. MQL5 위자드를 사용하여 전문가 어드바이저 생성하기
CH_HM_MFI 클래스는 표준 라이브러리에 포함되어 있지 않으므로, ah_hm_mfi.mqh 파일을 다운로드하여 terminal_data_folder\MQL5\Include\Expert\Signal\MySignals에 저장해야 합니다.
전문가 어드바이저를 생성하려면 MQL5 위자드를 실행합니다:

Fig. 4. 전문가 어드바이저 생성하기
전문가 어드바이저의 이름을 지정합니다:

Fig. 5. 전문가 어드바이저 일반 속성
그 다음, 사용하려는 거래 신호 모듈을 선택합니다.

Fig. 6. 전문가 어드바이저 신호 속성
우리의 경우, 한 개의 거래 신호 모듈만 사용합니다.
"MFI로 확인된 해머/행잉맨 기반 신호" 모듈 추가:

Fig. 7. 전문가 어드바이저 신호 속성
거래 신호 모듈이 추가되었습니다:

Fig. 8. 전문가 어드바이저 신호 속성
원하는 트레일링 속성을 선택할 수 있지만, 우리는 "트레일링 스탑 사용 안 함"을 사용할 것입니다:

Fig. 9. 전문가 어드바이저 트레일링 속성
자금 관리 속성에 대해, "고정 거래량으로 거래하기"를 사용할 것입니다:

Fig. 10. 전문가 어드바이저 자금 관리 속성
"완료" 버튼을 누르면 생성된 전문가 어드바이저의 코드가 Expert_AH_HM_MFI.mq5에 저장됩니다.
생성된 전문가 어드바이저의 기본 입력 파라미터:
//--- 주요 신호 입력 input int Signal_ThresholdOpen =10;// 포지션 오픈 신호 임계값 [0...100] input int Signal_ThresholdClose =10;// 포지션 클로즈 신호 임계값 [0...100]
여기서 Signal_ThresholdOpen/Signal_ThresholdClose 입력 파라미터는 포지션 오픈 및 클로즈에 대한 임계값을 지정할 수 있습니다.
전문가 어드바이저의 거래 신호 클래스의 LongCondition() 및 ShortCondition() 메소드의 코드에서 고정값의 임계값을 설정했습니다:
- 포지션 오픈: 80;
- 포지션 클로즈: 40.
MQL5 위자드로 생성된 전문가 어드바이저는 거래 신호 모듈의 "투표"를 사용하여 포지션을 열고 닫습니다. 주요 모듈의 투표 결과도 사용되며, 이 모듈의 LongCondition() 및 ShortCondition() 메소드는 항상 0을 반환합니다.
2.4. 이력 백테스트 결과
이제 해머/행잉맨 + MFI 기반의 전문가 어드바이저에 대한 이력 백테스트 결과를 살펴보겠습니다. (유로/달러 H1, 테스트 기간: 2010.01.01-2011.03.16).

Fig. 11. 해머/행잉맨 + MFI 기반의 테스트 결과
최고의 입력 파라미터 세트는 전략 테스터를 통해 찾을 수 있습니다.
MQL5 위자로 생성된 전문가 어드바이저의 코드는 expert_ah_hm_mfi.mq5에 첨부되어 있습니다.