이번 포스트에서는 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에서 브레이크이븐 기능을 활용하여 더욱 효율적인 자동매매를 경험해 보세요!