안녕하세요, 트레이더 여러분! 오늘은 MQL5 위자드를 활용하여 Bullish Harami와 Bearish Harami 패턴을 기반으로 하는 거래 신호를 생성하는 방법에 대해 알아보겠습니다. 이 과정은 메타트레이더 5에서 자동 거래를 구현하는 데 큰 도움이 될 것입니다.
MQL5 위자드는 클라이언트 터미널과 함께 제공되는 표준 라이브러리 클래스를 기반으로 준비된 전문가 고문(EA)을 생성할 수 있게 해줍니다. 여러분의 거래 아이디어를 신속하게 확인하는 데 필요한 것은 자신만의 거래 신호 클래스를 만드는 것입니다. 이 클래스의 구조와 예시는 MQL5 위자드: 거래 신호 모듈 생성 방법에서 확인할 수 있습니다.
1. Bullish Harami와 Bearish Harami 패턴
1.1. Bullish Harami
Bullish Harami 패턴은 하락 추세에서 큰 캔들이 작은 캔들로 이어질 때 형성됩니다. 이 작은 캔들의 몸체는 큰 캔들의 몸체 내에 위치하게 됩니다. 이 패턴은 하락 추세가 반전될 가능성이 있음을 나타내며, 롱 포지션 진입의 좋은 시점임을 알려줍니다. 두 번째 캔들은 갭 업으로 열립니다. 두 번째(흰색) 캔들이 작을수록 반전 가능성이 높아집니다.

Fig. 1. Bullish Harami 캔들 패턴
Bullish Harami 패턴의 인식은 CheckPatternBullishHarami() 메소드에서 구현됩니다.
//+------------------------------------------------------------------+ //| Bullish Harami 캔들 패턴 형성 확인 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishHarami() { //--- Bullish Harami if((Close(1)>Open(1)) && ... ) return(true); return(false); }
1.2. Bearish Harami
Bearish Harami 패턴은 상승 추세에서 큰 캔들이 작은 캔들로 이어질 때 형성됩니다. 이 패턴은 상승 추세가 반전될 가능성이 있음을 나타내며, 숏 포지션 진입의 좋은 시점임을 알려줍니다. 두 번째 캔들은 갭 다운으로 열립니다. 두 번째(검은색) 캔들이 작을수록 반전 가능성이 높아집니다.

Fig. 2. Bearish Harami 캔들 패턴
Bearish Harami 패턴의 인식은 CheckPatternBearishHarami() 메소드에서 구현됩니다.
//+------------------------------------------------------------------+ //| Bearish Harami 캔들 패턴 형성 확인 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishHarami() { //--- Bearish Harami if((Close(1)<Open(1)) && ... ) return(true); return(false); }
2. CCI 지표로 확인된 거래 신호
거래 신호는 CCI 지표로 확인되어야 합니다. CCI 값이 -50(롱 포지션) 또는 50(숏 포지션) 이상의 임계 수준을 초과해야 합니다.
열려 있는 포지션의 종료는 CCI 값에 따라 달라집니다. 두 가지 경우에 해당됩니다:
- CCI 선이 반대 임계 수준에 도달했을 때 (롱 포지션의 경우 80, 숏 포지션의 경우 -80)
- 역 신호가 확인되지 않았을 때 (CCI가 다음 수준에 도달했을 때: -80(롱 포지션) 또는 80(숏 포지션))

Fig. 3. Bullish Harami 패턴, CCI 지표로 확인
int CBH_BH_CCI::LongCondition()- 롱 포지션 열기 및 숏 포지션 닫기 조건 확인 (80 반환)int CBH_BH_CCI::ShortCondition()- 숏 포지션 열기 및 롱 포지션 닫기 조건 확인 (80 반환)
2.1. 롱 포지션 열기/숏 포지션 닫기
Bullish Harami 패턴은 CCI 지표로 확인되어야 합니다:
CCI(1)<-50(마지막 캔들의 CCI 값은 -50보다 작아야 함).숏 포지션은 CCI 지표가 -80의 임계 수준을 상향 돌파하거나 80의 임계 수준을 하향 돌파할 때 닫아야 합니다.
//+------------------------------------------------------------------+ //| 시장 진입 조건 확인 | //| 1) 롱 포지션 열기 (결과=80) | //| 2) 숏 포지션 닫기 (결과=40) | //+------------------------------------------------------------------+ int CBH_BH_CCI::LongCondition() { int result=0; if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (CCI(1)<-50)) result=80; if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80))) result=40; return(result); }
2.2. 숏 포지션 열기/롱 포지션 닫기
Bearish Harami 패턴은 CCI 지표로 확인되어야 합니다:
CCI(1)>50(마지막 캔들의 CCI 값은 50보다 커야 함).롱 포지션은 CCI 지표가 -80 또는 80 수준을 하향 돌파할 때 닫아야 합니다.
//+------------------------------------------------------------------+ //| 시장 진입 조건 확인 | //| 1) 숏 포지션 열기 (결과=80) | //| 2) 롱 포지션 닫기 (결과=40) | //+------------------------------------------------------------------+ int CBH_BH_CCI::ShortCondition() { int result=0; if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (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 위자드를 이용한 전문가 고문 생성
CBH_BH_CCI 클래스는 표준 라이브러리 클래스에 포함되어 있지 않으므로, 이 파일을 다운로드하여 client_terminal_dataolder\MQL5\Include\Expert\Signal\MySignals에 저장해야 합니다. 캔들 패턴 파일도 마찬가지로 저장해야 합니다. 메타에디터를 재시작한 후 MQL5 위자드에서 사용할 수 있습니다.
전문가 고문을 생성하려면 MQL5 위자드를 실행합니다:

Fig. 4. MQL5 위자드를 사용한 전문가 고문 생성
전문가 고문의 이름을 지정합니다:

Fig. 5. 전문가 고문의 일반 속성
그 다음 사용될 거래 신호 모듈을 선택해야 합니다.

Fig. 6. 전문가 고문의 신호 속성
이번 경우에는 하나의 거래 신호 모듈만 사용합니다.
"Bullish Harami/Bearish Harami 확인된 CCI 기반 신호" 모듈을 추가합니다:

Fig. 7. 전문가 고문의 신호 속성
거래 신호 모듈이 추가되었습니다:

Fig. 8. 전문가 고문의 신호 속성
임의의 트레일링 속성을 선택할 수 있지만, 우리는 "트레일링 스탑 사용 안 함"을 사용합니다:

Fig. 9. 전문가 고문의 트레일링 속성
자금 관리 속성에 관해서는, "고정 거래량으로 거래"를 사용합니다:

Fig. 10. 전문가 고문의 자금 관리 속성
"완료" 버튼을 누르면 생성된 전문가 고문의 코드가 Expert_ABH_BH_CCI.mq5에 저장되고, terminal_data_folder\MQL5\Experts\에 위치하게 됩니다.
생성된 전문가 고문의 기본 입력 매개변수는 다음과 같습니다:
//--- 메인 신호를 위한 입력 input int Signal_ThresholdOpen =10; // 롱 포지션을 열기 위한 신호 임계값 [0...100] input int Signal_ThresholdClose =10; // 숏 포지션을 닫기 위한 신호 임계값 [0...100]
이 값들은 다음과 같이 변경되어야 합니다:
//--- 메인 신호를 위한 입력 input int Signal_ThresholdOpen =40; // 롱 포지션을 열기 위한 신호 임계값 [0...100] input int Signal_ThresholdClose =20; // 숏 포지션을 닫기 위한 신호 임계값 [0...100]
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으로 설정되어 있으면, 포지션은 종료 조건이 참일 때만 닫힙니다.
