안녕하세요, 트레이더 여러분! 오늘은 MQL5 위자드를 활용하여 RSI(상대강도지수)를 기반으로 한 매매 신호를 생성하는 방법에 대해 알아보겠습니다. MQL5 위자드는 클라이언트 터미널과 함께 제공되는 표준 라이브러리 클래스를 기반으로 즉시 사용할 수 있는 EA(전문 상담사)를 만들 수 있게 도와줍니다. 이 도구를 통해 여러분의 매매 아이디어를 신속하게 검토할 수 있으니 꼭 활용해보세요!
기본적으로, 매매 신호 클래스는 CExpertSignal에서 파생됩니다. 그 후, 여러분의 고유한 매매 조건을 적용하기 위해 LongCondition()와 ShortCondition() 가상 메소드를 오버라이드해야 합니다.
또한, "최고 트레이더의 전략"라는 책에서는 다양한 매매 전략이 다루어지고 있습니다. 여기서는 RSI, 스토캐스틱, CCI, MFI와 같은 보조 지표로 확인된 반전 캔들 패턴에 중점을 두겠습니다.
먼저, "Bullish Meeting Lines"와 "Bearish Meeting Lines"라는 두 가지 반전 캔들 패턴을 살펴보겠습니다. 이 패턴들은 각각 하락세의 반전을 나타냅니다.
1. 반전 캔들 패턴 "Meeting Lines"
1.1. Bullish Meeting Lines
이 패턴은 두 개의 캔들(하락 캔들과 상승 캔들)로 구성되며, 종가가 거의 동일해야 합니다. 두 캔들의 몸통 길이는 평균 몸통 길이보다 커야 합니다.
"Bullish Meeting Lines" 패턴은 하락 추세의 반전을 나타냅니다.

Fig. 1. Bullish Meeting Lines 패턴
"Bullish Meeting Lines" 패턴의 인식은 CheckPatternBullishMeetingLines() 메소드에서 구현됩니다:
//+--------------------------------------------------------------------+ //| "Bullish Meeting Lines" 캔들 패턴을 확인합니다. | //+--------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishMeetingLines() { //--- Bullish Meeting Lines if((Open(2) - Close(2) > AvgBody(1)) && ((Close(1) - Open(1) > AvgBody(1)) && (MathAbs(Close(1) - Close(2) < 0.1 * AvgBody(1))) return(true);//--- return(false); }
이 메소드는 "Bullish Meeting Lines" 캔들 패턴의 형성을 확인하는 데 사용됩니다.
1.2. Bearish Meeting Lines
이 패턴은 두 개의 캔들(상승 캔들과 하락 캔들)로 구성되며, 종가가 거의 동일해야 합니다. 두 캔들의 몸통 길이는 평균 몸통 길이보다 커야 합니다.
"Bearish Meeting Lines" 패턴은 하락 추세의 반전을 나타냅니다.

Fig. 2. Bearish Meeting Lines 패턴
"Bearish Meeting Lines" 패턴의 인식은 CheckPatternBearishMeetingLines() 메소드에서 구현됩니다:
//+--------------------------------------------------------------------+ //| "Bearish Meeting Lines" 캔들 패턴을 확인합니다. | //+--------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishMeetingLines() { //--- Bearish Meeting Lines if((Close(2) - Open(2) > AvgBody(1)) && ((Open(1) - Close(1) > AvgBody(1)) && (MathAbs(Close(1) - Close(2) < 0.1 * AvgBody(1))) return(true);//--- return(false); }
이 메소드는 "Bearish Meeting Lines" 캔들 패턴의 형성을 확인하는 데 사용됩니다.
2. RSI 지표로 확인된 매매 신호
매매 신호를 열거나 닫기 위해서는 RSI 지표로 확인해야 합니다. RSI 값은 기준 레벨(롱 포지션은 40, 숏 포지션은 60)보다 낮거나 높아야 합니다.
포지션을 닫는 것은 다음 두 가지 경우에 가능합니다:
- RSI가 반대 기준 레벨(롱 포지션은 70, 숏 포지션은 30)에 도달했을 때
- 역신호가 확인되지 않았을 때(RSI가 다음 레벨(롱 포지션은 30, 숏 포지션은 70)에 도달했을 때)

Fig. 3. Bearish Meeting Lines 패턴, RSI로 확인됨
int CML_RSI::LongCondition()- 롱 포지션을 열기 위한 조건을 확인(결과는 80)하며, 숏 포지션 닫기(결과는 40);int CML_RSI::ShortCondition()- 숏 포지션을 열기 위한 조건을 확인(결과는 80)하며, 롱 포지션 닫기(결과는 40).
2.1. 롱 포지션 열기/숏 포지션 닫기
"Bullish Meeting Lines" 패턴은 RSI 지표로 확인되어야 합니다: RSI(1) < 40 (마지막 완료된 바의 RSI 값이 40보다 작아야 함).
숏 포지션은 RSI 지표가 기준 레벨 70 또는 30을 위로 교차했을 때 닫아야 합니다.
//+------------------------------------------------------------------+ //| 시장 진입 및 퇴출 조건을 확인합니다. | //| 1) 시장 진입 (롱 포지션 개설, 결과=80) | //| 2) 시장 퇴출 (숏 포지션 종료, 결과=40) | //+------------------------------------------------------------------+ int CML_RSI::LongCondition() { int result = 0; int idx = StartIndex(); if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) && (RSI(1) < 40)) result = 80;//--- 숏 포지션 종료 조건 확인 if(((RSI(1) > 30) && (RSI(2) < 30)) || ((RSI(1) > 70) && (RSI(2) < 70))) result = 40; //--- 결과 반환 return(result); }
2.2. 숏 포지션 열기/롱 포지션 닫기
"Bearish Meeting Lines" 패턴은 RSI 지표로 확인되어야 합니다: RSI(1) > 60 (마지막 완료된 바의 RSI 값이 60보다 커야 함).
롱 포지션은 RSI 지표가 기준 레벨 70 또는 30을 아래로 교차했을 때 닫아야 합니다.
//+------------------------------------------------------------------+ //| 시장 진입 및 퇴출 조건을 확인합니다. | //| 1) 시장 진입 (숏 포지션 개설, 결과=80) | //| 2) 시장 퇴출 (롱 포지션 종료, 결과=40) | //+------------------------------------------------------------------+ int CML_RSI::ShortCondition() { int result = 0; int idx = StartIndex(); if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) && (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 위자드를 이용한 EA 생성
CML_RSI 클래스는 표준 라이브러리 클래스에 포함되어 있지 않으므로 사용하기 위해서는 acml_rsi.mqh 파일을 다운로드하여 클라이언트 터미널 데이터 폴더의 MQL5\Include\Expert\Signal\MySignals에 저장해야 합니다. 동일하게 acandlepatterns.mqh 파일도 저장해야 합니다. 이후 MQL5 위자드를 재시작하면 사용할 수 있습니다.
EA를 생성하기 위해 MQL5 위자드를 실행하세요:

Fig. 4. MQL5 위자드로 EA 생성
EA의 이름을 지정해 주세요:

Fig. 5. EA의 일반 속성
그 후 사용하고자 하는 매매 신호 모듈을 선택해야 합니다.

Fig. 6. EA의 신호 속성
이번 경우에는 매매 신호 모듈을 하나만 사용합니다.
"RSI로 확인된 Bullish/Bearish Meeting Lines 기반의 신호" 모듈을 추가합니다:

Fig. 7. EA의 신호 속성
매매 신호 모듈이 추가되었습니다:

Fig. 8. EA의 신호 속성
원하는 트레일링 속성을 선택할 수 있지만, "트레일링 스탑 사용 안 함"을 사용할 것입니다:

Fig. 9. EA의 트레일링 속성
자금 관리 속성과 관련하여, "고정 거래량으로 거래"를 사용할 것입니다:

Fig. 10. EA의 자금 관리 속성
"완료" 버튼을 누르면 생성된 EA의 코드가 Expert_AML_RSI.mq5로 저장되며, 터미널 데이터 폴더의 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을 반환하지만, 주요 모듈의 투표 결과는 "투표" 평균 계산에 사용됩니다. 우리의 경우 주요 모듈 + 1개의 매매 신호 모듈이므로, 기준 값을 설정할 때 이러한 점을 고려해야 합니다. 따라서 ThresholdOpen과 ThresholdClose는 각각 40=(0+80)/2, 20=(0+40)/2로 설정해야 합니다.
Signal_StopLevel과 Signal_TakeLevel 입력 매개변수의 값이 0으로 설정되면, 포지션은 닫기 조건이 참일 때만 종료됩니다.
2.4. 이력 백테스팅 결과
이번에는 역사적 데이터(EURUSD H1, 테스트 기간: 2000.01.01-2011.03.01, PeriodRSI=11, MA_period=3)를 기반으로 EA의 백테스팅 결과를 살펴보겠습니다.
EA 생성 시 고정 거래량(Trading Fixed Lot, 0.1)을 사용하였고, 트레일링 스탑 알고리즘은 사용하지 않았습니다(Trailing not used).

Fig. 11. EA의 테스트 결과
최적의 입력 매개변수 세트는 전략 테스터를 통해 찾을 수 있습니다. 생성된 EA의 코드는 expert_aml_rsi.mq5에 첨부되어 있으니 참고하시기 바랍니다.