MQL5 위자드를 활용한 MACD 교차 신호 기반 거래 신호 생성

Mike 2011.01.14 21:55 45 0 0
첨부파일

MQL5 위자드는 자동으로 전문가 자문(EA)을 생성할 수 있는 편리한 도구입니다. (MQL5 위자드: 프로그래밍 없이 전문가 자문 만들기 참조)

이번 포스트에서는 MACD 지표의 주선과 신호선의 교차를 기반으로 한 거래 신호에 대해 알아보겠습니다. 이 전략은 “MACD 주선과 신호선의 교차 기반 신호”라고 불리며, MQL5 위자드에서 EA를 자동으로 생성할 때 사용할 수 있습니다.

MACD 지표의 주선은 빠른 EMA와 느린 EMA의 차이로 계산됩니다. 신호선은 주선을 PeriodSignal 기간으로 매끄럽게 다듬은 값입니다.

거래 신호는 다음과 같습니다:

  • 매수: MACD 지표의 주선이 신호선을 위로 교차할 때
  • 매도: MACD 지표의 주선이 신호선을 아래로 교차할 때

이 전략은 MQL5 표준 라이브러리의 CSignalMACD 클래스에 구현되어 있으며, 이 클래스는 지표 값에 쉽게 접근할 수 있도록 몇 가지 보호된 메서드를 제공합니다.

그림 1. MACD 주선과 신호선의 교차 기반 거래 신호

그림 1. MACD 주선과 신호선의 교차 기반 거래 신호


거래 신호

이 거래 전략은 CSignalMACD 클래스에 구현되어 있으며, 지표 값에 접근하기 위한 몇 가지 보호된 메서드를 제공합니다:

double  MainMACD(int ind)      // 주 MACD 선의 값 반환
double  SignalMACD(int ind)    // 신호 MACD 선의 값 반환
double  StateMACD(int ind)     // 주선과 신호선의 차이 반환
int     ExtStateMACD(int ind); // 주선과 신호선의 차이 변화 수 반환

1. 롱 포지션 열기

롱 포지션을 열기 위한 조건:

  • ExtStateMACD(1)==1; 이는 주선이 신호선을 위로 교차했다는 의미입니다.
//+------------------------------------------------------------------+
//| 롱 포지션 열기 조건 체크                                             |
//+------------------------------------------------------------------+
bool CSignalMACD::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
   price=0.0;
   sl   =m_symbol.Ask()-m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Ask()+m_take_profit*m_adjusted_point;
//---
   return(ExtStateMACD(1)==1);
  }


2. 롱 포지션 닫기

롱 포지션을 닫기 위한 조건:

  • ExtStateMACD(1)==1; 이는 주선이 신호선을 아래로 교차했다는 의미입니다.
//+------------------------------------------------------------------+
//| 롱 포지션 닫기 조건 체크                                         |
//+------------------------------------------------------------------+
bool CSignalMACD::CheckCloseLong(double& price)
  {
   price=0.0;
//---
   return(ExtStateMACD(1)==-1);
  }


3. 숏 포지션 열기

숏 포지션을 열기 위한 조건은 롱 포지션 닫기 조건과 동일합니다.

//+------------------------------------------------------------------+
//| 숏 포지션 열기 조건 체크                                             |
//+------------------------------------------------------------------+
bool CSignalMACD::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
   price=0.0;
   sl   =m_symbol.Bid()+m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Bid()-m_take_profit*m_adjusted_point;
//---
   return(ExtStateMACD(1)==-1);
  }


4. 숏 포지션 닫기

숏 포지션을 닫기 위한 조건은 롱 포지션 열기 조건과 동일합니다.

//+------------------------------------------------------------------+
//| 숏 포지션 닫기 조건 체크                                          |
//+------------------------------------------------------------------+
bool CSignalMACD::CheckCloseShort(double& price)
  {
   price=0.0;
//---
   return(ExtStateMACD(1)==1);
  }

MQL5 위자드를 사용한 전문가 자문 생성

전략에 기반한 거래 로봇을 생성하려면, “MACD 주선과 신호선의 교차 기반 신호”로 신호 속성을 선택해야 합니다. 이는 MQL5 위자드의 “즉시 사용 가능한 전문가 자문 만들기” 옵션에서 선택할 수 있습니다.

그림 2. MQL5 위자드에서 신호 선택

그림 2. MQL5 위자드에서 신호 선택

다음으로 필요한 트레일링 스톱 알고리즘과 자금 및 리스크 관리 시스템을 지정해야 합니다. 전문가 자문 코드가 자동으로 생성되며, 이를 컴파일하고 전략 테스터에서 테스트할 수 있습니다.


테스트 결과

전문가 자문의 백테스팅을 진행해 보겠습니다 (EURUSD H1, 테스트 기간: 2010.1.1~2011.5.1, PeriodFast=12, PeriodSlow=24, PeriodSignal=9, StopLoss=20, TakeProfit=80).

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

그림 3. MACD 신호 기반 전문가 자문 테스트 결과

그림 3. MACD 신호 기반 전문가 자문 테스트 결과


첨부 파일: SignalMACD.mqh 파일에는 CSignalMACD 클래스가 포함되어 있으며, MQL5 extbackslash Include extbackslash Expert extbackslash Signal 폴더에 있습니다. testmacd.mq5 파일은 MQL5 위자드를 사용해 생성된 전문가 자문의 코드가 포함되어 있습니다.

목록
댓글 0