Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Добрый день!
Поскольку функция OnBookEvent() является широковещательной, то
необходимо фильтровать события для своего символа:
И всё заработает правильно.
Естественно фильтруется.
Кроме этого еще проверяется цена ордера, и если она не совпадает с нужной - только тогда пытаюсь модифицировать.
Получается если не было изменения котировок я не могу модифицировать ордер? Бред.
Какой вопрос - такой ответ... в правильно заданном вопросе почти 100% ответа...
Ваш вопрос, мягко выражаясь, некомпетентен...
Нужно видеть блок кода, где отправляются запросы на сервер. Может Вы сервер забросали своими запросами в асинхронном режиме, вот он и ругается...
Читкайте тут дополнительно:
https://www.mql5.com/ru/forum/10969
Естественно фильтруется.
Кроме этого еще проверяется цена ордера, и если она не совпадает с нужной - только тогда пытаюсь модифицировать.
Получается если не было изменения котировок я не могу модифицировать ордер? Бред.
К сожалению ( или к счастью), ЛЮБОЙ советник - это машина состояний.
Событие --> Проверка состояния --> Реакция.
Все мои советники (более 10 месяцев) работают на реале по OnBookEvent() с OrderSendAsync()
У меня нет никаких проблем ни с постановкой, ни с удалением, ни с модификацией ордеров!
Ищите ньюанс в Вашем коде.
Помимо состояний самого эксперта, есть состояния Вашего ордера:
Тогда в OnBookEvent() нужно учитывать состояние Вашего ордера,
иначе ордер будет постоянно модифицироваться (ставиться или удаляться), что у Вас и происходит...
Над ордером можно совершать действия, когда ордер находится в стабильном состоянии.
ORD_NO_STATE - ордер не выставлен
ORD_BUY_WORK - ордер выставлен и никаких действий с ним не происходит:
...Ищите ньюанс в Вашем коде...
Верно. Но смею предположить, что дело не в состоянии ордера. Просто слишком частые попытки модифицировать ордер приводят к тому, что сервер начинает отказывать советнику...
Событие BookEvent случается гораздо чаще, чем событие NewTick. Можно проверить периодичность... и тогда многое станет понятно...
Верно. Но смею предположить, что дело не в состоянии ордера. Просто слишком частые попытки модифицировать ордер приводят к тому, что сервер начинает отказывать советнику...
Событие BookEvent случается гораздо чаще, чем событие NewTick. Можно проверить периодичность... и тогда многое станет понятно...
Я высказал предположения. Кода-то нет.
И на 99,9% уверен, что не закончилось действие первой команды ( ордер в состоянии ORD_BUY_DO_MODIFY ),
как уже летит другая... А если бы была проверка, то повторная команда на модификацию не поступила бы.
Так, что не известно кто из нас прав :)
P/S При работе с отложенными ордерами ВООБЩЕ нельзя обойтись без состояния ордера.
У меня была проблема. Срабатывал отложенный ордер, а событие в OnTradeTransaction приходило
(иногда) позже, чем в OnBookEvent() - долго голову ломал по этому поводу
(было двойное срабатывание)!
Я высказал предположения. Кода-то нет.
И на 99,9% уверен, что не закончилось действие первой команды ( ордер в состоянии ORD_BUY_DO_MODIFY ),
как уже летит другая... А если бы была проверка, то повторная команда на модификацию не поступила бы.
Так, что не известно кто из нас прав :)
P/S При работе с отложенными ордерами ВООБЩЕ нельзя обойтись без состояния ордера.
У меня была проблема. Срабатывал отложенный ордер, а событие в OnTradeTransaction приходило
(иногда) позже, чем в OnBookEvent() - долго голову ломал по этому поводу!
Похоже в этом дело! Добавил проверку, пока ошибок не выдает. Спасибо!
Завтра еще понаблюдаю на быстром рынке.
Верно. Но смею предположить, что дело не в состоянии ордера. Просто слишком частые попытки модифицировать ордер приводят к тому, что сервер начинает отказывать советнику...
Событие BookEvent случается гораздо чаще, чем событие NewTick. Можно проверить периодичность... и тогда многое станет понятно...
Похоже в этом дело! Добавил проверку, пока ошибок не выдает. Спасибо!
Завтра еще понаблюдаю на быстром рынке.
Как "быстрый" рынок?
В основном нормально, без ошибок.
Но все равно, редко встречаются пограничные случаи.
После проверки статуса, все нормально, отправляется приказ на модификацию. Пока долетел приказ модификации, ордер исполнился и выдает invalid request.
2015.04.22 18:35:19.223 Trades 'ххххх': modify order #13038500 sell limit 1.00 SBRF-9.15 at 7587 sl: 0 tp: 0 -> 7608, sl: 0 tp: 0 placed for execution in 52 ms
2015.04.22 18:35:19.223 Trades 'ххххх': modify order #13038500 sell limit 1.00 SBRF-9.15 at 7587 sl: 0 tp: 0 -> 7608, sl: 0 tp: 0
2015.04.22 18:35:19.223 Trades 'ххххх': deal #11494544 sell 1.00 SBRF-9.15 at 7587 done (based on order #13038500)
2015.04.22 18:35:19.270 Trades 'ххххх': failed modify order #13038500 buy 0.00 SBRF-9.15 at market sl: 0 tp: 0 -> 7608, sl: 0 tp: 0 [Invalid request]
Еще пару раз такая ошибка вылезла:
2015.04.22 21:06:41.156 (SBRF-9.15,M5) CTrade::OrderSend: modify #13043194 at 7671.00000 (sl: 0.00000 tp: 0.00000) [unknown retcode 0]
пока не понял что это такое.
В основном нормально, без ошибок.
Но все равно, редко встречаются пограничные случаи.
После проверки статуса, все нормально, отправляется приказ на модификацию. Пока долетел приказ модификации, ордер исполнился и выдает invalid request.
Я же описывал эту ситуацию... :)
Она будет возникать часто, если НЕ использовать OrderSendAsync()...
OnTradeTransaction() позволяет отслеживать состояния ордера ОЧЕНЬ быстро.
(у меня не возникает таких проблем)