시스템트레이딩 게시글

MQL5 위자드로 Bullish Harami 및 Bearish Harami 기반 거래 신호 생성하기

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

안녕하세요, 트레이더 여러분! 오늘은 MQL5 위자드를 활용하여 Bullish Harami와 Bearish Harami 패턴을 기반으로 하는 거래 신호를 생성하는 방법에 대해 알아보겠습니다. 이 과정은 메타트레이더 5에서 자동 거래를 구현하는 데 큰 도움이 될 것입니다.

MQL5 위자드는 클라이언트 터미널과 함께 제공되는 표준 라이브러리 클래스를 기반으로 준비된 전문가 고문(EA)을 생성할 수 있게 해줍니다. 여러분의 거래 아이디어를 신속하게 확인하는 데 필요한 것은 자신만의 거래 신호 클래스를 만드는 것입니다. 이 클래스의 구조와 예시는 MQL5 위자드: 거래 신호 모듈 생성 방법에서 확인할 수 있습니다.

1. Bullish Harami와 Bearish Harami 패턴

1.1. Bullish Harami

Bullish Harami 패턴은 하락 추세에서 큰 캔들이 작은 캔들로 이어질 때 형성됩니다. 이 작은 캔들의 몸체는 큰 캔들의 몸체 내에 위치하게 됩니다. 이 패턴은 하락 추세가 반전될 가능성이 있음을 나타내며, 롱 포지션 진입의 좋은 시점임을 알려줍니다. 두 번째 캔들은 갭 업으로 열립니다. 두 번째(흰색) 캔들이 작을수록 반전 가능성이 높아집니다.

Bullish Harami 패턴

Fig. 1. Bullish Harami 캔들 패턴

Bullish Harami 패턴의 인식은 CheckPatternBullishHarami() 메소드에서 구현됩니다.

//+------------------------------------------------------------------+
//| Bullish Harami 캔들 패턴 형성 확인 |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishHarami() {
  //--- Bullish Harami
   if((Close(1)>Open(1)) && ... )
      return(true);
  return(false);
}

1.2. Bearish Harami

Bearish Harami 패턴은 상승 추세에서 큰 캔들이 작은 캔들로 이어질 때 형성됩니다. 이 패턴은 상승 추세가 반전될 가능성이 있음을 나타내며, 숏 포지션 진입의 좋은 시점임을 알려줍니다. 두 번째 캔들은 갭 다운으로 열립니다. 두 번째(검은색) 캔들이 작을수록 반전 가능성이 높아집니다.

Bearish Harami 패턴

Fig. 2. Bearish Harami 캔들 패턴

Bearish Harami 패턴의 인식은 CheckPatternBearishHarami() 메소드에서 구현됩니다.

//+------------------------------------------------------------------+
//| Bearish Harami 캔들 패턴 형성 확인 |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishHarami() {
  //--- Bearish Harami
   if((Close(1)<Open(1)) && ... )
      return(true);
  return(false);
}

2. CCI 지표로 확인된 거래 신호

거래 신호는 CCI 지표로 확인되어야 합니다. CCI 값이 -50(롱 포지션) 또는 50(숏 포지션) 이상의 임계 수준을 초과해야 합니다.

열려 있는 포지션의 종료는 CCI 값에 따라 달라집니다. 두 가지 경우에 해당됩니다:

  • CCI 선이 반대 임계 수준에 도달했을 때 (롱 포지션의 경우 80, 숏 포지션의 경우 -80)
  • 역 신호가 확인되지 않았을 때 (CCI가 다음 수준에 도달했을 때: -80(롱 포지션) 또는 80(숏 포지션))

Bullish Harami 패턴, CCI 지표로 확인

Fig. 3. Bullish Harami 패턴, CCI 지표로 확인

  • int CBH_BH_CCI::LongCondition() - 롱 포지션 열기 및 숏 포지션 닫기 조건 확인 (80 반환)
  • int CBH_BH_CCI::ShortCondition() - 숏 포지션 열기 및 롱 포지션 닫기 조건 확인 (80 반환)

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

  1. Bullish Harami 패턴은 CCI 지표로 확인되어야 합니다: CCI(1)<-50 (마지막 캔들의 CCI 값은 -50보다 작아야 함).

  2. 숏 포지션은 CCI 지표가 -80의 임계 수준을 상향 돌파하거나 80의 임계 수준을 하향 돌파할 때 닫아야 합니다.

//+------------------------------------------------------------------+
//| 시장 진입 조건 확인 |
//| 1) 롱 포지션 열기 (결과=80) |
//| 2) 숏 포지션 닫기 (결과=40) |
//+------------------------------------------------------------------+
int CBH_BH_CCI::LongCondition() {
   int result=0;
   if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (CCI(1)<-50))
     result=80;
   if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80)))
     result=40;
   return(result);
}

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

  1. Bearish Harami 패턴은 CCI 지표로 확인되어야 합니다: CCI(1)>50 (마지막 캔들의 CCI 값은 50보다 커야 함).

  2. 롱 포지션은 CCI 지표가 -80 또는 80 수준을 하향 돌파할 때 닫아야 합니다.

//+------------------------------------------------------------------+
//| 시장 진입 조건 확인 |
//| 1) 숏 포지션 열기 (결과=80) |
//| 2) 롱 포지션 닫기 (결과=40) |
//+------------------------------------------------------------------+
int CBH_BH_CCI::ShortCondition() {
   int result=0;
   if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (CCI(1)>50))
     result=80;
   if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))
     result=40;
   return(result);
}

2.3. MQL5 위자드를 이용한 전문가 고문 생성

CBH_BH_CCI 클래스는 표준 라이브러리 클래스에 포함되어 있지 않으므로, 이 파일을 다운로드하여 client_terminal_data older\MQL5\Include\Expert\Signal\MySignals에 저장해야 합니다. 캔들 패턴 파일도 마찬가지로 저장해야 합니다. 메타에디터를 재시작한 후 MQL5 위자드에서 사용할 수 있습니다.

전문가 고문을 생성하려면 MQL5 위자드를 실행합니다:

전문가 고문 생성

Fig. 4. MQL5 위자드를 사용한 전문가 고문 생성

전문가 고문의 이름을 지정합니다:

전문가 고문의 일반 속성

Fig. 5. 전문가 고문의 일반 속성

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

전문가 고문의 신호 속성

Fig. 6. 전문가 고문의 신호 속성

이번 경우에는 하나의 거래 신호 모듈만 사용합니다.
"Bullish Harami/Bearish Harami 확인된 CCI 기반 신호" 모듈을 추가합니다:

전문가 고문의 신호 속성

Fig. 7. 전문가 고문의 신호 속성

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

전문가 고문의 신호 속성

Fig. 8. 전문가 고문의 신호 속성

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

전문가 고문의 트레일링 속성

Fig. 9. 전문가 고문의 트레일링 속성

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

전문가 고문의 자금 관리 속성

Fig. 10. 전문가 고문의 자금 관리 속성

"완료" 버튼을 누르면 생성된 전문가 고문의 코드가 Expert_ABH_BH_CCI.mq5에 저장되고, terminal_data_folder\MQL5\Experts\에 위치하게 됩니다.

생성된 전문가 고문의 기본 입력 매개변수는 다음과 같습니다:

//--- 메인 신호를 위한 입력
input int Signal_ThresholdOpen =10; // 롱 포지션을 열기 위한 신호 임계값 [0...100]
input int Signal_ThresholdClose =10; // 숏 포지션을 닫기 위한 신호 임계값 [0...100]

이 값들은 다음과 같이 변경되어야 합니다:

//--- 메인 신호를 위한 입력
input int Signal_ThresholdOpen =40; // 롱 포지션을 열기 위한 신호 임계값 [0...100]
input int Signal_ThresholdClose =20; // 숏 포지션을 닫기 위한 신호 임계값 [0...100]

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.03.16, PeriodCCI=11, MA_period=5).

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

전문가 고문의 테스트 결과

Fig. 11. 전문가 고문의 테스트 결과

최고의 입력 매개변수 세트는 전략 테스터를 통해 찾아볼 수 있습니다.

생성된 전문가 고문의 코드는 expert_abh_bh_cci.mq5로 첨부되어 있습니다.

연관 포스트

댓글 (0)