Для начала пользуюсь такой закрывалкой, работает быстро и безукоризненно. Но её надо сильно переделать, дабы не от последнего тикета крыла, а интеллектуально.
//+------------------------------------------------------------------+ //| Закрыть все ордера | //+------------------------------------------------------------------+ 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
Умеет кто то делать быстродействующие массивы или циклы ?
Для реала надо.
Или подскажите как оптимально сделать.
Умеет кто то делать быстродействующие массивы или циклы ?
Для реала надо.
Или подскажите как оптимально сделать.
Опишите цель массива, вариантов для выбора не так уж много.
было бы прекрасно, если бы я это хоть раз это делал)
с массивами не работал к сожалению, а теперь трудно разбираться без помощи.
суть такая, что среди полотенца ордеров надо их смешать при закрытии, с пропорцией 1к3 или ещё лучше, но что бы не было 5 убытка подрят. в гугле инфы нет даже и намёков.
Опишите цель массива, вариантов для выбора не так уж много. Вообще, оптимально закрыть сетку с использованием мартингейла - от б0льшего лота, к меньшему, так-как любое изменение цены, сильно отражается на эквити, и хорошо если цена пошла к нам, а если наоборот )
У меня лоты одинаковые, было бы дело в лотах, взял бы функцию Кима, а так запутался ...
Суть в том, допустим есть сетка ордеров (неважно как она формировалась) и они в плюсе по эквити но не вся сеть, но крыть надо ...
Есть интересная статья, как их упорядочить, что бы график и показатели были лучше.
Подскажите как это сделать в коде для MT4
Думаю, для начала надо выделить в массив разнонаправленные ордера с одинаковыми лотами и закрыть их через OrderCloseBy, сразу в 2 раза экономим на спреде.
Далее, берем некоторый шаг различия между лотами, например коэффициент 0.8, находим такие пары, закрываем через OrderCloseBy, экономим на спреде в 1.6 раза
И так далее, пока пар не останется, потом закрываем остаток
Если сетка содержит встречные рыночные ордера, то нужно найти величину и направление доминирующего объема, подлежащего закрытию. На этот объем открыть встречный рыночный ордер. В этот момент прибыль/убыток зафиксированы. Далее через OrderCloseBy попарно закрываются нужные ордера.
Выходит максимально быстро, т. к. фиксация эквити производится всего одним торговым приказом.
Думаю, для начала надо выделить в массив разнонаправленные ордера с одинаковыми лотами и закрыть их через OrderCloseBy, сразу в 2 раза экономим на спреде.
Далее, берем некоторый шаг различия между лотами, например коэффициент 0.8, находим такие пары, закрываем через OrderCloseBy, экономим на спреде в 1.6 раза
И так далее, пока пар не останется, потом закрываем остаток
Не у всех есть поддержка OrderCloseBy, и это не единично, он им почему-то не нравится, и не факт, что если сегодня есть, то завтра не уберут "закрыть перекрытые". Как-бы не универсально получается, у одних будет работать, а у других - нет. Вон синие якобы минимальных лот сделают 0.1, но перед этим предупредили.
Я пробовал когда-то получить номер ошибки, и по ней принимать дальнейшее решение о закрытии:
res=OrderCloseBy(); err=GetLastError();
if(err==???) OrderClose(buy); OrderClose(sell)
Но ошибку так и не получил, не закрывает и просто молчит, GetLastError() - пустой. Это может и не массово, но бывает.
Не у всех есть поддержка OrderCloseBy, и это не единично, он им почему-то не нравится, и не факт, что если сегодня есть, то завтра не уберут "закрыть перекрытые". Как-бы не универсально получается, у одних будет работать, а у других - нет. Вон синие якобы минимальных лот сделают 0.1, но перед этим предупредили.
Я пробовал когда-то получить номер ошибки, и по ней принимать дальнейшее решение о закрытии:
res=OrderCloseBy(); err=GetLastError();
if(err==???) OrderClose(buy); OrderClose(sell)
Но ошибку так и не получил, не закрывает и просто молчит, GetLastError() - пустой. Это может и не массово, но бывает.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Суть в том, допустим есть сетка ордеров (неважно как она формировалась) и они в плюсе по эквити но не вся сеть, но крыть надо ...
Есть интересная статья, как их упорядочить, что бы график и показатели были лучше.
Подскажите как это сделать в коде для MT4
https://www.mql5.com/ru/articles/1530