Может быть Вам поможет функция OrderCloseBy ?
А их и не надо закрывать по одной цене, т.к. селовские и баевские ордера в один момент времени всегда закроются по разной цене из-за спреда.
Варианты решения:
- При переваливании суммарного профита выше 0, закрываем баи по биду, а селы по аску на тот момент... Цена закрытия естественно будет разная.
- Можно воспользоваться функцией OrderCloseBy, как писал выше KimIV.
Разнонаправленные ордера всегда взаимогасятся в объёме совпадающей стоимости и от цены закрытия это не зависит.
Например, у Вас есть Sell 5 лотов и Buy 3 лота.
1. Можно сразу встречно закрыть в объёме 3 лота, оставить только Sell 2 лота и ждать когда он достигнет нужной цены.
2. Можно ничего не закрывать и ждать когда Sell достигнет цены. А когда достигнет, то встречно закрыть 3 лота и отдельно остаток 2 лота.
Определяющим моментом и в 1 и во 2 случае является цена закрытия Sell 2 лота. А встречное закрытие на 3 лота можно выполнить при любой цене, это не повлияет на конечный результат.
Поэтому последовательность закрытия должна быть такая: сначала закрыть ордера в той части, что не совпадает (здесь-2 лота).
А оставшаяся ордера можно закрыть сразу после или через полчаса.
А самым лучшим методом чвляется отказ от локирования в принципе. Это ничему не помогает, только запутывает и невыгодно отличается тем, что как раз множество ордеров закрыть сложнее, чем один.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Есть несколько ордеров в обе стороны. Надо закрыть все ордера по одинаковой цене.
делаю так:
for ( z=OrdersTotal()-1; z>=0; z--){
if(OrderSelect(z, SELECT_BY_POS, MODE_TRADES)){
if (OrderType() == OP_BUY) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),5);
if (OrderType() == OP_SELL) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),5);
}}
И получается после закрытия разница в 4 пункта между баевскими и селовскими ордерами, из за чего получается убыток.
Как правильно сформировать условие, чтобы все ордера закрылись по одной цене при достижении суммарного профита по всем ордерам больше 0?