Оптимальный график при закрытии позиций

 

Суть в том, допустим есть сетка ордеров (неважно как она формировалась) и они в плюсе по эквити но не вся сеть, но крыть надо ...

Есть интересная статья, как их упорядочить, что бы график и показатели были лучше.

Подскажите как это сделать в коде для MT4

 

https://www.mql5.com/ru/articles/1530 

Заблуждения, Часть 2: Статистика - лженаука, или Хроника пикирующего бутерброда
Заблуждения, Часть 2: Статистика - лженаука, или Хроника пикирующего бутерброда
  • 2008.05.16
  • Sceptic Philozoff
  • www.mql5.com
Многочисленные попытки применения методов статистики к объективной реальности, т.е. к финансовым рядам, разбиваются о скалы нестационарности процессов, «толстохвостости» сопутствующих вероятностных распределений и недостаточного объема финансовых данных. В данной публикации я попытаюсь обратиться не к финансовым рядам как таковым, а к их субъективному отражению – в данном случае к тому, как эти ряды пытается оседлать трейдер, т.е. к торговой системе. Выявление статистических закономерностей процесса, описывающего результаты сделок, оказывается довольно увлекательным занятием. В некоторых случаях возможно даже сделать вполне достоверные выводы о модели этого процесса и применить эти выводы к торговой системе.
 

Для начала пользуюсь такой закрывалкой, работает быстро и безукоризненно. Но её надо сильно переделать, дабы не от последнего тикета крыла, а интеллектуально.

 

//+------------------------------------------------------------------+
//|                 Закрыть все ордера                               |
//+------------------------------------------------------------------+

bool CloseOrders(int op) 
{
   int cnt = OrdersTotal();
   for (int i=cnt-1; i>=0; i--)
      {
         if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;

         //Опционально
         if (OrderSymbol() != Symbol()) continue;

         //Опционально
         if (OrderMagicNumber() != mn) continue;

         if ((OrderType() == OP_BUY)&&(op==0)) bool CloseBuy = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),Slippage,CloseColor);
         if ((OrderType() == OP_SELL)&&(op==1)) bool CloseSell = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),Slippage,CloseColor);

      }
return (True);
}
//END
 

Умеет кто то делать быстродействующие массивы или циклы ?

Для реала надо.

Или подскажите как оптимально сделать. 

 
Vladimir Zubov:

Умеет кто то делать быстродействующие массивы или циклы ?

Для реала надо.

Или подскажите как оптимально сделать. 

Опишите цель массива, вариантов для выбора не так уж много. Вообще, оптимально закрыть сетку с использованием мартингейла - от б0льшего лота, к меньшему, так-как любое изменение цены, сильно отражается на эквити, и хорошо если цена пошла к нам, а если наоборот )
 
Vitaly Muzichenko:
Опишите цель массива, вариантов для выбора не так уж много.

было бы прекрасно, если бы я это хоть раз это делал)

с массивами не работал к сожалению, а теперь трудно разбираться без помощи. 

 

суть такая, что среди полотенца ордеров надо их смешать при закрытии, с пропорцией 1к3 или ещё лучше, но что бы не было 5 убытка подрят. в гугле инфы нет даже и намёков.

 
Vitaly Muzichenko:
Опишите цель массива, вариантов для выбора не так уж много. Вообще, оптимально закрыть сетку с использованием мартингейла - от б0льшего лота, к меньшему, так-как любое изменение цены, сильно отражается на эквити, и хорошо если цена пошла к нам, а если наоборот )

У меня лоты одинаковые, было бы дело в лотах, взял бы функцию Кима, а так запутался ... 

 
Интересная статья, тоже решаю проблему с закрытием ордеров, пока не получается.
 
Vladimir Zubov:

Суть в том, допустим есть сетка ордеров (неважно как она формировалась) и они в плюсе по эквити но не вся сеть, но крыть надо ...

Есть интересная статья, как их упорядочить, что бы график и показатели были лучше.

Подскажите как это сделать в коде для MT4

 

https://www.mql5.com/ru/articles/1530 

Думаю, для начала надо выделить в массив разнонаправленные ордера с одинаковыми лотами и закрыть их через OrderCloseBy, сразу в 2 раза экономим на спреде.

Далее, берем некоторый шаг различия между лотами, например коэффициент 0.8, находим такие пары, закрываем через OrderCloseBy, экономим на спреде в 1.6 раза

И так далее, пока пар не останется, потом закрываем остаток 

 

Если сетка содержит встречные рыночные ордера, то нужно найти величину и направление доминирующего объема, подлежащего закрытию. На этот объем открыть встречный рыночный ордер. В этот момент прибыль/убыток зафиксированы. Далее через OrderCloseBy попарно закрываются нужные ордера.

Выходит максимально быстро, т. к. фиксация эквити производится всего одним торговым приказом

 
Alexey Volchanskiy:

Думаю, для начала надо выделить в массив разнонаправленные ордера с одинаковыми лотами и закрыть их через OrderCloseBy, сразу в 2 раза экономим на спреде.

Далее, берем некоторый шаг различия между лотами, например коэффициент 0.8, находим такие пары, закрываем через OrderCloseBy, экономим на спреде в 1.6 раза

И так далее, пока пар не останется, потом закрываем остаток 

Не у всех есть поддержка OrderCloseBy,  и это не единично, он им почему-то не нравится, и не факт, что если сегодня есть, то завтра не уберут "закрыть перекрытые". Как-бы не универсально получается, у одних будет работать, а у других - нет. Вон синие якобы минимальных лот сделают 0.1, но перед этим предупредили.

Я пробовал когда-то получить номер ошибки, и по ней принимать дальнейшее решение о закрытии:

res=OrderCloseBy();   err=GetLastError();

if(err==???) OrderClose(buy); OrderClose(sell)

Но ошибку так и не получил, не закрывает и просто молчит, GetLastError() - пустой. Это может и не массово, но бывает.

 
Vitaly Muzichenko:

Не у всех есть поддержка OrderCloseBy,  и это не единично, он им почему-то не нравится, и не факт, что если сегодня есть, то завтра не уберут "закрыть перекрытые". Как-бы не универсально получается, у одних будет работать, а у других - нет. Вон синие якобы минимальных лот сделают 0.1, но перед этим предупредили.

Я пробовал когда-то получить номер ошибки, и по ней принимать дальнейшее решение о закрытии:

res=OrderCloseBy();   err=GetLastError();

if(err==???) OrderClose(buy); OrderClose(sell)

Но ошибку так и не получил, не закрывает и просто молчит, GetLastError() - пустой. Это может и не массово, но бывает.

Интересно, буду иметь в виду.
Причина обращения: