Home 시스템트레이딩 Post

MT4 자동매매 시스템 – 브레이크이븐 기반 트레이딩 전략 완성

Attachments
35609.zip (12.47 KB, Download 0 times)

이번 포스트에서는 MT4를 위한 자동매매 시스템의 핵심 기능 중 하나인 브레이크이븐(손익 분기점) 설정에 대해 알아보겠습니다. 이 시스템은 주문 개수를 카운트하는 기능을 통해 브레이크이븐이 발생하지 않은 주문만을 고려하여 효율적인 트레이딩을 가능하게 합니다.

int OrdersCounter() 
  {
   int counter=0;
   //---
   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS))
         if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) // 이 EA로 열린 주문인지 확인
           {
   //--- 브레이크이븐이 발생했는지 확인
   /* 매수일 경우 손절가가 개시가 이상일 때만 계산 */
            double XBreakeven = OrderType()==OP_BUY ? OrderStopLoss() >= OrderOpenPrice() : OrderStopLoss() <= OrderOpenPrice();
            if(!XBreakeven) // 브레이크이븐이 발생하지 않았을 경우
              {
               counter++; // 포지션 카운트
              }
           }
   return counter;
  }

위의 코드에서는 손절가가 개시가보다 위에 있는 매수 주문이나 아래에 있는 매도 주문을 제외하고, 브레이크이븐이 발생하지 않은 주문만을 카운트합니다. 이를 통해 우리는 최대 포지션 수를 제한할 수 있는 카운터 값을 생성하게 됩니다.

   if(OrdersCounter()<MaximumOrders)

브레이크이븐이 발생하면 카운트에서 제외되므로, 모든 조건이 충족되었을 때 새로운 매도 주문을 열 수 있게 됩니다.

브레이크이븐 기능을 제대로 구현하지 않았다면 이러한 과정은 불가능했을 것입니다. 다음은 브레이크이븐을 설정하는 함수에 대한 코드입니다.

void BreakEvenFunction() 
  {
   //---
   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS))
         if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol())
           {
            // 매수 주문의 경우 Bid가 개시가보다 높고 손절가는 개시가보다 낮을 때
            double xHybrid = OrderType()==OP_BUY ? (Bid>OrderOpenPrice()+BreakevenPips*_Point && OrderStopLoss()<OrderOpenPrice()) : (Ask<OrderOpenPrice()-BreakevenPips*_Point && OrderStopLoss()>OrderOpenPrice());
            /* 매수 주문의 경우 손절가가 개시가 이상이어야 하고, 매도 주문은 그 반대 */
            if(xHybrid)
              {
               bool modify = OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,clrNONE);
              }
           }
  }

이제 여러분도 MT4에서 브레이크이븐 기능을 활용하여 더욱 효율적인 자동매매를 경험해 보세요!

Related Posts

Comments (0)