안녕하세요, 트레이더 여러분! 오늘은 MQL5 위자드를 사용하여 다크 클라우드 커버와 피어싱 라인 패턴을 기반으로 한 거래 신호를 생성하는 방법에 대해 알아보겠습니다. 이 도구는 클라이언트 터미널과 함께 제공되는 표준 라이브러리 클래스를 기반으로 손쉽게 전문가 어드바이저(EA)를 만들 수 있도록 도와줍니다.
트레이딩 아이디어를 빠르게 검토하고, 자신만의 거래 신호 클래스를 생성하는 것만으로 쉽게 시작할 수 있습니다. 거래 신호 클래스의 구조와 예제는 MQL5 위자드: 거래 신호 모듈 만드는 법에서 확인할 수 있습니다.
기본 아이디어는 다음과 같습니다: 거래 신호 클래스는 CExpertSignal에서 파생됩니다. 여기서 LongCondition()와 ShortCondition() 가상 메서드를 자신의 메서드로 오버라이드해야 합니다.
여기서 저희는 RSI 지표로 확인된 다크 클라우드 커버 및 피어싱 라인 반전 캔들 패턴에 기반한 신호를 다룰 것입니다. 이 거래 신호 모듈은 CCandlePattern 클래스를 기반으로 하며, 캔들 패턴을 사용하여 거래 신호를 생성하는 간단한 예제입니다.
1. 다크 클라우드 커버 및 피어싱 라인 캔들 패턴
1.1. 다크 클라우드 커버
다크 클라우드 커버는 상승 추세의 끝에서 발생하는 하락 반전 캔들 패턴입니다. 첫날에는 긴 흰색 캔들이 형성되고, 둘째 날에는 갭 업이 발생하지만, 둘째 날 종가는 첫날의 중간점 아래에서 마감됩니다.

그림 1. 다크 클라우드 커버 캔들 패턴
다크 클라우드 커버 패턴의 인식은 CheckPatternDarkCloudCover() 메서드에서 구현되어 있습니다:
//+------------------------------------------------------------------+ //| 다크 클라우드 커버 캔들 패턴 형성 체크 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternDarkCloudCover() { //--- 다크 클라우드 커버 if((Close(2)-Open(2)>AvgBody(1)) && // (긴 흰색) (Close(1)<Close(2)) && // (Close(1)>Open(2)) && // (이전 몸체 내에서 마감) (MidOpenClose(2)>CloseAvg(1)) && // (상승 추세) (Open(1)>High(2))) // (새로운 고점에서 시작) return(true); //--- return(false); }
CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) 메서드는 다크 클라우드 커버 캔들 패턴의 형성을 확인하는 데 사용됩니다.
1.2. 피어싱 라인
피어싱 라인은 둘째 날의 갭 다운이 하락 추세를 지속하게 하지만, 둘째 날의 종가는 첫날 몸체의 중간점 위에서 마감됩니다. 이는 하락세의 매도자들에게 바닥이 형성될 수 있음을 시사합니다. 이 가격 행동은 바 차트보다 캔들 차트에서 더 분명하게 식별됩니다.

그림 2. 피어싱 라인 캔들 패턴
피어싱 라인 패턴의 인식은 CheckPatternPiercingLine() 메서드에서 구현되어 있습니다:
//+------------------------------------------------------------------+ //| 피어싱 라인 캔들 패턴 형성 체크 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternPiercingLine() { //--- 피어싱 라인 if((Close(1)-Open(1)>AvgBody(1)) && // (긴 흰색) (Open(2)-Close(2)>AvgBody(1)) && // (긴 검정색) (Close(1)>Close(2)) && // (Close(1)<Open(2)) && // (이전 몸체 내에서 마감) (MidOpenClose(2)<CloseAvg(2)) && // (하락 추세) (Open(1)<Low(2))) // (이전 저점보다 낮게 시작) return(true); //--- return(false); }
CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) 메서드는 피어싱 라인 캔들 패턴의 형성을 확인하는 데 사용됩니다.
2. RSI 지표로 확인된 거래 신호
롱 또는 숏 포지션을 열기 위한 거래 신호는 반드시 RSI 지표로 확인되어야 합니다. RSI 값은 임계 수준(롱 포지션은 40, 숏 포지션은 60)보다 낮거나 높아야 합니다.
열린 포지션의 마감은 RSI 값에 따라 결정됩니다. 마감은 두 가지 경우에 이루어질 수 있습니다:
- RSI가 반대 임계 수준(롱 포지션은 70, 숏 포지션은 30)에 도달한 경우
- 반전 신호가 확인되지 않은 경우(즉, RSI가 다음 수준(롱 포지션은 30, 숏 포지션은 70)에 도달한 경우)

그림 3. RSI로 확인된 다크 클라우드 커버 패턴
- int CDC_PL_RSI::LongCondition() - 롱 포지션을 열기 위한 조건 체크(80 반환) 및 숏 포지션을 마감하기 위한 조건 체크(40 반환);
- int CDC_PL_RSI::ShortCondition() - 숏 포지션을 열기 위한 조건 체크(80 반환) 및 롱 포지션을 마감하기 위한 조건 체크(40 반환).
2.1. 롱 포지션 열기/숏 포지션 마감하기
피어싱 라인 패턴의 형성은 RSI 지표로 확인해야 합니다: RSI(1)<40 (마지막 완료된 봉의 RSI 값이 40보다 작아야 합니다).
숏 포지션은 RSI 지표가 70 또는 30의 임계 수준을 상승 통과한 경우에 마감해야 합니다.
//+------------------------------------------------------------------+ //| 시장의 진입 및 퇴출 조건 체크 | //| 1) 시장 진입 (롱 포지션 열기, 결과=80) | //| 2) 시장 퇴출 (숏 포지션 마감, 결과=40) | //+------------------------------------------------------------------+ int CDC_PL_RSI::LongCondition() { int result=0; //--- idx를 사용하여 전문가 어드바이저 작업 모드 결정 //--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건을 체크 //--- idx=1 - 이 경우 EA는 뉴스 봉에서만 거래 조건을 체크 int idx =StartIndex(); //--- 롱 포지션 열기 위한 조건 체크 //--- 피어싱 라인 패턴 형성 및 RSI<30 if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (RSI(1)<40)) result=80; //--- 숏 포지션 마감 조건 체크 //--- 과매수/과매도 신호선 크로스오버 (상승 30, 상승 70) if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70))) result=40; //--- 결과 반환 return(result); }
2.2. 숏 포지션 열기/롱 포지션 마감하기
다크 클라우드 커버 패턴의 형성은 RSI 지표로 확인해야 합니다: RSI(1)>60 (마지막 완료된 봉의 RSI 값이 60보다 커야 합니다).
롱 포지션은 RSI 지표가 70 또는 30의 임계 수준을 하향 통과한 경우에 마감해야 합니다.
//+------------------------------------------------------------------+ //| 시장의 진입 및 퇴출 조건 체크 | //| 1) 시장 진입 (숏 포지션 열기, 결과=80) | //| 2) 시장 퇴출 (롱 포지션 마감, 결과=40) | //+------------------------------------------------------------------+ int CDC_PL_RSI::ShortCondition() { int result=0; //--- idx를 사용하여 전문가 어드바이저 작업 모드 결정 //--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건을 체크 //--- idx=1 - 이 경우 EA는 뉴스 봉에서만 거래 조건을 체크 int idx =StartIndex(); //--- 숏 포지션 열기 위한 조건 체크 //--- 다크 클라우드 커버 패턴 형성 및 RSI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (RSI(1)>60)) result=80; //--- 롱 포지션 마감 조건 체크 //--- 신호선 크로스오버 (하향 70, 하향 30) if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30))) result=40; //--- 결과 반환 return(result); }
2.3. MQL5 위자드로 전문가 어드바이저 만들기
CDC_PL_RSI 클래스는 표준 라이브러리 클래스에 포함되어 있지 않으므로 사용하려면 adc_pl_rsi.mqh 파일을 다운로드하여 client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals에 저장해야 합니다. 같은 방식으로 acandlepatterns.mqh 파일도 저장해야 합니다. MetaEditor를 재시작한 후 MQL5 위자드에서 사용할 수 있습니다.
전문가 어드바이저를 생성하려면 MQL5 위자드를 실행합니다:

그림 4. MQL5 위자드로 전문가 어드바이저 생성하기
전문가 어드바이저의 이름을 지정합니다:

그림 5. 전문가 어드바이저의 일반 속성
그 후 사용될 거래 신호 모듈을 선택합니다.

그림 6. 전문가 어드바이저의 신호 속성
이번 경우에는 단 하나의 거래 신호 모듈만 사용합니다.
"RSI로 확인된 다크 클라우드 커버/피어싱 라인 기반 신호" 거래 신호 모듈 추가:

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

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

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

그림 10. 전문가 어드바이저의 자금 관리 속성
"완료" 버튼을 누르면 생성된 전문가 어드바이저의 코드가 Expert_ADC_PL_RSI.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, 테스트 기간: 2010.01.01-2011.02.23)에 대한 백테스팅을 살펴보겠습니다.
전문가 어드바이저 생성 시 고정 볼륨(고정 롯으로 거래하기, 0.1)을 사용했고, 트레일링 스탑 알고리즘은 사용하지 않았습니다 (트레일링 사용 안 함).

그림 11. 다크 클라우드 커버/피어싱 라인 + RSI 기반 전문가 어드바이저 테스트 결과
최적의 입력 매개변수 세트는 MetaTrader 5 클라이언트 터미널의 전략 테스터를 사용하여 찾을 수 있습니다.
MQL5 위자드로 생성된 전문가 어드바이저의 코드는 expert_ad_pl_rsi.mq5에 첨부되어 있습니다.