Функция закрывает позиции в порядке возрастания или убывания лота.
void ClosePosLotsSort(
string sy="", // имя символа ("" - все символы)
int ty=-1, // тип ордера (-1 - все типы ордеров)
int mg=-1, // магическое число ордеров (-1 - все магики)
int direction=MODE_DESCEND) // направление сортировки
{
double lo_ti[][2];
int i,num=0;
for( i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==sy || sy=="")
{
if(mg<0 || OrderMagicNumber()==mg)
{
if(ty<0 || OrderType()==ty)
{
if(OrderType()<2)
{
num++;
ArrayResize(lo_ti,num);
lo_ti[num-1][0]=OrderLots();
lo_ti[num-1][1]=OrderTicket();
}
}
}
}
}
}
if(num>0)
{
ArraySort(lo_ti,WHOLE_ARRAY,0,direction);
for( i=0; i<num; i++)
{
if(OrderSelect((int)lo_ti[i][1],SELECT_BY_TICKET))
{
if(OrderCloseTime()==0)
ClosePosBySelect();
}
}
}
}
Параметры
- sy — символьное имя торгового инструмента позиций. При пустом значении, функция будет проверять все позиции, со всех доступных символов;
- ty — тип ордера:
- 0 — Buy;
- 1 — Sell.
- mg — магическое число ордеров, при значении -1 будут учитываться ордера не зависимо от magic.
- direction — направление сортировки лота. Возможные варианты:
- MODE_ASCEND — закрытие позиций происходит в порядке возрастания;
- MODE_DESCEND — закрытие позиций происходит в порядке убывания.
Закрытие позиций осуществляется при помощи функции закрытия позиций ClosePosBySelect().
Написать комментарий
Комментарии ()