시스템트레이딩 게시글

MT4 자동매매 시스템 - 목표 수익 및 손절매 설정하기

첨부파일
34194.zip (995 bytes, 다운로드 0회)
이 글에서는 MetaTrader 4(MT4)에서 사용할 수 있는 자동매매 시스템에 대해 소개합니다.

이 시스템은 세 가지 입력값을 요구합니다:

  1. 목표 수익
  2. 손절매
  3. 매직 넘버
extern    double         inTargetProfitMoney     = 10;       //목표 수익 ($)
extern    double         inCutLossMoney          = 0.0      //손절매 ($)
extern    int            inMagicNumber           = 0        //매직 넘버


이 자동매매 시스템이 실행되면, 먼저 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();
     }

  }

OnTick 함수에서는 총 수익 또는 손실을 계속 계산한 후, 목표 수익이나 손실 한도를 충족하는 모든 주문을 마감합니다.

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)