세 개의 이동 평균을 기반으로 한 트레이드 신호 - MQL5 Wizard 활용하기

Mike 2011.01.10 19:41 44 0 0
첨부파일

MQL5 Wizard를 사용하면 전문가 어드바이저(EA)의 코드를 자동으로 생성할 수 있습니다. 자세한 내용은 MQL5 Wizard에서 준비된 전문가 어드바이저 만들기를 참고하세요.

이번 포스트에서는 세 개의 이동 평균을 기반으로 한 트렌드 전략을 살펴보겠습니다. 이 전략을 "세 개의 EMA를 기반으로 한 신호"라고 부릅니다. 트렌드를 파악하기 위해 세 개의 지수 이동 평균(FastEMA, MediumEMA, SlowEMA)을 사용합니다.

트레이드 신호:

  • 매수 신호: FastEMA > MediumEMA > SlowEMA (상승 추세).
  • 매도 신호: FastEMA < MediumEMA < SlowEMA (하락 추세).

이 전략은 CSignal3EMA 클래스에 구현되어 있으며, signal3ema.mqh 파일은 terminal_data_folder\MQL5\Include\Expert\Signal\에 위치해야 합니다.

세 개의 이동 평균을 기반으로 한 트레이드 신호

그림 1. 세 개의 이동 평균을 기반으로 한 트레이드 신호

트레이드 신호 상세

이 거래 전략은 CSignal3EMA 클래스에 구현되어 있으며, 세 개의 이동 평균(Fast, Medium, Slow) 값에 쉽게 접근할 수 있도록 몇 가지 보호된 메소드를 제공합니다:

double  FastEMA(int ind)      // 바의 Fast EMA 값을 반환합니다
double  MediumEMA(int ind)      // 바의 Medium EMA 값을 반환합니다
double  SlowEMA(int ind)      // 바의 Slow EMA 값을 반환합니다
0번째(미완성) 바의 지표 값은 변경될 수 있으므로, 거래 조건을 확인할 때는 완성된 바의 데이터를 사용하는 것이 필요합니다.

1. 롱 포지션 열기

상승 추세는 다음 조건으로 판단됩니다: FastEMA > MediumEMA > SlowEMA:

  • FastEMA(1) > MediumEMA(1): Fast EMA가 Medium EMA보다 높습니다 (마지막 완료된 바);
  • MediumEMA(2) > SlowEMA(1): Medium EMA가 Slow EMA보다 높습니다 (마지막 완료된 바);
//+------------------------------------------------------------------+
//| 롱 포지션(매수)을 열기 위한 조건 확인                    |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
   sl   =m_symbol.Ask()-m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Ask()+m_take_profit*m_adjusted_point;
//--- 마지막 완료된 바에서 상승 추세 확인: FastEMA(1) > MediumEMA(1) > SlowEMA(1)
    return(FastEMA(1)>medium && medium>SlowEMA(1));
  }

2. 롱 포지션 닫기

하락 추세는 다음 조건으로 판단됩니다: FastEMA < MediumEMA < SlowEMA:

  • FastEMA(1) < MediumEMA(1): Fast EMA가 Medium EMA보다 낮습니다 (마지막 완료된 바);
  • MediumEMA(2) < SlowEMA(1): Medium EMA가 Slow EMA보다 낮습니다 (마지막 완료된 바);
//+------------------------------------------------------------------+
//| 숏 포지션을 닫기 위한 조건 확인                         |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckCloseLong(double& price)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
//--- 마지막 완료된 바에서 하락 추세 확인: FastEMA(1) < MediumEMA(1) < SlowEMA(1)
   return(FastEMA(1)<medium && medium<SlowEMA(1));
  }
롱 포지션 닫기를 개선할 수 있습니다: 하락 추세를 기다릴 필요 없이, Flat 상태일 때도 닫을 수 있으며, 이는 다음 조건으로 판단할 수 있습니다: FastEMA < MediumEMA > SlowEMA.


3. 숏 포지션 열기

//+------------------------------------------------------------------+
//| 숏 포지션(매도)을 열기 위한 조건 확인                  |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
   sl   =m_symbol.Bid()+m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Bid()-m_take_profit*m_adjusted_point;
//--- 마지막 완료된 바에서 하락 추세 확인: FastEMA(1) < MediumEMA(1) < SlowEMA(1)
   return(FastEMA(1)<medium && medium<SlowEMA(1));

  }

4. 숏 포지션 닫기

//+------------------------------------------------------------------+
//| 숏 포지션을 닫기 위한 조건 확인                        |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckCloseShort(double& price)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
//--- 마지막 완료된 바에서 상승 추세 확인: FastEMA(1) > MediumEMA(1) > SlowEMA(1)
   return(FastEMA(1)>medium && medium>SlowEMA(1));
  }

숏 포지션 닫기를 개선할 수 있습니다: 상승 추세를 기다릴 필요 없이, Flat 상태일 때도 닫을 수 있으며, 이는 다음 조건으로 판단할 수 있습니다: FastEMA > MediumEMA < SlowEMA.


MQL5 Wizard를 활용한 전문가 어드바이저 생성하기

전략을 기반으로 거래 로봇을 만들기 위해서는 "세 개의 EMA를 기반으로 한 신호"를 선택해야 합니다. MQL5 Wizard의 전문가 어드바이저 만들기 옵션에서 선택하세요:

MQL5 Wizard에서 '세 개의 EMA를 기반으로 한 신호' 선택하기

그림 2. MQL5 Wizard에서 '세 개의 EMA를 기반으로 한 신호' 선택하기

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


테스트 결과

이번에는 전문가 어드바이저의 백테스트를 진행해 보겠습니다. (EURUSD H1, 테스트 기간: 2010.01.01 - 2011.01.05, FastPeriod=5, MediumPeriod=12, SlowPeriod=24, StopLoss=400, TakeProfit=900)

전문가 어드바이저 생성 시 고정된 거래량(고정 로트 거래, 0.1)을 사용하였으며, 트레일링 스탑 알고리즘은 사용하지 않았습니다 (트레일링 미사용).

세 개의 EMA를 기반으로 한 전문가 어드바이저의 역사적 백테스트 결과

그림 3. 세 개의 EMA를 기반으로 한 전문가 어드바이저의 역사적 백테스트 결과

첨부파일: Signal3EMA.mqh 파일과 함께 CSignal3EMA 클래스는 terminal_data_folder\MQL5\Include\Expert\Signal에 위치해야 합니다.

threeema.mq5 파일은 MQL5 Wizard를 사용하여 생성된 전문가 어드바이저의 코드가 담겨 있습니다.


목록
댓글 0