Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Теперь интересно узнать, реагирует ли OnBookEvent на событие Last?
Стакан - это котировочный поток. Конечно, реагирует. Но может быть маленькое отставание, которое на практике заметить - нужно постараться.
Выходит что last - это execution поток. А Ask/Bid - котировочные потоки. Т.е. сначала выжирается ликвидность ластом, а затем нам приходит рапорт: "ликвидность выжрана, текущие Ask/Bid такие-то".
Следовательно, высказанное мной предположение верно: текущий тик однозначно описывает уровень last, а вот уровни Ask и Bid в нем могут соответствовать еще предыдущим значениям.
В общем, как мне кажется, вы здесь пытаетесь нащупать то, что написано в справке https://www.mql5.com/ru/docs/series/copyticks
Примечание
Функция CopyTicks() позволяет запрашивать и анализировать все пришедшие тики. Первый вызов CopyTicks() инициирует синхронизацию базы тиков, хранящихся на жёстком диске по данному символу. Если тиков в локальной базе не хватает, то недостающие тики автоматически будут загружены с торгового сервера. При этом будут синхронизированы тики с даты from, указанной в CopyTicks(), по текущий момент. После этого все приходящие по данному символу тики будут поступать в тиковую базу и поддерживать её в актуальном синхронизированном состоянии.
Если параметры from и count не указаны, то в массив ticks_array[] будут записаны все доступные тики, но не более 2000. Параметр flags позволяет задать тип требуемых тиков.
COPY_TICKS_INFO – отдаются тики, в которых есть изменения цены Bid и/или Ask. Но при этом будут также заполнены данные остальных полей, например, если изменилась только цена Bid, то в поля ask и volume будут записаны последние известные значения. Чтобы узнать точно, что именно изменилось, необходимо анализировать поле flags, которое будет иметь значение TICK_FLAG_BID и/или TICK_FLAG_ASK. Если тик имеет нулевые значения цен Bid и Ask, и при этом флаги показывают, что эти данные цены изменились (flags=TICK_FLAG_BID|TICK_FLAG_ASK), то это говорит об опустошении стакана заявок. Другими словами, в этот момент отсутствуют заявки на покупку и продажи.
COPY_TICKS_TRADE – отдаются тики, в которых есть изменения последней цены сделки и объема. Но при этом будут также заполнены данные остальных полей, то есть в поля Bid и Ask будут записаны последние известные значения. Чтобы узнать точно, что именно изменилось, необходимо анализировать поле flags, которое будет иметь значение TICK_FLAG_LAST и TICK_FLAG_VOLUME.
COPY_TICKS_ALL – отдаются все тики, в которых есть хоть какое-то изменение. При этом неизмененные поля также заполняются последними известными значениями.
Вызов CopyTicks() с флагом COPY_TICKS_ALL выдает сразу все тики из запрашиваемого диапазона, в то время как вызов в других режимах требует некоторого времени на предобработку и выборку тиков, и поэтому не даёт существенного выигрыша по скорости выполнения.
При запросе тиков (неважно, COPY_TICKS_INFO или COPY_TICKS_TRADE), в каждом тике содержится полная ценовая информация на момент тика (bid, ask, last и volume). Это сделано для удобства анализа торговой обстановки на момент каждого тика, чтобы не приходилось каждый раз запрашивать глубокую тиковую историю и искать в ней значения по другим полям.
А по другому никак не организовать на самом деле, если делать биржу без тормозов.
Почему?
Для лучшего понимания такой пример. Пусть мы шлем не маркет-запрос, а BuyLimit по цене >= Ask. Это вынудит котировочную часть биржи транслировать тик с неположительным спредом. Чтобы такого не было, происходит ожидание Execution-отработки до состояния, пока спред не станет положительным (или неопределенным, если вся сторона стакана выжрана).
Каждый шаг выжирания сопровождается трансляцияей этого события во вне. В какой последовательности клиент примет пакеты - уже никого не волнует.
Разобрался. Если контролировать флаг полученного тика, тогда действительно все встает на свои места. Вот написал новую версию стакана цен (скоро опишу его работу в статье):
Это пока черновик. Зеленым подсвечен банд, по которому прошла последняя сделка. Видно, что зеленым всегда подсвечиваются только лучшие уровни Ask Bid и зеленый цвет не зализает вглубь стакана.
Делается следующая проверка:
Т.е. стакан цен действительно синхронизирован с потоком тиков.
Для лучшего понимания такой пример. Пусть мы шлем не маркет-запрос, а BuyLimit по цене >= Ask. Это вынудит котировочную часть биржи транслировать тик с неположительным спредом. Чтобы такого не было, происходит ожидание Execution-отработки до состояния, пока спред не станет положительным (или неопределенным, если вся сторона стакана выжрана).
Каждый шаг выжирания сопровождается трансляцияей этого события во вне. В какой последовательности клиент примет пакеты - уже никого не волнует.
Вы хоть думаете над тем, что пишите?
"Это вынудит котировочную часть биржи транслировать тик с неположительным спредом"
Биржу нелься "ВЫНУДИТЬ"!
Для лучшего понимания как отдаёт инфориацию биржа,прочтите вложенный файл
Вы хоть думаете над тем, что пишите?
Для лучшего понимания такой пример. Пусть мы шлем не маркет-запрос, а BuyLimit по цене >= Ask. Это вынудит котировочную часть биржи транслировать тик с неположительным спредом. Чтобы такого не было, происходит ожидание Execution-отработки до состояния, пока спред не станет положительным (или неопределенным, если вся сторона стакана выжрана).
Каждый шаг выжирания сопровождается трансляцияей этого события во вне. В какой последовательности клиент примет пакеты - уже никого не волнует.
Почему нельзя слать каждый шаг со скорректированными бид/аск, если очевидно, что предыдущий уровень исчерпан?