Сейчас нет терминала под рукой - проверить не могу: никогда так не закрывал активные позиции, как в коде автора OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5);
вроде бы как OrderClosePrice() - это для уже закрытых ордеров, выбранных с помощью SELECT_BY_POS,MODE_HISTORY - ордер выбирается среди закрытых и удаленных ордеров. Если ордер открыт, неуж-то ему будет назначено автоматом Ask или Bid в зависимости от его типа? Может быть я навсегда отстал от жизни? :)
да, OrderClosePrice() на открытом ордере вернет 0, но это допустимо, хоть и некорректно и некрасиво. Ордер закроется.
Вот и я подумал, что это как-то не так.
допустимо, хоть и некорректно и некрасиво.
А на мой взгляд, даже изящно ))))
Поскольку функция OrderClosePrice( ) не задокументирована, я рискнул предположить, что для открытых ордеров она возвращает текущую цену закрытия, всё заработало. Результат есть, как работает чёрный ящик мне не интересно.
Пока работает... А на каком нибудь новом билде может и заглючить. Посему я буду по старинке:
switch(OrderType())
{
case 0 : OrderClose(OrderTicket(),OrderLots(),Bid,slippage); break;
case 1 : OrderClose(OrderTicket(),OrderLots(),Ask,slippage);
}
Поскольку функция OrderClosePrice( ) не задокументирована, я рискнул предположить, что для открытых ордеров она возвращает текущую цену закрытия, всё заработало. Результат есть, как работает чёрный ящик мне не интересно.
Пока работает... А на каком нибудь новом билде может и заглючить. Посему я буду по старинке:
switch(OrderType())
{
case 0 : OrderClose(OrderTicket(),OrderLots(),Bid,slippage); breack;
case 1 : OrderClose(OrderTicket(),OrderLots(),Ask,slippage); break;
}
А изящнее так -
switch (OrderType()) {
case 0: prc=Ask;break;
case 1: prc=Bid; }
OrderClose(OrderTicket(),OrderLots(),prc,slippage);
SHOOTER777 писал(а):
А изящнее так -
switch (OrderType()) {
case 0: prc=Ask;break;
case 1: prc=Bid; }
OrderClose(OrderTicket(),OrderLots(),prc,slippage);
Ага... и на одну переменную больше, + добавляется ненужная операция присваивания :-)
Все мы знаем что если открыто несколько ордеров при одновременном закрытии они с бОльшей долей вероятности закроются по разной цене (не факт что в плюс) так вот логичней сначала открыть ордер на общую сумму позиций, и закрыть перекрытые, соответственно спред возвращается и выход получается максимально приближенным к значению указанного профита.
Все мы знаем что если открыто несколько ордеров при одновременном закрытии они с бОльшей долей вероятности закроются по разной цене (не факт что в плюс) так вот логичней сначала открыть ордер на общую сумму позиций, и закрыть перекрытые, соответственно спред возвращается и выход получается максимально приближенным к значению указанного профита.
Абсолютно верно. Кстати, я всегда так и делаю: перекрытые через OrderCloseBy() - просто в данном случае (в рамках предложенного автором советника) я это не рассматривал.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Close_All_if_Profit_or_Loss.mq4:
Author: Sergey Guliaev