Нужно убедиться, что ордер реально существует. В приведенном примере есть лишь проверка того факта, что ордер выбран. Но ведь ордер может быть уже закрыт. При этом ничто не мешает его выбрать, т. к. он находится в "Истории счета".
Чтобы узнать, к какому списку принадлежит ордер, необходимо провести дополнительную проверку. Если у ордера время закрытия равно нулю, то он находится в списке рабочих ордеров. Ненулевое время закрытия - ордер в списке "История счета". В этом случае закрыть его уже нельзя.
На рисунке как раз все верно:
- Открыли ордер.
- Дождались нужной прибыли и закрыли ордер.
- Далее код продолжает "издеваться над трупом" )) - пытается закрыть ордер, который уже закрыт.
Нужно убедиться, что ордер реально существует. В приведенном примере есть лишь проверка того факта, что ордер выбран. Но ведь ордер может быть уже закрыт. При этом ничто не мешает его выбрать, т. к. он находится в "Истории счета".
Чтобы узнать, к какому списку принадлежит ордер, необходимо провести дополнительную проверку. Если у ордера время закрытия равно нулю, то он находится в списке рабочих ордеров. Ненулевое время закрытия - ордер в списке "История счета". В этом случае закрыть его уже нельзя.
На рисунке как раз все верно:
- Открыли ордер.
- Дождались нужной прибыли и закрыли ордер.
- Далее код продолжает "издеваться над трупом" )) - пытается закрыть ордер, который уже закрыт.
//+------------------------------------------------------------------+ //| test333333333333.mq4 | //| Yuriy Vins | //| https://www.sayta.net | //+------------------------------------------------------------------+ #property copyright "Yuriy Vins" #property link "https://www.sayta.net" #property version "1.00" #property strict int i=0; int ticket; //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { for( ; i<1; i++) ticket=OrderSend(Symbol(),OP_SELL,0.01,Bid,3,Ask+1000*Point,Ask-1000*Point,NULL,12345,0,clrNONE); //Открыть ордер на продажу if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)==true && OrderCloseTime()==0 && OrderProfit()>2) bool yes=OrderClose(OrderTicket(),0.01,Ask,3,clrNONE); } //+------------------------------------------------------------------+
"издеваться над трупом" -- Ну меня это немного рассмешило. Тем самым я избавился от ошибки! Спасибо!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
4108
ERR_INVALID_TICKET
Неверный номер тикета
Уважаемые коллеги! Тиккет объявлен и записан, что же не так? Подскажите: Разве я что-то не правильно написал в коде? Это простой пример, но меня очень удивило. ((