
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А не нужно внутри цикла. @Сделал дело - гуляй смело!@ Внутри цикла пульнули и если OrderSend==true, то взвести флаг ожидания и ловить результат в OnTradeTransaction(). И никаких циклов и зацикливаний.
Вышла новая статья Сравнение MQL5 и QLUA - почему торговые операции в MQL5 до 28 раз быстрее? . В ней есть скрипт проверки скорострельности. Так вот, там есть такое решение (советник "SyncTradesTest.mq5" для синхронного выполения
- здесь OrderSend проверяется на true или на false. В Вашем случае нужно просто проверять на true. Может примерно так:
Правда тогда внутрь цикла do ... while нужно записать получение цены и заполнение структуры запроса.
Открываю сделку в цикле следующим кодом:
Цикл задуман как средство повышения надежности открытия сделки, то есть, если не открывается с первого раза, пробовать снова.
Проблема в том, что, пока терминал получает ответ сервера, цикл успевает послать команду OrderSend() несколько раз.
Как можно заставить его ждать ответа?
Да очень просто.
Нужно поставить флаг, что мы ожидаем ответа в OnTradeTransaction, которая, в свою очередь сбросит флаг, когда
придёт подтверждение, что ордер установлен.
Да очень просто.
Нужно поставить флаг, что мы ожидаем ответа в OnTradeTransaction, которая, в свою очередь сбросит флаг, когда
придёт подтверждение, что ордер установлен.
Вышла новая статья Сравнение MQL5 и QLUA - почему торговые операции в MQL5 до 28 раз быстрее? . В ней есть скрипт проверки скорострельности. Так вот, там есть такое решение (советник "SyncTradesTest.mq5" для синхронного выполения
- здесь OrderSend проверяется на true или на false. В Вашем случае нужно просто проверять на true. Может примерно так:
Правда тогда внутрь цикла do ... while нужно записать получение цены и заполнение структуры запроса.
Я так делал. Суть та же. Пока нет ответа от сервера - OrderSend() == false. Цил продолжает посылать запросы.
Или совсем отказываться от цикла, и проверять исполнение по OnTrade() или OnTradeTransaction(), и если все нормально, то идти дальше... А если не нормально...
Вот!!! Не годится OnTradeTransaction(), так как она вернет результат, что все хорошо. И будет молчать, пока сделка не случится.
Сколько ждать, перед тем как сделать новую попытку открыть сделку? Не вижу разницы между проверкой OnTradeTransaction() и проверкой result.retcode.
Я так делал. Суть та же. Пока нет ответа от сервера - OrderSend() == false. Цил продолжает посылать запросы.
Или совсем отказываться от цикла, и проверять исполнение по OnTrade() или OnTradeTransaction(), и если все нормально, то идти дальше... А если не нормально...
Вот!!! Не годится OnTradeTransaction(), так как она вернет результат, что все хорошо. И будет молчать, пока сделка не случится.
Сколько ждать, перед тем как сделать новую попытку открыть сделку? Не вижу разницы между проверкой OnTradeTransaction() и проверкой result.retcode.
А Вы точно так делали:
?
Я в цикле предлагал проверять только false или true.
А Вы точно так делали:
?
Я в цикле предлагал проверять только false или true.
while !OrderSend(req, res);
Может все дело в таймаутах, которые могут быть больше 2-х минут и их обработка возложена целиком на плечи трейдеров...
разработчики объявляли, что OrderSend сделали полностью синхронным
Интересно, зачем понадобилось делать асинхронный OrderSendAsync и полуaсинхронный OrderSend? ИМХО OrderSend с поведением как в MT4 был бы удобней. Выход из OrderSend, если появилась новая сделка или ордер и торговая история на терминале обновилась, смотрится короче, удобнее и без велосипедописательства. :)
Может все дело в таймаутах, которые могут быть больше 2-х минут и их обработка возложена целиком на плечи трейдеров...
Потому что асинхронный быстрее и эффективнее (как всегда). Если посылать пачку ордеров асинхронно и один из них заткнется, то все остальные проскочат, а при синхронном подходе - заткнется вся очередь.
Кроме того, асинхронный советник после отправки ордеров может продолжать контролировать новые сигналы, а синхронный советник будет "курить бамбук" до тех пор, пока не сработает предыдущий приказ.