MQL5 위자드로 생성하는 리버설 캔들 패턴 기반 트레이드 신호

Mike 2011.01.20 22:45 83 0 0
첨부파일

MQL5 위자드는 프로그래밍 없이 자동으로 전문가 어드바이저(EA)를 생성하는 기능을 제공합니다. (MQL5 위자드: 프로그래밍 없이 전문가 어드바이저 만들기)

CSignalCandles 클래스는 리버설 캔들 패턴을 기반으로 트레이드 신호를 제공합니다. 이 전략은 "리버설 캔들 패턴 기반 신호"라고 불리며, MQL5 위자드에서 EA를 자동으로 생성할 때 사용됩니다.

시스템의 핵심 아이디어는 복합 캔들을 계산하여 리버설 패턴을 식별하는 것입니다. 리버설 패턴은 일본식 캔들 분석에서의 "망치형" 및 "교수형" 패턴과 유사하지만, 단일 캔들이 아닌 복합 캔들을 사용하여 리버설을 확인하는 데 소형 바디를 필요로 하지 않습니다.

입력 파라미터:

  • Range - 복합 캔들 계산에 사용되는 최대 바 수.
  • Minimum - 복합 캔들의 최소 크기(기본 포인트 기준).
  • ShadowBig 및 ShadowSmall - 복합 캔들 단위의 그림자.
  • Limit, StopLoss 및 TakeProfit - 오픈 가격, SL, TP 레벨로, 복합 캔들의 종가를 기준으로 정의되는 값입니다.
  • Expiration - 주문 만료 시간(바 기준), 보류 중인 주문으로 거래할 때 사용됩니다 (Limit!=0.0).

리버설 캔들 패턴은 다음과 같이 결정됩니다.

최근 완료된 바(인덱스 1)에서부터 Range 입력 파라미터로 정의된 바 수까지 복합 캔들 파라미터를 계산합니다. 복합 캔들 크기가 Minimum 입력 파라미터로 지정된 값보다 크면, 복합 캔들의 그림자를 분석하여 리버설 조건을 확인합니다.

하락세의 힘은 복합 캔들의 상단 그림자 크기로, 상승세의 힘은 하단 그림자 크기로 표현됩니다.

  • 하락세에서 상승세로의 리버설을 확인하기 위해서는 하단 그림자(상승세의 힘)의 크기가 ShadowBig 입력 파라미터로 정의된 값보다 커야 하며, 상단 그림자(하락세의 힘)의 크기는 ShadowSmall 입력 파라미터로 정의된 값보다 작아야 합니다.
  • 상승세에서 하락세로의 리버설을 확인하기 위해서는 상단 그림자(하락세의 힘)의 크기가 ShadowBig 입력 파라미터로 정의된 값보다 커야 하며, 하단 그림자(상승세의 힘)의 크기는 ShadowSmall 입력 파라미터로 정의된 값보다 작아야 합니다.

리버설 전략 외에도 Limit 입력 파라미터의 음수 값을 지정하여 브레이크다운 전략을 사용할 수 있습니다 (MQL5 위자드 - 두 EMA의 교차로 인한 트레이드 신호 참조).

Limit에 따라 세 가지 다른 시장 진입 방법이 사용됩니다:

  1. Limit>0. 가격의 되돌림에서 시장 가격보다 유리한 가격에 진입 (매수 리밋 또는 매도 리밋 보류 주문이 거래 신호에 따라 설정됩니다)
  2. Limit<0. 가격 움직임 방향으로 진입 (매수 스탑 또는 매도 스탑 보류 주문이 거래 신호에 따라 설정됩니다).
  3. Limit=0. 시장 가격을 사용하여 거래합니다.

이 전략은 CSignalCandles 클래스에서 구현됩니다.

리버설 캔들 패턴 기반 트레이드 신호

리버설 캔들 패턴 기반 트레이드 신호


트레이드 신호

트레이드 신호는 CSignalCandles 클래스에 구현되어 있으며, 분석을 위해 Candle() 함수가 사용됩니다:

int  Candle(int ind); // 복합 캔들의 유형에 따라 양수/음수를 반환합니다

여러 캔들(바)을 사용하여 복합 캔들을 구성할 수 있습니다. 최소 바 수는 Range 파라미터로 정의됩니다. 경우에 따라 크기/그림자 조건이 충족되면 Range보다 적은 캔들로도 복합 캔들이 형성될 수 있습니다. Candle 함수는 복합 캔들이 형성되지 않으면 0을 반환합니다.

1. 롱 포지션 오픈

롱 포지션을 열기 위해서는 상승하는 복합 캔들이 필요합니다. 함수가 이를 확인하고 복합 캔들이 아직 형성되지 않았거나 하락성 캔들인 경우 반환합니다. 그렇지 않으면, 복합 캔들의 크기를 계산하고 보류 주문의 가격 레벨을 계산합니다.

참고로, 보류 주문 유형(매수 리밋 또는 매수 스탑)은 Limit 입력 파라미터의 부호에 따라 달라집니다 (Limit=0 또는 |가격-매도 호가|<스탑 레벨일 경우 시장 매수 주문을 배치하고, Limit>0일 경우 매수 리밋 보류 주문을 배치하며, Limit<0일 경우 매수 스탑 보류 주문을 배치합니다).

//+------------------------------------------------------------------+//| 롱 포지션을 열기 위한 조건 확인                    |//+------------------------------------------------------------------+bool CSignalCandles::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)   {//--- 상승 복합 캔들이 형성되었는지 확인 if(Candle(1)<=0) return(false);//--- 복합 캔들의 크기 가져오기   double size=m_high_composite-m_low_composite;//--- 보류 주문 가격 계산   price=m_symbol.NormalizePrice(m_symbol.Ask()-m_limit*size);//--- 스탑 손실 가격 계산    sl   =m_symbol.NormalizePrice(price-m_stop_loss*size);//--- 이익 실현 가격 계산    tp   =m_symbol.NormalizePrice(price+m_take_profit*size);//--- 주문 만료 시간 설정    expiration+=m_expiration*PeriodSeconds(m_period);//--- 조건이 충족되면 true 반환    return(true);  }

2. 롱 포지션 닫기

하락 복합 캔들이 형성되면 롱 포지션이 닫힙니다.

//+------------------------------------------------------------------+//| 롱 포지션을 닫기 위한 조건 확인 |//+------------------------------------------------------------------+bool CSignalCandles::CheckCloseLong(double& price)   {//--- 하락 복합 캔들이 형성되었는지 확인    if(Candle(1)>=0) return(false);//---    price=0.0;//--- 조건이 충족되면 true 반환    return(true);  }

3. 숏 포지션 오픈

숏 포지션을 열기 위해서는 하락하는 복합 캔들이 필요합니다. 복합 캔들이 형성되지 않았거나 하락하지 않은 경우에는 반환합니다. 그렇지 않으면, 크기를 결정하고 보류 주문의 가격 레벨을 계산합니다.

(주문 유형은 Limit 입력 파라미터의 부호에 따라 달라집니다, "롱 포지션 오픈" 참조).

//+------------------------------------------------------------------+//| 숏 포지션을 열기 위한 조건 확인 |//+------------------------------------------------------------------+bool CSignalCandles::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)   {//--- 하락 복합 캔들이 형성되었는지 확인    if(Candle(1)>=0) return(false);//--- 복합 캔들의 크기 가져오기   double size=m_high_composite-m_low_composite;//--- 보류 주문 가격 계산   price=m_symbol.NormalizePrice(m_symbol.Bid()+m_limit*size);//--- 스탑 손실 가격 계산    sl   =m_symbol.NormalizePrice(price+m_stop_loss*size);//--- 이익 실현 가격 계산    tp   =m_symbol.NormalizePrice(price-m_take_profit*size);//--- 주문 만료 시간 설정    expiration+=m_expiration*PeriodSeconds(m_period);//--- 조건이 충족되면 true 반환    return(true);  }


4. 숏 포지션 닫기

상승 복합 캔들이 형성되면 숏 포지션이 닫힙니다.

//+------------------------------------------------------------------+//| 숏 포지션을 닫기 위한 조건 확인 |//+------------------------------------------------------------------+bool CSignalCandles::CheckCloseShort(double& price)   {//--- 상승 복합 캔들이 형성되었는지 확인    if(Candle(1)<=0) return(false);//---    price=0.0;//--- 조건이 충족되면 true 반환    return(true);  }

MQL5 위자드로 전문가 어드바이저 생성하기

전략 기반의 트레이딩 로봇을 생성하려면, 리버설 캔들 패턴 기반 신호를 선택해야 합니다. MQL5 위자드의 "미리 만들어진 전문가 어드바이저 생성" 옵션에서 선택할 수 있습니다:

리버설 캔들 패턴 기반 신호 선택

리버설 캔들 패턴 기반 신호 선택

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


테스트 결과

전문가 어드바이저의 백테스팅 결과를 살펴보겠습니다 (EURUSD M15, 테스트 기간: 2010.1.1-2011.5.1, Range=3, Minimum=50, ShadowBig=0.5, ShadowSmall=0.2, Limit=0, StopLoss=2.0, TakeProfit=1.0, Expiration=4).

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

리버설 캔들 패턴 기반 트레이드 신호의 테스트 결과

리버설 캔들 패턴 기반 트레이드 신호의 테스트 결과


첨부 파일: SignalCandles.mqh는 terminal_data_folder\MQL5\Include\Expert\Signal 폴더에 넣어야 합니다.

expert_candles.mq5는 MQL5 위자드로 생성된 전문가 어드바이저의 코드가 포함되어 있습니다.


목록
댓글 0