Код абсолютно зверский, без каких-либо ожиданий или анализа ответа.
Должен предупредить, что через некоторое время мы программно запретим такое отношение к совершению сделок. Снова введем жесткие ограничения на частоту сделок.
Выставление ордера происходит при открытии рынка в понедельник (с первым тиком)
Вот вот с этого (первый тик) и надо было начинать. Никто просто не желает отрабатывать заявки по первому тику и ждут подтверждений.
Должен предупредить, что через некоторое время мы программно запретим такое отношение к совершению сделок. Снова введем жесткие ограничения на частоту сделок.
А вот этого как раз и не хотелось бы..
Хорошо бы опубликовать на сайте несколько "штатных" вариантов обработки ордеров, рекомендуемых разработчиками.
Код абсолютно зверский, без каких-либо ожиданий или анализа ответа.
Должен предупредить, что через некоторое время мы программно запретим такое отношение к совершению сделок. Снова введем жесткие ограничения на частоту сделок.
Хорошо, а что мешает ЗАСТАВИТЬ программно всех дожидаться положительного ответа IsTradeAllowed(), например? Просто вшить ее вызов в тело функции OrderSend() - и все, никуда не денешься. На мой взгляд, намного лучше, чем вводить задержки. Или я не учел чего?
Конечно есть - он не проверяет коды ошибок ErrorCode. И при любой ошибке идет повторять команду.
Вто что я рекомендовал:
Кстати, я бы рекомендовал повторять торговую операцию только после четких и осознанных кодов ошибок (типа неправильных цен), а не во всех случаях. Если появляются нечеткие коды (timeout, common error и другие), то надо включать блок логики для работы с внештатными ситуациями.
Жесткое повторение попыток до победного конца в ситуации неопределенности - это явно неправильно.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Ошибка серьезная. Требуется решение.
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. И при любой ошибке идет повторять команду.
Вто что я рекомендовал:
Жесткое повторение попыток до победного конца в ситуации неопределенности - это явно неправильно.