시스템트레이딩 게시글

MQL5 마법사로 3개의 검은 까마귀/3개의 흰 병사 패턴과 MFI 기반 거래 신호 만들기

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

안녕하세요, 트레이더 여러분! 오늘은 MQL5 마법사를 활용하여 3개의 검은 까마귀와 3개의 흰 병사 패턴을 기반으로 한 거래 신호를 어떻게 만들 수 있는지에 대해 이야기해보겠습니다. 이 마법사는 메타트레이더 5 클라이언트 터미널과 함께 제공되는 표준 라이브러리 클래스를 기반으로 완성된 전문가 자문(EA)을 생성할 수 있도록 도와줍니다. 여러분의 거래 아이디어를 빠르게 체크하고 싶다면, 자신만의 거래 신호 클래스를 만드는 것이 필요합니다. 이 클래스의 구조와 예제는 MQL5 마법사: 거래 신호 모듈 만들기에서 확인할 수 있습니다.

기본 아이디어는 다음과 같습니다: 거래 신호 클래스는 CExpertSignal에서 파생되며, 이후 LongCondition()ShortCondition() 가상 메서드를 여러분의 메서드로 재정의해야 합니다.

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

가장 좋은 방법은 캔들 패턴의 형성을 체크하기 위해 CExpertSignal에서 파생된 별도의 클래스를 만드는 것입니다. 캔들 패턴에 의해 생성된 거래 신호를 확인하기 위해서는 CCandlePattern에서 파생된 클래스를 작성하고 필요한 기능(예: 오실레이터에 의한 확인)을 추가하면 됩니다.

이제 우리는 MFI 지표로 확인된 "3개의 검은 까마귀/3개의 흰 병사" 반전 캔들 패턴 기반의 신호를 살펴보겠습니다. 거래 신호 모듈은 CCandlePattern 클래스를 기반으로 하며, 캔들 패턴으로 거래 신호를 생성하는 간단한 예입니다.


1. "3개의 검은 까마귀"와 "3개의 흰 병사" 반전 캔들 패턴

1.1. 3개의 검은 까마귀

이것은 현재의 상승 추세가 반전될 것으로 예측하는 하락 캔들 패턴입니다. 이 패턴은 세 개의 연속된 긴 몸체의 캔들로 이루어져 있으며, 각 세션의 시가가 이전 캔들의 몸체 안에서 열리면서 이전 날보다 낮은 가격에 마감됩니다.

3개의 검은 까마귀 캔들 패턴

Fig. 1. "3개의 검은 까마귀" 캔들 패턴

"3개의 검은 까마귀" 패턴의 인식은 CCandlePattern 클래스의 CheckPatternThreeBlackCrows 메서드에서 구현됩니다:

//+------------------------------------------------------------------+
//| 3개의 검은 까마귀 캔들 패턴 형성 체크 |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternThreeBlackCrows() {
   //--- 3개의 검은 까마귀
   if((Open(3)-Close(3)>AvgBody(1)) &&
   (Open(2)-Close(2)>AvgBody(1)) &&
   (Open(1)-Close(1)>AvgBody(1)) &&
   (MidPoint(2)<MidPoint(3)) &&
   (MidPoint(1)<MidPoint(2)))
   return(true);
//---
   return(false);
}

CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) 메서드는 "3개의 검은 까마귀" 캔들 패턴의 형성을 체크하는 데 사용됩니다.


1.2. 3개의 흰 병사 캔들 패턴

이것은 현재의 하락 추세가 반전될 것으로 예측하는 상승 캔들 패턴입니다. 이 패턴은 세 개의 연속된 긴 몸체의 캔들로 이루어져 있으며, 각 세션의 시가가 이전 캔들의 몸체 안에서 열리면서 이전 날보다 높은 가격에 마감됩니다.

패턴은 2일 차 캔들이 1일 차 범위의 상단 절반에서 열리는 한 유효합니다. 2일 차가 종료될 때는 매우 작은 상단 그림자가 남거나 상단 그림자가 존재하지 않는 상태에서 마감되어야 합니다. 같은 패턴이 3일 차에도 반복됩니다.

3개의 흰 병사 캔들 패턴

Fig. 2. "3개의 흰 병사" 캔들 패턴

여기서 "3개의 흰 병사" 패턴을 인식하기 위한 메서드는 다음과 같습니다:

//+------------------------------------------------------------------+
//| 3개의 흰 병사 캔들 패턴 형성 체크 |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternThreeWhiteSoldiers() {
   //--- 3개의 흰 병사
   if((Close(3)-Open(3)>AvgBody(1)) &&
   (Close(2)-Open(2)>AvgBody(1)) &&
   (Close(1)-Open(1)>AvgBody(1)) &&
   (MidPoint(2)>MidPoint(3)) &&
   (MidPoint(1)>MidPoint(2)))
   return(true);
//---
   return(false);
}

CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) 메서드는 "3개의 흰 병사" 캔들 패턴의 형성을 체크하는 데 사용됩니다.


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

롱 또는 숏 포지션을 열기 위한 거래 신호는 MFI 지표로 확인되어야 합니다. MFI 지표의 값은 롱 포지션의 경우 40 미만, 숏 포지션의 경우 60 초과여야 합니다.

열린 포지션의 종료는 MFI 지표의 값에 따라 결정됩니다. 다음 두 가지 경우에 할 수 있습니다:

  1. MFI가 반대의 중요한 레벨(롱 포지션의 경우 70, 숏 포지션의 경우 30)에 도달했을 때
  2. 반전 신호가 확인되지 않았을 때(MFI 지표가 다음 레벨에 도달: 롱 포지션의 경우 30, 숏 포지션의 경우 70)

MFI 지표로 확인된 3개의 검은 까마귀 패턴

Fig. 3. MFI 지표로 확인된 "3개의 검은 까마귀" 패턴


  • int CBC_WS_MFI::LongCondition() - 롱 포지션 개설 조건을 체크하고 (returns 80), 숏 포지션 종료 조건을 체크합니다 (returns 40);
  • int CBC_WS_MFI::ShortCondition() - 숏 포지션 개설 조건을 체크하고 (returns 80), 롱 포지션 종료 조건을 체크합니다 (returns 40).

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

  1. "3개의 흰 병사" 패턴의 형성은 MFI 지표로 확인되어야 합니다: MFi(1)<40 (마지막 완료된 바의 MFI 지표 값이 40 미만이어야 합니다).

  2. 숏 포지션은 MFI 지표가 중요한 레벨(70 또는 30)을 상향 돌파했을 때 종료해야 합니다.

//+------------------------------------------------------------------+
//| 개장 및 시장 종료 조건 체크 |
//| 1) 시장 진입 (롱 포지션 개설, 결과=80) |
//| 2) 시장 종료 (숏 포지션 종료, 결과=40) |
//+------------------------------------------------------------------+
int CBC_WS_MFI::LongCondition() {
   int result=0;
   //--- idx는 EA 작업 모드를 결정하는 데 사용될 수 있습니다
   //--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건을 체크합니다
   //--- idx=1 - 이 경우 EA는 뉴스 바에서만 거래 조건을 체크합니다
   int idx = StartIndex();
   //--- 롱 포지션 개설 조건 체크
   //--- "3개의 흰 병사" 패턴 형성 및 MFI<40
  if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) && (MFI(1)<40))
     result=80;
   //--- 숏 포지션 종료 조건 체크
   //--- 과매수/과매도 레벨의 신호선 교차 (상향 30, 상향 70)
  if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70)))
     result=40;
   //--- 결과 반환
   return(result);
}


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

  1. "3개의 검은 까마귀" 패턴의 형성은 MFI 지표로 확인되어야 합니다: MFI(1)>60 (마지막 완료된 바의 MFI 지표 값이 60보다 커야 합니다).

  2. 롱 포지션은 MFI 지표가 중요한 레벨(70 또는 30)을 상향 돌파했을 때 종료해야 합니다.

//+------------------------------------------------------------------+
//| 개장 및 시장 종료 조건 체크 |
//| 1) 시장 진입 (숏 포지션 개설, 결과=80) |
//| 2) 시장 종료 (롱 포지션 종료, 결과=40) |
//+------------------------------------------------------------------+
int CBC_WS_MFI::ShortCondition() {
   int result=0;
   //--- idx는 EA 작업 모드를 결정하는 데 사용될 수 있습니다
   //--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건을 체크합니다
   //--- idx=1 - 이 경우 EA는 뉴스 바에서만 거래 조건을 체크합니다
   int idx = StartIndex();
   //--- 숏 포지션 개설 조건 체크
   //--- "3개의 검은 까마귀" 패턴 형성 및 MFI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) && (MFI(1)>60))
     result=80;
   //--- 롱 포지션 종료 조건 체크
   //--- 과매수/과매도 레벨의 신호선 교차 (상향 70, 하향 30)
  if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30)))
     result=40;
   //--- 결과 반환
   return(result);
}


2.3. MQL5 마법사로 전문가 자문 생성하기

CBC_WS_MFI 클래스는 표준 라이브러리 클래스에 포함되어 있지 않으므로, 이를 사용하려면 abc_ws_mfi.mqh 파일을 다운로드하여 client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals에 저장해야 합니다. acandlepatterns.mqh 파일도 동일하게 처리해야 하며, MetaEditor를 재시작한 후 MQL5 마법사에서 사용할 수 있습니다.

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

MQL5 마법사로 전문가 자문 생성하기

Fig. 4. MQL5 마법사로 전문가 자문 생성하기

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

전문가 자문의 일반 속성

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

이후에는 사용할 거래 신호 모듈을 선택해야 합니다.

전문가 자문의 신호 속성

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

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

"MFI로 확인된 3개의 검은 까마귀/3개의 흰 병사 기반 신호" 거래 신호 모듈을 추가합니다:

전문가 자문의 신호 속성

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

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

전문가 자문의 신호 속성

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

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

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

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

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

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

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

"완료" 버튼을 누르면 생성된 전문가 자문의 코드가 Expert_ABC_WS_MFI.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.03.16, PeriodMFI=37, MA_period=13)로 백테스트해 보겠습니다.

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

3개의 검은 까마귀/3개의 흰 병사 + MFI 기반의 전문가 자문 테스트 결과

Fig. 11. 3개의 검은 까마귀/3개의 흰 병사 + MFI 기반의 전문가 자문 테스트 결과


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

MQL5 마법사로 생성된 전문가 자문의 코드는 expert_abc_ws_mfi.mq5에 첨부되어 있습니다.


연관 포스트

댓글 (0)