Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ошибка серьезная. Требуется решение.
IsConnected() && IsTradeAllowed() && OrdersTotal()==0 ?
Поможет?
Ошибка серьезная. Требуется решение.
Приведите, пожалуйста, полный код эксперта, на котором происходила такая ситуация.
Скорее всего не сервер загружен, а дилеры еще не приступили к работе или ждут подтверждения цен.
Думаю, этого достаточно.
Выставление ордера происходит при открытии рынка в понедельник (с первым тиком)
for (i = 0; i < ErrAnz; i++) { ticket = OrderSend(Symbol(), OP_BUY, Lots_MM, Ask, 3, orderBUYSTOP_SL, TPBuy, NULL, 0, 0, LightBlue); if(ticket < 0) { ErrorCode = GetLastError(); Print(i + ". OrderSend error #", ErrorCode, " - ", ErrorDescription(ErrorCode)); RefreshRates(); } else { return(0); } }Так что же делать? Как можно увеличить тайм-аут?
Может, ввести последним необязательным параметром в такие команды как OrderSend, OrderModify и т.п.
Должен предупредить, что через некоторое время мы программно запретим такое отношение к совершению сделок. Снова введем жесткие ограничения на частоту сделок.
Вот вот с этого (первый тик) и надо было начинать. Никто просто не желает отрабатывать заявки по первому тику и ждут подтверждений.
В любом случае таймауты будем проверять, спасибо.
А вот этого как раз и не хотелось бы..
Хорошо бы опубликовать на сайте несколько "штатных" вариантов обработки ордеров, рекомендуемых разработчиками.
Должен предупредить, что через некоторое время мы программно запретим такое отношение к совершению сделок. Снова введем жесткие ограничения на частоту сделок.
Вот актуальный:
for (k = 0; k < ErrAnz; k++) { for (m = 0; m < ErrAnz; m++) { if (!IsTradeAllowed()) { Sleep(SleepZeit); RefreshRates(); } else { break; } if (!IsConnected()) { Sleep(SleepZeit); RefreshRates(); } else { break; } } ticket = OrderSend(Symbol(), OP_BUY, Lots_MM, Ask, 3, orderBUYSTOP_SL, TPBuy, NULL, 0, 0, LightBlue); if(ticket < 0) { ErrorCode = GetLastError(); Sleep(SleepZeit); RefreshRates(); continue; } return(0); }Конечно есть - он не проверяет коды ошибок ErrorCode. И при любой ошибке идет повторять команду.
Вто что я рекомендовал:
Жесткое повторение попыток до победного конца в ситуации неопределенности - это явно неправильно.