MQL5 위자드는 MQL5 위자드를 통해 MetaTrader 5에서 사용할 수 있는 완성된 전문가 고문(EA)을 쉽게 생성할 수 있도록 도와줍니다. 이 도구는 트레이딩 아이디어를 신속하게 테스트할 수 있는 기능을 제공합니다. 자신만의 거래 신호 클래스를 만드는 것만으로도 가능합니다. 이 클래스의 구조와 예제는 MQL5 Wizard: 거래 신호 모듈 생성 방법에서 확인할 수 있습니다.
거래 신호 클래스는 CExpertSignal에서 파생되며, LongCondition() 및 ShortCondition() 메서드를 사용자 정의로 재정의해야 합니다.
다양한 트레이딩 전략이 담긴 책 "최고 트레이더의 전략"을 참고하여, 우리는 CCI(상품 채널 지수)와 같은 오실레이터로 확인되는 반전 캔들 패턴에 집중할 것입니다.
이번 포스트에서는 "Bullish/Bearish Meeting Lines" 반전 캔들 패턴을 기반으로 한 거래 신호를 다루겠습니다. 이 패턴은 CCI 지표로 확인됩니다.
1. "Meeting Lines" 반전 캔들 패턴
1.1. Bullish Meeting Lines
Bullish Meeting Lines 패턴은 두 개의 캔들(하락 캔들 및 상승 캔들)로 구성되며, 두 캔들의 종가가 같거나 매우 가깝습니다. 두 캔들의 본체는 평균 본체 길이보다 커야 합니다.
Bullish Meeting Lines 패턴은 하락 추세의 반전을 나타냅니다.

Fig. 1. Bullish Meeting Lines 패턴
Bullish Meeting Lines 패턴의 인식은 CheckPatternBullishMeetingLines() 메서드에서 수행됩니다:
//+--------------------------------------------------------------------+ //| Bullish Meeting Lines 캔들 패턴 형성 체크 //+--------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishMeetingLines() { //--- Bullish Meeting Lines 체크 if((Open(2) - Close(2) > AvgBody(1)) && ((Close(1) - Open(1) > AvgBody(1)) && (MathAbs(Close(1) - Close(2) < 0.1 * AvgBody(1))) // doji close return(true); //--- return(false); }
CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) 메서드는 Bullish Meeting Lines 캔들 패턴 형성을 체크합니다.
1.2. Bearish Meeting Lines
Bearish Meeting Lines 패턴은 두 개의 캔들(상승 캔들 및 하락 캔들)로 구성되며, 종가가 같거나 매우 가깝습니다. 두 캔들의 본체는 평균 본체 길이보다 커야 합니다.
Bearish Meeting Lines 패턴은 상승 추세의 반전을 나타냅니다.

Fig. 2. Bearish Meeting Lines 패턴
Bearish Meeting Lines 패턴의 인식은 CheckPatternBearishMeetingLines() 메서드에서 수행됩니다:
//+--------------------------------------------------------------------+ //| Bearish Meeting Lines 캔들 패턴 형성 체크 //+--------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishMeetingLines() { //--- Bearish Meeting Lines 체크 if((Close(2) - Open(2) > AvgBody(1)) && ((Open(1) - Close(1) > AvgBody(1) && (MathAbs(Close(1) - Close(2) < 0.1 * AvgBody(1))) // doji close return(true); //--- return(false); }
CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) 메서드는 Bearish Meeting Lines 캔들 패턴 형성을 체크합니다.
2. CCI 지표로 확인된 거래 신호
긴 포지션을 열기 위한 거래 신호는 CCI 지표로 확인되어야 합니다. CCI 값은 -50(긴 포지션) 또는 50(짧은 포지션) 이상의 임계 값이 되어야 합니다.
열린 포지션의 종료는 CCI 값에 따라 결정됩니다. 종료 조건은 두 가지입니다:
- CCI 선이 반대 임계 값에 도달할 때 (긴 포지션의 경우 80, 짧은 포지션의 경우 -80)
- 역 신호가 확인되지 않을 때 (CCI가 긴 포지션의 경우 -80, 짧은 포지션의 경우 80에 도달할 때)

Fig. 3. CCI 지표로 확인된 Bullish Meeting Lines 패턴
int CML_CCI::LongCondition()- 긴 포지션을 열기 위한 조건을 체크하고 (결과: 80), 짧은 포지션 종료 (결과: 40)를 체크합니다;int CML_CCI::ShortCondition()- 짧은 포지션을 열기 위한 조건을 체크하고 (결과: 80), 긴 포지션 종료 (결과: 40)를 체크합니다.
2.1. 긴 포지션 열기 / 짧은 포지션 종료
Bullish Meeting Lines 패턴의 형성은 CCI 지표에 의해 확인되어야 합니다: CCI(1) < -50 (마지막 완료된 바의 CCI 값은 -50보다 작아야 합니다).
짧은 포지션은 CCI 지표가 임계 값 -80을 넘어가거나 80을 하향으로 통과할 때 종료해야 합니다.
//+------------------------------------------------------------------+ //| 시장 진입 및 종료 조건 체크 //| 1) 시장 진입 (긴 포지션 열기, 결과=80) //| 2) 시장 종료 (짧은 포지션 종료, 결과=40) //+------------------------------------------------------------------+ int CML_CCI::LongCondition() { int result=0; //--- idx는 EA 작업 모드를 결정하는 데 사용될 수 있습니다 int idx = StartIndex(); //--- 긴 포지션 열기 조건 체크 if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) && (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 Meeting Lines 패턴의 형성은 CCI 지표에 의해 확인되어야 합니다: CCI(1) > 50 (마지막 완료된 바의 CCI 값은 50보다 커야 합니다).
긴 포지션은 CCI 지표가 -80 이하로 하락하거나 80을 넘을 때 종료해야 합니다.
//+------------------------------------------------------------------+ //| 시장 진입 및 종료 조건 체크 //| 1) 시장 진입 (짧은 포지션 열기, 결과=80) //| 2) 시장 종료 (긴 포지션 종료, 결과=40) //+------------------------------------------------------------------+ int CML_CCI::ShortCondition() { int result=0; //--- idx는 EA 작업 모드를 결정하는 데 사용될 수 있습니다 int idx = StartIndex(); //--- 짧은 포지션 열기 조건 체크 if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) && (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 위자드를 사용한 전문가 고문 생성
CML_CCI 클래스는 표준 라이브러리에 포함되어 있지 않으므로 사용하기 위해서는 acml_cci.mqh 파일을 다운로드하여 client_terminal_data\MQL5\Include\Expert\Signal\MySignals 폴더에 저장해야 합니다. 같은 방법으로 candlepatterns.mqh 파일도 저장해야 합니다. MetaEditor를 재시작한 후 MQL5 위자드에서 사용할 수 있습니다.
전문가 고문을 만들기 위해 MQL5 위자드를 실행합니다:

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

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

Fig. 6. 전문가 고문의 신호 속성
우리는 하나의 거래 신호 모듈만 사용할 것입니다.
"CCI로 확인된 Bullish/Bearish Meeting Lines 기반의 신호" 모듈을 추가합니다:

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

Fig. 8. 전문가 고문의 신호 속성
트레일링 프로퍼티를 선택할 수 있지만, 우리는 "트레일링 스탑 사용 안 함"을 선택하겠습니다:

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

Fig. 10. 전문가 고문의 자금 관리 속성
"완료" 버튼을 누르면 생성된 전문가 고문의 코드가 Expert_AML_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을 반환합니다.
주요 모듈의 투표 결과는 "투표" 평균화에서 사용됩니다. 우리의 경우 주요 모듈 + 1 거래 신호 모듈이 있으므로 임계값 설정을 할 때 이 점을 고려해야 합니다. 이로 인해 ThresholdOpen과 ThresholdClose는 각각 40=(0+80)/2, 20=(0+40)/2로 설정해야 합니다.
Signal_StopLevel 및 Signal_TakeLevel 입력 매개변수의 값이 0으로 설정되어 있으므로, 포지션은 종료 조건이 참일 때만 닫힙니다.
2.4. 히스토리 백테스팅 결과
전문가 고문의 히스토리 데이터(EURUSD H1, 테스트 기간: 2000.01.01-2011.03.16, PeriodCCI=18, MA_period=3)에 대한 백테스팅을 살펴보겠습니다.
전문가 고문 생성 시 고정 거래량(고정 롯트 거래, 0.1)을 사용하고, 트레일링 스탑 알고리즘은 사용하지 않았습니다(트레일링 사용 안 함).

Fig. 11. Bullish/Bearish Meeting Lines + CCI 기반 전문가 고문의 테스트 결과
최고의 입력 매개변수 세트는 MetaTrader 5 클라이언트 터미널의 전략 테스터를 사용하여 찾을 수 있습니다.
MQL5 위자드로 생성된 전문가 고문의 코드는 expert_aml_cci.mq5에 첨부되어 있습니다.
댓글 0