Может быть, код Вы и прикрепили, только он не прикрепился.
Вы имеете в виду частичное закрытие позиции? Просто указываете в функции OrderClose необходимую лотность и всё. Только не забудьте нормализовать количество лотов перед отправкой приказа. У Вас закроется требуемый объём, на оставшуюся часть терминалом будет создана новая позиция с новым номером ("тикетом"). И добавится соответствующий комментарий к закрывшейся и оставшейся частям.
Прошу прощения - это в этом блоке ? OrderLots() ???
//--------------------------------------------------------------------------------------------------------------
// Блок закрытия ордера по типу
//--------------------------------------------------------------------------------------------------------------
bool Close_ord_by_type(int type_ord)
{
bool ticketmdf=true;
int i=OrdersTotal()-1;
for (int j=i; j>=0;j--) //Определяем какие ордера существуют
{
if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES) == true)
{
if(OrderCloseTime()>0 || OrderMagicNumber()!=MAGIC)
{
continue;
}
if(OrderSymbol()==Symbol() && OrderType()==type_ord)
{
if(OrderType()==OP_BUY && type_ord==OP_BUY)
{
ticketmdf=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(Symbol(),MODE_BID),Digits),_slippage*coef*3,Red);
if(ticketmdf==false)
{
Print("Ошибка при закрытии ордера Buy",+GetLastError());
return(false);
}
}
if(OrderType()==OP_SELL && type_ord==OP_SELL)
{
ticketmdf=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(Symbol(),MODE_ASK),Digits),_slippage*coef*3,Blue);
if(ticketmdf==false)
{
Print("Ошибка при закрытии ордера Sell",+GetLastError());
return(false);
}
}
}
}
}
return(true);
}