Как выбрать последний ордер и определить его прибыль?
Здесь приведу достаточно полезную функцию определения прибыльности или убыточности последнего закрытого ордера. Функция возвращает размер прибыли/убытка. Соответственно, если прибыль > 0, то ордер закрылся с профитом, если < 0, то с убытком.
Вызывается функция так:
isCloseLastPosByStopTrade(Symbol(),OP_BUY или OP_SELL,Magic);
Если вместо OP_BUY или OP_SELL поставить -1, то будет определяться прибыль любого типа ордера. Если на место Magic поставить -1, будет определен профит/убыток ордера с любым магиком.
Функция:
double isCloseLastPosByStopTrade(string sy,int op,int mn)
{
datetime t;
double ocp,osl;
int dg,i,j=-1,k=OrdersHistoryTotal();
if(sy=="0") sy=Symbol();
for(i=0; i<k; i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==sy) // || sy=="")
{
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
{
if(op<0 || OrderType()==op)
{
if(mn<0 || OrderMagicNumber()==mn)
{
if(t<OrderCloseTime())
{
t=OrderCloseTime();
j=i;
}
}
}
}
}
}
}
if(OrderSelect(j,SELECT_BY_POS,MODE_HISTORY))
{
return(OrderProfit());
}
}