시스템트레이딩

MQL5 위자드로 해머/행잉맨 패턴과 MFI 기반 트레이딩 신호 생성하기
MetaTrader5
MQL5 위자드로 해머/행잉맨 패턴과 MFI 기반 트레이딩 신호 생성하기

안녕하세요, 트레이더 여러분! 오늘은 MQL5 위자드를 사용하여 해머 및 행잉맨 패턴을 기반으로 한 트레이딩 신호를 생성하는 방법에 대해 알아보겠습니다. 이 도구는 메타트레이더 5에서 전문가 어드바이저(EA)를 쉽게 만들 수 있도록 도와줍니다. 먼저, 거래 아이디어를 빠르게 확인하기 위해 자신만의 거래 신호 클래스를 작성해야 합니다. 이 클래스의 구조와 예제는 MQL5 위자드: 거래 신호 모듈 만들기에서 찾아볼 수 있습니다. 기본 아이디어는 거래 신호 클래스가 CExpertSignal에서 파생된다는 것입니다. 이후 LongCondition()와 ShortCondition() 메소드를 오버라이드하여 자신만의 메소드를 만들어야 합니다. 우리는 반전 캔들 패턴 중 해머와 행잉맨 패턴을 다룰 것입니다. 이 패턴은 MFI 지표로 확인됩니다. 1. 해머 및 행잉맨 캔들 패턴 1.1. 해머 해머는 작은 몸체와 긴 하단 심지를 가진 캔들로, 하락세에서 형성됩니다. 해머 패턴은 하락 추세의 끝을 나타냅니다. 캔들 몸체의 색상은 중요하지 않지만, 상승 해머는 더 큰 상승 잠재력을 나타냅니다. Fig. 1. 해머 캔들 패턴 해머 패턴 인식은 CheckPatternHammer() 메소드를 통해 이루어집니다. 아래는 그 코드입니다: //+------------------------------------------------------------------+ //| 해머 캔들 패턴 형성 체크 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHammer() &nbsp;&nbsp;{ &nbsp;&nbsp; //--- 해머 체크 &nbsp;&nbsp; if((MidPoint(1)(High(1)-(High(1)-Low(1)/3.0)) &amp;&amp; // 몸체가 상단 1/3에 위치 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Close(1)(High(1)-(High(1)-Low(1)/3.0)) &amp;&amp; // 몸체가 상단 1/3에 위치 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Close(1)>Close(2)) &amp;&amp; (Open(1)>Open(2))) &nbsp;&nbsp; return(true); &nbsp;&nbsp; return(false); &nbsp;&nbsp;} 2. MFI 지표로 확인되는 거래 신호 거래 신호를 열거나 닫기 위해서는 MFI 지표로 확인해야 합니다. MFI 값은 롱 포지션의 경우 40 미만, 숏 포지션의 경우 60 초과여야 합니다. 롱 포지션을 열기 위한 조건: MFI(1) < 40 숏 포지션을 닫기 위한 조건: MFI가 상향으로 70 또는 30의 임계 수준을 넘었을 경우 Fig. 3. 해머 패턴, MFI 지표로 확인 2.1. 롱 포지션 열기 / 숏 포지션 닫기 해머 패턴이 MFI 지표로 확인되어야 합니다: MFI(1) < 40. 숏 포지션은 MFI 지표가 70 또는 30의 임계 수준을 넘었을 때 닫아야 합니다. //+------------------------------------------------------------------+ //| 시장 진입 및 퇴출 조건 체크 | int CH_HM_MFI::LongCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; &nbsp;&nbsp; if(CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) &amp;&amp; (MFI(1)&lt;40)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; return result; &nbsp;&nbsp;} 2.2. 숏 포지션 열기 / 롱 포지션 닫기 행잉맨 패턴이 MFI 지표로 확인되어야 합니다: MFI(1) > 60. 롱 포지션은 MFI 지표가 70 또는 30의 임계 수준을 넘었을 때 닫아야 합니다. //+------------------------------------------------------------------+ //| 시장 진입 및 퇴출 조건 체크 | int CH_HM_MFI::ShortCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; &nbsp;&nbsp; if(CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) &amp;&amp; (MFI(1)&gt;60)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; return result; &nbsp;&nbsp;} 2.3. MQL5 위자드를 사용하여 전문가 어드바이저 생성하기 CH_HM_MFI 클래스는 표준 라이브러리에 포함되어 있지 않으므로, ah_hm_mfi.mqh 파일을 다운로드하여 terminal_data_folder\MQL5\Include\Expert\Signal\MySignals에 저장해야 합니다. 전문가 어드바이저를 생성하려면 MQL5 위자드를 실행합니다: Fig. 4. 전문가 어드바이저 생성하기 전문가 어드바이저의 이름을 지정합니다: Fig. 5. 전문가 어드바이저 일반 속성 그 다음, 사용하려는 거래 신호 모듈을 선택합니다. Fig. 6. 전문가 어드바이저 신호 속성 우리의 경우, 한 개의 거래 신호 모듈만 사용합니다. "MFI로 확인된 해머/행잉맨 기반 신호" 모듈 추가: Fig. 7. 전문가 어드바이저 신호 속성 거래 신호 모듈이 추가되었습니다: Fig. 8. 전문가 어드바이저 신호 속성 원하는 트레일링 속성을 선택할 수 있지만, 우리는 "트레일링 스탑 사용 안 함"을 사용할 것입니다: Fig. 9. 전문가 어드바이저 트레일링 속성 자금 관리 속성에 대해, "고정 거래량으로 거래하기"를 사용할 것입니다: Fig. 10. 전문가 어드바이저 자금 관리 속성 "완료" 버튼을 누르면 생성된 전문가 어드바이저의 코드가 Expert_AH_HM_MFI.mq5에 저장됩니다. 생성된 전문가 어드바이저의 기본 입력 파라미터: //--- 주요 신호 입력 input int Signal_ThresholdOpen =10;// 포지션 오픈 신호 임계값 [0...100] input int Signal_ThresholdClose =10;// 포지션 클로즈 신호 임계값 [0...100] 여기서 Signal_ThresholdOpen/Signal_ThresholdClose 입력 파라미터는 포지션 오픈 및 클로즈에 대한 임계값을 지정할 수 있습니다. 전문가 어드바이저의 거래 신호 클래스의 LongCondition() 및 ShortCondition() 메소드의 코드에서 고정값의 임계값을 설정했습니다: 포지션 오픈: 80; 포지션 클로즈: 40. MQL5 위자드로 생성된 전문가 어드바이저는 거래 신호 모듈의 "투표"를 사용하여 포지션을 열고 닫습니다. 주요 모듈의 투표 결과도 사용되며, 이 모듈의 LongCondition() 및 ShortCondition() 메소드는 항상 0을 반환합니다. 2.4. 이력 백테스트 결과 이제 해머/행잉맨 + MFI 기반의 전문가 어드바이저에 대한 이력 백테스트 결과를 살펴보겠습니다. (유로/달러 H1, 테스트 기간: 2010.01.01-2011.03.16). Fig. 11. 해머/행잉맨 + MFI 기반의 테스트 결과 최고의 입력 파라미터 세트는 전략 테스터를 통해 찾을 수 있습니다. MQL5 위자로 생성된 전문가 어드바이저의 코드는 expert_ah_hm_mfi.mq5에 첨부되어 있습니다.

2011.03.21
MQL5 위자드를 활용한 '해머/행잉맨' 패턴 기반 거래 신호 생성
MetaTrader5
MQL5 위자드를 활용한 '해머/행잉맨' 패턴 기반 거래 신호 생성

안녕하세요, 트레이더 여러분! 오늘은 MQL5 위자드를 활용하여 '해머'와 '행잉맨' 패턴에 기반한 거래 신호를 생성하는 방법에 대해 알아보겠습니다. 이 도구는 메타트레이더 5와 함께 제공되는 표준 라이브러리 클래스를 바탕으로 즉시 사용할 수 있는 전문가 고문(EA)을 만드는 데 도움을 줍니다. 여러분의 거래 아이디어를 빠르게 검토할 수 있는 좋은 방법입니다. 거래 신호 클래스를 생성하는 방법에 대한 자세한 내용은 MQL5 위자드: 거래 신호 모듈 만드는 법를 참고하세요. 기본 개념은 거래 신호 클래스가 CExpertSignal에서 파생되며, 여러분의 필요에 맞게 LongCondition()과 ShortCondition() 메서드를 오버라이드해야 한다는 것입니다. 여기서는 '해머'와 '행잉맨'이라는 반전 캔들 패턴을 다룰 것이며, 이 패턴들은 CCI 지표로 확인됩니다. 이 모듈은 CCandlePattern 클래스를 기반으로 하며, 캔들 패턴을 사용한 거래 신호를 생성하는 간단한 예시를 제공합니다. 1. '해머'와 '행잉맨' 반전 캔들 패턴 1.1. 해머 '해머'는 작은 몸체와 긴 하단 심지를 가진 캔들로, 하락세가 끝나고 형성됩니다. 이 패턴은 약세 추세의 종료를 나타냅니다. 캔들의 색상은 중요하지 않지만, 강세 해머는 더 높은 강세 잠재력을 나타냅니다. '해머' 패턴의 몸체는 종종 이전 캔들의 최저점 근처에서 형성됩니다. 그림 1. '해머' 캔들 패턴 '해머' 패턴의 인식은 CheckPatternHammer() 메서드에서 구현됩니다: //+------------------------------------------------------------------+ //| '해머' 캔들 패턴 형성 확인 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHammer() &nbsp;&nbsp;{ &nbsp;&nbsp; //--- 해머 &nbsp;&nbsp; if((MidPoint(1)MathMin(Open(1),Close(1))>(High(1)-(High(1)-Low(1)/3.0)) &amp;&amp; &nbsp;&nbsp; (Close(1)MathMin(Open(1),Close(1)>(High(1)-(High(1)-Low(1)/3.0)) &amp;&amp; &nbsp;&nbsp; (Close(1)>Close(2)) &amp;&amp; (Open(1)>Open(2))) &nbsp;&nbsp; return(true); &nbsp;&nbsp; return(false); &nbsp;&nbsp;} '행잉맨' 캔들 패턴 형성 확인은 CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) 메서드를 통해 이루어집니다. 2. CCI 지표로 확인된 거래 신호 거래 신호는 반드시 CCI 지표로 확인되어야 합니다. CCI의 값이 기준 수준을 초과하거나 미만이 되어야 합니다 (-50은 매수 포지션, 50은 매도 포지션). 또한, 열려 있는 포지션의 종료는 CCI 값에 따라 이루어집니다. CCI가 다음의 기준 수준에 도달하면 종료할 수 있습니다: CCI 선이 반대 기준 수준(매수: 80, 매도: -80)에 도달한 경우 반전 신호가 확인되지 않은 경우 (CCI가 다음 수준에 도달했을 때: 매수: -80, 매도: 80) 그림 3. CCI로 확인된 '해머' 패턴 int CH_HM_CCI::LongCondition() - 매수 포지션을 열기 위한 조건을 체크합니다 (80 반환) 및 매도 포지션 종료 조건 (40 반환); int CH_HM_CCI::ShortCondition() - 매도 포지션을 열기 위한 조건을 체크합니다 (80 반환) 및 매수 포지션 종료 조건 (40 반환). 2.1. 매수 포지션 열기/매도 포지션 닫기 '해머' 패턴 형성이 CCI 지표로 확인되어야 합니다: CCI(1) &lt; -50 (마지막 완료된 막대의 CCI 값이 -50 미만이어야 합니다). 매도 포지션은 CCI 지표가 기준 수준 -80을 상향 돌파하거나 기준 수준 80을 하향 돌파하면 종료됩니다. //+------------------------------------------------------------------+ //| 시장 진입 및 종료 조건 확인 | //| 1) 매수 포지션 진입 (결과=80) | //| 2) 매도 포지션 종료 (결과=40) | //+------------------------------------------------------------------+ int CH_HM_CCI::LongCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; &nbsp;&nbsp; //--- 매수 포지션 진입 조건 확인 &nbsp;&nbsp; if(CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) &amp;&amp; (CCI(1)&lt;-50)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; //--- 매도 포지션 종료 조건 확인 &nbsp;&nbsp; if(((CCI(1)&gt;-80) &amp;&amp; (CCI(2)&lt;-80)) || ((CCI(1)&lt;80) &amp;&amp; (CCI(2)&gt;80

2011.03.21
MQL5 위자드로 해머/행잉맨 및 스토캐스틱 기반의 거래 신호 생성하기
MetaTrader5
MQL5 위자드로 해머/행잉맨 및 스토캐스틱 기반의 거래 신호 생성하기

안녕하세요, 트레이더 여러분! 오늘은 MQL5 위자드를 사용하여 해머(Hammer) 및 행잉맨(Hanging Man) 캔들 패턴과 스토캐스틱(Stochastic) 지표를 활용한 거래 신호를 생성하는 방법에 대해 알아보겠습니다. MQL5 위자드는 클라이언트 터미널과 함께 제공되는 표준 라이브러리 클래스를 기반으로 즉시 사용할 수 있는 전문가 어드바이저(EA)를 생성할 수 있도록 도와줍니다. 거래 아이디어를 빠르게 확인할 수 있도록 자신만의 거래 신호 클래스를 만들 수 있습니다. 이 클래스의 구조와 예제는 MQL5 위자드: 거래 신호 모듈 생성 방법에서 확인할 수 있습니다. 기본 아이디어는 거래 신호 클래스를 CExpertSignal에서 파생시키는 것입니다. 이후에는 LongCondition() 및 ShortCondition()의 가상 메서드를 자신의 메서드로 오버라이드해야 합니다. 러시아어로 된 책 "최고의 트레이더의 전략"에서는 다양한 거래 전략을 논의하고 있습니다. 우리는 스토캐스틱, CCI, MFI, RSI와 같은 오실레이터에 의해 확인된 반전 캔들 패턴에 초점을 맞출 것입니다. 해머 및 행잉맨 패턴을 확인하기 위해서는 별도의 클래스를 생성하여 캔들 패턴의 형성을 점검하는 것이 가장 좋습니다. 생성된 거래 신호를 확인하기 위해서는 CCandlePattern에서 파생된 클래스를 작성하고 필요한 기능(예: 오실레이터에 의한 확인)을 추가하면 됩니다. 1. 해머 및 행잉맨 반전 캔들 패턴 1.1. 해머 해머는 작은 몸체와 긴 하단 심지를 가진 캔들로, 하락세 후에 형성됩니다. 해머 패턴은 하락 추세의 끝을 나타냅니다. 캔들 몸체의 색상은 중요하지 않지만, 상승 해머는 더 높은 상승 잠재력을 나타냅니다. 해머 패턴의 몸체는 종종 이전 캔들의 최저점 근처에서 형성됩니다. 하단 심지가 길고 상단 심지가 짧을수록 반전 패턴의 가능성이 높아집니다. Fig. 1. 해머 캔들 패턴 해머 패턴의 인식은 CheckPatternHammer() 메서드에서 구현됩니다: //+------------------------------------------------------------------+ //| 해머 캔들 패턴 형성 확인 &nbsp;&nbsp; | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHammer() { &nbsp;&nbsp; //--- 해머 &nbsp;&nbsp; if((MidPoint(1)&lt;CloseAvg(2)) &amp;&amp; // 하락 추세 &nbsp;&nbsp; (MathMin(Open(1),Close(1))>(High(1)-(High(1)-Low(1)/3.0)) &amp;&amp; // 몸체가 상위 1/3 &nbsp;&nbsp; (Close(1)

2011.03.21
MQL5 위자드를 활용한 Bullish Harami/Bearish Harami와 RSI 기반의 트레이딩 신호
MetaTrader5
MQL5 위자드를 활용한 Bullish Harami/Bearish Harami와 RSI 기반의 트레이딩 신호

안녕하세요, 트레이더 여러분! 오늘은 MQL5 위자드를 이용하여 Bullish Harami와 Bearish Harami 패턴을 기반으로 한 트레이딩 신호를 생성하는 방법에 대해 알아보겠습니다. 이 방법은 MetaTrader 5에서 Expert Advisor(이하 EA)를 생성하는 데 매우 유용합니다. MQL5 위자드는 미리 준비된 EA를 생성할 수 있도록 도와주는 기능입니다. 여러분의 트레이딩 아이디어를 빠르게 확인하고 싶다면, 자신만의 트레이딩 신호 클래스를 만들어보세요. 이 클래스의 구조와 예시는 MQL5 위자드: 트레이딩 신호 모듈 생성 방법에서 확인할 수 있습니다. 1. Bullish Harami 및 Bearish Harami 패턴 이해하기 1.1. Bullish Harami Bullish Harami 패턴은 하락 추세에서 큰 캔들이 작은 캔들로 이어지는 형상입니다. 두 번째 캔들의 몸체가 첫 번째 캔들의 몸체 내에 위치하게 됩니다. 이 패턴은 하락 추세가 반전될 수 있음을 시사하며, 롱 포지션에 진입하기에 좋은 시점임을 나타냅니다. 두 번째 캔들은 갭업으로 시작하는 것이 일반적입니다. Fig. 1. Bullish Harami 캔들 패턴 Bullish Harami 패턴 인식은 CheckPatternBullishHarami() 메서드에서 구현됩니다: //+------------------------------------------------------------------+ //| Bullish Harami 패턴 인식 함수 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishHarami() &nbsp;&nbsp;{ //--- Bullish Harami &nbsp;&nbsp; if((Close(1)&gt;Open(1)) &amp;&amp; // 마지막 캔들이 상승 캔들 &nbsp;&nbsp;&nbsp;&nbsp; ((Open(2)-Close(2)&gt;AvgBody(1)) &amp;&amp; // 이전 캔들이 하락 캔들 &nbsp;&nbsp;&nbsp;&nbsp; ((Close(1)&lt;Open(2)) &amp;&amp; // 상승 캔들의 종가가 하락 캔들의 시가보다 낮음 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)&gt;Close(2)) &amp;&amp; // 상승 캔들의 시가가 하락 캔들의 종가보다 높음 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(MidPoint(2)&lt;CloseAvg(2))) // 하락 추세 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} 이 메서드는 Bullish Harami 패턴 형성을 체크하는 데 사용됩니다. 1.2. Bearish Harami Bearish Harami 패턴은 상승 추세에서 큰 캔들이 작은 캔들로 이어지는 형상입니다. 이 패턴은 상승 추세가 반전될 수 있음을 시사하며, 숏 포지션에 진입하기에 좋은 시점입니다. 두 번째 캔들은 갭다운으로 시작하는 것이 일반적입니다. Fig. 2. Bearish Harami 캔들 패턴 Bearish Harami 패턴 인식은 CheckPatternBearishHarami() 메서드에서 구현됩니다: //+------------------------------------------------------------------+ //| Bearish Harami 패턴 인식 함수 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishHarami() &nbsp;&nbsp;{ //--- Bearish Harami &nbsp;&nbsp; if((Close(1)&lt;Open(1)) &amp;&amp; // 마지막 캔들이 하락 캔들 &nbsp;&nbsp;&nbsp;&nbsp; ((Close(2)-Open(2)&gt;AvgBody(1)) &amp;&amp; // 이전 캔들이 상승 캔들 &nbsp;&nbsp;&nbsp;&nbsp; ((Close(1)&gt;Open(2)) &amp;&amp; // 하락 캔들의 종가가 상승 캔들의 시가보다 높음 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)&lt;Close(2))) &amp;&amp; // 하락 캔들의 시가가 상승 캔들의 종가보다 낮음 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(MidPoint(2)&gt;CloseAvg(2))) // 상승 추세 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} 이 메서드는 Bearish Harami 패턴 형성을 체크하는 데 사용됩니다. 2. RSI 지표로 확인하는 트레이딩 신호 Bullish Harami 및 Bearish Harami 패턴으로 생성된 트레이딩 신호는 반드시 RSI 지표로 확인되어야 합니다. RSI 값이 각각 롱 포지션의 경우 40, 숏 포지션의 경우 60을 기준으로 설정되어야 합니다. 포지션을 청산하는 방법은 다음과 같습니다: RSI가 반대의 기준 수준(롱 포지션의 경우 70, 숏 포지션의 경우 30)에 도달했을 때 역방향 신호가 확인되지 않았을 때 (RSI가 30에 도달했을 때 롱 포지션, 70에 도달했을 때 숏 포지션) Fig. 3. Bullish Harami 패턴, RSI 지표로 확인됨 int CBH_BH_RSI::LongCondition() - 롱 포지션을 열기 위한 조건을 체크하고, 숏 포지션을 청산할 때 사용 (결과는 80); int CBH_BH_RSI::ShortCondition() - 숏 포지션을 열기 위한 조건을 체크하고, 롱 포지션을 청산할 때 사용 (결과는 40). 2.1. 롱 포지션 열기 및 숏 포지션 청산하기 Bullish Harami 패턴이 RSI 지표로 확인되어야 합니다: RSI(1) &lt; 40 (마지막 바의 RSI 값은 40보다 작아야 합니다). RSI 지표가 상향으로 70 또는 30의 기준 수준을 넘어설 때 숏 포지션을 청산해야 합니다. //+------------------------------------------------------------------+ //| 시장 진입 및 퇴출 조건 검사 | //+------------------------------------------------------------------+ int CBH_BH_RSI::LongCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; &nbsp;&nbsp; //--- 롱 포지션을 열기 위한 조건 체크 &nbsp;&nbsp;if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) &amp;&amp; (RSI(1)&lt;40)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; //--- 숏 포지션 청산 조건 체크 &nbsp;&nbsp;if(((RSI(1)&gt;30) &amp;&amp; (RSI(2)&lt;30)) || ((RSI(1)&gt;70) &amp;&amp; (RSI(2)&lt;70))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; &nbsp;&nbsp; //--- 결과 반환 &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.2. 숏 포지션 열기 및 롱 포지션 청산하기 Bearish Harami 패턴이 RSI 지표로 확인되어야 합니다: RSI(1) &gt; 60 (마지막 바의 RSI 값은 60보다 커야 합니다). RSI 지표가 하향으로 70 또는 30의 기준 수준을 넘어갈 때 롱 포지션을 청산해야 합니다. //+------------------------------------------------------------------+ //| 시장 진입 및 퇴출 조건 검사 | //+------------------------------------------------------------------+ int CBH_BH_RSI::ShortCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; &nbsp;&nbsp; //--- 숏 포지션을 열기 위한 조건 체크 &nbsp;&nbsp;if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) &amp;&amp; (RSI(1)&gt;60)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; //--- 롱 포지션 청산 조건 체크 &nbsp;&nbsp;if(((RSI(1)&lt;70) &amp;&amp; (RSI(2)&gt;70)) || ((RSI(1)&lt;30) &amp;&amp; (RSI(2)&gt;30))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; &nbsp;&nbsp; //--- 결과 반환 &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.3. MQL5 위자드를 사용한 Expert Advisor 생성하기 CBH_BH_RSI 클래스는 표준 라이브러리 클래스에 포함되어 있지 않으므로, acml_rsi.mqh 파일을 다운로드하여 client_terminal_data\MQL5\Include\Expert\Signal\MySignals에 저장해야 합니다. acandlepatterns.mqh 파일도 같은 방식으로 처리해야 하며, 이후 MetaEditor를 재시작하면 MQL5 위자드에서 사용할 수 있습니다. EA를 생성하기 위해 MQL5 위자드를 실행합니다: Fig. 4. MQL5 위자드 실행 EA의 이름을 지정합니다: Fig. 5. EA 일반 속성 그 다음, 사용할 트레이딩 신호 모듈을 선택합니다. Fig. 6. EA 신호 속성 이번 경우에는 하나의 트레이딩 신호 모듈만 사용할 것입니다."RSI로 확인된 Bullish Harami/Bearish Harami 기반 신호" 모듈을 추가합니다: Fig. 7. EA 신호 모듈 추가 모듈이 추가되었습니다: Fig. 8. EA 신호 모듈 추가 완료 트레일링 속성은 아무것도 사용하지 않도록 설정할 수 있습니다: Fig. 9. EA 트레일링 속성 자금 관리 속성은 고정된 거래량으로 거래하도록 설정합니다: Fig. 10. EA 자금 관리 속성 "완료" 버튼을 누르면 생성된 EA 코드가 Expert_ABH_BH_RSI.mq5로 저장됩니다. 이 파일은 terminal_data_folder\MQL5\Experts\에 위치합니다. 생성된 EA의 기본 입력 매개변수는 다음과 같습니다: //--- 기본 신호 입력 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 위자드에 의해 생성된 EA는 트레이딩 신호 모듈에서 "투표"를 사용하여 포지션을 열고 닫습니다. 메인 모듈의 투표 결과도 사용되지만, LongCondition() 및 ShortCondition() 메서드는 항상 0을 반환합니다. 메인 모듈의 투표 결과는 "투표" 평균화에 사용됩니다. 따라서, 두 개의 모듈이 있을 경우 임계값을 설정할 때 이 점을 고려해야 합니다. ThresholdOpen과 ThresholdClose는 각각 40=(0+80)/2, 20=(0+40)/2로 설정해야 합니다. Signal_StopLevel 및 Signal_TakeLevel 입력 매개변수 값이 0으로 설정되면, 포지션은 조건이 충족될 때만 청산됩니다. 2.4. 히스토리 백테스팅 결과 Expert Advisor의 히스토리 데이터에 대한 백테스팅 결과를 살펴보겠습니다 (EURUSD H1, 테스트 기간: 2010.01.01-2011.03.11, PeriodRSI=37, MA_period=7). EA 생성 시 고정 볼륨(Trading Fixed Lot, 0.1)을 사용하였으며, 트레일링 스탑 알고리즘은 사용하지 않았습니다 (트레일링 사용하지 않음). Fig. 11. Bullish Harami/Bearish Harami + RSI 기반 EA 테스트 결과 최적의 입력 매개변수 세트를 찾기 위해서는 MetaTrader 5 클라이언트 터미널의 전략 테스터를 활용하시기 바랍니다. MQL5 위자드로 생성된 EA의 코드는 expert_aml_rsi.mq5에 첨부되어 있습니다.

2011.03.17
MQL5 위자드로 Bullish Harami/Bearish Harami 신호 생성하기
MetaTrader5
MQL5 위자드로 Bullish Harami/Bearish Harami 신호 생성하기

MQL5 위자드는 여러분이 MetaTrader 5에서 사용할 준비가 된 EA(Expert Advisor)를 쉽게 생성할 수 있도록 도와줍니다. 이 툴을 활용하면 여러분의 트레이드 아이디어를 빠르게 검증할 수 있습니다. 여러분만의 거래 신호 클래스를 만들기만 하면 됩니다. 클래스의 구조와 예제는 MQL5 위자드: 거래 신호 모듈 생성 방법에서 확인하실 수 있습니다. 거래 신호 클래스는 CExpertSignal에서 파생됩니다. 이후에는 LongCondition() 및 ShortCondition() 가상 메소드를 여러분의 메소드로 오버라이드해야 합니다. 러시아어로 된 책 "최고 트레이더의 전략들"에서는 여러 거래 전략을 다루고 있습니다. 본 포스트에서는 스토캐스틱, CCI, MFI, RSI와 같은 오실레이터로 확인된 반전 캔들 패턴에 초점을 맞추겠습니다. 가장 좋은 방법은 캔들 패턴의 형성을 확인하기 위해 CExpertSignal에서 파생된 별도의 클래스를 만드는 것입니다. 캔들 패턴에서 생성된 거래 신호를 확인하기 위해 CCandlePattern에서 파생된 클래스를 작성하고 필요한 기능(예: 오실레이터로 확인)을 추가하면 됩니다. 이번 포스트에서는 MFI(시장 용이 지수) 지표로 확인된 "Bullish Harami" 및 "Bearish Harami" 반전 캔들 패턴을 기반으로 한 신호에 대해 다루겠습니다. 이 거래 신호 모듈은 CCandlePattern 클래스를 기반으로 하며, 캔들 패턴을 사용하여 거래 신호를 생성하는 간단한 예입니다. 1. Bullish Harami 및 Bearish Harami 반전 캔들 패턴 1.1. Bullish Harami Bullish Harami 반전 패턴은 하락 추세에서 큰 캔들 뒤에 더 작은 캔들이 나타나는 형태로, 작은 캔들의 몸체는 큰 캔들의 몸체 내에 위치합니다. 이 패턴은 하락 추세가 반전될 수 있음을 나타내며, 롱 포지션에 진입하기 좋은 시점임을 알립니다. 두 번째 캔들은 갭 업으로 열립니다. 두 번째(흰색) 캔들이 작을수록 반전 가능성이 높아집니다. Fig. 1. Bullish Harami 캔들 패턴 Bullish Harami 패턴의 인식은 CCandlePattern 클래스의 CheckPatternBullishHarami() 메소드에서 구현됩니다: //+------------------------------------------------------------------+ //| Bullish Harami 캔들 패턴의 형성을 확인합니다. | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishHarami() &nbsp;&nbsp;{ //--- Bullish Harami &nbsp;&nbsp; if((Close(1)&gt;Open(1))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; // 마지막 바가 강세 (흰색) &nbsp;&nbsp;&nbsp;&nbsp; ((Open(2)-Close(2)&gt;AvgBody(1))&nbsp;&nbsp;&amp;&amp; // 이전 캔들은 약세이며 몸체가 평균보다 큼 (긴 검은색) &nbsp;&nbsp;&nbsp;&nbsp; ((Close(1)&lt;Open(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; // 강세 캔들의 종가가 약세 캔들의 시가보다 낮음 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)&gt;Close(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; // 강세 캔들의 시가가 약세 캔들의 종가보다 높음 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(MidPoint(2)&lt;CloseAvg(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 하락 추세 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) 메소드는 Bullish Harami 캔들 패턴의 형성을 확인하는 데 사용됩니다. 1.2. Bearish Harami Bearish Harami 반전 패턴은 상승 추세에서 큰 캔들 뒤에 더 작은 캔들이 나타나는 형태로, 작은 캔들의 몸체는 큰 캔들의 몸체 내에 위치합니다. 이 패턴은 상승 추세가 반전될 수 있음을 나타내며, 숏 포지션에 진입하기 좋은 시점임을 알립니다. 두 번째 캔들은 갭 다운으로 열립니다. 두 번째(검은색) 캔들이 작을수록 반전 가능성이 높아집니다. Fig. 2. Bearish Harami 캔들 패턴 Bearish Harami 패턴의 인식은 CCandlePattern 클래스의 CheckPatternBearishHarami() 메소드에서 구현됩니다: //+------------------------------------------------------------------+ //| Bearish Harami 캔들 패턴의 형성을 확인합니다. | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishHarami() &nbsp;&nbsp;{ //--- Bearish Harami &nbsp;&nbsp; if((Close(1)&lt;Open(1))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; // 마지막 바가 약세 (검은색) &nbsp;&nbsp;&nbsp;&nbsp; ((Close(2)-Open(2)&gt;AvgBody(1))&nbsp;&nbsp;&amp;&amp; // 이전 캔들은 강세이며 몸체가 평균보다 큼 (긴 흰색) &nbsp;&nbsp;&nbsp;&nbsp; ((Close(1)&gt;Open(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; // 약세 캔들의 종가가 강세 캔들의 시가보다 높음 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)&lt;Close(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; // 약세 캔들의 시가가 강세 캔들의 종가보다 낮음 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(MidPoint(2)&gt;CloseAvg(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 상승 추세 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) 메소드는 Bearish Harami 캔들 패턴의 형성을 확인하는 데 사용됩니다. 2. MFI 지표로 확인된 거래 신호 롱 또는 숏 포지션을 열기 위한 거래 신호는 MFI 지표로 확인되어야 합니다. MFI 지표의 값은 롱 포지션의 경우 40 미만, 숏 포지션의 경우 60 초과여야 합니다. 열린 포지션의 종료는 MFI 지표의 값에 따라 결정됩니다. 이 경우는 두 가지 경우로 나뉩니다: MFI가 반대의 기준 수준(롱 포지션의 경우 70, 숏 포지션의 경우 30)에 도달했을 때 반전 신호가 확인되지 않았을 때(MFI 지표가 다음 수준에 도달할 때: 롱 포지션의 경우 30, 숏 포지션의 경우 70) Fig. 3. Bullish Harami 패턴, MFI 지표로 확인됨 int CBH_BH_MFI::LongCondition() - 롱 포지션 열기 조건 확인 (80 반환) 및 숏 포지션 종료 조건 확인 (40 반환); int CBH_BH_MFI::ShortCondition() - 숏 포지션 열기 조건 확인 (80 반환) 및 롱 포지션 종료 조건 확인 (40 반환). 2.1. 롱 포지션 열기/숏 포지션 종료 Bullish Harami 패턴의 형성은 MFI 지표로 확인되어야 합니다. MFI(1) < 40 (마지막 완성 바의 MFI 값은 40 미만이어야 함). 숏 포지션은 MFI 지표가 기준 수준(70 또는 30)을 상향 돌파했을 때 종료해야 합니다. //+------------------------------------------------------------------+ //| 시장 진입 및 퇴출 조건 확인 | //| 1) 시장 진입 (롱 포지션 열기, result=80) | //| 2) 시장 퇴출 (숏 포지션 종료, result=40) | //+------------------------------------------------------------------+ int CBH_BH_MFI::LongCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; //--- idx는 EA 작업 모드를 결정하는 데 사용될 수 있습니다 //--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건 확인 //--- idx=1 - 이 경우 EA는 뉴스 바에서만 거래 조건 확인 &nbsp;&nbsp; int idx&nbsp;&nbsp; =StartIndex(); //--- 롱 포지션 열기 조건 확인 //--- Bullish Harami 패턴 형성 및 MFI < 40 &nbsp;&nbsp;if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) &amp;&amp; (MFI(1)&lt;40)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; //--- 숏 포지션 종료 조건 확인 //--- 과매수/과매도 수준의 신호선 교차 (상향 30, 상향 70) &nbsp;&nbsp;if(((MFI(1)&gt;30) &amp;&amp; (MFI(2)&lt;30)) || ((MFI(1)&gt;70) &amp;&amp; (MFI(2)&lt;70))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; //--- 결과 반환 &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.2. 숏 포지션 열기/롱 포지션 종료 Bearish Harami 패턴의 형성은 MFI 지표로 확인되어야 합니다. MFI(1) > 60 (마지막 완성 바의 MFI 값은 60 초과여야 함). 롱 포지션은 MFI 지표가 기준 수준(70 또는 30)을 상향 돌파했을 때 종료해야 합니다. //+------------------------------------------------------------------+ //| 시장 진입 및 퇴출 조건 확인 | //| 1) 시장 진입 (숏 포지션 열기, result=80) | //| 2) 시장 퇴출 (롱 포지션 종료, result=40) | //+------------------------------------------------------------------+ int CBH_BH_MFI::ShortCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; //--- idx는 EA 작업 모드를 결정하는 데 사용될 수 있습니다 //--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건 확인 //--- idx=1 - 이 경우 EA는 뉴스 바에서만 거래 조건 확인 &nbsp;&nbsp; int idx&nbsp;&nbsp; =StartIndex(); //--- 숏 포지션 열기 조건 확인 //--- Bearish Harami 패턴 형성 및 MFI > 60 &nbsp;&nbsp;if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) &amp;&amp; (MFI(1)&gt;60)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; //--- 롱 포지션 종료 조건 확인 //--- 신호선 교차의 과매수/과매도 수준 (상향 70, 하향 30) &nbsp;&nbsp; if(((MFI(1)&gt;70) &amp;&amp; (MFI(2)&lt;70)) || ((MFI(1)&lt;30) &amp;&amp; (MFI(2)&gt;30))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; //--- 결과 반환 &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.3. MQL5 위자드를 사용한 Expert Advisor 생성하기 CBH_BH_MFI 클래스는 표준 라이브러리 클래스에 포함되어 있지 않으므로 사용하려면 abh_bh_mfi.mqh 파일을 다운로드하여 client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals에 저장해야 합니다. acandlepatterns.mqh 파일도 동일하게 수행해야 합니다. MetaEditor를 재시작한 후 MQL5 위자드에서 사용할 수 있습니다. Expert Advisor를 생성하려면 MQL5 위자드를 실행하세요: Fig. 4. MQL5 위자드를 사용하여 Expert Advisor 생성하기 Expert Advisor의 이름을 정해줍니다: Fig. 5. Expert Advisor의 일반 속성 다음으로 사용될 거래 신호 모듈을 선택해야 합니다. Fig. 6. Expert Advisor의 신호 속성 우리의 경우 거래 신호 모듈은 하나만 사용합니다. "Bullish Harami/Bearish Harami, MFI로 확인된 신호" 거래 신호 모듈 추가: Fig. 7. Expert Advisor의 신호 속성 거래 신호 모듈 추가됨: Fig. 8. Expert Advisor의 신호 속성 원하는 트레일링 속성을 선택할 수 있지만, 우리는 "트레일링 스톱 사용 안 함"을 사용할 것입니다: Fig. 9. Expert Advisor의 트레일링 속성 자금 관리 속성과 관련하여 우리는 "고정 거래량으로 거래"를 사용할 것입니다: Fig. 10. Expert Advisor의 자금 관리 속성 "완료" 버튼을 눌러 생성된 Expert Advisor의 코드를 받습니다. 이 코드는 Expert_ABH_BH_MFI.mq5로 terminal_data_folder\MQL5\Experts\에 저장됩니다. 생성된 Expert Advisor의 기본 입력 매개변수는 다음과 같습니다: //--- 주요 신호에 대한 입력 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =10;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 열기 신호 임계값 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=10;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 종료 신호 임계값 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 거래를 실행할 가격 수준 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp;&nbsp; // 손실 수준 (포인트 단위) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp; // 이익 수준 (포인트 단위) 다음과 같이 변경해야 합니다: //--- 주요 신호에 대한 입력 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =40;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 열기 신호 임계값 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=20;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 종료 신호 임계값 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 거래를 실행할 가격 수준 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0;&nbsp;&nbsp;&nbsp;&nbsp;// 손실 수준 (포인트 단위) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// 이익 수준 (포인트 단위) Signal_ThresholdOpen/Signal_ThresholdClose 입력 매개변수는 포지션 열기 및 종료를 위한 임계값 수준을 지정할 수 있습니다. LongCondition() 및 ShortCondition() 메소드의 코드 내에서 고정된 임계값이 지정되었습니다: 포지션 열기: 80; 포지션 종료: 40. MQL5 위자드에 의해 생성된 Expert Advisor는 거래 신호 모듈의 "투표"를 사용하여 포지션을 열고 종료합니다. 메인 모듈의 투표(모든 추가된 모듈을 포함하는 컨테이너로서)도 사용되지만, 그 LongCondition() 및 ShortCondition() 메소드는 항상 0을 반환합니다. 메인 모듈의 투표 결과도 "투표" 평균화에 사용됩니다. 우리 경우에는 메인 모듈 + 1 모듈의 거래 신호가 존재하므로 임계값 설정 시 이 사실을 고려해야 합니다. 이로 인해 ThresholdOpen과 ThresholdClose는 각각 40=(0+80)/2 및 20=(0+40)/2로 설정해야 합니다. Signal_StopLevel 및 Signal_TakeLevel 입력 매개변수의 값이 0으로 설정되면, 포지션은 종료 조건이 참일 때만 종료됩니다. 2.4. 백테스팅 결과 Expert Advisor의 백테스팅을 역사적 데이터(EURUSD H1, 테스트 기간: 2010.01.01-2011.03.16, PeriodMFI=37, MA_period=11)로 살펴보겠습니다. Expert Advisor를 생성할 때 고정 볼륨(고정 로트 거래, 0.1)을 사용하였으며, 트레일링 스톱 알고리즘은 사용되지 않았습니다 (트레일링 사용 안 함). Fig. 11. Bullish Harami/Bearish Harami + MFI 기반 Expert Advisor 테스트 결과 가장 좋은 입력 매개변수 조합은 전략 테스터를 통해 찾을 수 있습니다. MQL5 위자드에 의해 생성된 Expert Advisor의 코드는 expert_abh_bh_mfi.mq5에 첨부되어 있습니다.

2011.03.17
MQL5 위자드로 Bullish Harami 및 Bearish Harami 기반 거래 신호 생성하기
MetaTrader5
MQL5 위자드로 Bullish Harami 및 Bearish Harami 기반 거래 신호 생성하기

안녕하세요, 트레이더 여러분! 오늘은 MQL5 위자드를 활용하여 Bullish Harami와 Bearish Harami 패턴을 기반으로 하는 거래 신호를 생성하는 방법에 대해 알아보겠습니다. 이 과정은 메타트레이더 5에서 자동 거래를 구현하는 데 큰 도움이 될 것입니다. MQL5 위자드는 클라이언트 터미널과 함께 제공되는 표준 라이브러리 클래스를 기반으로 준비된 전문가 고문(EA)을 생성할 수 있게 해줍니다. 여러분의 거래 아이디어를 신속하게 확인하는 데 필요한 것은 자신만의 거래 신호 클래스를 만드는 것입니다. 이 클래스의 구조와 예시는 MQL5 위자드: 거래 신호 모듈 생성 방법에서 확인할 수 있습니다. 1. Bullish Harami와 Bearish Harami 패턴 1.1. Bullish Harami Bullish Harami 패턴은 하락 추세에서 큰 캔들이 작은 캔들로 이어질 때 형성됩니다. 이 작은 캔들의 몸체는 큰 캔들의 몸체 내에 위치하게 됩니다. 이 패턴은 하락 추세가 반전될 가능성이 있음을 나타내며, 롱 포지션 진입의 좋은 시점임을 알려줍니다. 두 번째 캔들은 갭 업으로 열립니다. 두 번째(흰색) 캔들이 작을수록 반전 가능성이 높아집니다. Fig. 1. Bullish Harami 캔들 패턴 Bullish Harami 패턴의 인식은 CheckPatternBullishHarami() 메소드에서 구현됩니다. //+------------------------------------------------------------------+ //| Bullish Harami 캔들 패턴 형성 확인 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishHarami() { &nbsp;&nbsp;//--- Bullish Harami &nbsp;&nbsp; if((Close(1)&gt;Open(1)) && ... ) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(true); &nbsp;&nbsp;return(false); } 1.2. Bearish Harami Bearish Harami 패턴은 상승 추세에서 큰 캔들이 작은 캔들로 이어질 때 형성됩니다. 이 패턴은 상승 추세가 반전될 가능성이 있음을 나타내며, 숏 포지션 진입의 좋은 시점임을 알려줍니다. 두 번째 캔들은 갭 다운으로 열립니다. 두 번째(검은색) 캔들이 작을수록 반전 가능성이 높아집니다. Fig. 2. Bearish Harami 캔들 패턴 Bearish Harami 패턴의 인식은 CheckPatternBearishHarami() 메소드에서 구현됩니다. //+------------------------------------------------------------------+ //| Bearish Harami 캔들 패턴 형성 확인 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishHarami() { &nbsp;&nbsp;//--- Bearish Harami &nbsp;&nbsp; if((Close(1)&lt;Open(1)) && ... ) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(true); &nbsp;&nbsp;return(false); } 2. CCI 지표로 확인된 거래 신호 거래 신호는 CCI 지표로 확인되어야 합니다. CCI 값이 -50(롱 포지션) 또는 50(숏 포지션) 이상의 임계 수준을 초과해야 합니다. 열려 있는 포지션의 종료는 CCI 값에 따라 달라집니다. 두 가지 경우에 해당됩니다: CCI 선이 반대 임계 수준에 도달했을 때 (롱 포지션의 경우 80, 숏 포지션의 경우 -80) 역 신호가 확인되지 않았을 때 (CCI가 다음 수준에 도달했을 때: -80(롱 포지션) 또는 80(숏 포지션)) Fig. 3. Bullish Harami 패턴, CCI 지표로 확인 int CBH_BH_CCI::LongCondition() - 롱 포지션 열기 및 숏 포지션 닫기 조건 확인 (80 반환) int CBH_BH_CCI::ShortCondition() - 숏 포지션 열기 및 롱 포지션 닫기 조건 확인 (80 반환) 2.1. 롱 포지션 열기/숏 포지션 닫기 Bullish Harami 패턴은 CCI 지표로 확인되어야 합니다: CCI(1)&lt;-50 (마지막 캔들의 CCI 값은 -50보다 작아야 함). 숏 포지션은 CCI 지표가 -80의 임계 수준을 상향 돌파하거나 80의 임계 수준을 하향 돌파할 때 닫아야 합니다. //+------------------------------------------------------------------+ //| 시장 진입 조건 확인 | //| 1) 롱 포지션 열기 (결과=80) | //| 2) 숏 포지션 닫기 (결과=40) | //+------------------------------------------------------------------+ int CBH_BH_CCI::LongCondition() { &nbsp;&nbsp; int result=0; &nbsp;&nbsp; if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (CCI(1)&lt;-50)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; if(((CCI(1)&gt;-80) && (CCI(2)&lt;-80)) || ((CCI(1)&lt;80) && (CCI(2)&gt;80))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; &nbsp;&nbsp; return(result); } 2.2. 숏 포지션 열기/롱 포지션 닫기 Bearish Harami 패턴은 CCI 지표로 확인되어야 합니다: CCI(1)&gt;50 (마지막 캔들의 CCI 값은 50보다 커야 함). 롱 포지션은 CCI 지표가 -80 또는 80 수준을 하향 돌파할 때 닫아야 합니다. //+------------------------------------------------------------------+ //| 시장 진입 조건 확인 | //| 1) 숏 포지션 열기 (결과=80) | //| 2) 롱 포지션 닫기 (결과=40) | //+------------------------------------------------------------------+ int CBH_BH_CCI::ShortCondition() { &nbsp;&nbsp; int result=0; &nbsp;&nbsp; if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (CCI(1)&gt;50)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; if(((CCI(1)&lt;80) && (CCI(2)&gt;80)) || ((CCI(1)&lt;-80) && (CCI(2)&gt;-80))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; &nbsp;&nbsp; return(result); } 2.3. MQL5 위자드를 이용한 전문가 고문 생성 CBH_BH_CCI 클래스는 표준 라이브러리 클래스에 포함되어 있지 않으므로, 이 파일을 다운로드하여 client_terminal_data older\MQL5\Include\Expert\Signal\MySignals에 저장해야 합니다. 캔들 패턴 파일도 마찬가지로 저장해야 합니다. 메타에디터를 재시작한 후 MQL5 위자드에서 사용할 수 있습니다. 전문가 고문을 생성하려면 MQL5 위자드를 실행합니다: Fig. 4. MQL5 위자드를 사용한 전문가 고문 생성 전문가 고문의 이름을 지정합니다: Fig. 5. 전문가 고문의 일반 속성 그 다음 사용될 거래 신호 모듈을 선택해야 합니다. Fig. 6. 전문가 고문의 신호 속성 이번 경우에는 하나의 거래 신호 모듈만 사용합니다."Bullish Harami/Bearish Harami 확인된 CCI 기반 신호" 모듈을 추가합니다: Fig. 7. 전문가 고문의 신호 속성 거래 신호 모듈이 추가되었습니다: Fig. 8. 전문가 고문의 신호 속성 임의의 트레일링 속성을 선택할 수 있지만, 우리는 "트레일링 스탑 사용 안 함"을 사용합니다: Fig. 9. 전문가 고문의 트레일링 속성 자금 관리 속성에 관해서는, "고정 거래량으로 거래"를 사용합니다: Fig. 10. 전문가 고문의 자금 관리 속성 "완료" 버튼을 누르면 생성된 전문가 고문의 코드가 Expert_ABH_BH_CCI.mq5에 저장되고, terminal_data_folder\MQL5\Experts\에 위치하게 됩니다. 생성된 전문가 고문의 기본 입력 매개변수는 다음과 같습니다: //--- 메인 신호를 위한 입력 input int Signal_ThresholdOpen =10; // 롱 포지션을 열기 위한 신호 임계값 [0...100] input int Signal_ThresholdClose =10; // 숏 포지션을 닫기 위한 신호 임계값 [0...100] 이 값들은 다음과 같이 변경되어야 합니다: //--- 메인 신호를 위한 입력 input int Signal_ThresholdOpen =40; // 롱 포지션을 열기 위한 신호 임계값 [0...100] input int Signal_ThresholdClose =20; // 숏 포지션을 닫기 위한 신호 임계값 [0...100] 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, 테스트 기간: 2010.01.01-2011.03.16, PeriodCCI=11, MA_period=5). 전문가 고문 생성 시 고정 볼륨(고정 로트 거래, 0.1)을 사용했으며, 트레일링 스탑 알고리즘은 사용하지 않았습니다 (트레일링 사용 안 함). Fig. 11. 전문가 고문의 테스트 결과 최고의 입력 매개변수 세트는 전략 테스터를 통해 찾아볼 수 있습니다. 생성된 전문가 고문의 코드는 expert_abh_bh_cci.mq5로 첨부되어 있습니다.

2011.03.17
MQL5 위자드를 활용한 Bullish Harami와 Bearish Harami 신호 생성하기
MetaTrader5
MQL5 위자드를 활용한 Bullish Harami와 Bearish Harami 신호 생성하기

안녕하세요, 트레이더 여러분! 오늘은 MQL5 위자드를 사용하여 Bullish Harami 및 Bearish Harami 캔들 패턴을 기반으로 하는 거래 신호를 생성하는 방법에 대해 알아보겠습니다. MQL5 위자드는 메타트레이더 5에서 제공하는 표준 라이브러리 클래스를 활용하여 즉석에서 전문가 어드바이저(EA)를 만들 수 있게 해줍니다. 거래 아이디어를 빠르게 확인할 수 있도록 거래 신호 클래스를 만들면 됩니다. 이 클래스의 구조와 예제는 MQL5 위자드: 거래 신호 모듈 만들기에서 확인하실 수 있습니다. 기본적인 아이디어는 거래 신호 클래스가 CExpertSignal로부터 파생되고, 이 클래스를 기반으로 LongCondition()와 ShortCondition() 메소드를 오버라이드하여 본인만의 메소드를 작성하는 것입니다. 우리는 Stochastic 인디케이터로 확인된 Bullish Harami와 Bearish Harami 반전 캔들 패턴을 기반으로 한 신호를 생성할 것입니다. 거래 신호 모듈은 CCandlePattern 클래스를 기반으로 하며, 캔들 패턴을 이용한 거래 신호 생성을 위한 간단한 예제입니다. 1. Bullish Harami와 Bearish Harami 반전 캔들 패턴 1.1. Bullish Harami Bullish Harami 패턴은 하락 추세에서 대형 캔들이 나타난 후 그 몸통이 대형 캔들의 몸통 범위 안에 있는 작은 캔들이 형성될 때 발생합니다. 이 패턴은 하락 추세가 반전될 수 있음을 나타내며, 매수 포지션에 진입하기 좋은 시점임을 신호합니다. 두 번째 캔들은 갭 업으로 시작됩니다. 작은 두 번째(흰색) 캔들이 작을수록 반전 가능성이 높아집니다. Fig. 1. Bullish Harami 캔들 패턴 Bullish Harami 패턴의 인식은 CheckPatternBullishHarami() 메소드에서 구현됩니다: //+------------------------------------------------------------------+ //| Bullish Harami 캔들 패턴 확인 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishHarami() &nbsp;&nbsp;{ //--- Bullish Harami &nbsp;&nbsp;&nbsp;&nbsp;if((Close(1)&gt;Open(1))&nbsp;&nbsp;&amp;&amp; // 마지막 캔들이 상승 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((Open(2)-Close(2)&gt;AvgBody(1))&nbsp;&nbsp;&amp;&amp; // 이전 캔들이 하락, 몸통이 평균보다 큼 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((Close(1)&lt;Open(2))&nbsp;&nbsp;&amp;&amp; // 상승 캔들의 종가가 하락 캔들의 시가보다 낮음 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Open(1)&gt;Close(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; // 상승 캔들의 시가가 하락 캔들의 종가보다 높음 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (MidPoint(2)&lt;CloseAvg(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 하락 추세 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true; //--- &nbsp;&nbsp;&nbsp;&nbsp;return false; &nbsp;&nbsp;} CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) 메소드를 사용하여 Bullish Harami 캔들 패턴의 형성을 확인할 수 있습니다. 1.2. Bearish Harami Bearish Harami 패턴은 상승 추세에서 대형 캔들이 나타난 후 그 몸통이 대형 캔들의 몸통 범위 안에 있는 작은 캔들이 형성될 때 발생합니다. 이 패턴은 상승 추세가 반전될 수 있음을 나타내며, 매도 포지션에 진입하기 좋은 시점임을 신호합니다. 두 번째 캔들은 갭 다운으로 시작됩니다. 작은 두 번째(검은색) 캔들이 작을수록 반전 가능성이 높아집니다. Fig. 2. Bearish Harami 캔들 패턴 Bearish Harami 패턴의 인식은 CheckPatternBearishHarami() 메소드에서 구현됩니다: //+------------------------------------------------------------------+ //| Bearish Harami 캔들 패턴 확인 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishHarami() &nbsp;&nbsp;{ //--- Bearish Harami &nbsp;&nbsp;&nbsp;&nbsp;if((Close(1)&lt;Open(1))&nbsp;&nbsp;&amp;&amp; // 마지막 캔들이 하락 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((Close(2)-Open(2)&gt;AvgBody(1))&nbsp;&nbsp;&amp;&amp; // 이전 캔들이 상승, 몸통이 평균보다 큼 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((Close(1)&gt;Open(2))&nbsp;&nbsp;&amp;&amp; // 하락 캔들의 종가가 상승 캔들의 시가보다 높음 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Open(1)&lt;Close(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; // 하락 캔들의 시가가 상승 캔들의 종가보다 낮음 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (MidPoint(2)&gt;CloseAvg(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 상승 추세 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true; //--- &nbsp;&nbsp;&nbsp;&nbsp;return false; &nbsp;&nbsp;} CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) 메소드를 사용하여 Bearish Harami 캔들 패턴의 형성을 확인할 수 있습니다. 2. Stochastic 지표로 확인된 거래 신호 매수 또는 매도 포지션을 열기 위한 거래 신호는 Stochastic 오실레이터로 확인해야 합니다. %D 라인은 해당 기준 레벨(30 또는 70)보다 커야/작아야 합니다. 열린 포지션의 종료는 %D 지표의 값에 따라 결정됩니다. 이는 두 가지 경우에서 수행될 수 있습니다: %D 라인이 반대 기준 레벨(매수 포지션의 경우 80, 매도 포지션의 경우 20)에 도달했을 때 반전 신호가 확인되지 않았을 때(%D 라인이 다음 레벨: 매수 포지션의 경우 20, 매도 포지션의 경우 80에 도달했을 때) Figure 3. Stochastic 지표로 확인된 Bearish Harami 패턴 거래 조건의 진입 및 종료 확인은 두 개의 메소드에서 구현됩니다: int CBH_BH_Stoch::LongCondition() - 매수 포지션을 열기 위한 조건을 확인하고(결과=80), 매도 포지션을 종료합니다(결과=40); int CBH_BH_Stoch::ShortCondition() - 매도 포지션을 열기 위한 조건을 확인하고(결과=80), 매수 포지션을 종료합니다(결과=40). 2.1. 매수 포지션 열기 / 매도 포지션 종료 Bullish Harami 패턴의 형성은 Stochastic 지표로 확인해야 합니다: StochSignal(1)&lt;30 (마지막 완료된 바의 Stochastic 지표의 신호선 값은 30 미만이어야 합니다). Stochastic 지표의 신호선이 20 또는 80 레벨을 위로 교차했을 때 매도 포지션을 종료해야 합니다. //+------------------------------------------------------------------+ //| 시장 진입 및 종료 조건 확인 | //| 1) 시장 진입 (매수 포지션 열기, 결과=80) | //| 2) 시장 종료 (매도 포지션 종료, 결과=40) | //+------------------------------------------------------------------+ int CBH_BH_Stoch::LongCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; &nbsp;&nbsp; //--- idx는 전문가 어드바이저의 작업 모드를 결정하는 데 사용될 수 있습니다 &nbsp;&nbsp; int idx&nbsp;&nbsp; =StartIndex(); &nbsp;&nbsp; //--- 매수 포지션 열기 조건 확인 &nbsp;&nbsp; //--- Bullish Harami 패턴 형성과 신호선&lt;30 &nbsp;&nbsp;if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) &amp;&amp; (StochSignal(1)&lt;30)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; //--- 매도 포지션 종료 조건 확인 &nbsp;&nbsp; //--- 신호선이 과매도/과매수 레벨을 교차했을 때 (아래로 20, 위로 80) &nbsp;&nbsp; if((((StochSignal(1)&gt;20) &amp;&amp; (StochSignal(2)&lt;20)) || &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((StochSignal(1)&gt;80) &amp;&amp; (StochSignal(2)&lt;80)))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; &nbsp;&nbsp; //--- 결과 반환 &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.2. 매도 포지션 열기 / 매수 포지션 종료 Bearish Harami 패턴의 형성은 Stochastic 지표로 확인해야 합니다: StochSignal(1)&gt;70 (마지막 완료된 바의 Stochastic 지표의 신호선 값은 70보다 커야 합니다). Stochastic 지표의 신호선이 80 또는 20 레벨을 아래로 교차했을 때 매수 포지션을 종료해야 합니다. //+------------------------------------------------------------------+ //| 시장 진입 및 종료 조건 확인 | //| 1) 시장 진입 (매도 포지션 열기, 결과=80) | //| 2) 시장 종료 (매수 포지션 종료, 결과=40) | //+------------------------------------------------------------------+ int CBH_BH_Stoch::ShortCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; &nbsp;&nbsp; //--- idx는 전문가 어드바이저의 작업 모드를 결정하는 데 사용될 수 있습니다 &nbsp;&nbsp; int idx&nbsp;&nbsp; =StartIndex(); &nbsp;&nbsp; //--- 매도 포지션 열기 조건 확인 &nbsp;&nbsp; //--- Bearish Harami 패턴 형성과 신호선&gt;70 &nbsp;&nbsp;if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) &amp;&amp; (StochSignal(1)&gt;70)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; //--- 매수 포지션 종료 조건 확인 &nbsp;&nbsp; //--- 신호선이 과매도/과매수 레벨을 교차했을 때 (아래로 80, 위로 20) &nbsp;&nbsp; if((((StochSignal(1)&lt;80) &amp;&amp; (StochSignal(2)&gt;80)) || &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((StochSignal(1)&lt;20) &amp;&amp; (StochSignal(2)&gt;20)))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; &nbsp;&nbsp; //--- 결과 반환 &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.3. MQL5 위자드를 사용한 전문가 어드바이저 생성하기 CBH_BH_Stoch 클래스는 표준 라이브러리 클래스에 포함되어 있지 않으므로, 사용하기 위해서는 acbh_bh_stoch.mqh 파일을 다운로드하고 client_terminal_data\MQL5\Include\Expert\Signal\MySignals에 저장해야 합니다. 같은 방식으로 candlepatterns.mqh 파일도 저장합니다. 이후 MetaEditor를 재시작하면 MQL5 위자드에서 사용할 수 있습니다. 전문가 어드바이저를 만들려면 MQL5 위자드를 실행합니다: Fig. 4. MQL5 위자드를 활용한 전문가 어드바이저 생성 전문가 어드바이저의 이름을 지정합니다: Fig. 5. 전문가 어드바이저의 일반 속성 그 다음, 사용될 거래 신호 모듈을 선택해야 합니다. Fig. 6. 전문가 어드바이저의 신호 속성 이번 경우, 우리는 단일 거래 신호 모듈만 사용합니다. Bullish Harami/Bearish Harami에 기반한 신호 모듈 추가: Fig. 7. 전문가 어드바이저의 신호 속성 거래 신호 모듈이 추가되었습니다: Fig. 8. 전문가 어드바이저의 신호 속성 원하는 트레일링 속성을 선택할 수 있지만, 우리는 "트레일링 스탑 사용 안 함"을 사용할 것입니다: Fig. 9. 전문가 어드바이저의 트레일링 속성 자금 관리 속성에 대해서는 "고정 거래량으로 거래"를 사용할 것입니다: Fig. 10. 전문가 어드바이저의 자금 관리 속성 "완료" 버튼을 누르면 생성된 전문가 어드바이저의 코드가 Expert_ABH_BH_Stoch.mq5로 저장됩니다. 이 파일은 terminal_data_folder\MQL5\Experts\에 위치합니다. 생성된 전문가 어드바이저의 기본 입력 매개변수는 다음과 같습니다: //--- 주요 신호의 입력 매개변수 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =10;&nbsp;&nbsp;&nbsp;&nbsp; // 열기 신호 임계값 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=10;&nbsp;&nbsp;&nbsp;&nbsp; // 닫기 신호 임계값 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 거래를 실행할 가격 수준 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp;&nbsp; // 스탑 로스 수준 (포인트 단위) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp; // 테이크 프라핏 수준 (포인트 단위) 이는 다음과 같이 변경되어야 합니다: //--- 주요 신호의 입력 매개변수 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =40;&nbsp;&nbsp;&nbsp;&nbsp; // 열기 신호 임계값 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=20;&nbsp;&nbsp;&nbsp;&nbsp; // 닫기 신호 임계값 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 거래를 실행할 가격 수준 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0;&nbsp;&nbsp;&nbsp;&nbsp;// 스탑 로스 수준 (포인트 단위) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// 테이크 프라핏 수준 (포인트 단위) 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, 테스트 기간: 2010.01.01-2011.03.04, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5)를 이용한 백테스팅 결과를 살펴보겠습니다. 전문가 어드바이저 생성 시 고정 볼륨(고정 로트 거래, 0.1)을 사용하였고, 트레일링 스탑 알고리즘은 사용하지 않았습니다(트레일링 사용 안 함). Fig. 11. 전문가 어드바이저 테스트 결과 최적의 입력 매개변수 세트는 전략 테스터를 통해 찾을 수 있습니다. MQL5 위자드로 생성된 전문가 어드바이저의 코드는 expert_abh_bh_stoch.mq5 파일에 첨부되어 있습니다.

2011.03.16
MQL5 위자드 활용법: RSI 기반의 'Bullish Engulfing/Bearish Engulfing' 신호
MetaTrader5
MQL5 위자드 활용법: RSI 기반의 'Bullish Engulfing/Bearish Engulfing' 신호

안녕하세요, 트레이더 여러분! 오늘은 MQL5 위자드를 활용하여 'Bullish Engulfing'과 'Bearish Engulfing' 패턴을 기반으로 한 거래 신호를 생성하는 방법에 대해 알아보겠습니다. 이 방법은 메타트레이더 5에서 시스템 트레이딩을 구현할 때 유용합니다. MQL5 위자드는 표준 라이브러리와 함께 제공되는 클래스를 기반으로 신호를 생성할 수 있는 기능을 제공합니다. 자신의 거래 아이디어를 빠르게 검증할 수 있는데, 간단하게 거래 신호 클래스를 만들어 주기만 하면 됩니다. 자세한 구조와 예시는 MQL5 위자드: 거래 신호 모듈 생성 방법를 참고하세요. 거래 신호 클래스는 CExpertSignal 클래스를 상속받아 생성되며, 'LongCondition()'과 'ShortCondition()' 메서드를 오버라이드하여 자신만의 조건을 설정해야 합니다. 1. 'Bullish Engulfing'과 'Bearish Engulfing' 1.1. Bullish Engulfing 'Bullish Engulfing' 패턴은 하락 추세에서 작은 검은 캔들이 큰 흰 캔들로 완전히 감싸는 형태로 나타납니다. 작은 캔들의 그림자는 짧고, 큰 캔들의 본체가 이전 날의 캔들을 모두 덮습니다. Fig. 1. Bullish Engulfing 캔들 패턴 'Bullish Engulfing' 패턴의 인식은 CheckPatternBullishEngulfing() 메서드에서 이루어집니다: //+------------------------------------------------------------------+ //| Bullish Engulfing 캔들 패턴 확인 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishEngulfing() { //--- Bullish Engulfing if((Open(2) > Close(2) && (Close(1) - Open(1) > AvgBody(1)) && (Close(1) > Open(2)) && (MidOpenClose(2) < CloseAvg(2)) && (Open(1) < Close(2))) { return true; } return false; } 'Bullish Engulfing' 패턴의 확인은 CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) 메서드를 통해 이루어집니다. 1.2. Bearish Engulfing 'Bearish Engulfing' 패턴은 상승 추세에서 작은 흰 캔들이 큰 검은 캔들로 감싸지는 형태로 나타납니다. 이때도 작은 캔들의 그림자는 짧습니다. Fig. 2. Bearish Engulfing 캔들 패턴 'Bearish Engulfing' 패턴의 인식은 CheckPatternBearishEngulfing() 메서드에서 이루어집니다: //+------------------------------------------------------------------+ //| Bearish Engulfing 캔들 패턴 확인 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishEngulfing() { //--- Bearish Engulfing if((Open(2) < Close(2) && (Open(1) - Close(1) > AvgBody(1)) && (Close(1) < Open(2)) && (MidOpenClose(2) > CloseAvg(2)) && (Open(1) > Close(2))) { return true; } return false; } 'Bearish Engulfing' 패턴의 확인은 CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) 메서드를 통해 이루어집니다. 2. RSI 지표로 확인된 거래 신호 'Bullish Engulfing' 또는 'Bearish Engulfing' 패턴이 생성된 후, 해당 거래 신호는 RSI 지표로 확인해야 합니다. RSI 값은 롱 포지션의 경우 40 이하, 숏 포지션의 경우 60 이상이어야 합니다. 포지션 종료는 RSI 값이 반대의 임계 수준(롱 포지션은 70, 숏 포지션은 30)에 도달했을 때나, 반전 신호가 확인되지 않았을 때 이루어집니다. int CBE_BE_RSI::LongCondition() - 롱 포지션을 열 조건을 확인 (80 반환) 및 숏 포지션 종료 조건 확인 (40 반환); int CBE_BE_RSI::ShortCondition() - 숏 포지션을 열 조건을 확인 (80 반환) 및 롱 포지션 종료 조건 확인 (40 반환). 2.1. 롱 포지션 열기 / 숏 포지션 종료 RSI 지표가 40 이하일 때 'Bullish Engulfing' 패턴이 확인되어야 합니다. RSI 지표가 70 또는 30의 임계 수준을 넘어설 경우, 숏 포지션을 종료해야 합니다. //+------------------------------------------------------------------+ //| 시장 진입 및 종료 조건 확인 | //+------------------------------------------------------------------+ int CBE_BE_RSI::LongCondition() { int result = 0; if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (RSI(1) < 40)) result = 80; if(((RSI(1) > 30) && (RSI(2) < 30)) || ((RSI(1) > 70) && (RSI(2) < 70))) result = 40; return(result); } 2.2. 숏 포지션 열기 / 롱 포지션 종료 RSI 지표가 60 이상일 때 'Bearish Engulfing' 패턴이 확인되어야 합니다. RSI 지표가 30 또는 70의 임계 수준을 넘어설 경우, 롱 포지션을 종료해야 합니다. //+------------------------------------------------------------------+ //| 시장 진입 및 종료 조건 확인 | //+------------------------------------------------------------------+ int CBE_BE_RSI::ShortCondition() { int result = 0; if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (RSI(1) > 60)) result = 80; if(((RSI(1) < 70) && (RSI(2) > 70)) || ((RSI(1) < 30) && (RSI(2) > 30))) result = 40; return(result); } 2.3. MQL5 위자드를 사용한 Expert Advisor 생성하기 CBE_BE_RSI 클래스는 표준 라이브러리에 포함되어 있지 않으므로, acml_rsi.mqh 파일을 다운로드하여 client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals에 저장해야 합니다. acandlepatterns.mqh 파일도 같은 방식으로 저장해야 합니다. 저장 후, 메타에디터를 재시작하면 MQL5 위자드에서 사용할 수 있습니다. Expert Advisor를 생성하려면 MQL5 위자드를 실행하세요: Fig. 4. MQL5 위자드로 Expert Advisor 생성 Expert Advisor의 이름을 지정합니다: Fig. 5. Expert Advisor의 일반 속성 이후 사용되는 거래 신호 모듈을 선택합니다. Fig. 6. Expert Advisor의 신호 속성 이번 경우 거래 신호 모듈을 하나만 사용합니다. RSI로 확인된 Bullish Engulfing/Bearish Engulfing 기반의 신호 모듈을 추가합니다: Fig. 7. Expert Advisor의 신호 속성 신호 모듈이 추가되었습니다: Fig. 8. Expert Advisor의 신호 속성 트레일링 속성을 선택할 수 있지만, 우리는 "트레일링 스탑 미사용"을 선택합니다: Fig. 9. Expert Advisor의 트레일링 속성 자금 관리 속성에 대해서는 "고정 거래량으로 거래"를 선택합니다: Fig. 10. Expert Advisor의 자금 관리 속성 "완료" 버튼을 누르면 생성된 Expert Advisor의 코드가 Expert_ABE_BE_RSI.mq5로 저장됩니다. 이는 terminal_data_folder\MQL5\Experts\에 위치하게 됩니다. 생성된 Expert Advisor의 기본 입력 매개변수는 다음과 같습니다: //--- 거래 신호 입력 매개변수 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 위자드로 생성된 Expert Advisor는 거래 신호 모듈에서

2011.03.10
MQL5 위자드로 Bullish Engulfing 및 Bearish Engulfing 신호 생성하기
MetaTrader5
MQL5 위자드로 Bullish Engulfing 및 Bearish Engulfing 신호 생성하기

안녕하세요, 트레이더 여러분! 오늘은 MQL5 위자드를 사용하여 Bullish Engulfing과 Bearish Engulfing 패턴을 기반으로 한 거래 신호를 생성하는 방법에 대해 알아보겠습니다. 이 과정은 메타트레이더 5에서 매우 유용하게 사용할 수 있으며, 신속하게 거래 아이디어를 검증할 수 있는 좋은 방법입니다. 기본적으로, 거래 신호 클래스는 CExpertSignal을 상속받습니다. 이후에는 LongCondition()과 ShortCondition() 메소드를 오버라이드하여 여러분만의 조건을 추가하면 됩니다. 여기서 참고할 수 있는 책으로는 "전문가의 전략"이 있습니다. 이 책에서는 여러 거래 전략을 다루고 있으며, 우리는 Stochastic, CCI, MFI, RSI와 같은 오실레이터에 의해 확인된 반전 캔들 패턴에 초점을 맞출 것입니다. 1. Bullish Engulfing 및 Bearish Engulfing 패턴 1.1. Bullish Engulfing Bullish Engulfing 패턴은 하락세에서 작은 검은 캔들이 큰 흰 캔들에 의해 완전히 덮일 때 형성됩니다. 작은 캔들의 그림자는 짧아야 하며, 이를 통해 큰 캔들이 전날의 캔들을 모두 덮을 수 있습니다. Fig. 1. Bullish Engulfing 패턴 Bullish Engulfing 패턴의 인식은 CheckPatternBullishEngulfing() 메소드에서 구현됩니다. //+------------------------------------------------------------------+ //| Bullish Engulfing 패턴 확인 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishEngulfing() &nbsp;&nbsp;{ //--- Bullish Engulfing &nbsp;&nbsp; if((Open(2)&gt;Close(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp;&nbsp;&nbsp;// 이전 캔들이 하락세 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)-Open(1)&gt;AvgBody(1))&nbsp;&nbsp;&amp;&amp;&nbsp;&nbsp;// 양봉의 몸통이 평균값보다 큼 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&gt;Open(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp;&nbsp;&nbsp;// 양봉의 종가가 음봉의 시가보다 큼 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(MidOpenClose(2)&lt;CloseAvg(2))&nbsp;&nbsp;&amp;&amp;&nbsp;&nbsp;// 하락세 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)&lt;Close(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 양봉의 시가가 음봉의 종가보다 낮음 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} 1.2. Bearish Engulfing Bearish Engulfing 패턴은 상승세에서 작은 흰 캔들이 큰 검은 캔들에 의해 완전히 덮일 때 형성됩니다. 이 패턴 또한 작은 캔들의 그림자는 짧아야 하며, 큰 캔들이 전날의 캔들을 덮어야 합니다. Fig. 2. Bearish Engulfing 패턴 Bearish Engulfing 패턴의 인식은 CheckPatternBearishEngulfing() 메소드에서 구현됩니다. //+------------------------------------------------------------------+ //| Bearish Engulfing 패턴 확인 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishEngulfing() &nbsp;&nbsp;{ //--- Bearish Engulfing &nbsp;&nbsp; if((Open(2)&lt;Close(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp;&nbsp;&nbsp;// 이전 캔들이 상승세 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)-Close(1)&gt;AvgBody(1)) &amp;&amp;&nbsp;&nbsp;// 음봉의 몸통이 평균값보다 큼 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&lt;Open(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp;&nbsp;&nbsp;// 음봉의 종가가 양봉의 시가보다 낮음 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(MidOpenClose(2)&gt;CloseAvg(2)) &amp;&amp;&nbsp;&nbsp;// 상승세 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)&gt;Close(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 음봉의 시가가 양봉의 종가보다 높음 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} 2. MFI 지표로 확인된 거래 신호 Bullish Engulfing이나 Bearish Engulfing 패턴으로 생성된 거래 신호는 MFI 지표에 의해 확인되어야 합니다. MFI 값이 40 이하일 때 롱 포지션을 열고, 60 이상일 때 숏 포지션을 엽니다. 포지션 종료는 MFI 지표의 값에 따라 결정됩니다. 다음 두 가지 경우에 종료할 수 있습니다: MFI가 반대의 임계 수준(롱 포지션의 경우 70, 숏 포지션의 경우 30)에 도달했을 때 반전 신호가 확인되지 않았을 때(MFI가 30에 도달할 경우 롱 포지션 종료, 70에 도달할 경우 숏 포지션 종료) Fig. 3. MFI 지표에 의한 Bullish Engulfing 패턴 확인 int CBE_BE_MFI::LongCondition() - 롱 포지션을 열기 위한 조건 확인(결과: 80), 숏 포지션 종료(결과: 40); int CBE_BE_MFI::ShortCondition() - 숏 포지션을 열기 위한 조건 확인(결과: 80), 롱 포지션 종료(결과: 40). 2.1. 롱 포지션 열기/숏 포지션 닫기 Bullish Engulfing 패턴이 MFI 지표로 확인되어야 합니다: MFI(1)&lt;40 (마지막 완료된 바의 MFI 값이 40보다 작아야 함). 숏 포지션은 MFI 지표가 임계 수준(70 또는 30)을 상향 돌파했을 때 종료해야 합니다. //+------------------------------------------------------------------+ //| 시장 진입 및 종료 조건 확인 | //+------------------------------------------------------------------+ int CBE_BE_MFI::LongCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; &nbsp;&nbsp; //--- idx는 Expert Advisor 작업 모드를 결정하는 데 사용될 수 있습니다 &nbsp;&nbsp; int idx&nbsp;&nbsp; =StartIndex(); &nbsp;&nbsp; //--- 롱 포지션 열기 위한 조건 확인 &nbsp;&nbsp; //--- Bullish Engulfing 패턴과 MFI&lt;40 &nbsp;&nbsp;if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) &amp;&amp; (MFI(1)&lt;40)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; //--- 숏 포지션 종료 조건 확인 &nbsp;&nbsp; //--- 신호선이 과매수/과매도 수준을 교차하는 경우 &nbsp;&nbsp;if(((MFI(1)&gt;30) &amp;&amp; (MFI(2)&lt;30)) || ((MFI(1)&gt;70) &amp;&amp; (MFI(2)&lt;70))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; &nbsp;&nbsp; //--- 결과 반환 &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.2. 숏 포지션 열기/롱 포지션 닫기 Bearish Engulfing 패턴이 MFI 지표로 확인되어야 합니다: MFI(1)&gt;60 (마지막 완료된 바의 MFI 값이 60보다 커야 함). 롱 포지션은 MFI 지표가 임계 수준(70 또는 30)을 상향 돌파했을 때 종료해야 합니다. //+------------------------------------------------------------------+ //| 시장 진입 및 종료 조건 확인 | //+------------------------------------------------------------------+ int CBE_BE_MFI::ShortCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; &nbsp;&nbsp; //--- idx는 Expert Advisor 작업 모드를 결정하는 데 사용될 수 있습니다 &nbsp;&nbsp; int idx&nbsp;&nbsp; =StartIndex(); &nbsp;&nbsp; //--- 숏 포지션 열기 위한 조건 확인 &nbsp;&nbsp; //--- Bearish Engulfing 패턴과 MFI&gt;60 &nbsp;&nbsp;if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) &amp;&amp; (MFI(1)&gt;60)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; //--- 롱 포지션 종료 조건 확인 &nbsp;&nbsp; //--- 신호선이 과매수/과매도 수준을 교차하는 경우 &nbsp;&nbsp; if(((MFI(1)&gt;70) &amp;&amp; (MFI(2)&lt;70)) || ((MFI(1)&lt;30) &amp;&amp; (MFI(2)&gt;30))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; &nbsp;&nbsp; //--- 결과 반환 &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.3. MQL5 위자드를 활용한 Expert Advisor 생성하기 CBE_BE_MFI 클래스는 표준 라이브러리 클래스에 포함되어 있지 않으므로, 사용하려면 abe_be_mfi.mqh 파일을 다운로드하여 client_terminal_data\MQL5\Include\Expert\Signal\MySignals에 저장해야 합니다. acandlepatterns.mqh 파일도 같은 방법으로 저장해야 합니다. 이후 MetaEditor를 재시작하면 MQL5 위자드에서 사용할 수 있습니다. Expert Advisor를 생성하려면 MQL5 위자드를 실행하세요: Fig. 4. MQL5 위자드에서 Expert Advisor 생성 Expert Advisor의 이름을 지정합니다: Fig. 5. Expert Advisor의 일반 속성 그 다음, 사용할 거래 신호 모듈을 선택해야 합니다. Fig. 6. Expert Advisor의 신호 속성 이번 경우에는 거래 신호 모듈을 하나만 사용합니다."Bullish Engulfing/Bearish Engulfing에 기반한 신호 (MFI로 확인됨)" 모듈을 추가합니다: Fig. 7. Expert Advisor의 신호 속성 거래 신호 모듈이 추가되었습니다: Fig. 8. Expert Advisor의 신호 속성 트레일링 속성을 선택할 수 있지만, 우리는 "트레일링 스탑 미사용"을 선택하겠습니다: Fig. 9. Expert Advisor의 트레일링 속성 자금 관리 속성에 관해서는 "고정 거래량으로 거래"를 사용하겠습니다: Fig. 10. Expert Advisor의 자금 관리 속성 "완료" 버튼을 누르면 생성된 Expert Advisor의 코드가 생성되어 terminal_data_folder\MQL5\Experts\에 저장됩니다. 생성된 Expert Advisor의 기본 입력 매개변수는 다음과 같습니다: //--- 주요 신호의 입력값 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =10;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 열기 위한 신호 임계값 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=10;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 종료를 위한 신호 임계값 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 거래 실행을 위한 가격 수준 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp;&nbsp; // 손절매 수준 (포인트 단위) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp;&nbsp; // 이익 실현 수준 (포인트 단위) 이 값은 다음과 같이 변경해야 합니다: //--- 주요 신호의 입력값 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =40;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 열기 위한 신호 임계값 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=20;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 종료를 위한 신호 임계값 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 거래 실행을 위한 가격 수준 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0;&nbsp;&nbsp;&nbsp;&nbsp;// 손절매 수준 (포인트 단위) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// 이익 실현 수준 (포인트 단위) Signal_ThresholdOpen/Signal_ThresholdClose 입력 매개변수는 포지션을 열고 닫기 위한 임계값을 지정할 수 있습니다. LongCondition()과 ShortCondition() 메소드의 코드에서는 임계값을 고정값으로 설정했습니다: 포지션 열기: 80; 포지션 닫기: 40; MQL5 위자드로 생성된 Expert Advisor는 거래 신호 모듈의 "투표"를 사용하여 포지션을 열고 닫습니다. 메인 모듈의 투표도 사용되지만, 메인 모듈의 LongCondition()과 ShortCondition() 메소드는 항상 0을 반환합니다. 따라서, ThresholdOpen과 ThresholdClose는 각각 40=(0+80)/2, 20=(0+40)/2로 설정해야 합니다. Signal_StopLevel과 Signal_TakeLevel 입력 매개변수는 0으로 설정되어, 포지션 종료 조건이 참이 될 때까지 기다리게 됩니다. 2.4. 히스토리 백테스팅 결과 Expert Advisor의 히스토리 데이터를 기반으로 한 백테스팅을 진행해 보겠습니다 (EURUSD H1, 테스트 기간: 2010.01.01-2011.03.16, PeriodMFI=37, MA_period=5). Fig. 11. Bullish Engulfing/Bearish Engulfing + MFI 기반 Expert Advisor 테스트 결과 최적의 입력 매개변수 세트는 전략 테스터를 통해 찾아볼 수 있습니다. MQL5 위자드로 생성된 Expert Advisor의 코드는 expert_abe_be_mfi.mq5에 첨부되어 있습니다.

2011.03.10
MQL5 위자드를 활용한 CCI 기반의 Bullish/Bearish Engulfing 전략
MetaTrader5
MQL5 위자드를 활용한 CCI 기반의 Bullish/Bearish Engulfing 전략

안녕하세요, 트레이더 여러분! 오늘은 MQL5 위자드를 이용해 표준 라이브러리 클래스를 기반으로 한 EA(전문가 어드바이저)를 만드는 방법에 대해 알아보겠습니다. 이 방법을 통해 여러분의 트레이드 아이디어를 간편하게 테스트할 수 있으며, 자신만의 거래 신호 클래스를 만들어 볼 수 있습니다. 자세한 내용은 MQL5 위자드: 거래 신호 모듈 만드는 방법를 참고하세요. 거래 신호 클래스는 CExpertSignal에서 파생되며, LongCondition() 및 ShortCondition() 가상 메소드를 자신의 메소드로 오버라이드해야 합니다. 오늘은 Bullish Engulfing과 Bearish Engulfing 반전 캔들 패턴을 이용한 거래 신호에 대해 다룰 것이며, 이 패턴들은 CCI 지표로 확인됩니다. 이 거래 신호 모듈은 CCandlePattern 클래스를 기반으로 하며, 캔들 패턴으로 거래 신호를 생성하는 간단한 예시입니다. 1. Bullish Engulfing과 Bearish Engulfing 반전 캔들 패턴 1.1. Bullish Engulfing Bullish Engulfing 반전 패턴은 하락세에서 형성되며, 작은 검은색 캔들 다음에 큰 흰색 캔들이 나타나며 이전 날의 캔들을 완전히 감싸는 형태입니다. 작은 캔들의 그림자는 짧아야 하며, 큰 캔들의 본체가 이전 날의 캔들을 덮을 수 있어야 합니다. Fig. 1. Bullish Engulfing 캔들 패턴 Bullish Engulfing 패턴의 인식은 CheckPatternBullishEngulfing() 메소드에서 구현됩니다: //+------------------------------------------------------------------+ //| Bullish Engulfing 캔들 패턴 체크 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishEngulfing() &nbsp;&nbsp;{ //--- Bullish Engulfing &nbsp;&nbsp; if((Open(2)&gt;Close(2)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; (Close(1)-Open(1)&gt;AvgBody(1)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; (Close(1)&gt;Open(2)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; (MidOpenClose(2)&lt;CloseAvg(2)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; (Open(1)&lt;Close(2))) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (true); //--- &nbsp;&nbsp; return (false); &nbsp;&nbsp;} The CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) 메소드를 통해 Bullish Engulfing 패턴을 확인할 수 있습니다. 1.2. Bearish Engulfing Bearish Engulfing 반전 패턴은 상승세에서 형성되며, 작은 흰색 캔들 다음에 큰 검은색 캔들이 나타나며 이전 날의 캔들을 완전히 감싸는 형태입니다. 작은 캔들의 그림자는 짧고, 큰 캔들의 본체가 이전 날의 캔들을 덮을 수 있어야 합니다. Fig. 2. Bearish Engulfing 캔들 패턴 Bearish Engulfing 패턴의 인식은 CheckPatternBearishEngulfing() 메소드에서 구현됩니다: //+------------------------------------------------------------------+ //| Bearish Engulfing 캔들 패턴 체크 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishEngulfing() &nbsp;&nbsp;{ //--- Bearish Engulfing &nbsp;&nbsp; if((Open(2)&lt;Close(2)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; (Open(1)-Close(1)&gt;AvgBody(1)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; (Close(1)&lt;Open(2)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; (MidOpenClose(2)&gt;CloseAvg(2)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; (Open(1)&gt;Close(2))) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (true); //--- &nbsp;&nbsp; return (false); &nbsp;&nbsp;} The CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) 메소드를 통해 Bearish Engulfing 패턴을 확인할 수 있습니다. 2. CCI 지표로 확인하는 거래 신호 롱 또는 숏 포지션을 열기 위한 거래 신호는 CCI 지표로 확인되어야 합니다. CCI 값은 -50 (롱 포지션) 또는 50 (숏 포지션)보다 커야 합니다. 열린 포지션의 종료는 CCI 값에 따라 결정됩니다. 두 가지 경우에 발생할 수 있습니다: CCI 선이 반대의 기준 레벨 (롱 포지션의 경우 80, 숏 포지션의 경우 -80)에 도달했을 때 반전 신호가 확인되지 않았을 때 (롱 포지션의 경우 -80, 숏 포지션의 경우 80에 도달했을 때) Fig. 3. CCI로 확인된 Bullish Engulfing 패턴 int CBE_BE_CCI::LongCondition() - 롱 포지션을 열기 위한 조건 체크 (80 반환) 및 숏 포지션 종료 조건 체크 (40 반환); int CBE_BE_CCI::ShortCondition() - 숏 포지션을 열기 위한 조건 체크 (80 반환) 및 롱 포지션 종료 조건 체크 (40 반환). 2.1. 롱 포지션 열기/숏 포지션 종료 Bullish Engulfing 패턴은 CCI 지표로 확인되어야 하며: CCI(1)&lt;-50 (마지막 완성된 바의 CCI 값은 -50보다 작아야 함). 숏 포지션은 CCI 지표가 -80의 기준 레벨을 위로 넘거나 80의 기준 레벨을 아래로 넘었을 때 종료해야 합니다. //+------------------------------------------------------------------+ //| 시장 진입 및 퇴출 조건 체크 | //| 1) 시장 진입 (롱 포지션 열기, 결과=80) | //| 2) 시장 퇴출 (숏 포지션 종료, 결과=40) | //+------------------------------------------------------------------+ int CBE_BE_CCI::LongCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; &nbsp;&nbsp; //--- 롱 포지션 열기 조건 체크 &nbsp;&nbsp; //--- Bullish Engulfing 패턴 형성 및 CCI&lt;-50 &nbsp;&nbsp; if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) &amp;&amp; (CCI(1)&lt;-50)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; //--- 숏 포지션 종료 조건 체크 &nbsp;&nbsp; //--- 신호 선이 과매도/과매수 레벨을 교차할 때 (아래로 -80, 아래로 -80) &nbsp;&nbsp; if(((CCI(1)&gt;-80) &amp;&amp; (CCI(2)&lt;-80)) || ((CCI(1)&lt;80) &amp;&amp; (CCI(2)&gt;80))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; &nbsp;&nbsp; //--- 결과 반환 &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.2. 숏 포지션 열기/롱 포지션 종료 Bearish Engulfing 패턴은 CCI 지표로 확인되어야 하며: CCI(1)&gt;50 (마지막 완성된 바의 CCI 값은 50보다 커야 함). 롱 포지션은 CCI 지표가 -80 또는 80 레벨을 아래로 넘었을 때 종료해야 합니다. //+------------------------------------------------------------------+ //| 시장 진입 및 퇴출 조건 체크 | //| 1) 시장 진입 (숏 포지션 열기, 결과=80) | //| 2) 시장 퇴출 (롱 포지션 종료, 결과=40) | //+------------------------------------------------------------------+ int CBE_BE_CCI::ShortCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; &nbsp;&nbsp; //--- 숏 포지션 열기 조건 체크 &nbsp;&nbsp;

2011.03.10
MQL5 위자드를 활용한 Bullish/Bearish Engulfing 패턴 및 Stochastic을 통한 거래 신호 생성
MetaTrader5
MQL5 위자드를 활용한 Bullish/Bearish Engulfing 패턴 및 Stochastic을 통한 거래 신호 생성

안녕하세요, 트레이더 여러분! 오늘은 MQL5 위자드를 사용해 거래 신호를 쉽게 생성하는 방법에 대해 이야기해볼까 해요. MQL5 위자드는 메타트레이더 5의 클라이언트 터미널과 함께 제공되는 표준 라이브러리 클래스를 기반으로 한 전문가 어드바이저(EA)를 만들 수 있도록 도와줍니다. 여러분의 거래 아이디어를 신속하게 확인할 수 있어요! 자신의 거래 신호 클래스를 생성하는 것만으로도 가능합니다. 이 클래스의 구조와 예시는 MQL5 위자드: 거래 신호 모듈 생성 방법에서 확인할 수 있습니다. 기본적인 아이디어는 다음과 같습니다: 거래 신호 클래스는 CExpertSignal로부터 파생되며, 이후에는 LongCondition()과 ShortCondition() 가상 메서드를 여러분의 메서드로 오버라이드해야 합니다. 러시아어로 된 책 "최고의 트레이더의 전략"에서는 많은 거래 전략이 소개되어 있는 데, 우리는 Stochastic, CCI, MFI 및 RSI와 같은 오실레이터에 의해 확인된 리버설 캔들스틱 패턴에 중점을 두고 이야기할 것입니다. 가장 좋은 방법은 캔들스틱 패턴의 형성을 확인하기 위해 CExpertSignal로부터 파생된 별도의 클래스를 만드는 것입니다. 캔들스틱 패턴으로 생성된 거래 신호를 확인하기 위해서는 CCandlePattern으로부터 파생된 클래스를 작성하고 필요한 기능(예: 오실레이터 확인)을 추가하는 것만으로 충분합니다. 여기서는 Stochastic 지표로 확인된 Bullish Engulfing/Bearish Engulfing 리버설 캔들스틱 패턴을 기반으로 한 신호에 대해 살펴보겠습니다. 거래 신호 모듈은 CCandlePattern 클래스를 기반으로 하며, 캔들스틱 패턴으로 거래 신호를 생성하기 위한 간단한 예시입니다. 1. Bullish Engulfing 및 Bearish Engulfing 리버설 캔들스틱 패턴 1.1. Bullish Engulfing Bullish Engulfing 리버설 패턴은 하락세에서 작은 검은 캔들 뒤에 큰 흰 캔들이 완전히 덮이는 형태로 형성됩니다. 작은 캔들의 그림자(꼬리)는 짧고, 큰 캔들의 몸체가 이전 날의 캔들을 완전히 덮을 수 있게 됩니다. Fig. 1. Bullish Engulfing 캔들 패턴 Bullish Engulfing 패턴의 인식은 CheckPatternBullishEngulfing() 메서드에서 구현됩니다: //+------------------------------------------------------------------+ //| Bullish Engulfing 캔들 패턴 형성을 체크하는 메서드 &nbsp;&nbsp; | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishEngulfing() &nbsp;&nbsp;{ //--- Bullish Engulfing &nbsp;&nbsp; if((Open(2)&gt;Close(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp;&nbsp;&nbsp;// 이전 캔들은 하락세 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Close(1)-Open(1)&gt;AvgBody(1))&nbsp;&nbsp;&amp;&amp;&nbsp;&nbsp;// 상승 캔들의 몸체가 평균 몸체보다 큼 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Close(1)&gt;Open(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp;&nbsp;&nbsp;// 상승 캔들의 종가가 하락 캔들의 시가보다 큼 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (MidOpenClose(2)&lt;CloseAvg(2))&nbsp;&nbsp;&amp;&amp;&nbsp;&nbsp;// 하락세 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Open(1)&lt;Close(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 상승 캔들의 시가가 하락 캔들의 종가보다 낮음 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) 메서드는 Bullish Engulfing 캔들 패턴의 형성을 확인하는 데 사용됩니다. 1.2. Bearish Engulfing Bearish Engulfing 리버설 패턴은 상승세에서 작은 흰 캔들 뒤에 큰 검은 캔들이 완전히 덮이는 형태로 형성됩니다. 작은 캔들의 그림자(꼬리)는 짧고, 큰 캔들의 몸체가 이전 날의 캔들을 완전히 덮을 수 있게 됩니다. Fig. 2. Bearish Engulfing 캔들 패턴 Bearish Engulfing 패턴의 인식은 CheckPatternBearishEngulfing() 메서드에서 구현됩니다: //+------------------------------------------------------------------+ //| Bearish Engulfing 캔들 패턴 형성을 체크하는 메서드 &nbsp; | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishEngulfing() &nbsp;&nbsp;{ //--- Bearish Engulfing &nbsp;&nbsp; if((Open(2)&lt;Close(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp;&nbsp;&nbsp;// 이전 캔들은 상승세 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Open(1)-Close(1)&gt;AvgBody(1)) &amp;&amp;&nbsp;&nbsp;// 하락 캔들의 몸체가 평균 몸체보다 큼 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Close(1)&lt;Open(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp;&nbsp;&nbsp;// 하락 캔들의 종가가 상승 캔들의 시가보다 낮음 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (MidOpenClose(2)&gt;CloseAvg(2)) &amp;&amp;&nbsp;&nbsp;// 상승세 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Open(1)&gt;Close(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 하락 캔들의 시가가 상승 캔들의 종가보다 큼 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) 메서드는 Bearish Engulfing 캔들 패턴의 형성을 확인하는 데 사용됩니다. 2. Stochastic 지표로 확인된 거래 신호 롱 또는 숏 포지션을 열기 위한 거래 신호는 Stochastic 오실레이터로 확인되어야 합니다. %D 라인은 해당하는 기준선(30 또는 70)보다 커야 합니다. 열린 포지션의 종료는 %D 지표의 값에 따라 결정됩니다. 이는 두 가지 경우로 나눌 수 있습니다: %D 라인이 반대 기준선(롱 포지션의 경우 80, 숏 포지션의 경우 20)에 도달했을 때 반대 신호가 확인되지 않았을 때(%D 라인이 다음 레벨에 도달했을 때: 롱 포지션의 경우 20, 숏 포지션의 경우 80) Fig. 3. Bullish Engulfing 패턴, Stochastic 지표로 확인됨입장 및 퇴장 조건 확인은 두 개의 메서드에서 구현됩니다: int CBE_BE_Stoch::LongCondition() - 롱 포지션을 열 조건을 체크(결과=80)하고 숏 포지션을 닫는 조건을 체크(결과=40); int CBE_BE_Stoch::ShortCondition() - 숏 포지션을 열 조건을 체크(결과=80)하고 롱 포지션을 닫는 조건을 체크(결과=40). 2.1. 롱 포지션 열기/숏 포지션 닫기 Bullish Engulfing 패턴의 형성은 Stochastic 지표로 확인되어야 합니다: StochSignal(1)&lt;30 (마지막 완료된 바의 Stochastic 지표의 신호 라인이 30보다 작아야 함).숏 포지션은 Stochastic 지표의 신호 라인이 20 또는 80 레벨을 상향 교차했을 때 닫아야 합니다. //+------------------------------------------------------------------+ //| 시장 진입 및 퇴장 조건 체크&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //| 1) 시장 진입 (롱 포지션 열기, 결과=80)&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //| 2) 시장 퇴장 (숏 포지션 닫기, 결과=40)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;| //+------------------------------------------------------------------+ int CBE_BE_Stoch::LongCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; //--- idx는 전문가 어드바이저의 작동 모드를 결정하는 데 사용될 수 있음 //--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건을 체크함 //--- idx=1 - 이 경우 EA는 뉴스 바에서만 거래 조건을 체크함 &nbsp;&nbsp;int idx&nbsp;&nbsp; =StartIndex(); //--- 롱 포지션 열기 조건 체크 //--- Bullish Engulfing 패턴 형성 및 신호 라인&lt;30 &nbsp;&nbsp;if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) &amp;&amp; (StochSignal(1)&lt;30)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; //--- 숏 포지션 닫기 조건 체크 //--- 과매수/과매도 레벨의 신호 라인 교차 (하향 20, 상향 80) &nbsp;&nbsp; if((((StochSignal(1)&gt;20) &amp;&amp; (StochSignal(2)&lt;20)) || &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((StochSignal(1)&gt;80) &amp;&amp; (StochSignal(2)&lt;80)))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; //--- 결과 반환 &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.2. 숏 포지션 열기/롱 포지션 닫기 Bearish Engulfing 패턴의 형성은 Stochastic 지표로 확인되어야 합니다: StochSignal(1)&gt;70 (마지막 완료된 바의 Stochastic 지표의 신호 라인이 70보다 커야 함).롱 포지션은 Stochastic 지표의 신호 라인이 80 또는 20 레벨을 하향 교차했을 때 닫아야 합니다. //+------------------------------------------------------------------+ //| 시장 진입 및 퇴장 조건 체크&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //| 1) 시장 진입 (숏 포지션 열기, 결과=80)&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //| 2) 시장 퇴장 (롱 포지션 닫기, 결과=40)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;| //+------------------------------------------------------------------+ int CBE_BE_Stoch::ShortCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; //--- idx는 전문가 어드바이저의 작동 모드를 결정하는 데 사용될 수 있음 //--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건을 체크함 //--- idx=1 - 이 경우 EA는 뉴스 바에서만 거래 조건을 체크함 &nbsp;&nbsp;int idx&nbsp;&nbsp; =StartIndex(); //--- 숏 포지션 열기 조건 체크 //--- Bearish Engulfing 패턴 형성 및 신호 라인&gt;70 &nbsp;&nbsp;if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) &amp;&amp; (StochSignal(1)&gt;70)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; //--- 롱 포지션 닫기 조건 체크 //--- 신호 라인 교차 (상향 80, 하향 20) &nbsp;&nbsp; if((((StochSignal(1)&lt;80) &amp;&amp; (StochSignal(2)&gt;80)) || &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((StochSignal(1)&lt;20) &amp;&amp; (StochSignal(2)&gt;20)))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; //--- 결과 반환 &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.3. MQL5 위자드를 사용한 전문가 어드바이저 생성 CBE_BE_Stoch 클래스는 표준 라이브러리 클래스에 포함되어 있지 않으므로, 사용하려면 acbe_be_stoch.mqh 파일을 다운로드하여 client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals에 저장해야 합니다. candlepatterns.mqh 파일도 동일하게 처리해야 합니다. 메타에디터를 재시작 후 MQL5 위자드에서 사용할 수 있습니다. 전문가 어드바이저를 만들기 위해 MQL5 위자드를 실행하세요: Fig. 4. MQL5 위자드를 사용한 전문가 어드바이저 생성 전문가 어드바이저의 이름을 지정해봅시다: Fig. 5. 전문가 어드바이저의 일반 속성 그 후, 사용될 거래 신호 모듈을 선택해야 합니다. Fig. 6. 전문가 어드바이저의 신호 속성 이번 경우에는 하나의 거래 신호 모듈만 사용합니다. "Stochastic으로 확인된 Bullish Engulfing/Bearish Engulfing 기반의 신호" 거래 신호 모듈 추가: Fig. 7. 전문가 어드바이저의 신호 속성 거래 신호 모듈이 추가되었습니다: Fig. 8. 전문가 어드바이저의 신호 속성 원하는 트레일링 속성을 선택할 수 있지만, 우리는 "트레일링 스탑 사용 안함"을 사용할 것입니다:Fig. 9. 전문가 어드바이저의 트레일링 속성 자금 관리 속성에 대해서는 "고정 거래량으로 거래하기"를 사용할 것입니다:Fig. 10. 전문가 어드바이저의 자금 관리 속성 "완료" 버튼을 누르면 생성된 전문가 어드바이저의 코드가 Expert_ABE_BE_Stoch.mq5에 저장됩니다. 이 파일은 terminal_data_folder\MQL5\Experts\에 위치하게 됩니다. 생성된 전문가 어드바이저의 기본 입력 매개변수는 다음과 같습니다: //--- 주요 신호의 입력 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =10;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 개시를 위한 신호 임계값 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=10;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 종료를 위한 신호 임계값 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 거래 실행을 위한 가격 수준 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp;&nbsp; // 스탑 로스 수준 (포인트 단위) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0&nbsp;&nbsp; // 테이크 프로핏 수준 (포인트 단위) 이는 다음과 같이 변경되어야 합니다://--- 주요 신호의 입력 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =40;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 개시를 위한 신호 임계값 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=20;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 종료를 위한 신호 임계값 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 거래 실행을 위한 가격 수준 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// 스탑 로스 수준 (포인트 단위) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// 테이크 프로핏 수준 (포인트 단위) 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, 테스트 기간: 2010.01.01-2011.03.04, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5)에 대한 백테스트를 살펴보겠습니다. 전문가 어드바이저 생성 시 고정 볼륨(고정 로트 거래, 0.1)을 사용하였으며, 트레일링 스탑 알고리즘은 사용하지 않았습니다(트레일링 사용 안 함). Fig. 11. Bullish/Bearish Engulfing + Stochastic 기반 전문가 어드바이저의 테스트 결과 최적의 입력 매개변수 세트는 메타트레이더 5 클라이언트 터미널의 전략 테스터를 사용하여 찾을 수 있습니다. MQL5 위자드로 생성된 전문가 어드바이저의 코드는 expert_abe_be_stoch.mq5에 첨부되어 있습니다.

2011.03.10
MQL5 위자드로 다크 클라우드 커버 및 피어싱 라인 기반 거래 신호 생성하기
MetaTrader5
MQL5 위자드로 다크 클라우드 커버 및 피어싱 라인 기반 거래 신호 생성하기

안녕하세요, 트레이더 여러분! 오늘은 MQL5 위자드를 사용하여 다크 클라우드 커버와 피어싱 라인 패턴을 기반으로 한 거래 신호를 생성하는 방법에 대해 알아보겠습니다. 이 도구는 클라이언트 터미널과 함께 제공되는 표준 라이브러리 클래스를 기반으로 손쉽게 전문가 어드바이저(EA)를 만들 수 있도록 도와줍니다. 트레이딩 아이디어를 빠르게 검토하고, 자신만의 거래 신호 클래스를 생성하는 것만으로 쉽게 시작할 수 있습니다. 거래 신호 클래스의 구조와 예제는 MQL5 위자드: 거래 신호 모듈 만드는 법에서 확인할 수 있습니다. 기본 아이디어는 다음과 같습니다: 거래 신호 클래스는 CExpertSignal에서 파생됩니다. 여기서 LongCondition()와 ShortCondition() 가상 메서드를 자신의 메서드로 오버라이드해야 합니다. 여기서 저희는 RSI 지표로 확인된 다크 클라우드 커버 및 피어싱 라인 반전 캔들 패턴에 기반한 신호를 다룰 것입니다. 이 거래 신호 모듈은 CCandlePattern 클래스를 기반으로 하며, 캔들 패턴을 사용하여 거래 신호를 생성하는 간단한 예제입니다. 1. 다크 클라우드 커버 및 피어싱 라인 캔들 패턴 1.1. 다크 클라우드 커버 다크 클라우드 커버는 상승 추세의 끝에서 발생하는 하락 반전 캔들 패턴입니다. 첫날에는 긴 흰색 캔들이 형성되고, 둘째 날에는 갭 업이 발생하지만, 둘째 날 종가는 첫날의 중간점 아래에서 마감됩니다. 그림 1. 다크 클라우드 커버 캔들 패턴 다크 클라우드 커버 패턴의 인식은 CheckPatternDarkCloudCover() 메서드에서 구현되어 있습니다: //+------------------------------------------------------------------+ //| 다크 클라우드 커버 캔들 패턴 형성 체크&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternDarkCloudCover() &nbsp;&nbsp;{ //--- 다크 클라우드 커버 &nbsp;&nbsp; if((Close(2)-Open(2)&gt;AvgBody(1))&nbsp;&nbsp;&amp;&amp; // (긴 흰색) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&lt;Close(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; // &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&gt;Open(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; // (이전 몸체 내에서 마감) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(MidOpenClose(2)&gt;CloseAvg(1))&nbsp;&nbsp;&amp;&amp; // (상승 추세) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)&gt;High(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (새로운 고점에서 시작) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) 메서드는 다크 클라우드 커버 캔들 패턴의 형성을 확인하는 데 사용됩니다. 1.2. 피어싱 라인 피어싱 라인은 둘째 날의 갭 다운이 하락 추세를 지속하게 하지만, 둘째 날의 종가는 첫날 몸체의 중간점 위에서 마감됩니다. 이는 하락세의 매도자들에게 바닥이 형성될 수 있음을 시사합니다. 이 가격 행동은 바 차트보다 캔들 차트에서 더 분명하게 식별됩니다. 그림 2. 피어싱 라인 캔들 패턴 피어싱 라인 패턴의 인식은 CheckPatternPiercingLine() 메서드에서 구현되어 있습니다: //+------------------------------------------------------------------+ //| 피어싱 라인 캔들 패턴 형성 체크&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternPiercingLine() &nbsp;&nbsp;{ //--- 피어싱 라인 &nbsp;&nbsp; if((Close(1)-Open(1)&gt;AvgBody(1)) &amp;&amp; // (긴 흰색) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(2)-Close(2)&gt;AvgBody(1)) &amp;&amp; // (긴 검정색) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&gt;Close(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; //&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&lt;Open(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; // (이전 몸체 내에서 마감) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(MidOpenClose(2)&lt;CloseAvg(2)) &amp;&amp; // (하락 추세) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)&lt;Low(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (이전 저점보다 낮게 시작) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) 메서드는 피어싱 라인 캔들 패턴의 형성을 확인하는 데 사용됩니다. 2. RSI 지표로 확인된 거래 신호 롱 또는 숏 포지션을 열기 위한 거래 신호는 반드시 RSI 지표로 확인되어야 합니다. RSI 값은 임계 수준(롱 포지션은 40, 숏 포지션은 60)보다 낮거나 높아야 합니다. 열린 포지션의 마감은 RSI 값에 따라 결정됩니다. 마감은 두 가지 경우에 이루어질 수 있습니다: RSI가 반대 임계 수준(롱 포지션은 70, 숏 포지션은 30)에 도달한 경우 반전 신호가 확인되지 않은 경우(즉, RSI가 다음 수준(롱 포지션은 30, 숏 포지션은 70)에 도달한 경우) 그림 3. RSI로 확인된 다크 클라우드 커버 패턴 int CDC_PL_RSI::LongCondition() - 롱 포지션을 열기 위한 조건 체크(80 반환) 및 숏 포지션을 마감하기 위한 조건 체크(40 반환); int CDC_PL_RSI::ShortCondition() - 숏 포지션을 열기 위한 조건 체크(80 반환) 및 롱 포지션을 마감하기 위한 조건 체크(40 반환). 2.1. 롱 포지션 열기/숏 포지션 마감하기 피어싱 라인 패턴의 형성은 RSI 지표로 확인해야 합니다: RSI(1)&lt;40 (마지막 완료된 봉의 RSI 값이 40보다 작아야 합니다). 숏 포지션은 RSI 지표가 70 또는 30의 임계 수준을 상승 통과한 경우에 마감해야 합니다. //+------------------------------------------------------------------+ //| 시장의 진입 및 퇴출 조건 체크&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //| 1) 시장 진입 (롱 포지션 열기, 결과=80)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| //| 2) 시장 퇴출 (숏 포지션 마감, 결과=40)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //+------------------------------------------------------------------+ int CDC_PL_RSI::LongCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; //--- idx를 사용하여 전문가 어드바이저 작업 모드 결정 //--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건을 체크 //--- idx=1 - 이 경우 EA는 뉴스 봉에서만 거래 조건을 체크 &nbsp;&nbsp; int idx&nbsp;&nbsp; =StartIndex(); //--- 롱 포지션 열기 위한 조건 체크 //--- 피어싱 라인 패턴 형성 및 RSI&lt;30 &nbsp;&nbsp;if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) &amp;&amp; (RSI(1)&lt;40)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; //--- 숏 포지션 마감 조건 체크 //--- 과매수/과매도 신호선 크로스오버 (상승 30, 상승 70) &nbsp;&nbsp;if(((RSI(1)&gt;30) &amp;&amp; (RSI(2)&lt;30)) || ((RSI(1)&gt;70) &amp;&amp; (RSI(2)&lt;70))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; //--- 결과 반환 &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.2. 숏 포지션 열기/롱 포지션 마감하기 다크 클라우드 커버 패턴의 형성은 RSI 지표로 확인해야 합니다: RSI(1)&gt;60 (마지막 완료된 봉의 RSI 값이 60보다 커야 합니다). 롱 포지션은 RSI 지표가 70 또는 30의 임계 수준을 하향 통과한 경우에 마감해야 합니다. //+------------------------------------------------------------------+ //| 시장의 진입 및 퇴출 조건 체크&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //| 1) 시장 진입 (숏 포지션 열기, 결과=80)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //| 2) 시장 퇴출 (롱 포지션 마감, 결과=40)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| //+------------------------------------------------------------------+ int CDC_PL_RSI::ShortCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; //--- idx를 사용하여 전문가 어드바이저 작업 모드 결정 //--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건을 체크 //--- idx=1 - 이 경우 EA는 뉴스 봉에서만 거래 조건을 체크 &nbsp;&nbsp; int idx&nbsp;&nbsp; =StartIndex(); //--- 숏 포지션 열기 위한 조건 체크 //--- 다크 클라우드 커버 패턴 형성 및 RSI&gt;60 &nbsp;&nbsp;if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) &amp;&amp; (RSI(1)&gt;60)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; //--- 롱 포지션 마감 조건 체크 //--- 신호선 크로스오버 (하향 70, 하향 30) &nbsp;&nbsp; if(((RSI(1)&lt;70) &amp;&amp; (RSI(2)&gt;70)) || ((RSI(1)&lt;30) &amp;&amp; (RSI(2)&gt;30))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; //--- 결과 반환 &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.3. MQL5 위자드로 전문가 어드바이저 만들기 CDC_PL_RSI 클래스는 표준 라이브러리 클래스에 포함되어 있지 않으므로 사용하려면 adc_pl_rsi.mqh 파일을 다운로드하여 client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals에 저장해야 합니다. 같은 방식으로 acandlepatterns.mqh 파일도 저장해야 합니다. MetaEditor를 재시작한 후 MQL5 위자드에서 사용할 수 있습니다. 전문가 어드바이저를 생성하려면 MQL5 위자드를 실행합니다: 그림 4. MQL5 위자드로 전문가 어드바이저 생성하기 전문가 어드바이저의 이름을 지정합니다: 그림 5. 전문가 어드바이저의 일반 속성 그 후 사용될 거래 신호 모듈을 선택합니다. 그림 6. 전문가 어드바이저의 신호 속성 이번 경우에는 단 하나의 거래 신호 모듈만 사용합니다. "RSI로 확인된 다크 클라우드 커버/피어싱 라인 기반 신호" 거래 신호 모듈 추가: 그림 7. 전문가 어드바이저의 신호 속성 거래 신호 모듈이 추가되었습니다: 그림 8. 전문가 어드바이저의 신호 속성 트레일링 속성을 선택할 수 있지만, "트레일링 스탑 사용 안 함"을 사용할 것입니다: 그림 9. 전문가 어드바이저의 트레일링 속성 자금 관리 속성에 대해서는 "고정 거래량으로 거래하기"를 사용할 것입니다: 그림 10. 전문가 어드바이저의 자금 관리 속성 "완료" 버튼을 누르면 생성된 전문가 어드바이저의 코드가 Expert_ADC_PL_RSI.mq5에 위치하게 되며, 이는 terminal_data_folder\MQL5\Experts\에 저장됩니다. 생성된 전문가 어드바이저의 기본 입력 매개변수는 다음과 같습니다: //--- 주요 신호의 입력값 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =10;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 열기 위한 신호 임계값 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=10;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 마감 위한 신호 임계값 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 거래를 실행할 가격 수준 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp;&nbsp; // 스탑 로스 수준 (포인트 단위) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0&nbsp;&nbsp;&nbsp; // 테이크 프로핏 수준 (포인트 단위) 는 다음으로 변경되어야 합니다: //--- 주요 신호의 입력값 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =40;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 열기 위한 신호 임계값 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=20;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 마감 위한 신호 임계값 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 거래를 실행할 가격 수준 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// 스탑 로스 수준 (포인트 단위) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// 테이크 프로핏 수준 (포인트 단위) 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, 테스트 기간: 2010.01.01-2011.02.23)에 대한 백테스팅을 살펴보겠습니다. 전문가 어드바이저 생성 시 고정 볼륨(고정 롯으로 거래하기, 0.1)을 사용했고, 트레일링 스탑 알고리즘은 사용하지 않았습니다 (트레일링 사용 안 함). 그림 11. 다크 클라우드 커버/피어싱 라인 + RSI 기반 전문가 어드바이저 테스트 결과 최적의 입력 매개변수 세트는 MetaTrader 5 클라이언트 터미널의 전략 테스터를 사용하여 찾을 수 있습니다. MQL5 위자드로 생성된 전문가 어드바이저의 코드는 expert_ad_pl_rsi.mq5에 첨부되어 있습니다.

2011.02.25
MQL5 위자드를 활용한 다크 클라우드 커버/피어싱 라인 + MFI 기반 트레이드 신호 생성하기
MetaTrader5
MQL5 위자드를 활용한 다크 클라우드 커버/피어싱 라인 + MFI 기반 트레이드 신호 생성하기

안녕하세요, 트레이더 여러분! 오늘은 MQL5 위자드를 이용해서 다크 클라우드 커버와 피어싱 라인 패턴을 기반으로 한 트레이드 신호를 생성하는 방법에 대해 알아보겠습니다. 이 도구는 클라이언트 터미널과 함께 제공되는 표준 라이브러리 클래스를 바탕으로 손쉽게 EA(Expert Advisor)를 만들 수 있도록 도와줍니다. 트레이드 아이디어를 간편하게 체크할 수 있도록 여러분만의 트레이딩 신호 클래스를 생성하는 것이죠. 기본 아이디어는 이렇게 진행됩니다. 트레이딩 신호 클래스는 CExpertSignal에서 파생된 클래스를 사용하고, LongCondition()와 ShortCondition() 가상 메서드를 여러분의 메서드로 재정의해야 합니다. 여기서 다룰 전략은 "최고 트레이더의 전략"이라는 책에서 차용한 것으로, 특히 스토캐스틱, CCI, MFI, RSI 오실레이터에 의해 확인되는 반전 캔들스틱 패턴에 집중할 것입니다. 1. 다크 클라우드 커버와 피어싱 라인 반전 캔들스틱 패턴 1.1. 다크 클라우드 커버 다크 클라우드 커버는 상승 추세의 끝에서 발생하는 약세 반전 패턴입니다. 첫째 날에는 긴 흰색 캔들이 형성되고, 둘째 날에는 갭 상승이 발생하지만, 둘째 날의 종가는 첫째 날의 중간 미만으로 마감됩니다. 다크 클라우드 커버 캔들스틱 패턴 이 패턴의 인식은 CCandlePattern 클래스의 CheckPatternDarkCloudCover() 메서드에서 구현됩니다. //+------------------------------------------------------------------+ //| 다크 클라우드 커버 패턴 형성 체크 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternDarkCloudCover() { //--- 다크 클라우드 커버 if((Close(2) - Open(2) > AvgBody(1) && // (긴 흰색) (Close(1) < Close(2) && // (Close(1) > Open(2) && // (이전 몸체 내 마감) (MidOpenClose(2) > CloseAvg(1) && // (상승 추세) (Open(1) > High(2))) { // (새로운 고점에서 개장) return (true); } //--- return (false); } CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) 메서드는 다크 클라우드 커버 캔들스틱 패턴 형성을 확인하는 데 사용됩니다. 1.2. 피어싱 라인 둘째 날의 갭 하락은 하락 추세를 지속시키지만, 둘째 날의 종가는 첫째 날의 몸체 중간 이상으로 마감됩니다. 이는 곰들에게 저점이 형성될 수 있음을 암시합니다. 이 가격 행동은 바 차트보다 캔들스틱 차트에서 더 뚜렷하게 나타납니다. 둘째 날의 종가가 첫째 날의 몸체에 더 깊이 침투할수록 반전 신호가 성공할 가능성이 높아집니다. 피어싱 라인 캔들스틱 패턴 이 패턴의 인식은 CCandlePattern 클래스의 CheckPatternPiercingLine() 메서드에서 구현됩니다. //+------------------------------------------------------------------+ //| 피어싱 라인 패턴 형성 체크 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternPiercingLine() { //--- 피어싱 라인 if((Close(1) - Open(1) > AvgBody(1) && // (긴 흰색) (Open(2) - Close(2) > AvgBody(1) && // (긴 검은색) (Close(1) > Close(2) && // (Close(1) < Open(2) && // (이전 몸체 내 마감) (MidOpenClose(2) < CloseAvg(2) && // (하락 추세) (Open(1) < Low(2))) { // (이전 저점보다 낮게 개장) return (true); } //--- return (false); } CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) 메서드는 피어싱 라인 캔들스틱 패턴 형성을 확인하는 데 사용됩니다. 2. MFI 지표로 확인된 트레이드 신호 롱 또는 숏 포지션을 열기 위한 트레이딩 신호는 반드시 MFI 지표에 의해 확인되어야 합니다. MFI 지표의 값은 롱 포지션의 경우 40 이하, 숏 포지션의 경우 60 이상이어야 합니다. 열린 포지션의 종료는 MFI 지표의 값에 따라 결정됩니다. 종료는 두 가지 경우에 발생합니다: MFI가 반대의 크리티컬 레벨(롱 포지션은 70, 숏 포지션은 30)에 도달했을 때 역 신호가 확인되지 않았을 때(MFI 지표가 30(롱 포지션) 또는 70(숏 포지션) 레벨에 도달했을 때) MFI 지표로 확인된 다크 클라우드 커버 패턴 int CDC_PL_MFI::LongCondition() - 롱 포지션을 열기 위한 조건을 체크합니다(80 반환) 및 숏 포지션 종료(40 반환); int CDC_PL_MFI::ShortCondition() - 숏 포지션을 열기 위한 조건을 체크합니다(80 반환) 및 롱 포지션 종료(40 반환). 2.1. 롱 포지션 열기/숏 포지션 종료하기 "모닝 스타" 패턴의 형성은 MFI 지표로 확인되어야 합니다: MFi(1) &lt; 40 (마지막 완료된 바의 MFI 지표 값이 40 미만이어야 합니다). 숏 포지션은 MFI 지표가 크리티컬 레벨(70 또는 30)을 상향 돌파했을 때 종료해야 합니다. //+------------------------------------------------------------------+ //| 시장에 진입 및 퇴출 조건 체크 | //| 1) 시장 진입(롱 포지션 오픈, 결과=80) | //| 2) 시장 퇴출(숏 포지션 종료, 결과=40) | //+------------------------------------------------------------------+ int CDC_PL_MFI::LongCondition() { int result=0; //--- idx는 EA 작업 모드를 결정하는데 사용될 수 있습니다 //--- idx=0 - 이 경우 EA는 각 틱에서 트레이드 조건을 체크합니다 //--- idx=1 - 이 경우 EA는 뉴스 바에서만 트레이드 조건을 체크합니다 int idx = StartIndex(); //--- 롱 포지션을 열기 위한 조건 체크 //--- 피어싱 라인 패턴 형성과 MFI &lt; 40 if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (MFI(1) &lt; 40)) result = 80; //--- 숏 포지션 종료 조건 체크 //--- 과매도/과매수 레벨의 신호선 교차 (상향 30, 상향 70) if(((MFI(1) &gt; 30) && (MFI(2) &lt; 30)) || ((MFI(1) &gt; 70) && (MFI(2) &lt; 70))) result = 40; //--- 결과 반환 return(result); } 2.2. 숏 포지션 열기/롱 포지션 종료하기 "다크 클라우드 커버" 패턴의 형성은 MFI 지표로 확인되어야 합니다: MFI(1) &gt; 60 (마지막 완료된 바의 MFI 지표 값이 60 초과여야 합니다). 롱 포지션은 MFI 지표가 크리티컬 레벨(70 또는 30)을 상향 돌파했을 때 종료해야 합니다. //+------------------------------------------------------------------+ //| 시장에 진입 및 퇴출 조건 체크 | //| 1) 시장 진입(숏 포지션 오픈, 결과=80)| //| 2) 시장 퇴출(롱 포지션 종료, 결과=40)| //+------------------------------------------------------------------+ int CDC_PL_MFI::ShortCondition() { int result=0; //--- idx는 EA 작업 모드를 결정하는데 사용될 수 있습니다 //--- idx=0 - 이 경우 EA는 각 틱에서 트레이드 조건을 체크합니다 //--- idx=1 - 이 경우 EA는 뉴스 바에서만 트레이드 조건을 체크합니다 int idx = StartIndex(); //--- 숏 포지션을 열기 위한 조건 체크 //--- 다크 클라우드 커버 패턴 형성과 MFI &gt; 60 if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (MFI(1) &gt; 60)) result = 80; //--- 롱 포지션 종료 조건 체크 //--- 과매도/과매수 레벨의 신호선 교차 (상향 70, 하향 30) if(((MFI(1) &gt; 70) && (MFI(2) &lt; 70)) || ((MFI(1) &lt; 30) && (MFI(2) &gt; 30))) result = 40; //--- 결과 반환 return(result); } 2.3. MQL5 위자드를 사용한 EA 생성하기 CDC_PL_MFI 클래스는 표준 라이브러리 클래스에 포함되어 있지 않으므로, 이를 사용하기 위해서는 adc_pl_mfi.mqh 파일을 다운로드하여 client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals에 저장해야 합니다. acandlepatterns.mqh 파일도 동일하게 진행해 주세요. 이렇게 하면 MQL5 위자드에서 사용할 수 있습니다. EA를 생성하기 위해 MQL5 위자드를 실행하세요: MQL5 위자드를 사용한 EA 생성 EA의 이름을 지정해 주세요: EA의 일반 속성 그 후 사용될 트레이드 신호 모듈을 선택해야 합니다. EA의 신호 속성 이번 경우에는 하나의 트레이드 신호 모듈만 사용할 것입니다. "MFI로 확인된 다크 클라우드 커버/피어싱 라인 기반 신호" 트레이드 신호 모듈 추가하기: EA의 신호 속성 트레이드 신호 모듈이 추가되었습니다: EA의 신호 속성 트레일링 속성은 선택할 수 있지만,

2011.02.25
MQL5 마법사로 다크 클라우드 커버 및 피어싱 라인 기반 EA 만들기
MetaTrader5
MQL5 마법사로 다크 클라우드 커버 및 피어싱 라인 기반 EA 만들기

안녕하세요, 트레이더 여러분! 오늘은 MQL5 마법사를 이용해 다크 클라우드 커버와 피어싱 라인 패턴에 기반한 자동매매 시스템을 만드는 방법에 대해 알아보겠습니다. 이 마법사는 클라이언트 터미널과 함께 제공되는 표준 라이브러리 클래스를 기반으로 한 자동매매 시스템(EA)을 생성할 수 있도록 도와줍니다. 자신만의 거래 신호 클래스를 만들면 빠르게 거래 아이디어를 확인할 수 있습니다. 자세한 내용은 MQL5 마법사에서 자동매매 시스템 만들기 기사를 참고하세요. 기본적인 아이디어는 다음과 같습니다: 거래 신호 클래스는 CExpertSignal에서 파생되고, 이후 LongCondition() 및 ShortCondition() 가상 메소드를 오버라이드하여 자신만의 메소드를 만들어야 합니다. 러시아어로 된 "최고 트레이더의 전략"라는 책에서는 여러 거래 전략을 다루고 있으며, 우리는 이 중에서 스토캐스틱에 의해 확인된 반전 캔들스틱 패턴에 집중할 것입니다. CCI, MFI, RSI 오실레이터와 함께 사용하는 것이 좋습니다. 캔들스틱 패턴을 확인하기 위해서는 별도의 클래스를 생성하고, 해당 클래스에서 오실레이터로 신호를 확인하면 됩니다. 여기서는 "다크 클라우드 커버/피어싱 라인" 반전 캔들스틱 패턴을 다루고, 이 패턴은 스토캐스틱 지표에 의해 확인됩니다. 거래 신호 모듈은 CCandlePattern 클래스를 기반으로 하며, 캔들스틱 패턴으로 거래 신호를 생성하는 간단한 예를 제공합니다. 1. 다크 클라우드 커버 및 피어싱 라인 반전 캔들스틱 패턴 1.1. 다크 클라우드 커버 이 패턴은 상승 추세의 끝에서 발생하는 하락 반전 캔들스틱입니다. 첫 번째 날에는 긴 흰색 캔들스틱이 형성되고, 두 번째 날에는 갭업이 발생하지만, 두 번째 날의 마감은 첫 번째 날의 중간점 아래에서 이루어집니다. 다크 클라우드 커버 캔들스틱 패턴 "다크 클라우드 커버" 패턴의 인식은 CCandlePattern 클래스의 CheckPatternDarkCloudCover() 메소드에서 수행됩니다. //+------------------------------------------------------------------+ //| 다크 클라우드 커버 캔들스틱 패턴 형성을 확인하는 메소드 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternDarkCloudCover() &nbsp;&nbsp;{ //--- 다크 클라우드 커버 &nbsp;&nbsp; if((Close(2)-Open(2)&gt;AvgBody(1))&nbsp;&nbsp;&amp;&amp; // (긴 흰색) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&lt;Close(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; // &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Close(1)&gt;Open(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; // (이전 몸통 내에서 마감) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (MidOpenClose(2)&gt;CloseAvg(1))&nbsp;&nbsp;&amp;&amp; // (상승 추세) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)&gt;High(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (새로운 고점에서 시작) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} 다크 클라우드 커버 패턴의 형성을 확인하기 위해 CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) 메소드가 사용됩니다. 1.2. 피어싱 라인 두 번째 날의 갭다운은 하락 추세를 지속시키지만, 두 번째 날의 마감은 첫 번째 날 몸통의 중간점 위에 위치하게 됩니다. 이는 곰들에게 바닥이 형성될 수 있음을 나타냅니다. 이 가격 행동은 바 차트보다는 캔들차트에서 더 잘 인식됩니다. 두 번째 날의 마감이 첫 번째 날 몸통에 더 깊이 침투할수록 반전 신호의 성공 가능성이 높아집니다. 피어싱 라인 캔들스틱 패턴 "피어싱 라인" 패턴의 인식은 CCandlePattern 클래스의 CheckPatternPiercingLine() 메소드에서 수행됩니다: //+------------------------------------------------------------------+ //| 피어싱 라인 캔들스틱 패턴 형성을 확인하는 메소드 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternPiercingLine() &nbsp;&nbsp;{ //--- 피어싱 라인 &nbsp;&nbsp; if((Close(1)-Open(1)&gt;AvgBody(1)) &amp;&amp; // (긴 흰색) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(2)-Close(2)&gt;AvgBody(1)) &amp;&amp; // (긴 검은색) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&gt;Close(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; // &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Close(1)&lt;Open(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; // (이전 몸통 내에서 마감) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(MidOpenClose(2)&lt;CloseAvg(2)) &amp;&amp; // (하락 추세) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)&lt;Low(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (이전 저점보다 낮게 시작) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} 피어싱 라인 패턴의 형성을 확인하기 위해 CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) 메소드가 사용됩니다. 2. 스토캐스틱 지표로 확인된 거래 신호 롱 또는 숏 포지션을 열기 위한 거래 신호는 스토캐스틱 오실레이터로 확인해야 합니다. %D 선은 해당 임계값(30 또는 70)보다 커야 하며, 포지션을 종료하는 것은 %D 지표의 값에 따라 결정됩니다. 종료 조건은 두 가지 경우로 나눌 수 있습니다: 만약 %D 선이 반대의 임계값(롱 포지션의 경우 80, 숏 포지션의 경우 20)에 도달했을 때 반전 신호가 확인되지 않았을 때(%D 선이 다음 레벨에 도달할 경우: 롱 포지션의 경우 20, 숏 포지션의 경우 80) 다크 클라우드 커버 패턴, 스토캐스틱 지표로 확인됨 2.1. 롱 포지션 열기 / 숏 포지션 닫기 "피어싱 라인" 패턴은 스토캐스틱 지표로 확인해야 합니다: StochSignal(1)&lt;30 (마지막 완료된 봉의 스토캐스틱 신호선 값이 30보다 작아야 합니다). 숏 포지션은 스토캐스틱 지표의 신호선이 20 또는 80 레벨을 상승 돌파했을 때 종료해야 합니다. //+------------------------------------------------------------------+ //| 시장 진입 및 퇴장 조건을 확인하는 메소드 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //| 1) 시장 진입 (롱 포지션 오픈, 결과=80)&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //| 2) 시장 퇴장 (숏 포지션 종료, 결과=40)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;| //+------------------------------------------------------------------+ int CDC_PL_Stoch::LongCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; //--- idx는 Expert Advisor 작업 모드를 결정하는 데 사용될 수 있습니다. //--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건을 확인합니다. //--- idx=1 - 이 경우 EA는 뉴스 바에서만 거래 조건을 확인합니다. &nbsp;&nbsp;int idx&nbsp;&nbsp; =StartIndex(); //--- 롱 포지션 열기 조건 확인 //--- 피어싱 라인 패턴 형성과 신호선&lt;30 &nbsp;&nbsp;if (CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) &amp;&amp; (StochSignal(1)&lt;30)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; //--- 숏 포지션 종료 조건 확인 //--- 과매도/과매수 레벨의 신호선 교차 (하향 20, 상향 80) &nbsp;&nbsp; if((((StochSignal(1)&gt;20) &amp;&amp; (StochSignal(2)&lt;20)) || &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((StochSignal(1)&gt;80) &amp;&amp; (StochSignal(2)&lt;80)))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; //--- 결과 반환 &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.2. 숏 포지션 열기 / 롱 포지션 닫기 "다크 클라우드 커버" 패턴은 스토캐스틱 지표로 확인해야 합니다: StochSignal(1)&gt;70 (마지막 완료된 봉의 스토캐스틱 신호선 값이 70보다 커야 합니다). 롱 포지션은 스토캐스틱 지표의 신호선이 80 또는 20 레벨을 하향 돌파했을 때 종료해야 합니다. //+------------------------------------------------------------------+ //| 시장 진입 및 퇴장 조건을 확인하는 메소드 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //| 1) 시장 진입 (숏 포지션 오픈, 결과=80)&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //| 2) 시장 퇴장 (롱 포지션 종료, 결과=40)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;| //+------------------------------------------------------------------+ int CDC_PL_Stoch::ShortCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; //--- idx는 Expert Advisor 작업 모드를 결정하는 데 사용될 수 있습니다. //--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건을 확인합니다. //--- idx=1 - 이 경우 EA는 뉴스 바에서만 거래 조건을 확인합니다. &nbsp;&nbsp;int idx&nbsp;&nbsp; =StartIndex(); //--- 숏 포지션 열기 조건 확인 //--- 다크 클라우드 커버 패턴 형성과 신호선&gt;70 &nbsp;&nbsp;if (CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) &amp;&amp; (StochSignal(1)&gt;70)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; //--- 롱 포지션 종료 조건 확인 //--- 과매도/과매수 레벨의 신호선 교차 (하향 80, 상향 20) &nbsp;&nbsp; if((((StochSignal(1)&lt;80) &amp;&amp; (StochSignal(2)&gt;80)) || &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((StochSignal(1)&lt;20) &amp;&amp; (StochSignal(2)&gt;20)))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; //--- 결과 반환 &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.3. MQL5 마법사를 이용한 전문가 상담사 만들기 CDC_PL_Stoch 클래스는 표준 라이브러리 클래스에 포함되어 있지 않으므로, 이를 사용하기 위해서는 adc_pl_stoch.mqh 파일을 다운로드하여 client_terminal_data older\MQL5\Include\Expert\Signal\MySignals에 저장해야 합니다. 같은 방식으로 candlepatterns.mqh 파일도 저장해야 합니다. MetaEditor를 재시작한 후 MQL5 마법사에서 사용할 수 있습니다. 전문가 상담사를 만들기 위해 MQL5 마법사를 실행합니다: MQL5 마법사로 전문가 상담사 만들기 전문가 상담사의 이름을 지정합니다: 전문가 상담사의 일반 속성 그 다음 사용되는 거래 신호 모듈을 선택해야 합니다. 전문가 상담사의 신호 속성 우리의 경우 오직 하나의 거래 신호 모듈만 사용합니다. "스토캐스틱으로 확인된 다크 클라우드 커버/피어싱 라인 기반 신호" 거래 신호 모듈 추가: 전문가 상담사의 신호 속성 거래 신호 모듈이 추가되었습니다: 전문가 상담사의 트레일링 속성 자금 관리 속성에 대해서는 "고정 거래량으로 거래"를 사용합니다: 전문가 상담사의 자금 관리 속성 "완료" 버튼을 누르면 생성된 전문가 상담사의 코드가 Expert_ADC_PL_Stoch.mq5 파일에 저장되며, terminal_data_folder\MQL5\Experts\에 위치하게 됩니다. 생성된 전문가 상담사의 기본 입력 매개변수는 다음과 같습니다: //--- 주요 신호를 위한 입력 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =10;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 오픈을 위한 신호 임계값 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=10&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 종료를 위한 신호 임계값 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0&nbsp;&nbsp;&nbsp; // 거래 실행 가격 수준 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0&nbsp;&nbsp; // 손절매 수준 (포인트 단위) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0&nbsp; // 이익 실현 수준 (포인트 단위) 여기서 다음과 같이 변경해야 합니다: //--- 주요 신호를 위한 입력 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =40;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 오픈을 위한 신호 임계값 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=20&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 종료를 위한 신호 임계값 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0&nbsp;&nbsp;&nbsp; // 거래 실행 가격 수준 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// 손절매 수준 (포인트 단위) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// 이익 실현 수준 (포인트 단위) 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, 테스트 기간: 2010.01.01-2011.02.02, PeriodK=9, PeriodD=5, PeriodSlow=20, MA_period=27). 전문가 상담사 생성 시 고정 볼륨(고정 로트 거래, 0.1)을 사용하였으며, 트레일링 스톱 알고리즘은 사용하지 않았습니다 (트레일링 사용 안 함). 다크 클라우드 커버/피어싱 라인 + 스토캐스틱 기반 전문가 상담사 테스트 결과 최적의 입력 매개변수 세트는 MetaTrader 5 클라이언트 터미널의 전략 테스터를 사용하여 찾을 수 있습니다. MQL5 마법사로 생성된 전문가 상담사 코드가 expert_adc_pl_stoch.mq5에 첨부되어 있습니다.

2011.02.25
MQL5 위자드로 3개 검은 까마귀/3개 흰 병사 패턴과 RSI 기반의 트레이드 신호 만들기
MetaTrader5
MQL5 위자드로 3개 검은 까마귀/3개 흰 병사 패턴과 RSI 기반의 트레이드 신호 만들기

안녕하세요, 여러분! 오늘은 MQL5 위자드를 활용해 표준 라이브러리 클래스를 기반으로 한 자동 매매 시스템, 즉 EA를 만드는 방법에 대해 이야기해보려고 해요. 이 방법은 여러분의 트레이드 아이디어를 빠르게 점검할 수 있도록 도와줍니다. 그럼 시작해볼까요? 먼저, 우리가 만들고자 하는 트레이드 신호 클래스는 CExpertSignal에서 파생됩니다. 여기서 중요한 것은 여러분의 조건에 맞춰 LongCondition()과 ShortCondition() 메서드를 오버라이드(재정의)하는 것입니다. 우리는 여러 트레이딩 전략을 다룬 "최고 트레이더들의 전략"라는 책을 참고할 것이며, 이번 포스트에서는 상대강도지수(RSI)로 확인된 반전 캔들 패턴인 3개의 검은 까마귀와 3개의 흰 병사에 초점을 맞춰볼게요. 1. 3개의 검은 까마귀와 3개의 흰 병사 반전 캔들 패턴 1.1 3개의 검은 까마귀 이 패턴은 현재 상승 추세의 반전을 예측하는 하락 캔들 패턴입니다. 이 패턴은 세 개의 긴 몸체를 가진 캔들로 구성되어 있으며, 각 캔들은 이전 날보다 낮은 가격에 마감되고, 각 세션의 개장은 이전 캔들의 몸체 내에서 이루어집니다. Fig. 1. 3개의 검은 까마귀 캔들 패턴 "3개의 검은 까마귀" 패턴 인식은 CCandlePattern 클래스의 CheckPatternThreeBlackCrows 메서드로 구현됩니다: //+------------------------------------------------------------------+ //| 3개의 검은 까마귀 캔들 패턴 확인 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeBlackCrows() &nbsp;&nbsp;{ //--- 3 Black Crows &nbsp;&nbsp; if((Open(3)-Close(3)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Open(2)-Close(2)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Open(1)-Close(1)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (MidPoint(2)&lt;MidPoint(3)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (MidPoint(1)&lt;MidPoint(2))) &nbsp;&nbsp;&nbsp;&nbsp; return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) 메서드는 "3개의 검은 까마귀" 캔들 패턴의 형성을 확인하는 데 사용됩니다. 1.2 3개의 흰 병사 캔들 패턴 이 패턴은 현재 하락 추세의 반전을 예측하는 상승 캔들 패턴입니다. 세 개의 긴 몸체를 가진 캔들로 구성되며, 각 캔들은 이전 날보다 높은 가격에 마감되고, 각 세션의 개장은 이전 캔들의 몸체 내에서 이루어집니다. 두 번째 날의 캔들은 첫 번째 날의 범위 상반부에서 열려야 하며, 두 번째 날이 끝날 때 근처에서 마감해야 하며, 아주 작은 상단 그림자가 있어야 합니다. 세 번째 날에도 동일한 패턴이 반복됩니다. Fig. 2. 3개의 흰 병사 캔들 패턴 "3개의 흰 병사" 패턴 인식 메서드는 다음과 같습니다: //+------------------------------------------------------------------+ //| 3개의 흰 병사 캔들 패턴 확인 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeWhiteSoldiers() &nbsp;&nbsp;{ &nbsp;&nbsp; //--- 3 White Soldiers &nbsp;&nbsp; if((Close(3)-Open(3)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Close(2)-Open(2)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Close(1)-Open(1)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (MidPoint(2)&gt;MidPoint(3)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (MidPoint(1)&gt;MidPoint(2))) &nbsp;&nbsp;&nbsp;&nbsp; return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) 메서드는 "3개의 흰 병사" 캔들 패턴의 형성을 확인하는 데 사용됩니다. 2. RSI 지표로 확인된 트레이드 신호 롱 포지션 또는 숏 포지션을 열기 위한 트레이드 신호는 RSI 지표로 확인되어야 합니다. RSI의 값은 임계 수준(롱 포지션은 40, 숏 포지션은 60)보다 낮거나 높아야 합니다. 열린 포지션의 마감은 RSI 값에 따라 달라집니다. 두 가지 경우로 나눌 수 있습니다: RSI가 반대 임계 수준(롱 포지션은 70, 숏 포지션은 30)에 도달했을 때 역 신호가 확인되지 않았을 때 (RSI가 다음 수준에 도달했을 때: 롱 포지션은 30, 숏 포지션은 70) Fig. 3. 3개의 검은 까마귀 패턴, 확정된 스토캐스틱 지표 int CML_RSI::LongCondition() - 롱 포지션을 열기 위한 조건을 확인합니다 (80을 반환) 및 숏 포지션을 닫기 위한 조건을 확인합니다 (40을 반환); int CML_RSI::ShortCondition() - 숏 포지션을 열기 위한 조건을 확인합니다 (80을 반환) 및 롱 포지션을 닫기 위한 조건을 확인합니다 (40을 반환). 2.1 롱 포지션 열기/숏 포지션 닫기 "3개의 흰 병사" 패턴의 형성은 RSI 지표로 확인해야 합니다: RSI(1)&lt;40 (마지막 완료된 바의 RSI 값은 40 미만이어야 합니다). 숏 포지션은 RSI 지표가 임계 수준 70이나 30을 상향 돌파했을 때 닫아야 합니다. //+------------------------------------------------------------------+ //| 시장 진입 및 퇴출 조건 확인 | //| 1) 시장 진입 (롱 포지션 열기, 결과=80) | //| 2) 시장 퇴출 (숏 포지션 닫기, 결과=40) | //+------------------------------------------------------------------+ int CBC_WS_RSI::LongCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; //--- idx는 EA 작업 모드를 결정하는 데 사용됩니다 //--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건을 확인합니다 //--- idx=1 - 이 경우 EA는 뉴스 바에서만 거래 조건을 확인합니다 &nbsp;&nbsp;int idx&nbsp;&nbsp; =StartIndex(); //--- 롱 포지션을 열기 위한 조건 확인 //--- 3개의 흰 병사 패턴 및 RSI&lt;30 &nbsp;&nbsp;if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) &amp;&amp; (RSI(1)&lt;40)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; //--- 숏 포지션을 닫기 위한 조건 확인 //--- 과매도/과매수 수준의 신호선 교차 (상향 30, 상향 70) &nbsp;&nbsp;if(((RSI(1)&gt;30) &amp;&amp; (RSI(2)&lt;30)) || ((RSI(1)&gt;70) &amp;&amp; (RSI(2)&lt;70))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; //--- 결과 반환 &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.2 숏 포지션 열기/롱 포지션 닫기 "3개의 검은 까마귀" 패턴의 형성은 RSI 지표로 확인해야 합니다: RSI(1)&gt;60 (마지막 완료된 바의 RSI 값은 60보다 커야 합니다). 롱 포지션은 RSI 지표가 임계 수준 70이나 30을 하향 돌파했을 때 닫아야 합니다. //+------------------------------------------------------------------+ //| 시장 진입 및 퇴출 조건 확인 | //| 1) 시장 진입 (숏 포지션 열기, 결과=80) | //| 2) 시장 퇴출 (롱 포지션 닫기, 결과=40) | //+------------------------------------------------------------------+ int CBC_WS_RSI::ShortCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; //--- idx는 EA 작업 모드를 결정하는 데 사용됩니다 //--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건을 확인합니다 //--- idx=1 - 이 경우 EA는 뉴스 바에서만 거래 조건을 확인합니다 &nbsp;&nbsp;int idx&nbsp;&nbsp; =StartIndex(); //--- 숏 포지션을 열기 위한 조건 확인 //--- 3개의 검은 까마귀 패턴 및 RSI&gt;60 &nbsp;&nbsp;if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) &amp;&amp; (RSI(1)&gt;60)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; //--- 롱 포지션을 닫기 위한 조건 확인 //--- 신호선 교차 (하향 70, 하향 30) &nbsp;&nbsp;if(((RSI(1)&lt;70) &amp;&amp; (RSI(2)&gt;70)) || ((RSI(1)&lt;30) &amp;&amp; (RSI(2)&gt;30))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; //--- 결과 반환 &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.3 MQL5 위자드로 EA 생성하기 CML_RSI 클래스는 표준 라이브러리 클래스에 포함되어 있지 않으므로, 이를 사용하기 위해서는 acml_rsi.mqh 파일을 다운로드하여 client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals 폴더에 저장해야 합니다. candlepatterns.mqh 파일도 동일하게 처리해야 합니다. MQL5 위자드에서 이를 사용하려면 MetaEditor를 재시작해야 합니다. EA를 생성하기 위해 MQL5 위자드를 실행하세요: Fig. 4. MQL5 위자드로 EA 생성하기 EA의 이름을 지정해봅시다: Fig. 5. EA의 일반 속성 이제 사용하려는 트레이드 신호 모듈을 선택해야 합니다. Fig. 6. EA의 신호 속성 우리 경우에는 단 하나의 트레이드 신호 모듈만 사용할 것입니다."3개의 검은 까마귀/3개의 흰 병사 기반의 신호" 트레이드 신호 모듈 추가: Fig. 7. EA의 신호 속성 신호 모듈이 추가되었습니다: Fig. 8. EA의 신호 속성 원하는 트레일링 속성을 선택할 수 있지만, 우리는 "트레일링 스탑 사용하지 않음"을 선택하겠습니다: Fig. 9. EA의 트레일링 속성 자금 관리 속성에 대해, "고정 거래량으로 거래"를 사용하겠습니다: Fig. 10. EA의 자금 관리 속성 "완료" 버튼을 누르면, 생성된 EA 코드가 Expert_ABC_WS_RSI.mq5로 저장되어 terminal_data_folder\MQL5\Experts\에 위치하게 됩니다. 생성된 EA의 기본 입력 매개변수는 다음과 같습니다: //--- 메인 신호 입력 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =10;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 열기 위한 신호 임계값 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=10;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 닫기 위한 신호 임계값 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 거래 실행 가격 수준 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp;&nbsp; // 스톱 로스 수준 (포인트 단위) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp; // 테이크 프로핏 수준 (포인트 단위) 다음과 같이 변경해야 합니다: //--- 메인 신호 입력 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =40;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 열기 위한 신호 임계값 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=20;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 닫기 위한 신호 임계값 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 거래 실행 가격 수준 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0;&nbsp;&nbsp;&nbsp;&nbsp;// 스톱 로스 수준 (포인트 단위) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// 테이크 프로핏 수준 (포인트 단위) Signal_ThresholdOpen/Signal_ThresholdClose 입력 매개변수는 포지션 열기 및 닫기에 대한 임계값 수준을 지정할 수 있습니다. LongCondition() 및 ShortCondition() 메서드의 코드에서 우리는 고정된 임계값을 지정했습니다: 포지션 열기: 80; 포지션 닫기: 40; MQL5 위자드로 생성된 EA는 트레이드 신호 모듈의

2011.02.18
MQL5 마법사로 3개의 검은 까마귀/3개의 흰 병사 패턴과 MFI 기반 거래 신호 만들기
MetaTrader5
MQL5 마법사로 3개의 검은 까마귀/3개의 흰 병사 패턴과 MFI 기반 거래 신호 만들기

안녕하세요, 트레이더 여러분! 오늘은 MQL5 마법사를 활용하여 3개의 검은 까마귀와 3개의 흰 병사 패턴을 기반으로 한 거래 신호를 어떻게 만들 수 있는지에 대해 이야기해보겠습니다. 이 마법사는 메타트레이더 5 클라이언트 터미널과 함께 제공되는 표준 라이브러리 클래스를 기반으로 완성된 전문가 자문(EA)을 생성할 수 있도록 도와줍니다. 여러분의 거래 아이디어를 빠르게 체크하고 싶다면, 자신만의 거래 신호 클래스를 만드는 것이 필요합니다. 이 클래스의 구조와 예제는 MQL5 마법사: 거래 신호 모듈 만들기에서 확인할 수 있습니다. 기본 아이디어는 다음과 같습니다: 거래 신호 클래스는 CExpertSignal에서 파생되며, 이후 LongCondition() 및 ShortCondition() 가상 메서드를 여러분의 메서드로 재정의해야 합니다. 러시아어로 된 책 "최고의 트레이더 전략"에서는 많은 거래 전략을 다루고 있습니다. 여기서는 스토캐스틱, CCI, MFI, RSI와 같은 오실레이터로 확인된 반전 캔들 패턴에 초점을 맞출 것입니다. 가장 좋은 방법은 캔들 패턴의 형성을 체크하기 위해 CExpertSignal에서 파생된 별도의 클래스를 만드는 것입니다. 캔들 패턴에 의해 생성된 거래 신호를 확인하기 위해서는 CCandlePattern에서 파생된 클래스를 작성하고 필요한 기능(예: 오실레이터에 의한 확인)을 추가하면 됩니다. 이제 우리는 MFI 지표로 확인된 "3개의 검은 까마귀/3개의 흰 병사" 반전 캔들 패턴 기반의 신호를 살펴보겠습니다. 거래 신호 모듈은 CCandlePattern 클래스를 기반으로 하며, 캔들 패턴으로 거래 신호를 생성하는 간단한 예입니다. 1. "3개의 검은 까마귀"와 "3개의 흰 병사" 반전 캔들 패턴 1.1. 3개의 검은 까마귀 이것은 현재의 상승 추세가 반전될 것으로 예측하는 하락 캔들 패턴입니다. 이 패턴은 세 개의 연속된 긴 몸체의 캔들로 이루어져 있으며, 각 세션의 시가가 이전 캔들의 몸체 안에서 열리면서 이전 날보다 낮은 가격에 마감됩니다. Fig. 1. "3개의 검은 까마귀" 캔들 패턴 "3개의 검은 까마귀" 패턴의 인식은 CCandlePattern 클래스의 CheckPatternThreeBlackCrows 메서드에서 구현됩니다: //+------------------------------------------------------------------+ //| 3개의 검은 까마귀 캔들 패턴 형성 체크 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeBlackCrows() { &nbsp;&nbsp; //--- 3개의 검은 까마귀 &nbsp;&nbsp; if((Open(3)-Close(3)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp; (Open(2)-Close(2)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp; (Open(1)-Close(1)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp; (MidPoint(2)&lt;MidPoint(3)) &amp;&amp; &nbsp;&nbsp; (MidPoint(1)&lt;MidPoint(2))) &nbsp;&nbsp; return(true); //--- &nbsp;&nbsp; return(false); } CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) 메서드는 "3개의 검은 까마귀" 캔들 패턴의 형성을 체크하는 데 사용됩니다. 1.2. 3개의 흰 병사 캔들 패턴 이것은 현재의 하락 추세가 반전될 것으로 예측하는 상승 캔들 패턴입니다. 이 패턴은 세 개의 연속된 긴 몸체의 캔들로 이루어져 있으며, 각 세션의 시가가 이전 캔들의 몸체 안에서 열리면서 이전 날보다 높은 가격에 마감됩니다. 패턴은 2일 차 캔들이 1일 차 범위의 상단 절반에서 열리는 한 유효합니다. 2일 차가 종료될 때는 매우 작은 상단 그림자가 남거나 상단 그림자가 존재하지 않는 상태에서 마감되어야 합니다. 같은 패턴이 3일 차에도 반복됩니다. Fig. 2. "3개의 흰 병사" 캔들 패턴 여기서 "3개의 흰 병사" 패턴을 인식하기 위한 메서드는 다음과 같습니다: //+------------------------------------------------------------------+ //| 3개의 흰 병사 캔들 패턴 형성 체크 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeWhiteSoldiers() { &nbsp;&nbsp; //--- 3개의 흰 병사 &nbsp;&nbsp; if((Close(3)-Open(3)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp; (Close(2)-Open(2)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp; (Close(1)-Open(1)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp; (MidPoint(2)&gt;MidPoint(3)) &amp;&amp; &nbsp;&nbsp; (MidPoint(1)&gt;MidPoint(2))) &nbsp;&nbsp; return(true); //--- &nbsp;&nbsp; return(false); } CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) 메서드는 "3개의 흰 병사" 캔들 패턴의 형성을 체크하는 데 사용됩니다. 2. MFI 지표로 확인된 거래 신호 롱 또는 숏 포지션을 열기 위한 거래 신호는 MFI 지표로 확인되어야 합니다. MFI 지표의 값은 롱 포지션의 경우 40 미만, 숏 포지션의 경우 60 초과여야 합니다. 열린 포지션의 종료는 MFI 지표의 값에 따라 결정됩니다. 다음 두 가지 경우에 할 수 있습니다: MFI가 반대의 중요한 레벨(롱 포지션의 경우 70, 숏 포지션의 경우 30)에 도달했을 때 반전 신호가 확인되지 않았을 때(MFI 지표가 다음 레벨에 도달: 롱 포지션의 경우 30, 숏 포지션의 경우 70) Fig. 3. MFI 지표로 확인된 "3개의 검은 까마귀" 패턴 int CBC_WS_MFI::LongCondition() - 롱 포지션 개설 조건을 체크하고 (returns 80), 숏 포지션 종료 조건을 체크합니다 (returns 40); int CBC_WS_MFI::ShortCondition() - 숏 포지션 개설 조건을 체크하고 (returns 80), 롱 포지션 종료 조건을 체크합니다 (returns 40). 2.1. 롱 포지션 열기/숏 포지션 닫기 "3개의 흰 병사" 패턴의 형성은 MFI 지표로 확인되어야 합니다: MFi(1)&lt;40 (마지막 완료된 바의 MFI 지표 값이 40 미만이어야 합니다). 숏 포지션은 MFI 지표가 중요한 레벨(70 또는 30)을 상향 돌파했을 때 종료해야 합니다. //+------------------------------------------------------------------+ //| 개장 및 시장 종료 조건 체크 | //| 1) 시장 진입 (롱 포지션 개설, 결과=80) | //| 2) 시장 종료 (숏 포지션 종료, 결과=40) | //+------------------------------------------------------------------+ int CBC_WS_MFI::LongCondition() { &nbsp;&nbsp; int result=0; &nbsp;&nbsp; //--- idx는 EA 작업 모드를 결정하는 데 사용될 수 있습니다 &nbsp;&nbsp; //--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건을 체크합니다 &nbsp;&nbsp; //--- idx=1 - 이 경우 EA는 뉴스 바에서만 거래 조건을 체크합니다 &nbsp;&nbsp; int idx = StartIndex(); &nbsp;&nbsp; //--- 롱 포지션 개설 조건 체크 &nbsp;&nbsp; //--- "3개의 흰 병사" 패턴 형성 및 MFI&lt;40 &nbsp;&nbsp;if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) &amp;&amp; (MFI(1)&lt;40)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; //--- 숏 포지션 종료 조건 체크 &nbsp;&nbsp; //--- 과매수/과매도 레벨의 신호선 교차 (상향 30, 상향 70) &nbsp;&nbsp;if(((MFI(1)&gt;30) &amp;&amp; (MFI(2)&lt;30)) || ((MFI(1)&gt;70) &amp;&amp; (MFI(2)&lt;70))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; &nbsp;&nbsp; //--- 결과 반환 &nbsp;&nbsp; return(result); } 2.2. 숏 포지션 열기/롱 포지션 닫기 "3개의 검은 까마귀" 패턴의 형성은 MFI 지표로 확인되어야 합니다: MFI(1)&gt;60 (마지막 완료된 바의 MFI 지표 값이 60보다 커야 합니다). 롱 포지션은 MFI 지표가 중요한 레벨(70 또는 30)을 상향 돌파했을 때 종료해야 합니다. //+------------------------------------------------------------------+ //| 개장 및 시장 종료 조건 체크 | //| 1) 시장 진입 (숏 포지션 개설, 결과=80) | //| 2) 시장 종료 (롱 포지션 종료, 결과=40) | //+------------------------------------------------------------------+ int CBC_WS_MFI::ShortCondition() { &nbsp;&nbsp; int result=0; &nbsp;&nbsp; //--- idx는 EA 작업 모드를 결정하는 데 사용될 수 있습니다 &nbsp;&nbsp; //--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건을 체크합니다 &nbsp;&nbsp; //--- idx=1 - 이 경우 EA는 뉴스 바에서만 거래 조건을 체크합니다 &nbsp;&nbsp; int idx = StartIndex(); &nbsp;&nbsp; //--- 숏 포지션 개설 조건 체크 &nbsp;&nbsp; //--- "3개의 검은 까마귀" 패턴 형성 및 MFI&gt;60 &nbsp;&nbsp;if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) &amp;&amp; (MFI(1)&gt;60)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; //--- 롱 포지션 종료 조건 체크 &nbsp;&nbsp; //--- 과매수/과매도 레벨의 신호선 교차 (상향 70, 하향 30) &nbsp;&nbsp;if(((MFI(1)&gt;70) &amp;&amp; (MFI(2)&lt;70)) || ((MFI(1)&lt;30) &amp;&amp; (MFI(2)&gt;30))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; &nbsp;&nbsp; //--- 결과 반환 &nbsp;&nbsp; return(result); } 2.3. MQL5 마법사로 전문가 자문 생성하기 CBC_WS_MFI 클래스는 표준 라이브러리 클래스에 포함되어 있지 않으므로, 이를 사용하려면 abc_ws_mfi.mqh 파일을 다운로드하여 client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals에 저장해야 합니다. acandlepatterns.mqh 파일도 동일하게 처리해야 하며, MetaEditor를 재시작한 후 MQL5 마법사에서 사용할 수 있습니다. 전문가 자문을 만들기 위해 MQL5 마법사를 실행합니다: Fig. 4. MQL5 마법사로 전문가 자문 생성하기 전문가 자문의 이름을 지정합니다: Fig. 5. 전문가 자문의 일반 속성 이후에는 사용할 거래 신호 모듈을 선택해야 합니다. Fig. 6. 전문가 자문의 신호 속성 우리의 경우, 단 하나의 거래 신호 모듈만 사용합니다. "MFI로 확인된 3개의 검은 까마귀/3개의 흰 병사 기반 신호" 거래 신호 모듈을 추가합니다: Fig. 7. 전문가 자문의 신호 속성 거래 신호 모듈이 추가되었습니다: Fig. 8. 전문가 자문의 신호 속성 원하는 트레일링 속성을 선택할 수 있지만, 우리는 "트레일링 스탑 사용 안 함"을 사용합니다: Fig. 9. 전문가 자문의 트레일링 속성 자금 관리 속성과 관련하여, 우리는 "고정 거래량으로 거래"를 사용합니다: Fig. 10. 전문가 자문의 자금 관리 속성 "완료" 버튼을 누르면 생성된 전문가 자문의 코드가 Expert_ABC_WS_MFI.mq5에 저장되며, terminal_data_folder\MQL5\Experts\에 위치하게 됩니다. 생성된 전문가 자문의 기본 입력 매개변수는 다음과 같습니다: //--- 메인 신호의 입력 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =10;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 개설을 위한 신호 임계값 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=10;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 종료를 위한 신호 임계값 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 거래를 실행할 가격 수준 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp;&nbsp; // 스톱 로스 수준 (포인트 단위) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0&nbsp;&nbsp; // 이익 실현 수준 (포인트 단위) 다음과 같이 교체해야 합니다: //--- 메인 신호의 입력 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =40;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 개설을 위한 신호 임계값 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=20;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 종료를 위한 신호 임계값 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 거래를 실행할 가격 수준 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0;&nbsp;&nbsp;&nbsp;&nbsp;// 스톱 로스 수준 (포인트 단위) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// 이익 실현 수준 (포인트 단위) 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, 테스트 기간: 2010.01.01-2011.03.16, PeriodMFI=37, MA_period=13)로 백테스트해 보겠습니다. 전문가 자문 생성 시 고정 볼륨(고정 로트 거래, 0.1)을 사용했으며, 트레일링 스탑 알고리즘은 사용하지 않았습니다(트레일링 사용 안함). Fig. 11. 3개의 검은 까마귀/3개의 흰 병사 + MFI 기반의 전문가 자문 테스트 결과 최고의 입력 매개변수 집합은 MetaTrader 5 클라이언트 터미널의 전략 테스터를 사용하여 찾을 수 있습니다. MQL5 마법사로 생성된 전문가 자문의 코드는 expert_abc_ws_mfi.mq5에 첨부되어 있습니다.

2011.02.18
MQL5 위자드를 활용한 3 블랙 크로우/3 화이트 솔져 매매 신호 생성하기
MetaTrader5
MQL5 위자드를 활용한 3 블랙 크로우/3 화이트 솔져 매매 신호 생성하기

안녕하세요, 트레이더 여러분! 오늘은 MQL5 위자드를 이용해 매매 신호를 생성하는 방법을 알아보겠습니다. 이 도구를 사용하면 메타트레이더 5에서 사용할 수 있는 준비된 전문가 어드바이저(EA)를 쉽게 만들 수 있습니다. 원하는 매매 신호 클래스만 만들면 여러분의 트레이딩 아이디어를 빠르게 확인할 수 있습니다. 클래스 구조와 예시는 MQL5 위자드: 트레이딩 신호 모듈 생성 방법에서 확인할 수 있습니다. 기본적인 아이디어는 다음과 같습니다. 매매 신호 클래스는 CExpertSignal에서 파생됩니다. 이후, LongCondition()와 ShortCondition() 가상 메서드를 여러분의 방법으로 오버라이드 해야 합니다. 러시아어로 된 책 "최고 트레이더의 전략들"에서는 많은 매매 전략을 다루고 있습니다. 여기서는 스톡캐스틱, CCI, MFI, RSI와 같은 오실레이터로 확인된 반전 캔들 패턴에 집중해 보겠습니다. 가장 좋은 방법은 캔들 패턴 형성을 체크하기 위해 CExpertSignal에서 파생된 별도의 클래스를 만드는 것입니다. 캔들 패턴으로 생성된 매매 신호를 확인하기 위해서는 CCandlePattern에서 파생된 클래스를 작성하고, 필요한 기능(예: 오실레이터에 의한 확인)을 추가하면 충분합니다. 이번에는 3 블랙 크로우/3 화이트 솔져 반전 캔들 패턴을 기반으로 한 신호를 다루겠습니다. CCI 지표로 확인된 매매 신호 모듈은 CCandlePattern 클래스를 기반으로 하며, 캔들 패턴으로 매매 신호를 생성하는 간단한 예제를 제공합니다. 1. 3 블랙 크로우 및 3 화이트 솔져 반전 캔들 패턴 1.1. 3 블랙 크로우 3 블랙 크로우는 현재의 상승 추세가 반전될 것임을 예측하는 약세 캔들 패턴입니다. 이 패턴은 세 개의 연속된 긴 바디의 캔들로 구성되며, 각각이 이전 날보다 낮은 가격으로 마감하고, 각 세션의 시가는 이전 캔들의 바디 안에서 이루어집니다. Fig. 1. 3 블랙 크로우 캔들 패턴 "3 블랙 크로우" 패턴을 인식하는 CheckPatternThreeBlackCrows 메서드는 CCandlePattern 클래스에서 구현되어 있습니다: //+------------------------------------------------------------------+ //| 3 블랙 크로우 캔들 패턴 확인 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeBlackCrows() { //--- 3 블랙 크로우 if((Open(3) - Close(3) > AvgBody(1)) && (Open(2) - Close(2) > AvgBody(1)) && (Open(1) - Close(1) > AvgBody(1) && (MidPoint(2) < MidPoint(3)) && (MidPoint(1) < MidPoint(2))) return (true); //--- return (false); } CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) 메서드는 "3 블랙 크로우" 캔들 패턴 형성을 확인하는 데 사용됩니다. 1.2. 3 화이트 솔져 캔들 패턴 3 화이트 솔져는 현재의 하락 추세가 반전될 것임을 예측하는 강세 캔들 패턴입니다. 이 패턴은 세 개의 연속된 긴 바디의 캔들로 구성되며, 각각이 이전 날보다 높은 가격으로 마감하고, 각 세션의 시가는 이전 캔들의 바디 안에서 이루어집니다. 이 패턴은 둘째 날의 캔들이 첫날의 범위의 상반부에서 열리면 유효합니다. 둘째 날의 마지막에는 거의 없는 상단 그림자가 남겨져야 하며, 같은 패턴이 셋째 날 반복되어야 합니다. Fig. 2. 3 화이트 솔져 캔들 패턴 여기에는 "3 화이트 솔져" 패턴 인식을 위한 메서드가 있습니다: //+------------------------------------------------------------------+ //| 3 화이트 솔져 캔들 패턴 확인 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeWhiteSoldiers() { //--- 3 화이트 솔져 if((Close(3) - Open(3) > AvgBody(1)) && (Close(2) - Open(2) > AvgBody(1)) && (Close(1) - Open(1) > AvgBody(1) && (MidPoint(2) > MidPoint(3)) && (MidPoint(1) > MidPoint(2))) return (true); //--- return (false); } CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) 메서드는 "3 화이트 솔져" 캔들 패턴 형성을 확인하는 데 사용됩니다. 2. CCI 지표로 확인된 매매 신호 롱 또는 숏 포지션을 열기 위한 매매 신호는 CCI 지표로 확인되어야 합니다. CCI의 값은 기준선(-50은 롱 포지션, 50은 숏 포지션)보다 높거나 낮아야 합니다. 개설된 포지션의 마감은 CCI의 값에 따라 달라집니다. 이는 두 가지 경우에 이루어질 수 있습니다: CCI 선이 반대 기준선에 도달했을 때 (롱 포지션은 80, 숏 포지션은 -80) 반전 신호가 확인되지 않았을 때 (롱 포지션은 -80, 숏 포지션은 80에 도달했을 때) Fig. 3. 3 블랙 크로우 패턴, CCI 지표로 확인 int CBC_WS_CCI::LongCondition() - 롱 포지션을 열기 위한 조건을 체크 (결과는 80) 및 숏 포지션을 마감 (결과는 40); int CBC_WS_CCI::ShortCondition() - 숏 포지션을 열기 위한 조건을 체크 (결과는 80) 및 롱 포지션을 마감 (결과는 40). 2.1. 롱 포지션 열기/숏 포지션 닫기 "3 블랙 크로우" 패턴이 CCI 지표로 확인되어야 합니다: CCI(1) < -50 (마지막 완료된 바의 CCI 값이 -50보다 작아야 합니다). 숏 포지션은 CCI 지표가 -80 기준선을 위로 교차하거나 80 기준선을 아래로 교차했을 때 닫아야 합니다. //+------------------------------------------------------------------+ //| 시장 진입 및 퇴출 조건 체크 | //+------------------------------------------------------------------+ int CBC_WS_CCI::LongCondition() { int result=0; //--- idx는 전문가 어드바이저 작업 모드를 결정하는 데 사용될 수 있음 //--- idx=0 - 이 경우 EA가 각 틱에서 거래 조건을 체크함 //--- idx=1 - 이 경우 EA가 뉴스 바에서만 거래 조건을 체크함 int idx = StartIndex(); //--- 롱 포지션을 열기 위한 조건 체크 //--- 3 화이트 솔져 패턴 및 CCI < -50 if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) && (CCI(1) < -50)) result = 80; //--- 숏 포지션 마감 조건 체크 //--- 과매수/과매도 레벨의 신호선 교차 (하향 -80, 하향 -80) if(((CCI(1) > 80) && (CCI(2) < -80)) || ((CCI(1) < 80) && (CCI(2) > 80))) result = 40; //--- 결과 반환 return(result); } 2.2. 숏 포지션 열기/롱 포지션 닫기 "3 화이트 솔져" 패턴이 CCI 지표로 확인되어야 합니다: CCI(1) > 50 (마지막 완료된 바의 CCI 값이 50보다 커야 합니다). 롱 포지션은 CCI 지표가 -80 또는 80 레벨을 아래로 교차했을 때 닫아야 합니다. //+------------------------------------------------------------------+ //| 시장 진입 및 퇴출 조건 체크 | //+------------------------------------------------------------------+ int CBC_WS_CCI::ShortCondition() { int result=0; //--- idx는 전문가 어드바이저 작업 모드를 결정하는 데 사용될 수 있음 //--- idx=0 - 이 경우 EA가 각 틱에서 거래 조건을 체크함 //--- idx=1 - 이 경우 EA가 뉴스 바에서만 거래 조건을 체크함 int idx = StartIndex(); //--- 숏 포지션을 열기 위한 조건 체크 //--- 3 블랙 크로우 패턴 및 CCI > 50 if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) && (CCI(1) > 50)) result = 80; //--- 롱 포지션 마감 조건 체크 //--- 과매수/과매도 레벨의 신호선 교차 (하향 -80, 하향 80) if(((CCI(1) < 80) && (CCI(2) > 80)) || ((CCI(1) < -80) && (CCI(2) > -80))) result = 40; //--- 결과 반환 return(result); } 2.3. MQL5 위자드를 사용한 전문가 어드바이저 생성하기 CBC_WS_CCI 클래스는 표준 라이브러리 클래스에 포함되어 있지 않으므로 이를 사용하려면 acbc_ws_cci.mqh 파일을 다운로드하여 client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals에 저장해야 합니다. candlepatterns.mqh 파일도 같은 방법으로 해야 합니다. MQL5 위자드에서 사용할 수 있도록 메타에디터를 재시작해야 합니다. 전문가 어드바이저를 생성하기 위해 MQL5 위자드를 실행합니다: Fig. 4. MQL5 위자드로 전문가 어드바이저 생성 전문가 어드바이저의 이름을 지정해 줍니다: Fig. 5. 전문가 어드바이저의 일반 속성 그 후 사용할 매매 신호 모듈을 선택해야 합니다. Fig. 6. 전문가 어드바이저의 신호 속성 이번 경우에는 매매 신호 모듈을 하나만 사용합니다. "CCI로 확인된 3 블랙 크로우/3 화이트 솔져 기반 신호" 매매 신호 모듈 추가: Fig. 7. 전문가 어드바이저의 신호 속성 신호 모듈이 추가되었습니다: Fig. 8. 전문가 어드바이저의 신호 속성 트레일링 속성을 선택할 수 있지만, 우리는 "트레일링 스탑 사용 안 함"을 사용할 것입니다: Fig. 9. 전문가 어드바이저의 트레일링 속성 자금 관리 속성에 관해서는 "고정 거래량으로 거래"를 사용할 것입니다: Fig. 10. 전문가 어드바이저의 자금 관리 속성 "완료" 버튼을 누르면 생성된 전문가 어드바이저의 코드가 Expert_ABC_WS_CCI.mq5로 생성되며, terminal_data_folder\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, 테스트 기간: 2010.01.01-2011.03.16, PeriodCCI=37, MA_period=13)에 대한 백테스팅을 살펴보겠습니다. 전문가 어드바이저 생성 시 고정 볼륨(고정 로트 거래, 0.1)을 사용했으며, 트레일링 스탑 알고리즘은 사용하지 않았습니다 (트레일링 사용 안 함). Fig. 11. 3 블랙 크로우/3 화이트 솔져 + CCI 기반 전문가 어드바이저의 테스트 결과 최적의 입력 매개변수 세트는 메타트레이더 5 클라이언트 터미널의 전략 테스터를 사용하여 찾을 수 있습니다. MQL5 위자드로 생성된 전문가 어드바이저의 코드는 expert_abc_ws_cci.mq5로 첨부되어 있습니다.

2011.02.18
MQL5 위자드로 생성하는 3흑관/3백병전 환형 패턴 기반 거래 신호
MetaTrader5
MQL5 위자드로 생성하는 3흑관/3백병전 환형 패턴 기반 거래 신호

안녕하세요, 트레이더 여러분! 오늘은 MQL5 위자드를 통해 표준 라이브러리 클래스를 활용하여 거래 신호를 생성하는 방법에 대해 이야기해볼게요. 이 과정을 통해 여러분의 트레이딩 아이디어를 빠르게 검증할 수 있습니다. 필요한 것은 자신만의 거래 신호 클래스를 만드는 것뿐입니다. 클래스 구조와 예제는 MQL5 위자드: 거래 신호 모듈 생성 방법에서 확인할 수 있어요. 기본적인 아이디어는 다음과 같습니다. 거래 신호 클래스는 CExpertSignal에서 파생되며, 여기서 LongCondition()와 ShortCondition() 가상 메서드를 여러분의 메서드로 오버라이드해야 합니다. 러시아어로 된 "최고의 트레이더의 전략"라는 책에서는 다양한 트레이딩 전략이 소개되어 있습니다. 우리는 스톡캐스틱, CCI, MFI, RSI와 같은 오실레이터로 확인된 반전 캔들 패턴에 집중해 보겠습니다. 가장 좋은 방법은 캔들 패턴 형성을 확인하기 위해 CExpertSignal에서 파생된 별도의 클래스를 만드는 것입니다. 캔들 패턴으로 생성된 거래 신호를 확인하기 위해, CCandlePattern에서 파생된 클래스를 작성하고 필요한 기능(예: 오실레이터에 의한 확인)을 추가하면 됩니다. 1. "3흑관" 및 "3백병전" 반전 캔들 패턴 1.1. 3흑관 3흑관은 현재 상승 추세의 반전을 예측하기 위해 사용되는 약세 캔들 패턴입니다. 이 패턴은 이전 날보다 낮게 마감된 세 개의 연속 긴 몸체 캔들로 구성되며, 각 세션의 열기는 이전 캔들의 몸체 안에서 발생합니다. 그림 1. 3흑관 캔들 패턴 "3흑관" 패턴 인식은 CCandlePattern 클래스의 CheckPatternThreeBlackCrows 메서드에서 구현됩니다: //+------------------------------------------------------------------+ //| 3흑관 캔들 패턴 형성 확인하기 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeBlackCrows() &nbsp;&nbsp;{ //--- 3흑관 &nbsp;&nbsp; if((Open(3)-Close(3)&gt;AvgBody(1)) &amp;&amp; //(긴 검은) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Open(2)-Close(2)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Open(1)-Close(1)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (MidPoint(2)&lt;MidPoint(3)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (MidPoint(1)&lt;MidPoint(2))) &nbsp;&nbsp;&nbsp;&nbsp; return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) 메서드는 "3흑관" 캔들 패턴 형성을 확인하는 데 사용됩니다. 1.2. 3백병전 캔들 패턴 3백병전은 현재 하락 추세의 반전을 예측하기 위해 사용되는 강세 캔들 패턴입니다. 이 패턴은 이전 날보다 높게 마감된 세 개의 연속 긴 몸체 캔들로 구성되며, 각 세션의 열기는 이전 캔들의 몸체 안에서 발생합니다. 패턴은 둘째 날의 캔들이 첫째 날의 범위의 상단 절반에서 열리면 유효합니다. 둘째 날이 끝날 때에는 높은 값 근처에서 마감해야 하며, 위쪽 그림자는 거의 존재하지 않거나 매우 작아야 합니다. 같은 패턴이 셋째 날에도 반복됩니다. 그림 2. 3백병전 캔들 패턴 여기 3백병전 패턴 인식을 위한 메서드입니다: //+------------------------------------------------------------------+ //| 3백병전 캔들 패턴 형성 확인하기 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeWhiteSoldiers() &nbsp;&nbsp;{ &nbsp;&nbsp; //--- 3백병전 &nbsp;&nbsp; if((Close(3)-Open(3)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Close(2)-Open(2)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Close(1)-Open(1)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (MidPoint(2)&gt;MidPoint(3)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (MidPoint(1)&gt;MidPoint(2))) &nbsp;&nbsp;&nbsp;&nbsp; return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) 메서드는 "3백병전" 캔들 패턴 형성을 확인하는 데 사용됩니다. 2. 스톡캐스틱 지표로 확인된 거래 신호 롱 포지션 또는 숏 포지션을 열기 위한 거래 신호는 스톡캐스틱 오실레이터로 확인되어야 합니다. 신호 %D 라인은 해당 임계 수준(30 또는 70)보다 커야 하거나 작아야 합니다. 열린 포지션의 마감은 %D 지표의 값에 따라 결정됩니다. 두 가지 경우에 이루어질 수 있습니다: %D 라인이 반대 임계 수준(롱 포지션의 경우 80, 숏 포지션의 경우 20)에 도달했을 때 역신호가 확인되지 않을 때(%D 라인이 다음 수준에 도달할 때: 롱 포지션의 경우 20, 숏 포지션의 경우 80) 그림 3. 스톡캐스틱 지표로 확인된 3백병전 패턴 입장 및 퇴장 조건 검사는 두 개의 메서드에서 구현됩니다: int CBC_WS_Stoch::LongCondition() - 롱 포지션을 열기 위한 조건을 확인합니다(80 반환) 및 숏 포지션을 마감합니다(40 반환); int CBC_WS_Stoch::ShortCondition() - 숏 포지션을 열기 위한 조건을 확인합니다(80 반환) 및 롱 포지션을 마감합니다(40 반환). 2.1. 롱 포지션 열기/숏 포지션 마감하기 "3백병전" 패턴 형성은 스톡캐스틱 지표로 확인되어야 합니다: StochSignal(1)&lt;30 (스톡캐스틱 지표의 신호 라인이 마지막으로 완료된 바에서 30보다 작아야 합니다). 신호 라인이 20 또는 80 수준을 상향으로 교차했을 때 숏 포지션을 마감해야 합니다. //+------------------------------------------------------------------+ //| 시장 진입 및 퇴장 조건 확인하기 | //| 1) 시장 진입 (롱 포지션 열기, 결과=80) | //| 2) 시장 퇴장 (숏 포지션 마감, 결과=40) | //+------------------------------------------------------------------+ int CBC_WS_Stoch::LongCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; &nbsp;&nbsp; //--- idx는 EA 작업 모드를 결정하는 데 사용될 수 있습니다 &nbsp;&nbsp; //--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건을 검사합니다 &nbsp;&nbsp; //--- idx=1 - 이 경우 EA는 뉴스 바에서만 거래 조건을 검사합니다 &nbsp;&nbsp; int idx&nbsp;&nbsp; =StartIndex(); &nbsp;&nbsp; //--- 롱 포지션을 열기 위한 조건 검사 &nbsp;&nbsp; //--- 3백병전 패턴 형성 및 신호 라인&lt;30 &nbsp;&nbsp;if (CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) &amp;&amp; (StochSignal(1)&lt;30)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; //--- 숏 포지션을 마감하기 위한 조건 검사 &nbsp;&nbsp; //--- 신호 라인 과매도/과매수 수준 교차 (하향 20, 상향 80) &nbsp;&nbsp; if((((StochSignal(1)&gt;20) &amp;&amp; (StochSignal(2)&lt;20)) || &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((StochSignal(1)&gt;80) &amp;&amp; (StochSignal(2)&lt;80)))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; &nbsp;&nbsp; //--- 결과 반환 &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.2. 숏 포지션 열기/롱 포지션 마감하기 "3흑관" 패턴 형성은 스톡캐스틱 지표로 확인되어야 합니다: StochSignal(1)&gt;70 (스톡캐스틱 지표의 신호 라인이 마지막으로 완료된 바에서 70보다 커야 합니다). 롱 포지션은 신호 라인이 80 또는 20 수준을 하향으로 교차했을 때 마감해야 합니다. //+------------------------------------------------------------------+ //| 시장 진입 및 퇴장 조건 확인하기 | //| 1) 시장 진입 (숏 포지션 열기, 결과=80) | //| 2) 시장 퇴장 (롱 포지션 마감, 결과=40) | //+------------------------------------------------------------------+ int CBC_WS_Stoch::ShortCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; &nbsp;&nbsp; //--- idx는 EA 작업 모드를 결정하는 데 사용될 수 있습니다 &nbsp;&nbsp; //--- idx=0 - 이 경우 EA는 각 틱에서 거래 조건을 검사합니다 &nbsp;&nbsp; //--- idx=1 - 이 경우 EA는 뉴스 바에서만 거래 조건을 검사합니다 &nbsp;&nbsp; int idx&nbsp;&nbsp; =StartIndex(); &nbsp;&nbsp; //--- 숏 포지션을 열기 위한 조건 검사 &nbsp;&nbsp; //--- 3흑관 패턴 형성 및 신호 라인&gt;70 &nbsp;&nbsp;if (CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) &amp;&amp; (StochSignal(1)&gt;70)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; //--- 롱 포지션을 마감하기 위한 조건 검사 &nbsp;&nbsp; //--- 신호 라인 과매도/과매수 수준 교차 (하향 80, 상향 20) &nbsp;&nbsp; if((((StochSignal(1)&lt;80) &amp;&amp; (StochSignal(2)&gt;80)) || &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((StochSignal(1)&lt;20) &amp;&amp; (StochSignal(2)&gt;20)))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; &nbsp;&nbsp; //--- 결과 반환 &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.3. MQL5 위자드로 Expert Advisor 만들기 CBC_WS_Stoch 클래스는 표준 라이브러리 클래스에 포함되어 있지 않으므로, 사용하려면 acbc_ws_stoch.mqh 파일을 다운로드하여 client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignals에 저장해야 합니다. candlepatterns.mqh 파일도 같은 방법으로 처리해야 합니다. MQL5 위자드에서 사용하기 위해 MetaEditor를 재시작하면 됩니다. Expert Advisor를 만들기 위해 MQL5 위자드를 실행하세요: 그림 4. MQL5 위자드로 Expert Advisor 만들기 Expert Advisor의 이름을 지정합니다: 그림 5. Expert Advisor의 일반 속성 그 다음 사용될 거래 신호 모듈을 선택해야 합니다. 그림 6. Expert Advisor의 신호 속성 이번 경우에는 하나의 거래 신호 모듈만 사용합니다. "스톡캐스틱으로 확인된 3흑관/3백병전 기반 신호" 모듈을 추가합니다: 그림 7. Expert Advisor의 신호 속성 거래 신호 모듈이 추가되었습니다: 그림 8. Expert Advisor의 신호 속성 원하는 트레일링 속성을 선택할 수 있지만, "트레일링 스톱 미사용"을 선택하겠습니다: 그림 9. Expert Advisor의 트레일링 속성 자금 관리 속성에 대해서는 "고정 거래량으로 거래"를 사용하겠습니다: 그림 10. Expert Advisor의 자금 관리 속성 "완료" 버튼을 누르면, 생성된 Expert Advisor의 코드가 Expert_ABC_WS_Stoch.mq5에 저장됩니다. 이 파일은 terminal_data_folder\MQL5\Experts\에 위치하게 됩니다. 생성된 Expert Advisor의 기본 입력 매개변수는 다음과 같습니다: //--- 메인 신호의 입력 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =10;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 열기 위한 신호 임계값 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=10;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 닫기 위한 신호 임계값 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 거래 실행 가격 수준 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp;&nbsp; // 손절매 수준(포인트) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp;&nbsp; // 이익 실현 수준(포인트) 다음으로 변경해야 합니다: //--- 메인 신호의 입력 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =40;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 열기 위한 신호 임계값 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=20;&nbsp;&nbsp;&nbsp;&nbsp; // 포지션 닫기 위한 신호 임계값 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 거래 실행 가격 수준 input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0;&nbsp;&nbsp;&nbsp;&nbsp;// 손절매 수준(포인트) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// 이익 실현 수준(포인트) Signal_ThresholdOpen/Signal_ThresholdClose 입력 매개변수를 통해 포지션의 개설 및 마감 임계 수준을 지정할 수 있습니다. LongCondition() 및 ShortCondition() 메서드의 코드에서는 임계 수준의 고정 값을 지정했습니다: 포지션 오픈: 80; 포지션 클로즈: 40. MQL5 위자드로 생성된 Expert Advisor는 거래 신호 모듈의

2011.02.16
처음 이전 56 57 58 59 60 61 62 63 64 다음 마지막