This routine closes the biggest loss, might be an alternative to get rid of the floating orders. feel free to implement it!
extern int CloseOrdersPerWeek =5; // 0-5, close most loosing position, 5 = each day one
extern int MaxLoss =-5; // $$
//+------------------------------------------------------------------+
void TimeClose()
{
double Order_Profit=0;
if( Hour()>=12 && Hour()<13
&& Minute()==1
&& DayOfWeek()>0 && DayOfWeek()<6 && DayOfWeek()<=CloseOrdersPerWeek
&& DayOfWeek()!=DayOfWeekDone )
{
DayOfWeekDone=DayOfWeek();
for (int y = 0; y < OrdersTotal(); y++)
{
OrderSelect (y, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() == magic && (OrderType()==OP_BUY || OrderType()==OP_SELL))
{
if (OrderProfit()< Order_Profit) // only negative
{
int Ticket=OrderTicket();
Order_Profit=OrderProfit();
}
}
}
// Print (Order_Profit,DayOfWeek());
OrderSelect (Ticket, SELECT_BY_TICKET, MODE_TRADES);
if (OrderType()==OP_BUY && OrderProfit()< MaxLoss)
{
if (OrderClose(Ticket,OrderLots(),Bid,Slippage,Black) )Print ("BUY order closed, P/L = "+OrderProfit());
else Print ("Order close error: "+GetLastError());
}
if (OrderType()==OP_SELL && OrderProfit()< MaxLoss)
{
if (OrderClose(Ticket,OrderLots(),Ask,Slippage,Black) )Print ("SELL order closed, P/L = "+OrderProfit());
else Print ("Order close error: "+GetLastError());
}
}
return(0);
}
//+------------------------------------------------------------------+