시스템트레이딩 게시글

목표 손익에 따라 주문 종료하기 - MetaTrader 4의 유용한 도구

첨부파일
34194.zip (995 bytes, 다운로드 2회)

안녕하세요, 트레이더 여러분! 오늘은 MetaTrader 4에서 사용할 수 있는 유용한 EA(Expert Advisor)에 대해 이야기해보려고 합니다. 이 EA는 목표 수익과 손실을 설정하여 자동으로 주문을 종료해주는 도구입니다.

필요한 입력값

이 EA를 사용하기 위해서는 다음과 같은 세 가지 입력값이 필요합니다:

  • 목표 수익
  • 손실 컷
  • 매직 넘버

코드 초기화

EA가 실행되면 먼저 OnInit() 함수가 호출됩니다. 이 함수에서는 입력값과 변수를 초기화합니다.

int OnInit()
{
   //---
   if(inTargetProfitMoney <= 0)
     {
      Alert("잘못된 입력입니다");
      return(INIT_PARAMETERS_INCORRECT);
     }
   inCutLossMoney = MathAbs(inCutLossMoney) * -1;
//---
   return(INIT_SUCCEEDED);
}

주문 처리

가격 변동이 발생할 때마다 OnTick() 함수가 호출되어 현재의 총 수익 또는 손실을 계산합니다.

void OnTick()
{
//---
   double tFloating = 0.0;
   int tOrder = OrdersTotal();
   for(int i=tOrder-1; i>=0; i--)
     {
       if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
         if(OrderMagicNumber() == inMagicNumber)
           {
            tFloating += OrderProfit()+OrderCommission() + OrderSwap();
           }
       }
   }
   if(tFloating >= inTargetProfitMoney || (tFloating <= inCutLossMoney && inCutLossMoney < 0))
     {
       fCloseAllOrders();
     }
}

모든 주문 종료하기

이제 fCloseAllOrders() 함수를 통해 모든 주문을 종료합니다.

void fCloseAllOrders()
{
   double priceClose = 0.0;
   int tOrders = OrdersTotal();
   for(int i=tOrders-1; i>=0; i--)
     {
       if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
         if(OrderMagicNumber() == inMagicNumber && (OrderType() == OP_BUY || OrderType() == OP_SELL))
           {
             priceClose = (OrderType()==OP_BUY)?MarketInfo(OrderSymbol(), MODE_BID):MarketInfo(OrderSymbol(), MODE_ASK);
             if(!OrderClose(OrderTicket(), OrderLots(), priceClose, slippage, clrGold))
               {
                 Print("경고: 주문 종료 실패");
             }
           }
       }
   }
}

더 자세한 정보와 MQL4 코드 교육을 원하신다면, 저희 텔레그램에 가입해 주세요! t.me/codeMQL

즐거운 트레이딩 되세요!

연관 포스트

댓글 (0)