이 글에서는 MetaTrader 4(MT4)에서 사용할 수 있는 자동매매 시스템에 대해 소개합니다.
이 시스템은 세 가지 입력값을 요구합니다:
- 목표 수익
- 손절매
- 매직 넘버
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