Наличие ордера проверяется при его выборе в OrderSelect(NOrd,SELECT_BY_TICKET), а не при проверке параметров выбранного ордера.
Должно быть так:
Должно быть так:
if(OrderSelect(NOrd,SELECT_BY_TICKET)==true) { //--- ордер существует и он теперь выбран, можно дальше идти ... }
Всегда и в любом случае проверяйте результат операции OrderSelect.
Наличие ордера проверяется при его выборе в OrderSelect(NOrd,SELECT_BY_TICKET), а не при проверке параметров выбранного ордера.
Всегда и в любом случае проверяйте результат операции OrderSelect.
Всегда и в любом случае проверяйте результат операции OrderSelect.
но ведь OrderSelect даст положительный результат ВО ВСЯКОМ случае - И когда ордер активен И когда он закрыт
но ведь OrderSelect даст положительный результат ВО ВСЯКОМ случае - И когда ордер активен И когда он закрыт
не факт. Вы можете ошибиться с номером тикета
но ведь OrderSelect даст положительный результат ВО ВСЯКОМ случае - И когда ордер активен И когда он закрыт
не факт. Вы можете ошибиться с номером тикета
факт!... в том-то и дело!
с номером ошибки ЗДЕСЬ быть не может, потому что я получаю его из OrderSend
а дальше мне нужно периодически проверять его состояние
и OrderClose почему-то ВСЕГДА получается БОЛЬШЕ НУЛЯ
я бы не спорил с разработчиками =))) а OrderSend может и -1 вернуть ;)
во-вторых, если выбирать ордер из MODE_TRADES (по умолчанию), то время закрытия всегда будет 0, потому что MODE_TRADES - это открытые позиции и отложенные ордера (ещё не сработали)
в-третьих, if(orderclose != 0) я бы заменил на if(orderclose > 0) - так логичнее, что ли =) Если он меньше нуля - значит ошибка ;)
и в-последних, пока писАл, посмотрел хэлп по OrderCloseTime(), и угадай, что я там увидел =)))
во-вторых, если выбирать ордер из MODE_TRADES (по умолчанию), то время закрытия всегда будет 0, потому что MODE_TRADES - это открытые позиции и отложенные ордера (ещё не сработали)
в-третьих, if(orderclose != 0) я бы заменил на if(orderclose > 0) - так логичнее, что ли =) Если он меньше нуля - значит ошибка ;)
и в-последних, пока писАл, посмотрел хэлп по OrderCloseTime(), и угадай, что я там увидел =)))
if(OrderSelect(10,SELECT_BY_POS,MODE_HISTORY)==true) { datetime ctm=OrderCloseTime(); if(datetime>0) Print("close time for the order 10 ", ctm); }
я бы не спорил с разработчиками =))) а OrderSend может и -1 вернуть ;)
во-вторых, если выбирать ордер из MODE_TRADES (по умолчанию), то время закрытия всегда будет 0, потому что MODE_TRADES - это открытые позиции и отложенные ордера (ещё не сработали)
в-третьих, if(orderclose != 0) я бы заменил на if(orderclose > 0) - так логичнее, что ли =) Если он меньше нуля - значит ошибка ;)
и в-последних, пока писАл, посмотрел хэлп по OrderCloseTime(), и угадай, что я там увидел =)))
во-вторых, если выбирать ордер из MODE_TRADES (по умолчанию), то время закрытия всегда будет 0, потому что MODE_TRADES - это открытые позиции и отложенные ордера (ещё не сработали)
в-третьих, if(orderclose != 0) я бы заменил на if(orderclose > 0) - так логичнее, что ли =) Если он меньше нуля - значит ошибка ;)
и в-последних, пока писАл, посмотрел хэлп по OrderCloseTime(), и угадай, что я там увидел =)))
if(OrderSelect(10,SELECT_BY_POS,MODE_HISTORY)==true) { datetime ctm=OrderCloseTime(); if(datetime>0) Print("close time for the order 10 ", ctm); }
1. if(orderclose > 0) так я тоже пробовал, но он ВСЕГДА больше 0.
2. HELP я тоже смотрел,но так, как ТАМ НЕ ПОЛУЧАЕТСЯ. Мне нужно ПРОВЕРИТЬ ОРДЕР ПО ТИКЕТУ и ОПРЕДЕЛИТЬ ЕГО СОСТОЯНИЕ
Мне нужно ПРОВЕРИТЬ ОРДЕР ПО ТИКЕТУ и ОПРЕДЕЛИТЬ ЕГО СОСТОЯНИЕ
Если OrderSelect(10,SELECT_BY_POS,MODE_HISTORY)==true, значит ордер закрыт или отменён.
Тоже самое, только наоборот:
Если OrderSelect(10,SELECT_BY_POS,MODE_TRADES)==true, значит ордер ещё не сработал (отложенный) или позиция открыта.
Не вижу сложностей ))
Мне нужно ПРОВЕРИТЬ ОРДЕР ПО ТИКЕТУ и ОПРЕДЕЛИТЬ ЕГО СОСТОЯНИЕ
Если OrderSelect(10,SELECT_BY_POS,MODE_HISTORY)==true, значит ордер закрыт или отменён.
Тоже самое, только наоборот:
Если OrderSelect(10,SELECT_BY_POS,MODE_TRADES)==true, значит ордер ещё не сработал (отложенный) или позиция открыта.
Не вижу сложностей ))
мне нужно OrderSelect(NOrd,SELECT_BY_TICKET) где NOrd - номер тикета из OrderSend
и надо узнать его состояние
то, что в HELP, позволяет узнать только НАЛИЧИЕ ордера, но он также покажет наличие, если ордер ЗАКРЫТ по какой-то причине
иными словами надо гарантированно узнать ЗАКРЫТ ордер ИЛИ НЕ ЗАКРЫТ
Сорри, у меня - описка =)
OrderSelect(NOrd,SELECT_BY_TICKET,MODE_HISTORY)==true
это значит, что ордер с тикетом NOrd закрыт.
OrderSelect(NOrd,SELECT_BY_TICKET,MODE_TRADES)==true
значит, что ордер с тикетом NOrd НЕ закрыт.
как объяснить по-другому - не знаю =)))
Сорри, у меня - описка =)
OrderSelect(NOrd,SELECT_BY_TICKET,MODE_HISTORY)==true
это значит, что ордер с тикетом NOrd закрыт.
OrderSelect(NOrd,SELECT_BY_TICKET,MODE_TRADES)==true
значит, что ордер с тикетом NOrd НЕ закрыт.
как объяснить по-другому - не знаю =)))
цитирую HELP (это к тому что SELECT_BY_TICKET здесь не прокатит)
pool - Дополнительный индекс объеденения (pool) ордера. Используется, когда выборан параметр - SELECT_BY_POS.Mожет быть одним из следующих величин:
MODE_TRADES (по умолчанию)- ордер выбирается среди открытых и отложенных ордеров,
MODE_HISTORY - ордер выбирается среди закрытых и удаленных ордеров.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
OrderSelect(NOrd,SELECT_BY_TICKET);
orderclose=OrderCloseTime();
Print("Время закрытия ордера "+DoubleToStr(NOrd,0)+" по символу "+Symbol()+" = "+TimeToStr(orderclose,TIME_DATE));
Print("Время закрытия ордера "+DoubleToStr(NOrd,0)+" по символу "+Symbol()+" = "+DoubleToStr(orderclose,4));
if(orderclose != 0) //если ордер закрыт
//если номер ордера есть, а самого ордера нет
//это значит, что произошёл либо StopLoss либо TakeProfit либо ордер был закрыт вручную
{
Print("Ордер " + DoubleToStr(NOrd,0)+" по символу "+Symbol()+" найден не был");
NOrd=0;
}
так вот IF срабатывает ВСЕГДА. Что я делаю не так?