시스템트레이딩 게시글

MQL5 위자드로 아침/저녁 별 패턴과 스토캐스틱을 활용한 트레이딩 신호 생성하기

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

안녕하세요, 트레이더 여러분! 오늘은 MQL5 위자드를 사용하여 아침 별(Morning Star) 및 저녁 별(Evening Star) 패턴을 기반으로 하는 트레이딩 신호를 생성하는 방법을 알아보겠습니다. 이 도구는 메타트레이더 5와 함께 제공되는 표준 라이브러리 클래스를 활용하여 손쉽게 전문가 조언자를 만들 수 있게 도와줍니다.

트레이딩 아이디어를 빠르게 검증할 수 있는 방법으로, 여러분의 트레이딩 신호 클래스를 생성하는 것만으로 가능합니다. 클래스의 구조와 예제는 MQL5 위자드: 트레이딩 신호 모듈 생성 방법에서 확인할 수 있습니다.

기본 아이디어는 다음과 같습니다. 트레이딩 신호 클래스는 CExpertSignal에서 파생됩니다. 이후, 여러분의 방법으로 LongCondition()ShortCondition() 가상 메소드를 오버라이드해야 합니다.

우리는 스토캐스틱, CCI, MFI, RSI와 같은 오실레이터로 확인된 반전 캔들 패턴에 집중할 것입니다.

아침 별과 저녁 별 패턴을 기반으로 하는 신호를 살펴보겠습니다. 스토캐스틱 지표로 확인된 아침 별/저녁 별 패턴을 활용하여 트레이딩 신호를 생성하는 방법을 알아보겠습니다. 이 모듈은 CCandlePattern 클래스를 기반으로 하며, 캔들 패턴을 활용한 신호 생성을 위한 간단한 예제를 제공합니다.


1. 아침 별과 저녁 별 반전 캔들 패턴

1.1. 아침 별 (Morning Star)

이 패턴은 하락세의 반전을 나타내며, 세 개의 캔들로 구성됩니다 (그림 1). 긴 검은 캔들 뒤에 작은 몸체를 가진 캔들이 있으며, 이 캔들은 검은 캔들의 몸체를 넘어섭니다. 작은 몸체는 강세와 약세의 힘이 같다는 것을 의미하며, 시장이 트렌드를 바꿀 준비가 되었다는 신호입니다.

패턴의 세 번째 캔들은 강세 캔들로, 두 번째 캔들의 몸체와 겹치지 않으며, 종가가 첫 번째(약세) 캔들의 몸체 안에 위치합니다. 그림 1에 결과 캔들이 나타나 있습니다.

그림 1. 아침 별과 아침 도지 별 캔들 패턴

그림 1. 아침 별과 아침 도지 별 캔들 패턴

아침 별 패턴의 식별 기능은 CheckPatternMorningStar()CheckPatternMorningDoji() 메소드에서 구현되어 있습니다.

//+------------------------------------------------------------------+
//| 아침 별 패턴 형성 확인 |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningStar()
  {
//--- 아침 별
   if((Open(3)-Close(3)>AvgBody(1))             && // 약세 캔들, 몸체가 평균 캔들 몸체보다 큼
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // 두 번째 캔들은 작은 몸체를 가짐
      (Close(2)<Close(3))                       && // 두 번째 캔들의 종가가 첫 번째 캔들의 종가보다 낮음
      (Open(2)<Open(3))                     && // 두 번째 캔들의 시가가 첫 번째 캔들의 시가보다 낮음
      (Close(1)>MidOpenClose(3)))                  // 마지막 캔들의 종가는 첫 번째 캔들의 중간보다 높음
      return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+

1.2. 저녁 별 (Evening Star)

이 패턴은 상승세의 반전을 나타내며, 세 개의 캔들로 구성됩니다 (그림 2). 긴 흰 캔들 뒤에 작은 몸체를 가진 캔들이 있으며, 이 캔들은 흰 캔들의 몸체를 넘어섭니다. 작은 몸체는 강세와 약세의 힘이 같다는 것을 의미하며, 시장이 트렌드를 바꿀 준비가 되었다는 신호입니다.

패턴의 세 번째 캔들은 약세 캔들로, 두 번째 캔들의 몸체와 겹치지 않으며, 종가가 첫 번째(강세) 캔들의 몸체 안에 위치합니다. 그림 2에 결과 캔들이 나타나 있습니다.

그림 2. 저녁 별과 저녁 도지 별 캔들 패턴

그림 2. 저녁 별과 저녁 도지 별 캔들 패턴

저녁 별 및 저녁 도지 별 패턴을 식별하는 메소드는 다음과 같습니다:

//+------------------------------------------------------------------+
//| 저녁 별 패턴 형성 확인 |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningStar()
  {
//--- 저녁 별
   if((Close(3)-Open(3)>AvgBody(1))             && // 강세 캔들, 몸체가 평균 캔들 몸체보다 큼
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // 두 번째 캔들은 작은 몸체를 가짐
      (Close(2)>Close(3))                       && // 두 번째 캔들의 종가가 첫 번째 캔들의 종가보다 높음
      (Open(2)>Open(3))                     && // 두 번째 캔들의 시가가 첫 번째 캔들의 시가보다 높음
      (Close(1)<MidOpenClose(3)))                  // 마지막 캔들의 종가는 첫 번째 캔들의 중간보다 낮음
      return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+

이러한 방법으로 아침 별과 저녁 별 패턴을 확인하는 메소드를 구현할 수 있습니다.


2. 스토캐스틱 지표로 확인된 트레이딩 신호

롱 포지션 또는 숏 포지션을 열기 위한 트레이딩 신호는 스토캐스틱 오실레이터로 확인되어야 합니다. 신호 %D 선은 해당 기준선(30 또는 70)보다 높거나 낮아야 합니다.

열린 포지션의 종료는 %D 지표의 값에 따라 달라지며, 두 가지 경우로 나눌 수 있습니다:

  1. %D 선이 반대 기준선에 도달했을 때 (롱 포지션의 경우 80, 숏 포지션의 경우 20)
  2. 역신호가 확인되지 않았을 때 (%D 선이 다음 수준에 도달했을 때: 롱 포지션의 경우 20, 숏 포지션의 경우 80)

그림 3. 저녁 별 패턴, 스토캐스틱 지표로 확인됨

그림 3. 저녁 별 패턴, 스토캐스틱 지표로 확인됨


  • int CH_HM_Stoch::LongCondition() - 롱 포지션을 열기 위한 조건을 체크합니다 (결과 80) 및 숏 포지션을 종료합니다 (결과 40);
  • int CH_HM_Stoch::ShortCondition() - 숏 포지션을 열기 위한 조건을 체크합니다 (결과 80) 및 롱 포지션을 종료합니다 (결과 40).

2.1. 롱 포지션 열기 / 숏 포지션 종료하기

  1. 아침 별 패턴의 형성은 스토캐스틱 지표로 확인되어야 합니다: StochSignal(1)<30 (마지막 캔들의 스토캐스틱 신호선의 값이 30보다 작아야 합니다).

  2. 숏 포지션은 스토캐스틱 지표의 신호선이 20 또는 80 수준을 상향 교차할 경우 종료해야 합니다.

//+------------------------------------------------------------------+
//| 시장 진입 및 퇴출 조건 확인 |
//| 1) 시장 진입 (롱 포지션 열기, 결과=80) |
//| 2) 시장 퇴출 (숏 포지션 종료, 결과=40) |
//+------------------------------------------------------------------+
int CMS_ES_Stoch::LongCondition()
  {
   int result=0;
   //--- idx는 전문가 조언자의 작업 모드를 결정하는 데 사용될 수 있습니다.
   //--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건을 확인합니다.
   //--- idx=1 - 이 경우 EA는 뉴스 바에서만 거래 조건을 확인합니다.
   int idx   =StartIndex();
   //--- 롱 포지션 열기 조건 확인
   //--- 아침 별 패턴 형성과 신호선<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (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 CMS_ES_Stoch::ShortCondition()
  {
   int result=0;
   //--- idx는 전문가 조언자의 작업 모드를 결정하는 데 사용될 수 있습니다.
   //--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건을 확인합니다.
   //--- idx=1 - 이 경우 EA는 뉴스 바에서만 거래 조건을 확인합니다.
   int idx   =StartIndex();
   //--- 숏 포지션 열기 조건 확인
   //--- 저녁 별 패턴 형성과 신호선>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (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 위자드를 이용한 전문가 조언자 생성하기

CMS_ES_Stoch 클래스는 표준 라이브러리 클래스에 포함되어 있지 않습니다. 이를 사용하기 위해서는 acms_es_stoch.mqh 파일을 다운로드하여 client_terminal_data\MQL5\Include\Expert\Signal\MySignals 폴더에 저장해야 합니다. 같은 방식으로 candlepatterns.mqh 파일도 처리해 주세요. MetaEditor를 재시작하면 MQL5 위자드에서 사용할 수 있습니다.

전문가 조언자를 생성하기 위해 MQL5 위자드를 실행하세요:

그림 4. MQL5 위자드로 전문가 조언자 생성하기

그림 4. MQL5 위자드로 전문가 조언자 생성하기

전문가 조언자의 이름을 지정해 주세요:

그림 5. 전문가 조언자의 일반 속성

그림 5. 전문가 조언자의 일반 속성

그 다음 사용하려는 트레이딩 신호 모듈을 선택합니다.

그림 6. 전문가 조언자의 신호 속성

그림 6. 전문가 조언자의 신호 속성

우리의 경우 트레이딩 신호 모듈 하나만 사용합니다.

"스토캐스틱 기반 아침/저녁 별 신호" 트레이딩 신호 모듈 추가:

그림 7. 전문가 조언자의 신호 속성

그림 7. 전문가 조언자의 신호 속성

트레이딩 신호 모듈이 추가되었습니다:

그림 8. 전문가 조언자의 신호 속성

그림 8. 전문가 조언자의 신호 속성

원하는 트레일링 속성을 선택할 수 있지만, 우리는 "트레일링 스탑 사용 안 함"을 사용하겠습니다:

그림 9. 전문가 조언자의 트레일링 속성

그림 9. 전문가 조언자의 트레일링 속성

자금 관리 속성과 관련하여, 우리는 "고정 거래량으로 거래하기"를 사용할 것입니다:

그림 10. 전문가 조언자의 자금 관리 속성

그림 10. 전문가 조언자의 자금 관리 속성

"완료" 버튼을 눌러 생성된 전문가 조언자의 코드를 얻을 수 있습니다. 이 코드는 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    // 테이크 프라핏 수준 (포인트 단위)

신호 임계값은 포지션의 개시 및 종료를 위한 기준 값으로 사용될 수 있습니다.

롱 포지션 조건 및 숏 포지션 조건의 코드에서는 다음과 같은 고정 값을 지정했습니다:

  • 포지션 개시: 80;
  • 포지션 종료: 40.
댓글 (0)