거래 로봇을 무료로 다운로드 하는 법을 시청해보세요
당사를 Twitter에서 찾아주십시오!
당사 팬 페이지에 가입하십시오
스크립트가 흥미로우신가요?
그렇다면 링크 to it -
하셔서 다른 이들이 평가할 수 있도록 해보세요
스크립트가 마음에 드시나요? MetaTrader 5 터미널에서 시도해보십시오
Experts

MQL5 마법사 - ADX로 확인하고 가격과 이동평균의 교차에 기반한 거래 신호 - MetaTrader 5용 expert

조회수:
200
평가:
(30)
게시됨:
2021.10.22 14:54
이 코드를 기반으로 한 로봇이나 지표가 필요하신가요? 프리랜스로 주문하세요 프리랜스로 이동

MQL5 마법사는 Expert Advisors 코드가 자동으로 생성되도록 합니다. MQL5 마법사에서 Expert Advisors 만들기를 참조하세요.

여기에서는 ADX로 확인하고 이동 평균 지표와 가격의 교차를 기반으로 한 전략을 고려할 것입니다. 이 전략을 "ADX로 확인하고 이동 평균 지표와 가격의 교차를 기반으로 한 신호"라고 이름 붙이겠습니다.(EA를 MQL5 마법사로 자동으로 작성할 때).

트레이드 신호:

  • 매수: 최근 완성된 바의 종가가 이동평균보다 높고 이동 평균은 현재 바와 최근 완성된 바에서 상향 중일때
  • 매도: 최근 완성된 바의 종가가 이동평균보다 낮고 이동 평균은 현재 바와 최근 완성된 바에서 하향 중일때
  • 거짓 신호를 구분해 내기 위해 Directional Movement Indexes (DI+ and DI-)를 사용하여 추세의 강도(ADX>ADXmin)와 추세의 방향을 체크합니다.

전략은 CSignalADX_MA 클래스(반드시 terminal_data_folder\MQL5\Include\Expert\Signal\SignalADX-MA.mqh에 있어야 합니다)를 활용하여 생성되었습니다.

그림 1. ADX로 확인하고 가격과 이동평균의 교차에 기반한 거래 신호

그림 1. ADX로 확인하고 가격과 이동평균의 교차에 기반한 거래 신호

거래 신호

트레이딩 전략은 CSignalADX_MA class를 활용하여 생성되었습니다, 가격과 이동 평균의 사용을 용이하게 하기 위해 보호된 메서드가 있습니다:

double   PlusADX(int ind)     // 바의 DI+ 라인의 값을 반환합니다
double   MainADX(int ind)     // 바의 메인 라인의 값을 반환합니다
double   MinusADX(int ind)    // 바의 DI- 라인의 값을 반환합니다
double   EMA(int ind)         // 바의 이동 평균의 값을 반환합니다
double   Close(int ind)       // 바의 종가의 값을 반환합니다
double   StateADX(int ind)    // DI+와 DI- 라인의 차이를 반환합니다
double   StateEMA(int ind)    // EMA가 증가하면 양수를 반환하고 감소하면 음의 값을 반환합니다
double   StateClose(int ind)  // 종가와 이동 평균의 차를 반환합니다
이 기능은 추세 여부의 추가적인 확인을 위한 것입니다(Directional Movement Indicator를 사용하여). 이를 통해 현재 바(미완성된)의 값을 통해 거짓 신호와 거래 조건을 확인할 수 있습니다.


1. 매수 포지션 진입

매수 포지션에 진입할 조건:

  1. StateEMA(0)<0 и StateEMA(1)>0: 이동평균선이 현재 바와 최근에 완성된 바에서 증가
  2. StateClose(1)>0: 최근에 완성된 바의 종가가 이동 평균선보다 높음;
  3. MainADX(0)>minimum_ADX: 현재 바의 ADX 값이 지정된 최소값보다 큼(추세가 있는지 여부를 확인하기 위해)
  4. StateADX(0)>0: 현재 바의 DI+가 DI-보다 큼.
//+------------------------------------------------------------------+
//| 매수 포지션에 진입할 조건을 체크(매수)                    |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
//--- 조건 1: 이동 평균선이 현재 바와 최근 완성된 바에서 증가 
   bool Buy_Condition_1=(StateEMA(0)>0 && StateEMA(1)>0);
//--- 조건 2: 최근 완성된 바의 종가가 이동 평균보다 큼 
   bool Buy_Condition_2=(StateClose(1)>0);
//--- 조건 3: 현재바의 ADX 값이 지정된 최소 값보다 큼 (추세 시작) 
   bool Buy_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- 조건 4: 현재바의 DI+값이 DI-값보다 큼
    bool Buy_Condition_4=(StateADX(0)>0);
//---
   price=0.0;
   sl   =m_symbol.Ask()-m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Ask()+m_take_profit*m_adjusted_point;
//--- 모든 조건 체크
   return(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4);
  }


2. 매수 포지션 청산

매수 포지션을 청산:

  1. StateEMA(0)<0 и StateEMA(1)<0: 이동평균선이 현재 바와 최근에 완성된 바에서 감소;
  2. StateClose(1)<0: 최근에 완성된 바의 종가가 이동 편균선보다 낮음;
  3. MainADX(0)>minimum_ADX: 현재 바의 ADX 값이 지정된 최소값보다 큼(추세가 있는지 여부를 확인하기 위해)
  4. StateADX(0)<0: 현재 바의 DI-가 DI+보다 큼.
//+------------------------------------------------------------------+
//| 매수 포지션을 청산할 조건을 체크                 |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckCloseLong(double& price)
  {
//--- 조건 1: 이동 평균선이 현재 바와 최근 완성된 바에서 감소 
   bool Sell_Condition_1=(StateEMA(0)<0 && StateEMA(1)<0);
//--- 조건 2: 최근 완성된 바의 종가가 이동 평균보다 낮음 
   bool Sell_Condition_2=(StateClose(1)<0);
//--- 조건 3: 현재바의 ADX 값이 지정된 최소 값보다 큼 (추세 시작) 
   bool Sell_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- 조건 4: 현재바의 DI-값이 DI+값보다 큼
   bool Sell_Condition_4=(StateADX(0)<0);
//---
   price=0.0;
//--- 모든 조건 체크
   return(Sell_Condition_1 && Sell_Condition_2 && Sell_Condition_3 && Sell_Condition_4);
  }


3. 매도 포지션 진입

매도 포지션에 진입하기 위한 조건들은 매수 포지션을 청산하는 조건과 동일합니다.

//+------------------------------------------------------------------+
//| 매도 포지션에 진입할 조건을 체크(매도)                  |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
//--- 조건 1: 이동 평균선이 현재 바와 최근 완성된 바에서 감소
   bool Sell_Condition_1=(StateEMA(0)<0 && StateEMA(1)<0);
//--- 조건 2: 최근 완성된 바의 종가가 이동 평균보다 낮음
   bool Sell_Condition_2=(StateClose(1)<0);
//--- 조건 3: 현재바의 ADX 값이 지정된 최소 값보다 큼 (추세 시작) 
   bool Sell_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- 조건 4: 현재바의 DI-값이 DI+값보다 큼
   bool Sell_Condition_4=(StateADX(0)<0);
//---
   price=0.0;
   sl   =m_symbol.Bid()+m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Bid()-m_take_profit*m_adjusted_point;
//--- 모든 조건 체크
   return(Sell_Condition_1 && Sell_Condition_2 && Sell_Condition_3 && Sell_Condition_4);
  }


4. 매도 포지션 청산

매도 포지션을 청산하기 위한 조건들은 매수 포지션에 진입 하는 조건과 동일합니다.

//+------------------------------------------------------------------+
//| 매도 포지션을 청산할 조건을 체크                        |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckCloseShort(double& price)
  {
//--- 조건 1: 이동 평균선이 현재 바와 최근 완성된 바에서 증가
   bool Buy_Condition_1=(StateEMA(0)>0 && StateEMA(1)>0);
//--- 조건 2: 최근 완성된 바의 종가가 이동 평균보다 높음 
   bool Buy_Condition_2=(StateClose(1)>0);
//--- 조건 3: 현재바의 ADX 값이 지정된 최소 값보다 큼 (추세 시작)
    bool Buy_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- 조건 4: 현재바의 DI+값이 DI-값보다 큼
   bool Buy_Condition_4=(StateADX(0)>0);
//---
   price=0.0;
//--- 모든 조건 체크
  return(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4);
  }

MQL5 마법사를 사용해서 Expert Advisor 생성

전략을 기반으로 거래 로봇을 만들려면 신호 속성을 MQL5 마법사의 "Expert Advisor 만들기" 옵션에서 "ADX로 확인하고 가격과 이동평균의 교차에 기반한 신호"로 선택해야 합니다:

그림 2.  MQL5 마법사에서 "MA와의 가격 교차를 기반으로 한 신호"를 선택합니다

그림 2. MQL5 마법사에서 "MA와의 가격 교차를 기반으로 한 신호"를 선택합니다

다음으로 트레일링 스탐 알고리즘과 자금과 위험 관리 시스템을 지정해야 합니다. Expert Advisor의 코드는 자동으로 생성되며, MetaTrader 5 클라이언트 터미널의 전략 테스터에서 컴파일하고 테스트할 수 있습니다.


테스트 결과

과거 데이터(EURUSD H1, 사용자 지정 기간: 1.1.2010-05.01.2011,  PeriodADX=33, MinimumADX=22, PeriodMA=39, StopLoss=400, TakeProfit=900)으로 Expert Advisor를 백테스팅해 보겠습니다.

Expert Advisor를 만들때 우리는 고정된 볼륨 (고정 랏, 0.1), 트레일링 스탑 알고리즘은 사용하지 않는 것으로 (Trailing not used) 하였습니다.

그림 3. ADX로 확인하고 가격과 이동평균의 교차에 기반한 거래 신호에 기반한 Expert Advisor의 백테스팅 결과

그림 3. ADX로 확인하고 가격과 이동평균의 교차에 기반한 거래 신호에 기반한 Expert Advisor의 백테스팅 결과


첨부: SignalADX-MA.mqh과 CSignalADX_MA 클래스는 반드시 terminal_data_folder\MQL5\Include\Expert\Signal\에 위치해야 합니다.

ma_crossover_adx.mq5는 MQL5 마법사를 사용하여 생성된 Expert Advisor의 코드를 포함하고 있습니다.


MetaQuotes Ltd에서 러시아어로 번역함.
원본 코드: https://www.mql5.com/ru/code/258

MQL5 마법사 - 세개의 이동 평균에 기반한 거래 신호 MQL5 마법사 - 세개의 이동 평균에 기반한 거래 신호

세개의 이동 평균에 기반한 거래 신호를 고려해 보겠습니다. 이 전략에 기반한 Expert Advisor 코드는 MQL5 마법사를 사용하여 자동으로 생성될 수 있습니다.

MQL5 마법사 - 가격이 이동 평균과 교차할 때를 기준으로 한 트레이딩 신호 MQL5 마법사 - 가격이 이동 평균과 교차할 때를 기준으로 한 트레이딩 신호

가격이 이동 평균과 교차할 때를 기준으로 한 트레이딩 신호(MQL5 스탠다드 라이브러리의 CSignalMA) 이 전략에 기반한 Expert Advisor 코드는 MQL5 마법사를 사용하여 자동으로 생성될 수 있습니다.

MQL5 Wizard - MACD의 메인 라인(Main line)과 시그널 라인(Signal line)의 교차에 기반한 신호 MQL5 Wizard - MACD의 메인 라인(Main line)과 시그널 라인(Signal line)의 교차에 기반한 신호

거래 신호는 MACD 지표의 메인 라인(Main line)과 시그널 라인(Signal line)의 교차에 기반한 신호입니다.(CSignalMACD from MQL5 Standard Library) 이 전략에 기반한 Expert Advisor 코드는 MQL5 마법사를 사용하여 자동으로 생성될 수 있습니다.

MQL5 Wizard - 두개의 지수 이동 평균의 교차에 기반한 신호 MQL5 Wizard - 두개의 지수 이동 평균의 교차에 기반한 신호

거래 신호는 두개의 지수 이동 평균의 교차에 기반합니다. 이 전략에 기반한 Expert Advisor 코드는 MQL5 마법사를 사용하여 자동으로 생성될 수 있습니다.