prostotrader:
Как такое получается?
Ошибка в коде, т.к. может вернуться HistoryOrderGetTicket(0), мэджик которого не равен запрошенному.
fxsaber:
Ошибка в коде, т.к. может вернуться HistoryOrderGetTicket(0), мэджик которого не равен запрошенному.
Где ошибка в коде (код представлен)?
prostotrader:
Где ошибка в коде (код представлен)?
if(HistorySelect(start_time, end_time) == true) { for(int i = HistoryOrdersTotal() - 1; i >= 0; i--) { cur_ticket = HistoryOrderGetTicket(i); if(ulong(HistoryOrderGetInteger(cur_ticket, ORDER_MAGIC)) == a_magic) return(cur_ticket); } cur_ticket = 0; }
На мой взгляд в этой строке
cur_ticket = OrderGetTicket(i);
или в этой
cur_ticket = HistoryOrderGetTicket(i);
переменная принимает неправильное значение и в этой строке
return(cur_ticket);
это значение возвращает.
Попробуйте использовать промежуточную переменную для тикета. И если магик этого ордера совпадает с нужным, то переменной cur_ticket присваиваем
это значение.
ps; для проверки замените строку (последнюю)
return(cur_ticket);
на
return(0); // или -1
fxsaber:
Спасибо, точно, может остаться последний тикет!
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Привет!
Устанавливается асинхронно отложенный ордер.
От сервера нет ответа и начинается проверка что случилось с ордером.
В состав проверки входит фунцция:
Которая в этой строке
возвращает не правильный тикет.
По сути, ордера не должно быть в истории, т.к севетник не может его удалить, потому что
еще нет его тикета. Правда может быть реджект (поэтому и ведется поиск в истории), но реджектов нет.
Как такое получается, если каждому ордеру присваивается уникальный магик?