MQL5 위자드로 만든 거래 신호: 상승/하락 미팅 라인과 스토캐스틱 활용하기

Mike 2011.03.24 02:45 93 0 0
첨부파일

안녕하세요, 트레이더 여러분! 오늘은 MQL5 위자드를 사용하여 상승 및 하락 미팅 라인 패턴을 기반으로 한 거래 신호를 생성하는 방법에 대해 알아보겠습니다. 이 도구는 클라이언트 터미널과 함께 제공되는 표준 라이브러리 클래스를 기반으로 즉석에서 전문가 어드바이저(EA)를 만들 수 있게 해줍니다.

거래 아이디어를 빠르게 확인할 수 있는 것이 이 도구의 가장 큰 장점입니다. 여러분만의 거래 신호 클래스를 생성하는 것만으로도 가능합니다. 이 클래스의 구조와 예제는 MQL5 위자드: 거래 신호 모듈 만들기에서 확인할 수 있습니다.

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

우리는 많은 트레이딩 전략을 다룬 책 "최고 트레이더의 전략"에 주목할 것입니다. 특히 상승 및 하락 미팅 라인 패턴에 대해 살펴보겠습니다. 이 패턴은 스토캐스틱, CCI, MFI, RSI와 같은 오실레이터에 의해 확인됩니다.

가장 좋은 방법은 상승 미팅 라인 패턴의 형성을 확인하기 위해 별도의 클래스를 생성하는 것입니다. 이러한 패턴이 발생했을 때 거래 신호를 확인하기 위해 CCandlePattern 클래스를 기반으로 필요한 기능을 추가해주면 됩니다.

1. 상승/하락 미팅 라인 패턴

1.1. 상승 미팅 라인

이 패턴은 두 개의 캔들(하락 캔들과 상승 캔들)로 구성되며, 종가가 거의 동일하거나 아주 가까워야 합니다. 두 캔들의 몸통 길이는 평균 몸통 길이보다 길어야 합니다.

"상승 미팅 라인" 패턴은 하락 추세의 반전을 의미합니다.

상승 미팅 라인 패턴

그림 1. 상승 미팅 라인 패턴

"상승 미팅 라인" 패턴의 인식은 CheckPatternCheckPatternBullishMeetingLines() 메서드에서 구현되어 있습니다:

//+--------------------------------------------------------------------+
//| "상승 미팅 라인" 캔들 패턴 형성을 확인합니다. |
//+--------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishMeetingLines()
  {
//--- 상승 미팅 라인
   if((Open(2)-Close(2)>AvgBody(1))              && // 긴 검은 캔들
     ((Close(1)-Open(1))>AvgBody(1))             && // 긴 흰 캔들
      (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1)))   // 도지 종가
      return(true);
//---
   return(false);
  }

이 메서드는 "상승 미팅 라인" 캔들 패턴 형성을 확인하는 데 사용됩니다.


1.2. 하락 미팅 라인

이 패턴은 두 개의 캔들(상승 캔들과 하락 캔들)로 구성되며, 종가가 거의 동일하거나 아주 가까워야 합니다. 두 캔들의 몸통 길이는 평균 몸통 길이보다 길어야 합니다.

"하락 미팅 라인" 패턴은 상승 추세의 반전을 의미합니다.

하락 미팅 라인 패턴

그림 2. 하락 미팅 라인 패턴

"하락 미팅 라인" 패턴의 인식은 CheckPatternBearishMeetingLines() 메서드에서 구현되어 있습니다:

//+--------------------------------------------------------------------+
//| "하락 미팅 라인" 캔들 패턴 형성을 확인합니다. |
//+--------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishMeetingLines()
  {
//--- 하락 미팅 라인
   if((Close(2)-Open(2)>AvgBody(1))             && // 긴 흰 캔들
     ((Open(1)-Close(1))>AvgBody(1))             && // 긴 검은 캔들
      (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1)))  // 도지 종가
      return(true);
//---
   return(false);
  }

이 메서드는 "하락 미팅 라인" 캔들 패턴 형성을 확인하는 데 사용됩니다.


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

롱 또는 숏 포지션을 열기 위한 거래 신호는 스토캐스틱 오실레이터로 확인되어야 합니다. %D 라인은 해당하는 기준선(30 또는 70)을 초과하거나 미만이어야 합니다.

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

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

스토캐스틱으로 확인된 하락 미팅 라인 패턴

그림 3. 스토캐스틱으로 확인된 하락 미팅 라인 패턴

  • int CML_Stoch::LongCondition() - 롱 포지션을 열기 위한 조건 확인(80을 반환) 및 숏 포지션 종료(40을 반환);
  • int CML_Stoch::ShortCondition() - 숏 포지션을 열기 위한 조건 확인(80을 반환) 및 롱 포지션 종료(40을 반환).

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

  1. "상승 미팅 라인" 패턴은 스토캐스틱 지표로 확인해야 합니다: StochSignal(1)<30 (최근 완료된 봉의 스토캐스틱 신호선 값이 30 미만이어야 합니다).

  2. 숏 포지션은 스토캐스틱 지표의 신호선이 20 또는 80 레벨을 상향 돌파했을 때 종료해야 합니다.

//+------------------------------------------------------------------+
//| 시장 진입 및 퇴출 조건 확인 |
//| 1) 시장 진입 (롱 포지션 열기, 결과=80) |
//| 2) 시장 퇴출 (숏 포지션 닫기, 결과=40) |
//+------------------------------------------------------------------+
int CML_Stoch::LongCondition()
  {
   int result=0;
//--- idx는 전문가 어드바이저 모드 결정에 사용될 수 있습니다.
//--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건을 확인합니다.
//--- idx=1 - 이 경우 EA는 뉴스 봉에서만 거래 조건을 확인합니다.
  int idx   =StartIndex();
//--- 롱 포지션 열기 조건 확인
//--- 상승 미팅 라인 패턴과 신호선<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) && (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 CML_Stoch::ShortCondition()
  {
   int result=0;
//--- idx는 전문가 어드바이저 모드 결정에 사용될 수 있습니다.
//--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건을 확인합니다.
//--- idx=1 - 이 경우 EA는 뉴스 봉에서만 거래 조건을 확인합니다.
  int idx   =StartIndex();
//--- 숏 포지션 열기 조건 확인
//--- 하락 미팅 라인 패턴과 신호선>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) && (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 위자드로 전문가 어드바이저 생성하기

CML_Stoch 클래스는 표준 라이브러리 클래스에 포함되어 있지 않으므로 사용하려면 acml_stoch.mqh 파일을 다운로드하고 클라이언트 터미널 데이터 폴더의 MQL5\Include\Expert\Signal\MySignals에 저장해야 합니다. candlepatterns.mqh 파일도 동일하게 처리해 주세요. 이렇게 하면 MQL5 위자드에서 사용할 수 있습니다.

전문가 어드바이저를 생성하려면 MQL5 위자드를 실행하세요:

MQL5 위자드로 전문가 어드바이저 생성하기

그림 4. MQL5 위자드로 전문가 어드바이저 생성하기

전문가 어드바이저의 이름을 지정해 주세요:

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

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

그 다음 사용하고자 하는 거래 신호 모듈을 선택해야 합니다.

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

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

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

"스토캐스틱으로 확인된 상승/하락 미팅 라인 기반 신호" 모듈을 추가해 주세요:

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

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

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

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

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

트레일링 속성은 아무것도 사용하지 않도록 선택할 수 있습니다:

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

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

자금 관리 속성으로는 "고정 거래량으로 거래하기"를 선택합니다:

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

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

"완료" 버튼을 누르면 생성된 전문가 어드바이저의 코드가 Expert_AML_Stoch.mq5로 저장됩니다. 이 파일은 터미널 데이터 폴더의 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, 테스트 기간: 2005.01.01-2010.03.16, PeriodK=6, PeriodD=3, PeriodSlow=36, MA_period=3)를 백테스트해보겠습니다.

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

상승/하락 미팅 라인 + 스토캐스틱 기반의 전문가 어드바이저 테스트 결과

그림 11. 상승/하락 미팅 라인 + 스토캐스틱 기반의 전문가 어드바이저 테스트 결과


가장 적합한 입력 매개변수 세트는 전략 테스터를 사용하여 찾을 수 있습니다.

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


목록
댓글 0