MQL5 위자드로 CCI 기반의 매수/매도 신호 생성하기

Mike 2011.03.24 03:05 59 0 0
첨부파일

MQL5 위자드는 MQL5 위자드를 통해 MetaTrader 5에서 사용할 수 있는 완성된 전문가 고문(EA)을 쉽게 생성할 수 있도록 도와줍니다. 이 도구는 트레이딩 아이디어를 신속하게 테스트할 수 있는 기능을 제공합니다. 자신만의 거래 신호 클래스를 만드는 것만으로도 가능합니다. 이 클래스의 구조와 예제는 MQL5 Wizard: 거래 신호 모듈 생성 방법에서 확인할 수 있습니다.

거래 신호 클래스는 CExpertSignal에서 파생되며, LongCondition()ShortCondition() 메서드를 사용자 정의로 재정의해야 합니다.

다양한 트레이딩 전략이 담긴 책 "최고 트레이더의 전략"을 참고하여, 우리는 CCI(상품 채널 지수)와 같은 오실레이터로 확인되는 반전 캔들 패턴에 집중할 것입니다.

이번 포스트에서는 "Bullish/Bearish Meeting Lines" 반전 캔들 패턴을 기반으로 한 거래 신호를 다루겠습니다. 이 패턴은 CCI 지표로 확인됩니다.

1. "Meeting Lines" 반전 캔들 패턴

1.1. Bullish Meeting Lines

Bullish Meeting Lines 패턴은 두 개의 캔들(하락 캔들 및 상승 캔들)로 구성되며, 두 캔들의 종가가 같거나 매우 가깝습니다. 두 캔들의 본체는 평균 본체 길이보다 커야 합니다.

Bullish Meeting Lines 패턴은 하락 추세의 반전을 나타냅니다.

Bullish Meeting Lines 패턴

Fig. 1. Bullish Meeting Lines 패턴

Bullish Meeting Lines 패턴의 인식은 CheckPatternBullishMeetingLines() 메서드에서 수행됩니다:

//+--------------------------------------------------------------------+
//| Bullish Meeting Lines 캔들 패턴 형성 체크
//+--------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishMeetingLines()
  {
    //--- Bullish Meeting Lines 체크
    if((Open(2) - Close(2) > AvgBody(1)) &&
       ((Close(1) - Open(1) > AvgBody(1)) &&
         (MathAbs(Close(1) - Close(2) < 0.1 * AvgBody(1)))
        // doji close
      return(true);
    //---
    return(false);
  }

CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) 메서드는 Bullish Meeting Lines 캔들 패턴 형성을 체크합니다.


1.2. Bearish Meeting Lines

Bearish Meeting Lines 패턴은 두 개의 캔들(상승 캔들 및 하락 캔들)로 구성되며, 종가가 같거나 매우 가깝습니다. 두 캔들의 본체는 평균 본체 길이보다 커야 합니다.

Bearish Meeting Lines 패턴은 상승 추세의 반전을 나타냅니다.

Bearish Meeting Lines 패턴

Fig. 2. Bearish Meeting Lines 패턴

Bearish Meeting Lines 패턴의 인식은 CheckPatternBearishMeetingLines() 메서드에서 수행됩니다:

//+--------------------------------------------------------------------+
//| Bearish Meeting Lines 캔들 패턴 형성 체크
//+--------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishMeetingLines()
  {
    //--- Bearish Meeting Lines 체크
    if((Close(2) - Open(2) > AvgBody(1)) &&
       ((Open(1) - Close(1) > AvgBody(1) &&
         (MathAbs(Close(1) - Close(2) < 0.1 * AvgBody(1)))
        // doji close
      return(true);
    //---
    return(false);
  }

CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) 메서드는 Bearish Meeting Lines 캔들 패턴 형성을 체크합니다.


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

긴 포지션을 열기 위한 거래 신호는 CCI 지표로 확인되어야 합니다. CCI 값은 -50(긴 포지션) 또는 50(짧은 포지션) 이상의 임계 값이 되어야 합니다.

열린 포지션의 종료는 CCI 값에 따라 결정됩니다. 종료 조건은 두 가지입니다:

  • CCI 선이 반대 임계 값에 도달할 때 (긴 포지션의 경우 80, 짧은 포지션의 경우 -80)
  • 역 신호가 확인되지 않을 때 (CCI가 긴 포지션의 경우 -80, 짧은 포지션의 경우 80에 도달할 때)

CCI 지표로 확인된 Bullish Meeting Lines 패턴

Fig. 3. CCI 지표로 확인된 Bullish Meeting Lines 패턴

  • int CML_CCI::LongCondition() - 긴 포지션을 열기 위한 조건을 체크하고 (결과: 80), 짧은 포지션 종료 (결과: 40)를 체크합니다;
  • int CML_CCI::ShortCondition() - 짧은 포지션을 열기 위한 조건을 체크하고 (결과: 80), 긴 포지션 종료 (결과: 40)를 체크합니다.

2.1. 긴 포지션 열기 / 짧은 포지션 종료

  1. Bullish Meeting Lines 패턴의 형성은 CCI 지표에 의해 확인되어야 합니다: CCI(1) < -50 (마지막 완료된 바의 CCI 값은 -50보다 작아야 합니다).

  2. 짧은 포지션은 CCI 지표가 임계 값 -80을 넘어가거나 80을 하향으로 통과할 때 종료해야 합니다.

//+------------------------------------------------------------------+
//| 시장 진입 및 종료 조건 체크
//| 1) 시장 진입 (긴 포지션 열기, 결과=80)
//| 2) 시장 종료 (짧은 포지션 종료, 결과=40)
//+------------------------------------------------------------------+
int CML_CCI::LongCondition()
  {
    int result=0;
    //--- idx는 EA 작업 모드를 결정하는 데 사용될 수 있습니다
    int idx = StartIndex();
    //--- 긴 포지션 열기 조건 체크
    if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) && (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 Meeting Lines 패턴의 형성은 CCI 지표에 의해 확인되어야 합니다: CCI(1) > 50 (마지막 완료된 바의 CCI 값은 50보다 커야 합니다).

  2. 긴 포지션은 CCI 지표가 -80 이하로 하락하거나 80을 넘을 때 종료해야 합니다.

//+------------------------------------------------------------------+
//| 시장 진입 및 종료 조건 체크
//| 1) 시장 진입 (짧은 포지션 열기, 결과=80)
//| 2) 시장 종료 (긴 포지션 종료, 결과=40)
//+------------------------------------------------------------------+
int CML_CCI::ShortCondition()
  {
    int result=0;
    //--- idx는 EA 작업 모드를 결정하는 데 사용될 수 있습니다
    int idx = StartIndex();
    //--- 짧은 포지션 열기 조건 체크
    if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) && (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 위자드를 사용한 전문가 고문 생성

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

전문가 고문을 만들기 위해 MQL5 위자드를 실행합니다:

MQL5 위자드로 전문가 고문 생성

Fig. 4. MQL5 위자드로 전문가 고문 생성

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

전문가 고문의 일반 속성

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

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

전문가 고문의 신호 속성

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

우리는 하나의 거래 신호 모듈만 사용할 것입니다.

"CCI로 확인된 Bullish/Bearish Meeting Lines 기반의 신호" 모듈을 추가합니다:

전문가 고문의 신호 속성

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

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

전문가 고문의 신호 속성

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

트레일링 프로퍼티를 선택할 수 있지만, 우리는 "트레일링 스탑 사용 안 함"을 선택하겠습니다:

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

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

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

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

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

"완료" 버튼을 누르면 생성된 전문가 고문의 코드가 Expert_AML_CCI.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, 테스트 기간: 2000.01.01-2011.03.16, PeriodCCI=18, MA_period=3)에 대한 백테스팅을 살펴보겠습니다.

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

Bullish/Bearish Meeting Lines + CCI 기반 전문가 고문의 테스트 결과

Fig. 11. Bullish/Bearish Meeting Lines + CCI 기반 전문가 고문의 테스트 결과


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

MQL5 위자드로 생성된 전문가 고문의 코드는 expert_aml_cci.mq5에 첨부되어 있습니다.

목록
댓글 0