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

MQL5 마법사 - 캔들스틱 패턴 클래스 - MetaTrader 5용 라이브러리

조회수:
238
평가:
(83)
게시됨:
2021.11.10 08:49
이 코드를 기반으로 한 로봇이나 지표가 필요하신가요? 프리랜스로 주문하세요 프리랜스로 이동

MQL5 마법사는 클라이언트 터미널과 함께 제공되는 Standard library 클래스에 기반한 Expert Advisors를 생성하도록 합니다. 귀하의 트레이딩 아이디어를 빠르게 확인할 수 있게 하며, 귀하가 필요로 하는 것은 자신만의 트레이딩 신호 클래스를 만드는 것입니다. 이러한 클래스의 구조와 예는 MQL5 마법사: 트레이딩 신호 모듈을 만드는 방법에서 찾을 수 있습니다.

일반적인 아이디어는 다음과 같습니다: 거래 신호의 클래스는 CExpertSignal에서 나옵니다, 다음으로 LongCondition()ShortCondition()과 가상의 메서드를 귀하의 메서드로 재정의 하여야 합니다.

"최고 트레이더들의 전략" (러시아어)이란 책이 있습니다. 책에는 많은 트레이딩 전략이 수록되어 있습니다. 우리는 이중에서 Stochastic, CCI, MFI and RSI 오실레이터에 의해 확인되는 반전 캔들스틱 패턴에 대해 알아 보겠습니다.

가장 좋은 방법은 캔들 패턴 형성 확인용 CExpertSignal에서 파생된 별도의 클래스를 만드는 것입니다. 캔들 패턴에 의해 생성된 거래 신호를 확인하려면 CCandlePattern에서 파생된 클래스를 작성하고 필요한 기능(예: 오실레이터에 의한 확인)을 추가하면 충분합니다.

CCandlePattern 클래스와 MQL5 마법사용 캔들 패턴은 거래 신호 클래스 생성을 단순화할 수 있습니다.


CCandlePattern class

CCandlePattern 클래스는 CExpertSignal 클래스(거래 신호의 기본 클래스)에서 파생된 것입니다

class CCandlePattern : public CExpertSignal
  {
protected:
   //--- 지표
   CiMA              m_MA;
   //--- 타임 시리즈
   CiOpen            m_open;
   CiHigh            m_high;
   CiLow             m_low;
   CiClose           m_close;
   //--- 입력 패러미터
   int               m_ma_period;

public:
   //--- 생성자
                     CCandlePattern();
   //--- 입력 매개변수 세팅 메서드
   void              MAPeriod(int period)             { m_ma_period=period;                 } 
   //--- 초기화 메서드
   virtual bool      ValidationSettings();
   virtual bool      InitIndicators(CIndicators *indicators);

   //--- 캔들 스틱의 패턴 형태를 체크 
   bool              CheckCandlestickPattern(ENUM_CANDLE_PATTERNS CandlePattern);
   //--- 상승/하락 캔들 스틱의 패턴 형태를 체크
   bool              CheckPatternAllBullish();
   bool              CheckPatternAllBearish();

protected:
   //--- 지표와 타임 시리즈의 초기화
   bool              InitMA(CIndicators *indicators);
   bool              InitOpen(CIndicators *indicators);
   bool              InitHigh(CIndicators *indicators);
   bool              InitLow(CIndicators *indicators);
   bool              InitClose(CIndicators *indicators);
   //--- 캔들스틱 체크용 메서드 
   double            AvgBodySize(int ind);
   double            MA(int ind)                const { return(m_MA.Main(ind));             }
   double            Open(int ind)              const { return(m_open.GetData(ind));        }
   double            High(int ind)              const { return(m_high.GetData(ind));        }
   double            Low(int ind)               const { return(m_low.GetData(ind));         }
   double            Close(int ind)             const { return(m_close.GetData(ind));       }
   double            CloseAvg(int ind)          const { return(MA(ind));                    }
   double            MidPoint(int ind)          const { return(0.5*(High(ind)+Low(ind)));   }
   double            MidOpenClose(int ind)      const { return(0.5*(Open(ind)+Close(ind))); }
   //--- 캔들스틱 모델 체크용 메서드 
   bool              CheckPatternThreeBlackCrows();
   bool              CheckPatternThreeWhiteSoldiers();
   bool              CheckPatternDarkCloudCover();
   bool              CheckPatternPiercingLine();
   bool              CheckPatternMorningDoji();
   bool              CheckPatternEveningDoji();
   bool              CheckPatternBearishEngulfing();
   bool              CheckPatternBullishEngulfing();
   bool              CheckPatternEveningStar();
   bool              CheckPatternMorningStar();
   bool              CheckPatternHammer();
   bool              CheckPatternHangingMan();
   bool              CheckPatternBearishHarami();
   bool              CheckPatternBullishHarami();
   bool              CheckPatternBearishMeetingLines();
   bool              CheckPatternBullishMeetingLines();
  };


MQL5 마법사용 거래 신호 클래스에서 CCandlePattern 사용

CCandlePattern 클래스는 MQL5 마법사용 신호 클래스를 위한 부모 클래스로 사용 될 수 있습니다. 거래 신호 클래스는 CCandlePattern 클래스에서 파생되어야 하며, 롱/숏 포지션 진입/청산 확인을 위한 메소드를 추가해야 합니다(지표 등...).

반전 캔들스틱 패턴이 거래 신호로 사용될 수 있습니다 그러나 정확한 것인지 확인 하는 것이 좋습니다(가령 오실레이터를 활용하는 등).

  • bool CheckOpenLong(double &price,double &sl,double &tp,datetime &expiration) - 매수 진입 조건을 체크;
  • bool CheckCloseLong(double &price)  - 매수 포지션 청산 조건을 체크;
  • bool CheckOpenShort(double &price,double &sl,double &tp,datetime &expiration) - 매도 진입 조건을 체크;
  • bool CheckCloseShort(double &price) - 매도 포지션 청산 조건을 체크;
//+------------------------------------------------------------------+
//|                                          CSampleCandleSignal.mqh |
//+------------------------------------------------------------------+
// CCandlePattern class 포함
// candlepatterns.mqh는 반드시 같은 폴더에 위치해야 합니다
#include "CandlePatterns.mqh"
// 마법사 설명 시작
//+------------------------------------------------------------------+
//| 클래스 설명                                         |
//| Title=Test signal                                                |
//| Type=Signal                                                      |
//| Name=CSampleCandleSignal                                         |
//| Class=CSampleCandleSignal                                        |
//| Page=                                                            |
//| Parameter=param1,int,9                                           |
....
//| Parameter=paramN,int,13                                          |
//| Parameter=MAPeriod,int,12                                        |
//+------------------------------------------------------------------+
// 마법사 설명 끝
//+------------------------------------------------------------------+
class CSampleCandleSignal : public CCandlePattern
  {
protected:
   //--- 지표
   ....
   //--- 입력 매개변수
   ...
public:
   //--- 생성자
                     CTestClass();
   //--- 입력 매개변수 세팅용 메서드
   ...
   //--- 지표와 타임 시리즈 초기화 /입력 매개변수 체크
   virtual bool      ValidationSettings();
   virtual bool      InitIndicators(CIndicators *indicators);
   //--- 거래 신호 체크
   virtual bool      CheckOpenLong(double &price,double &sl,double &tp,datetime &expiration);
   virtual bool      CheckCloseLong(double &price);
   virtual bool      CheckOpenShort(double &price,double &sl,double &tp,datetime &expiration);
   virtual bool      CheckCloseShort(double &price);

protected:
   //--- 지표 초기화 메서드
   ...
   //--- 지표의 값에 접근 하는 메서드
   ...
  };

MQL5 마법사에서 사용된 거래 신호 클래스의 구조와 관련한 상세 내용은 <a3>MQL5 마법사: 트레이딩 신호 모듈을 만드는 방법</a3>에서 찾을 수 있습니다.

라인을 확인하시기 바랍니다:

//| Parameter=MAPeriod,int,12                                        |

마법사 설명 부분에서.

MAPeriod 메서드는 CCandlePattern 부모 클래스에서 평균 종가와 캔들 본체의 평균 값을 계산하는 데 사용됩니다. 디폴트로 CCandlePattern() class constructor에서 m_ma_period=12로 지정 되어 있습니다 . 그러나 입력 매개변수를 사용하여 지정하는 것이 더 좋습니다, MetaTrader 5. Strategy Tester에서 사용 할 수 있습니다.


부모 클래스의 ValidationSettings()과 InitIndicators()를 호출하는 것을 잊지 마시기 바랍니다.

관련된 클래스 메서드에서 부모 클래스의 CCandlePattern::ValidationSettings과 CCandlePattern::InitIndicators 메서드를 호출하여야 합니다.

이들 메서드를 먼저 호출하는 것이 좋습니다:

bool CSampleCandleSignal ::ValidationSettings()
  {
//--- 부모 CCandlePattern 클래스의 ValidationSettings 호출
   if(!CCandlePattern::ValidationSettings()) return(false);
//--- 귀하의 코드
..
//--- ok
   return(true);
  }

InitIndicators() 메서드도 마찬가지 입니다:

bool CSampleCandleSignal ::InitIndicators(CIndicators *indicators)
  {
//---  부모 CCandlePattern 클래스의 InitIndicators  호출
   if(!CCandlePattern::InitIndicators(indicators)) return(false);   
//--- 귀하의 코드
...
//--- ok
   return(true);
  }


캔들 스틱 패턴 확인

특정 캔들스틱 패턴의 형태을 확인하려면 함수에 전달된 패턴으로 CheckCandlestickPattern(ENUM_CANDLE_PATTERNS CandlePattern) 메서드를 호출해야 합니다.

또한 CheckPatternAllBullish() 및 CheckPatternAllBearish() 메서드를 사용하여 강세/약세 캔들 패턴 중 하나의 형성을 확인할 수 있습니다.

캔들스틱 패턴 작업을 간략히 하기 위해 ENUM_CANDLE_PATTERNS enumeration이 사용됩니다:

enum ENUM_CANDLE_PATTERNS  // 캔들스틱 패턴 리스트
  {
   CANDLE_PATTERN_THREE_BLACK_CROWS     = 1,
   CANDLE_PATTERN_THREE_WHITE_SOLDIERS  = 2,
   CANDLE_PATTERN_DARK_CLOUD_COVER      = 3,
   CANDLE_PATTERN_PIERCING_LINE         = 4,
   CANDLE_PATTERN_MORNING_DOJI          = 5,
   CANDLE_PATTERN_EVENING_DOJI          = 6,
   CANDLE_PATTERN_BEARISH_ENGULFING     = 7,
   CANDLE_PATTERN_BULLISH_ENGULFING     = 8,
   CANDLE_PATTERN_EVENING_STAR          = 9,
   CANDLE_PATTERN_MORNING_STAR          = 10,
   CANDLE_PATTERN_HAMMER                = 11,
   CANDLE_PATTERN_HANGING_MAN           = 12,
   CANDLE_PATTERN_BEARISH_HARAMI        = 13,
   CANDLE_PATTERN_BULLISH_HARAMI        = 14,
   CANDLE_PATTERN_BEARISH_MEETING_LINES = 15,
   CANDLE_PATTERN_BULLISH_MEETING_LINES = 16
  };

강세 캔들스틱 패턴 체크:

///--- 다음의 형태를 체크 "3 White Soldiers" 패턴:
  CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS)

///--- 다음의 형태를 체크  "Piercing Line" 패턴:
  CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE)

///--- 다음의 형태를 체크   "Morning Doji" 패턴:
  CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI)

///--- 다음의 형태를 체크   "Bullish Engulfing" 패턴:
  CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING)

///--- 다음의 형태를 체크   "Bullish Haramii" 패턴:
  CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI)

///--- 다음의 형태를 체크   "Morning Star" 패턴:
  CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR)

///--- 다음의 형태를 체크   "Bullish Meeting Lines" 패턴:
  CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES)

///--- 다음의 형태를 체크   "Hammer" 패턴:
  CheckCandlestickPattern(CANDLE_PATTERN_HAMMER)

///--- 다음의 형태를 체크   강세 캔들스틱 패턴중 하나의 형태 
  CheckPatternAllBullish();

약세 캔들 스틱 패턴 체크:

///--- "3 Black Crows" 패턴의 형태를 체크:
  CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS)

///--- 다음의 형태를 체크   "Dark Cloud Cover" 패턴:
  CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER)

///--- 다음의 형태를 체크   "Evening Doji" 패턴:
  CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI)

///--- 다음의 형태를 체크   "Bearish Engulfing" 패턴:
  CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING)

///--- 다음의 형태를 체크   "Evening Star" 패턴:
  CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR)

///--- 다음의 형태를 체크  "Hanging Man" 패턴:
  CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN)

///--- 다음의 형태를 체크   "Bearish Harami" 패턴:
  CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI)

///--- 다음의 형태를 체크   "Bearish Meeting Lines" 패턴:
  CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES)

///--- 약세 캔들스틱 패턴중 하나의 형태를 체크 
  CheckPatternAllBearish();

Here are examples of use of the methods:

1. 매수 포지션 진입

//+------------------------------------------------------------------+
//| 매수 포지션에 진입하기 위한 조건을 체크                      |
//+------------------------------------------------------------------+
bool CSampleCandleSignal::CheckOpenLong(double &price,double &sl,double &tp,datetime &expiration)
  {
//--- 매수 포지션에 진입하기 위한 조건을 체크
//--- 지표 확인에 더해 이 코드들을 사용하는 것이 좋습니다
//--- 예를 들어 "3 white soldiers" 패턴의 형태를 확인합니다:
   if CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) return(true):
//--- 신호 없음
   return(false);
  }

2. 매수 포지션 청산

//-------------------------------------------------------------------+
//| 매수 포지션을 청산하기 위한 조건을 체크                      |
//+------------------------------------------------------------------+
bool CSampleCandleSignal::CheckCloseLong(double &price)
  {
//--- 매수 포지션을 청산하기 위한 조건을 체크
//---예를 들어 약세 패턴의 형태중 하나를 확인합니다 :
   if CheckPatternAllBearish() return(true):
//--- 시그널 없음
   return(false);
  }

3. 매도 포지션 진입

//-------------------------------------------------------------------+
//| 매도 포지션에 진입하기 위한 조건을 체크                     |
//+------------------------------------------------------------------+
bool CSampleCandleSignal::CheckOpenShort(double &price,double &sl,double &tp,datetime &expiration)
  {
//--- 매수 포지션에 진입하기 위한 조건을 체크
//--- 지표 확인에 더해 이 코드들을 사용하는 것이 좋습니다
//--- 예를 들어 "3 black crows" 패턴의 형태를 확인합니다:
    if CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) return(true):
//--- 신호 없음
   return(false);
  }

4. 매도 포지션 청산

//-------------------------------------------------------------------+
//| 매도 포지션을 청산하기 위한 조건을 체크                     |
//+------------------------------------------------------------------+
bool CSampleCandleSignal::CheckCloseShort(double &price)
  {
//--- 매도 포지션을 청산하기 위한 조건을 체크 
//---지표 확인에 더해 이 코드들을 사용하는 것이 좋습니다
//--- 예를 들어 강세 패턴중 하나의 형태를 확인합니다:
   if CheckPatternAllBullish() return(true):
//--- 신호 없음
   return(false);
  }

권장 사항

잘못된 신호를 줄이려면 오실레이터와 같은 다른 지표로 반전 캔들 패턴을 확인해야 합니다.

다음 패턴들이 책 "Strategies of best traders" 에서 소개된바 있습니다:

  • 3 Black Crows/3 White Soldiers
  • Dark Cloud Cover/Piercing Line
  • Morning Doji/Evening Doji
  • Bearish Engulfing/Bullish Engulfing
  • Evening Star/Morning Star
  • Hammer/Hanging Man
  • Bearish Harami/Bullish Harami
  • Bearish Meeting Lines/Bullish Meeting Lines

Stochastic, CCI, MFI and RSI 오실레이터에 의해 확인 됨.

다음에는 MQL5 마법사에서 쓰이는 거래 신호 클래스들을 제공 하겠습니다.

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

MQL5 마법사 - 상승 하라미/하락 하라미 + MFI에 기반한 매매 신호 MQL5 마법사 - 상승 하라미/하락 하라미 + MFI에 기반한 매매 신호

Market Facilitation Index (MFI)으로 확인된 "상승/하락 하라미" 매매 신호를 살펴봅니다. 이 전략에 기반한 Expert Advisor 코드는 MQL5 마법사를 사용하여 자동으로 생성될 수 있습니다.

MQL5 마법사 - 상승 하라미/하락 하라미 + CCI에 기반한 매매 신호 MQL5 마법사 - 상승 하라미/하락 하라미 + CCI에 기반한 매매 신호

CCI에 기반한 "상승 하라미/하락 하라미" 매매 신호를 살펴봅니다. 이 전략에 기반한 Expert Advisor 코드는 MQL5 마법사를 사용하여 자동으로 생성될 수 있습니다.

CCI (mimic) CCI (mimic)

CCI (mimic)

하이켄-애쉬(Heiken-Ashi) 하이켄-애쉬(Heiken-Ashi)

하이켄-애쉬 지표는 캔들 차트처럼 보이지만 약간의 차이가 있습니다. 하이켄-애쉬 차트의 장점은 단순한 추세 결정 차트입니다, 상승 추세 양초는 파란색, 하락 추세 양초는 빨간색입니다.