Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вот пример перебора всех отложенных ордеров на счету - то есть ордеров, которые еще не исполнились и видны на вкладке "Торговля".
Результат:
может его спать попробовать положить на неск секунд.... ну так как тест....
Тоже посетила эта идея, только что попробовал - работает! Просто поставил в начале OnTrade() задержку на 0.7 секунды и все нормально отслеживается! Ну вот, можно это дело и в статью оформить :)
Кстати, если кто-нибудь подскажет, как решить эту проблему без Sleep() и вообще реально ли это - буду признателен!
насколько я помню в мт5 есть такие веши когда колеса впереди машины мчаться
А можно по подробней? Об этом где-то написано?
Вот пример перебора всех отложенных ордеров на счету - то есть ордеров, которые еще не исполнились и видны на вкладке "Торговля".
Тоже посетила эта идея, только что попробовал - работает! Просто поставил в начале OnTrade() задержку на 0.7 секунды и все нормально отслеживается! Ну вот, можно это дело и в статью оформить :)
Не нужно это еще и в статью оформлять :) Зачем искусственная задержка если мы боремся за скорость? Событие OnTrade возникает в следующих случаях:
И эти события могут происходить в разное время. Например, Вы решили открыться по рынку, для этого отправили запрос. В итоге был сформирован ордер на открытие по рынку (событие 1), свершилась сделка (событие 2), сработавший ордер ушел в историю (событие 3), открылась позиция (событие 4).
Но так как при обработке перового события все изменения уже отразились в терминале, то при поступлении второго события вы видите, что ничего не изменилось. Вариантов развития событий может быть множество,все не предусмотреть. Например, выставлен ордер на покупку, и был исполнен не полностью -в итоге будет сформирован ордер на покупку по оставшемуся объему. И так далее.
Посмотрите в справке Функции обработки событий, там же написано:
Функция вызывается при наступлении Trade, которое возникает при изменении списка выставленных ордеров и открытых позиций, истории ордеров и истории сделок. При любом торговом действии (выставлении отложенного ордера, открытие/закрытие позиции, установка стопов, срабатывании отложенных ордеров и т.п.) соответствующим образом изменяется история ордеров и сделок и/или список позиций и текущих ордеров.
Rosh писал(а) # ... Вариантов развития событий может быть множество,все не предусмотреть.
В том числе: позиция уже открыта, а ордер, её открывший, всё ещё в списке, не ушел в историю.
Только что наблюдал такую ситуацию. Конечно, тут же новое событие Trade восстановило статус-кво.
Тоже посетила эта идея, только что попробовал - работает! Просто поставил в начале OnTrade() задержку на 0.7 секунды и все нормально отслеживается! Ну вот, можно это дело и в статью оформить :)
Кстати, если кто-нибудь подскажет, как решить эту проблему без Sleep() и вообще реально ли это - буду признателен!
А можно по подробней? Об этом где-то написано?
на форуме был топик про удаление объектов
даже потом статью написали
https://www.mql5.com/ru/articles/28
хоть убейте щаз не могу найти топик
но суть заключалась в том что скрипт не успевал удалить обьекты при деинит
получается что некоторые веши мкл5 какбы посылает импульс, а что произошло дальнейшее уже неважно... а тут всетаки есть некоторые такие веши которые происходят удалённо
например мне кажется такая вешь как получение ответа с сервера является достаточно важным но по фактам разработчики не внесли в функцию ожидания результата
я думаю по твоей проблеме есть такая штука
bool HistoryOrderSelect(
ulong ticket, // тикет ордера
uint timeout=0 // таймаут в миллисекундах
);
и задать тайм аут при истечении которого выводить трабл =) ну как вариант
Спасибо, попробую все возможные варианты!
В общем поразбирался я еще немного во всем этом и вот что получилось:
И эти события могут происходить в разное время. Например, Вы решили открыться по рынку, для этого отправили запрос. В итоге был сформирован ордер на открытие по рынку (событие 1), свершилась сделка (событие 2), сработавший ордер ушел в историю (событие 3), открылась позиция (событие 4).
Но так как при обработке перового события все изменения уже отразились в терминале, то при поступлении второго события вы видите, что ничего не изменилось.
Опытным путем выяснил, что при открытии по рынку поступает не 4, а 3 события. В этом можно убедиться, если написать в теле OnTrade() какой-нибудь Alert, например:
У меня он срабатывает только три раза при каждой установке/закрытии ордера.
Теперь, что касается отсутствия последнего исполненного ордера в истории на момент вызова OnTrade()? то проблема остается актуальной!
Rosh, теперь чтобы не быть голословным, я прикреплю код моего эксперта с обработкой события trade и отчет по его работе. Посмотрите, пожалуйста результаты. Они подтверждают то, о чем я писал ранее.
Вот отчет(читать снизу вверх):
В отчете: Цифры в начале сообщения - это тикет ордера, затем описание действия и в конце номер вызова OnTrade().
Уважаемые разработчики!
Build 314, как и прежде, в истории на момент вызова OnTrade(), отсутствует последний исполненный ордер. Исправьте эту ошибку...