네발야시카 브레이크다운 레벨: 메타트레이더 5를 위한 트레이딩 시스템

Mike 2017.08.10 21:51 69 0 0
첨부파일

아이디어 제공자블라디미르 흐리스토프, MQL5 코드 작성자바라바시카브.

이번 포스팅에서는 네발야시카 브레이크다운 레벨 시스템을 소개할게요. 이 시스템은 특정 시간 간격 내에서의 고가/저가 돌파를 이용한 트레이딩 전략입니다. 손실을 회복하기 위해 EA는 '네발야시카' 전략과 마틴게일 기법을 활용하여 로트를 늘립니다.

EA는 지정된 시간 간격("시작 시간"부터 "종료 시간"까지)의 고가와 저가를 계산해요:

네발야시카 브레이크다운 레벨

만약 가격이 이 기간의 고가를 초과하면 BUY 포지션이 열리고, 저가 아래로 떨어지면 SELL 포지션이 열립니다. StopLoss는 반대 경계에 설정되며, 즉 BUY 포지션의 경우 저가에, SELL 포지션의 경우 고가에 설정됩니다. TakeProfit은 통제 기간의 높이에 따라 설정됩니다.

"시간 종료 사용"가 true로 설정되면, "시간 종료" 매개변수(모든 포지션을 종료할 시간)가 활성화됩니다.

"시작 시간", 종료 시간, "시간 종료"의 매개변수는 오직 시간과 분만 고려합니다.

StopLoss에 의한 종료는 OnTradeTransaction에서 모니터링됩니다.

"DEAL_ENTRY_OUT"이 발견되면, 해당 거래의 코멘트 필드를 확인해야 해요. 만약 코멘트에 "sl"이 포함되어 있다면, 이 거래는 StopLoss로 종료된 것입니다:

      if(deal_symbol==m_symbol.Name() && deal_magic==m_magic)
         if(deal_entry==DEAL_ENTRY_OUT)
           {
            MqlDateTime str1;
            TimeToStruct(TimeCurrent(),str1);
            //--- 수익 실현으로 종료된 경우일 수 있습니다.
            if(StringFind(deal_comment,"tp",0)!=-1 || deal_profit>=0.0)
              {
                TradeDey=str1.day;
                return;
              }
            //--- StopLoss로 종료된 경우일 수 있습니다.
            if(StringFind(deal_comment,"sl",0)!=-1)
              {
              if(TradeDey!=str1.day)
                 {
                  Print("StopLoss로 종료된 거래가 감지되었습니다!");

                  double loss=MathAbs(deal_profit/m_symbol.TickValue()/deal_volume);

                  if(deal_type==DEAL_TYPE_SELL) // 매도 포지션이 종료되었습니다.
                {
                    double SL=m_symbol.Bid()+loss*m_symbol.Point();
                    double TP=m_symbol.Bid()-loss*m_symbol.Point();
                    double Lot=LotCheck(deal_volume*InpK_martin);
                    if(Lot==0.0)
                        return;
                    OpenSell(SL,TP,Lot,"네발야시카");

                  if(deal_type==DEAL_TYPE_BUY) // 매수 포지션이 종료되었습니다.
                {
                    double SL=m_symbol.Ask()-loss*m_symbol.Point();
                    double TP=m_symbol.Ask()+loss*m_symbol.Point();
                    double Lot=LotCheck(deal_volume*InpK_martin);
                    if(Lot==0.0)
                        return;
                    OpenBuy(SL,TP,Lot,"네발야시카");
                    }
                return;
              }
      }

닫힌 포지션과 반대되는 포지션을 열며(거래 유형이 "DEAL_TYPE_SELL"이면 BUY 포지션이 종료되었고, "DEAL_TYPE_BUY"이면 SELL 포지션이 종료된 것), 로트는 K. martin으로 곱해 증가됩니다. 만약 포지션이 긍정적인 수익으로 종료되었다면, EA는 다음 기간의 시작 시간인 "종료 시간"까지 기다린 후 위 절차를 반복합니다.

 "무손실" 매개변수는 손익 분기점을 의미하며, 포지션 수익의 절반에 도달하면 StopLoss가 포지션 오픈 가격으로 이동합니다.

예를 들어, EURUSD, M30에서 테스트한 경우:

네발야시카 브레이크다운 레벨 테스트 EURUSD M30

목록
댓글 0