시스템트레이딩 게시글

MQL5 위자드로 해머/행잉맨 및 스토캐스틱 기반의 거래 신호 생성하기

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

안녕하세요, 트레이더 여러분! 오늘은 MQL5 위자드를 사용하여 해머(Hammer) 및 행잉맨(Hanging Man) 캔들 패턴과 스토캐스틱(Stochastic) 지표를 활용한 거래 신호를 생성하는 방법에 대해 알아보겠습니다.

MQL5 위자드는 클라이언트 터미널과 함께 제공되는 표준 라이브러리 클래스를 기반으로 즉시 사용할 수 있는 전문가 어드바이저(EA)를 생성할 수 있도록 도와줍니다. 거래 아이디어를 빠르게 확인할 수 있도록 자신만의 거래 신호 클래스를 만들 수 있습니다. 이 클래스의 구조와 예제는 MQL5 위자드: 거래 신호 모듈 생성 방법에서 확인할 수 있습니다.

기본 아이디어는 거래 신호 클래스를 CExpertSignal에서 파생시키는 것입니다. 이후에는 LongCondition()ShortCondition()의 가상 메서드를 자신의 메서드로 오버라이드해야 합니다.

러시아어로 된 책 "최고의 트레이더의 전략"에서는 다양한 거래 전략을 논의하고 있습니다. 우리는 스토캐스틱, CCI, MFI, RSI와 같은 오실레이터에 의해 확인된 반전 캔들 패턴에 초점을 맞출 것입니다.

해머 및 행잉맨 패턴을 확인하기 위해서는 별도의 클래스를 생성하여 캔들 패턴의 형성을 점검하는 것이 가장 좋습니다. 생성된 거래 신호를 확인하기 위해서는 CCandlePattern에서 파생된 클래스를 작성하고 필요한 기능(예: 오실레이터에 의한 확인)을 추가하면 됩니다.

1. 해머 및 행잉맨 반전 캔들 패턴

1.1. 해머

해머는 작은 몸체와 긴 하단 심지를 가진 캔들로, 하락세 후에 형성됩니다. 해머 패턴은 하락 추세의 끝을 나타냅니다. 캔들 몸체의 색상은 중요하지 않지만, 상승 해머는 더 높은 상승 잠재력을 나타냅니다. 해머 패턴의 몸체는 종종 이전 캔들의 최저점 근처에서 형성됩니다. 하단 심지가 길고 상단 심지가 짧을수록 반전 패턴의 가능성이 높아집니다.

Fig. 1. 해머 캔들 패턴

Fig. 1. 해머 캔들 패턴

해머 패턴의 인식은 CheckPatternHammer() 메서드에서 구현됩니다:

//+------------------------------------------------------------------+
//| 해머 캔들 패턴 형성 확인                  |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternHammer() {
   //--- 해머
   if((MidPoint(1)<CloseAvg(2)) && // 하락 추세
   (MathMin(Open(1),Close(1))>(High(1)-(High(1)-Low(1)/3.0)) && // 몸체가 상위 1/3
   (Close(1)2)) && (Open(1)2)))    // 몸체 간격
   return(true);
//---
   return(false);
}

해머 캔들 패턴 형성을 확인하기 위해 CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) 메서드를 사용합니다.

1.2. 행잉맨

행잉맨은 작은 몸체와 긴 하단 심지를 가진 캔들로, 상승세 후에 형성됩니다. 행잉맨 패턴은 상승 추세의 끝을 나타냅니다. 캔들 몸체의 색상은 중요하지 않지만, 하락 캔들은 더 높은 하락 잠재력을 나타냅니다. 행잉맨 패턴의 몸체는 종종 이전 캔들의 최고점 근처에서 형성됩니다. 하단 심지가 길고 상단 심지가 짧을수록 반전 패턴의 가능성이 높아집니다.

Fig. 2. 행잉맨 캔들 패턴

Fig. 2. 행잉맨 캔들 패턴

행잉맨 패턴의 인식은 CheckPatternHangingMan() 메서드에서 구현됩니다:

//+------------------------------------------------------------------+

//| 행잉맨 캔들 패턴 형성 확인            |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternHangingMan() {
   //--- 행잉맨
   if((MidPoint(1)>CloseAvg(2)) && // 상승 추세
   (MathMin(Open(1),Close(1)>(High(1)-(High(1)-Low(1)/3.0)) && // 몸체가 상위 1/3
   (Close(1)>Close(2)) && (Open(1)>Open(2)))    // 몸체 간격
   return(true);
//---
   return(false);
}

행잉맨 캔들 패턴 형성을 확인하기 위해 CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) 메서드를 사용합니다.

2. 스토캐스틱 지표로 확인된 거래 신호

롱 포지션 또는 숏 포지션을 열기 위한 거래 신호는 스토캐스틱 오실레이터로 확인되어야 합니다. 신호 %D 라인은 해당 임계치(30 또는 70)보다 크거나 작아야 합니다.

열린 포지션의 종료는 %D 지표의 값에 따라 결정됩니다. 이는 두 가지 경우에 수행될 수 있습니다:

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

Fig. 3. 해머 패턴, 스토캐스틱 지표로 확인됨

Fig. 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 CH_HM_Stoch::LongCondition() {
   int result=0;
   //--- idx는 전문가 어드바이저 작업 모드를 결정하는 데 사용될 수 있습니다
   //--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건을 확인합니다
   //--- idx=1 - 이 경우 EA는 뉴스 바에서만 거래 조건을 확인합니다
   int idx   =StartIndex();
   //--- 롱 포지션 개설 조건 확인
   //--- 해머 패턴 형성과 신호선<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (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 CH_HM_Stoch::ShortCondition() {
   int result=0;
   //--- idx는 전문가 어드바이저 작업 모드를 결정하는 데 사용될 수 있습니다
   //--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건을 확인합니다
   //--- idx=1 - 이 경우 EA는 뉴스 바에서만 거래 조건을 확인합니다
   int idx   =StartIndex();
   //--- 숏 포지션 개설 조건 확인
   //--- 행잉맨 패턴 형성과 신호선>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (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 위자드를 사용하여 전문가 어드바이저 생성하기

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

전문가 어드바이저를 생성하기 위해 MQL5 위자드를 실행합니다:

Fig. 4. MQL5 위자드를 이용한 전문가 어드바이저 생성

Fig. 4. MQL5 위자드를 이용한 전문가 어드바이저 생성

전문가 어드바이저의 이름을 지정합니다:

Fig. 5. 전문가 어드바이저의 일반 속성

Fig. 5. 전문가 어드바이저의 일반 속성

그 후, 사용할 거래 신호 모듈을 선택해야 합니다.

Fig. 6. 전문가 어드바이저의 신호 속성

Fig. 6. 전문가 어드바이저의 신호 속성

이번 경우에는 하나의 거래 신호 모듈만을 사용할 것입니다.

"스토캐스틱으로 확인된 해머/행잉맨 기반의 신호" 거래 신호 모듈 추가:

Fig. 7. 전문가 어드바이저의 신호 속성

Fig. 7. 전문가 어드바이저의 신호 속성

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

Fig. 8. 전문가 어드바이저의 신호 속성

Fig. 8. 전문가 어드바이저의 신호 속성

원하는 모든 트레일링 속성을 선택할 수 있지만, 우리는 "트레일링 스탑 미사용"을 사용할 것입니다:

Fig. 9. 전문가 어드바이저의 트레일링 속성

Fig. 9. 전문가 어드바이저의 트레일링 속성

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

Fig. 10. 전문가 어드바이저의 자금 관리 속성

Fig. 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    // 테이크 프로핏 수준 (포인트 단위)

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. 이력 백테스팅 결과

해머/행잉맨 + 스토캐스틱 기반의 전문가 어드바이저에 대한 역사적 데이터(유로/달러 H1, 테스트 기간: 2010.01.01-2011.03.04, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5)에 대한 백테스팅을 살펴보겠습니다.

전문가 어드바이저 생성 시 고정 볼륨(고정 롯 거래, 0.1)을 사용하였으며, 트레일링 스탑 알고리즘은 사용하지 않았습니다 (트레일링 미사용).


Fig. 11. 해머/행잉맨 + 스토캐스틱 기반의 전문가 어드바이저의 테스트 결과

Fig. 11. 해머/행잉맨 + 스토캐스틱 기반의 전문가 어드바이저의 테스트 결과


최상의 입력 파라미터 조합은 MetaTrader 5 클라이언트 터미널의 전략 테스터를 사용하여 찾을 수 있습니다.

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

연관 포스트

댓글 (0)