Спасибо за эту статью.
Немного об ошибке:
Все программы, работающие по данным стакана, по форме будут являться советниками, ведь обработчик события BookEvent есть только в советниках. Правда, можно сделать связку "советник-индикатор", где истинный индикатор сможет принимать данные от советника и обрабатывать состояние стакана.
Это не правда, индикатор может обрабатывать OnBookEvent тоже.
angevoyageur:
Немного об ошибке:
Это не правда, индикатор может обрабатывать OnBookEvent тоже.
Alain, спасибо за сообщение. Да, точно, я не прав. В индикаторах тоже работает... понадеялся на список обработчиков при создании индикатора, среди которых нет OnBookEvent().
А самое главное, что Документация гласит:
Alain, спасибо за сообщение. Да, точно, я не прав. В индикаторах тоже работает... понадеялся на список обработчиков при создании индикатора , среди которых нет OnBookEvent().
А самое главное, что Документация гласит:
Право, документация должна быть исправлена. Вы пишите ServiceDesk по этому поводу?
добрый день, спасибо за статью, очень полезная!
такое вопрос, допустим я обрабатываю событие BookEvent, и своём обработчике буду удалять, выставлять ордера, которые в свою очередь снова инициируют это событие..... то в тот момент когда отработает срока выставления (удаления заявки) и снова образуется новое событие BookEvent, то моя самая начальная процедура прервётся? т.к. замечал что выполнение кода до конца не доходит... не всё выполняется ... надеюсь понятно изложил мысль ))
добрый день, спасибо за статью, очень полезная!
такое вопрос, допустим я обрабатываю событие BookEvent, и своём обработчике буду удалять, выставлять ордера, которые в свою очередь снова инициируют это событие..... то в тот момент когда отработает срока выставления (удаления заявки) и снова образуется новое событие BookEvent, то моя самая начальная процедура прервётся? т.к. замечал что выполнение кода до конца не доходит... не всё выполняется ... надеюсь понятно изложил мысль ))
Спасибо за мнение!
Нет, пока обрабатывается одно событие, управление программой не переходит автоматом к другому обработчику при генерировании нового события... это можно проверить с помощью функции Print() ( и лучше добавить паузу Sleep()).
Есть такое понятие, как "очередь событий".
Согласно Документации:
Программа получает события только от графика, на котором она запущена. Все события обрабатываются одно за другим в порядке поступления. Если в очереди уже есть событие NewTick либо это событие находится в состоянии обработки, то новое событие NewTick в очередь mql5-программы не ставится. Аналогично, если в очереди mql5-программы уже находится событие ChartEvent или такое событие обрабатывается, то новое событие такого типа не ставится в очередь. Обработка событий таймера производится по такой же схеме – если в очереди находится или уже обрабатывается событие Timer, то новое событие таймера не ставится в очередь.
Очереди событий имеют ограниченный, но достаточный размер, поэтому переполнение очереди для корректно написанной программы маловероятно. При переполнении очереди новые события отбрасываются без постановки в очередь.
Очереди событий имеют ограниченный, но достаточный размер, поэтому переполнение очереди для корректно написанной программы маловероятно. При переполнении очереди новые события отбрасываются без постановки в очередь.
значит всё таки мои опасения не лишены оснований )) написал спредера для фьючерса на usd\rub что бы всё время лучшими ценами в стакане стоять... то там точно будет переполнение очереди, т.к. там за секунду стакан обновляется оооч. много раз и это без того что я ещё туда что-то ставлю, удаляю... а со мной точно не будет успевать..... и это только демо... а на реале там стакан вообще бешаный ))
спасибо что направили мысли в нужное русло )
Доброго времени суток. Очень познавательная статья. У меня по ходу нее такой вопрос.
Стоит задача фильтрации сделок совершенных по инструменту в соответствии с типом заявок, которыми они совершены (рыночная/лимитированная).
Как связать события OnBookEvent и события OnTick, чтобы можно было решить указанную задачу, т.е как можно определить какие типы заявок участвовали в сделке? Только средствами OnBookEvent на сколько я понял, такую задачу не решить.
Rubick:
...Как связать события OnBookEvent и события OnTick, чтобы можно было решить указанную задачу, т.е как можно определить какие типы заявок участвовали в сделке? Только средствами OnBookEvent на сколько я понял, такую задачу не решить.
Скорее всего Вам не стакан нужен, а обработчик рыночных операций.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Рецепты MQL5 - обработка события BookEvent:
Торговый терминал MetaTrader 5, как известно, - это мультирыночная платформа. С ее помощью можно торговать на рынках: Форекс (Forex), фондовые рынки (биржи), Фьючерсы и Контракты на разницу. Судя по заказам в разделе Фриланс, доля трейдеров, которые торгуют не только на Форексе, растет.
В своей статье я хотел бы познакомить начинающего MQL5-программиста с обработчиком события BookEvent. Это событие связано с биржевым стаканом, который скорее является инструментом трейдера, торгующего фондовыми активами и производными на них. Однако для Forex-трейдеров стакан тоже может оказаться полезным. Сейчас все большую популярность набирают так называемые ECN-счета, где поставщики ликвидности предоставляют информацию по заявкам, пускай и в рамках только своей модели агрегатора.
1. Событие BookEvent
Согласно Документации данное событие появляется при изменении состояния стакана цен. Условимся, что событие BookEvent – это "событие стакана".
Сам стакан – это массив заявок, которые отличаются направлением (sell и buy), ценой и объемом. Цены в стакане распределены возле рыночных, поэтому считаются лучшими.
Рис.1 Стакан цен в MetaTrader 5
В MetaTrader 5 стакан называется «Стакан цен» (рис.1). Более подробно о стакане цен можно почитать в Руководстве пользователя клиентского терминала.
Автор: Dennis Kirichenko