안녕하세요, 트레이더 여러분! 오늘은 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
즐거운 트레이딩 되세요!