_Temoha_:
Почему она закрывает не все открытые покупки????
Подскажите пожалуйста как закрыть все открытые покупки.
Два момента, первый - если вовсе всех, уберите проверку на символ.
Второй момент, перебор ордеров лучши сделать так (поправил еще раз:)):
int total = OrdersTotal(); for(int x=total-1;x>=0;x++) { ........... }
Temoha. Просто у тебя цикл от нуля идет, ты его закрыл. Появился новый
нулевой, бывший первый. Или закрывай делай цикл for(int x=total-1;x>0;x--)
или посмотри у KimIV, у него в библиотеке это сделано.
Благодарю, помогло
void allbuyclose() int total=OrdersTotal(); { for(int x=total-1; x>0; x--) { if(OrderSelect(x,SELECT_BY_POS,MODE_TRADES)==true) { if (OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,3); } }
Гораздо правильнее сделать так:
Однако вообще такой подход не совсем удачный, т.к. за то время пока ты будешь закрывать ордера по очереди, цена может меняться, причём не в лучшую сторону. И все ордера могут быть закрыты по разной цене.
Поэтому в таком случае лучше сначала захеджировать их одной противоположной позицией с объёмом равным их суммарному объёму ...если конечно ваш ДЦ позволяет открывать встречные позиции, и к тому же с маржей 50%... А уж после этого можно уже, не напрягаясь о цене, закрывать их попарно функцией OrderCloseBy(OrderTicket(), HedgingTicket), где HedgingTicket - это собственно тикет открытого встречного ордера.
Я вообще обычно и пользуюсь таким методом закрытия позиции. Он хорош ещё и тем, что в данном случае дилер как правило не знает о том, что открывая новую позу ты тем самым хеджируешь старую, т.е. по сути закрываешь её. Он думает что ты просто открываешь новую. Это я к тому, что частенько может получаться такая ситуация, когда тебе не дают нормально закрыться с профитом и постоянно реквотят, т.к. видят что ты хочешь закрыть профит. А при отсылке OrderSend дилер вряд ли будет просматривать твои предыдущие открытые ордера чтобы понять твои намерения...
for (int x=0; x<OrdersTotal(); x++) if (OrderSelect(x,SELECT_BY_POS,MODE_TRADES)==true) if (OrderSymbol()==Symbol() && OrderType()==OP_BUY) { if (OrderClose(OrderTicket(),OrderLots(),Bid,3)==true) x--; RefreshRates(); }Т.е. не забывать ставить RefreshRates() для обновления, тогда OrdersTotal() всегда будет давать правильное значение, а также получать свежую цену Bid.
Однако вообще такой подход не совсем удачный, т.к. за то время пока ты будешь закрывать ордера по очереди, цена может меняться, причём не в лучшую сторону. И все ордера могут быть закрыты по разной цене.
Поэтому в таком случае лучше сначала захеджировать их одной противоположной позицией с объёмом равным их суммарному объёму ...если конечно ваш ДЦ позволяет открывать встречные позиции, и к тому же с маржей 50%... А уж после этого можно уже, не напрягаясь о цене, закрывать их попарно функцией OrderCloseBy(OrderTicket(), HedgingTicket), где HedgingTicket - это собственно тикет открытого встречного ордера.
Я вообще обычно и пользуюсь таким методом закрытия позиции. Он хорош ещё и тем, что в данном случае дилер как правило не знает о том, что открывая новую позу ты тем самым хеджируешь старую, т.е. по сути закрываешь её. Он думает что ты просто открываешь новую. Это я к тому, что частенько может получаться такая ситуация, когда тебе не дают нормально закрыться с профитом и постоянно реквотят, т.к. видят что ты хочешь закрыть профит. А при отсылке OrderSend дилер вряд ли будет просматривать твои предыдущие открытые ордера чтобы понять твои намерения...

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Пользуюсь функцией:
Почему она закрывает не все открытые покупки????
Подскажите пожалуйста как закрыть все открытые покупки.