시스템트레이딩 게시글

MQL5 위자드로 다크 클라우드 커버 및 피어싱 라인 기반 거래 신호 생성하기

첨부파일
300.zip (6.5 KB, 다운로드 0회)

안녕하세요, 트레이더 여러분! 오늘은 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 값에 따라 결정됩니다. 마감은 두 가지 경우에 이루어질 수 있습니다:

  1. RSI가 반대 임계 수준(롱 포지션은 70, 숏 포지션은 30)에 도달한 경우
  2. 반전 신호가 확인되지 않은 경우(즉, RSI가 다음 수준(롱 포지션은 30, 숏 포지션은 70)에 도달한 경우)

RSI로 확인된 다크 클라우드 커버 패턴

그림 3. RSI로 확인된 다크 클라우드 커버 패턴


  • int CDC_PL_RSI::LongCondition() - 롱 포지션을 열기 위한 조건 체크(80 반환) 및 숏 포지션을 마감하기 위한 조건 체크(40 반환);
  • int CDC_PL_RSI::ShortCondition() - 숏 포지션을 열기 위한 조건 체크(80 반환) 및 롱 포지션을 마감하기 위한 조건 체크(40 반환).

2.1. 롱 포지션 열기/숏 포지션 마감하기

  1. 피어싱 라인 패턴의 형성은 RSI 지표로 확인해야 합니다: RSI(1)<40 (마지막 완료된 봉의 RSI 값이 40보다 작아야 합니다).

  2. 숏 포지션은 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. 숏 포지션 열기/롱 포지션 마감하기

  1. 다크 클라우드 커버 패턴의 형성은 RSI 지표로 확인해야 합니다: RSI(1)>60 (마지막 완료된 봉의 RSI 값이 60보다 커야 합니다).

  2. 롱 포지션은 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 위자드를 실행합니다:

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)을 사용했고, 트레일링 스탑 알고리즘은 사용하지 않았습니다 (트레일링 사용 안 함).

다크 클라우드 커버/피어싱 라인 + RSI 기반 전문가 어드바이저 테스트 결과

그림 11. 다크 클라우드 커버/피어싱 라인 + RSI 기반 전문가 어드바이저 테스트 결과


최적의 입력 매개변수 세트는 MetaTrader 5 클라이언트 터미널의 전략 테스터를 사용하여 찾을 수 있습니다.

MQL5 위자드로 생성된 전문가 어드바이저의 코드는 expert_ad_pl_rsi.mq5에 첨부되어 있습니다.


연관 포스트

댓글 (0)