시스템트레이딩 게시글

MQL5 마법사로 다크 클라우드 커버 및 피어싱 라인 기반 EA 만들기

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

안녕하세요, 트레이더 여러분! 오늘은 MQL5 마법사를 이용해 다크 클라우드 커버와 피어싱 라인 패턴에 기반한 자동매매 시스템을 만드는 방법에 대해 알아보겠습니다. 이 마법사는 클라이언트 터미널과 함께 제공되는 표준 라이브러리 클래스를 기반으로 한 자동매매 시스템(EA)을 생성할 수 있도록 도와줍니다. 자신만의 거래 신호 클래스를 만들면 빠르게 거래 아이디어를 확인할 수 있습니다. 자세한 내용은 MQL5 마법사에서 자동매매 시스템 만들기 기사를 참고하세요.

기본적인 아이디어는 다음과 같습니다: 거래 신호 클래스는 CExpertSignal에서 파생되고, 이후 LongCondition()ShortCondition() 가상 메소드를 오버라이드하여 자신만의 메소드를 만들어야 합니다.

러시아어로 된 "최고 트레이더의 전략"라는 책에서는 여러 거래 전략을 다루고 있으며, 우리는 이 중에서 스토캐스틱에 의해 확인된 반전 캔들스틱 패턴에 집중할 것입니다. CCI, MFI, RSI 오실레이터와 함께 사용하는 것이 좋습니다.

캔들스틱 패턴을 확인하기 위해서는 별도의 클래스를 생성하고, 해당 클래스에서 오실레이터로 신호를 확인하면 됩니다. 여기서는 "다크 클라우드 커버/피어싱 라인" 반전 캔들스틱 패턴을 다루고, 이 패턴은 스토캐스틱 지표에 의해 확인됩니다. 거래 신호 모듈은 CCandlePattern 클래스를 기반으로 하며, 캔들스틱 패턴으로 거래 신호를 생성하는 간단한 예를 제공합니다.


1. 다크 클라우드 커버 및 피어싱 라인 반전 캔들스틱 패턴

1.1. 다크 클라우드 커버

이 패턴은 상승 추세의 끝에서 발생하는 하락 반전 캔들스틱입니다. 첫 번째 날에는 긴 흰색 캔들스틱이 형성되고, 두 번째 날에는 갭업이 발생하지만, 두 번째 날의 마감은 첫 번째 날의 중간점 아래에서 이루어집니다.

다크 클라우드 커버 캔들스틱 패턴

다크 클라우드 커버 캔들스틱 패턴

"다크 클라우드 커버" 패턴의 인식은 CCandlePattern 클래스의 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. 피어싱 라인

두 번째 날의 갭다운은 하락 추세를 지속시키지만, 두 번째 날의 마감은 첫 번째 날 몸통의 중간점 위에 위치하게 됩니다. 이는 곰들에게 바닥이 형성될 수 있음을 나타냅니다. 이 가격 행동은 바 차트보다는 캔들차트에서 더 잘 인식됩니다. 두 번째 날의 마감이 첫 번째 날 몸통에 더 깊이 침투할수록 반전 신호의 성공 가능성이 높아집니다.

피어싱 라인 캔들스틱 패턴

피어싱 라인 캔들스틱 패턴

"피어싱 라인" 패턴의 인식은 CCandlePattern 클래스의 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. 스토캐스틱 지표로 확인된 거래 신호

롱 또는 숏 포지션을 열기 위한 거래 신호는 스토캐스틱 오실레이터로 확인해야 합니다. %D 선은 해당 임계값(30 또는 70)보다 커야 하며, 포지션을 종료하는 것은 %D 지표의 값에 따라 결정됩니다. 종료 조건은 두 가지 경우로 나눌 수 있습니다:

  • 만약 %D 선이 반대의 임계값(롱 포지션의 경우 80, 숏 포지션의 경우 20)에 도달했을 때
  • 반전 신호가 확인되지 않았을 때(%D 선이 다음 레벨에 도달할 경우: 롱 포지션의 경우 20, 숏 포지션의 경우 80)

다크 클라우드 커버 패턴, 스토캐스틱 지표로 확인됨

다크 클라우드 커버 패턴, 스토캐스틱 지표로 확인됨


2.1. 롱 포지션 열기 / 숏 포지션 닫기

  1. "피어싱 라인" 패턴은 스토캐스틱 지표로 확인해야 합니다: StochSignal(1)<30 (마지막 완료된 봉의 스토캐스틱 신호선 값이 30보다 작아야 합니다).

  2. 숏 포지션은 스토캐스틱 지표의 신호선이 20 또는 80 레벨을 상승 돌파했을 때 종료해야 합니다.

//+------------------------------------------------------------------+
//| 시장 진입 및 퇴장 조건을 확인하는 메소드                  |
//| 1) 시장 진입 (롱 포지션 오픈, 결과=80)                  |
//| 2) 시장 퇴장 (숏 포지션 종료, 결과=40)                  |
//+------------------------------------------------------------------+
int CDC_PL_Stoch::LongCondition()
  {
   int result=0;
//--- idx는 Expert Advisor 작업 모드를 결정하는 데 사용될 수 있습니다.
//--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건을 확인합니다.
//--- idx=1 - 이 경우 EA는 뉴스 바에서만 거래 조건을 확인합니다.
  int idx   =StartIndex();
//--- 롱 포지션 열기 조건 확인
//--- 피어싱 라인 패턴 형성과 신호선<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (StochSignal(1)<30))
     result=80;
//--- 숏 포지션 종료 조건 확인
//--- 과매도/과매수 레벨의 신호선 교차 (하향 20, 상향 80)
   if((((StochSignal(1)>20) && (StochSignal(2)<20)) ||
       ((StochSignal(1)>80) && (StochSignal(2)<80))))
     result=40;
//--- 결과 반환
   return(result);
  }

2.2. 숏 포지션 열기 / 롱 포지션 닫기

  1. "다크 클라우드 커버" 패턴은 스토캐스틱 지표로 확인해야 합니다: StochSignal(1)>70 (마지막 완료된 봉의 스토캐스틱 신호선 값이 70보다 커야 합니다).

  2. 롱 포지션은 스토캐스틱 지표의 신호선이 80 또는 20 레벨을 하향 돌파했을 때 종료해야 합니다.

//+------------------------------------------------------------------+
//| 시장 진입 및 퇴장 조건을 확인하는 메소드                  |
//| 1) 시장 진입 (숏 포지션 오픈, 결과=80)                 |
//| 2) 시장 퇴장 (롱 포지션 종료, 결과=40)                   |
//+------------------------------------------------------------------+
int CDC_PL_Stoch::ShortCondition()
  {
   int result=0;
//--- idx는 Expert Advisor 작업 모드를 결정하는 데 사용될 수 있습니다.
//--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건을 확인합니다.
//--- idx=1 - 이 경우 EA는 뉴스 바에서만 거래 조건을 확인합니다.
  int idx   =StartIndex();
//--- 숏 포지션 열기 조건 확인
//--- 다크 클라우드 커버 패턴 형성과 신호선>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (StochSignal(1)>70))
     result=80;
//--- 롱 포지션 종료 조건 확인
//--- 과매도/과매수 레벨의 신호선 교차 (하향 80, 상향 20)
   if((((StochSignal(1)<80) && (StochSignal(2)>80)) ||
       ((StochSignal(1)<20) && (StochSignal(2)>20))))
     result=40;
//--- 결과 반환
   return(result);
  }

2.3. MQL5 마법사를 이용한 전문가 상담사 만들기

CDC_PL_Stoch 클래스는 표준 라이브러리 클래스에 포함되어 있지 않으므로, 이를 사용하기 위해서는 adc_pl_stoch.mqh 파일을 다운로드하여 client_terminal_data older\MQL5\Include\Expert\Signal\MySignals에 저장해야 합니다. 같은 방식으로 candlepatterns.mqh 파일도 저장해야 합니다. MetaEditor를 재시작한 후 MQL5 마법사에서 사용할 수 있습니다.

전문가 상담사를 만들기 위해 MQL5 마법사를 실행합니다:

MQL5 마법사로 전문가 상담사 만들기

MQL5 마법사로 전문가 상담사 만들기

전문가 상담사의 이름을 지정합니다:

전문가 상담사의 일반 속성

전문가 상담사의 일반 속성

그 다음 사용되는 거래 신호 모듈을 선택해야 합니다.

전문가 상담사의 신호 속성

전문가 상담사의 신호 속성

우리의 경우 오직 하나의 거래 신호 모듈만 사용합니다.

"스토캐스틱으로 확인된 다크 클라우드 커버/피어싱 라인 기반 신호" 거래 신호 모듈 추가:

전문가 상담사의 신호 속성

전문가 상담사의 신호 속성

거래 신호 모듈이 추가되었습니다:

전문가 상담사의 트레일링 속성

전문가 상담사의 트레일링 속성

자금 관리 속성에 대해서는 "고정 거래량으로 거래"를 사용합니다:

전문가 상담사의 자금 관리 속성

전문가 상담사의 자금 관리 속성

"완료" 버튼을 누르면 생성된 전문가 상담사의 코드가 Expert_ADC_PL_Stoch.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.02, PeriodK=9, PeriodD=5, PeriodSlow=20, MA_period=27).

전문가 상담사 생성 시 고정 볼륨(고정 로트 거래, 0.1)을 사용하였으며, 트레일링 스톱 알고리즘은 사용하지 않았습니다 (트레일링 사용 안 함).

다크 클라우드 커버/피어싱 라인 + 스토캐스틱 기반 전문가 상담사 테스트 결과

다크 클라우드 커버/피어싱 라인 + 스토캐스틱 기반 전문가 상담사 테스트 결과


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

MQL5 마법사로 생성된 전문가 상담사 코드가 expert_adc_pl_stoch.mq5에 첨부되어 있습니다.


연관 포스트

댓글 (0)