Биржевой стакан как увидеть объем лимитных ордеров

Лучшие Форекс брокеры 2021:

Биржевой стакан. Когда тайное становится явным

Каждый трейдер, который использует какую-нибудь из стратегий форекс, когда-нибудь задавался вопросом, с чем же связаны изменения цен в большую или в меньшую сторону и от чего зависят такие колебания? Конечно же, те, кто использует автоматическую торговлю, могут и не думать об этом, ведь всю работу делают за них советники.

Многое в этом процессе зависит от так называемого «биржевого стакана». На его примере ясно видно, что влияет на рост и падение стоимости. Но что же означает понятие «биржевой стакан»?

Биржа — это рынок, только виртуальный. А основное назначение любого рынка – свести вместе продавца и покупателя. У них естественно разные интересы, продавец хочет получить больше денег за свой товар, а покупатель не хочет платить слишком большую цену и ищет, что подешевле. Если записать их требования к цене и составить таблицу, увидим следующее:

Такие участники рынка занимают пассивную позицию. Они знают, чего хотят от сделки, однако ждут, что кто-то другой сделает им предложение, которое ответит их требованиям. Пассивные участники рыночных процессов делают ликвидный инструмент больше. Требования пассивных участников называют лимитными ордерами.

Если на рынке слишком много лимитных ордеров, то там начинают появляться уже активные участники рыночного процесса. Они не хотят просто ждать, когда им что-то предложат, их устраивает рыночная цена на данный момент.

Участники с активной позицией приобретают лимитные заявки участников рынка с пассивной позицией, по цене более выгодной для них. Заявки данных участников именуют рыночным ордером.

Лучшие Форекс брокеры по надежности:

Биржевой стакан не отражает рыночные ордера, так как они сразу же реализуются. Можно на конкретном примере увидеть, как реализуются рыночные ордера.

Биржевой стакан цен. Что это, как его читать и как с ним работать? Стакан котировок на бирже

Можно наглядно посмотреть на картинке, как изменяется цена. После торга цена ASK поднялась вверх на 1 пункт. То есть ценообразование началось. Видно, что цена плавает в зависимости от того, чья активность больше, продавцов или покупателей. Если более активны продавцы – цены идут вниз, если покупатели – то становятся больше.

Становится понятным термин «биржевой стакан». Это таблица, в которую заносятся сведения об лимитных ордерах на торговые сделки по определённому инструменту. В каждую графу таблицы вписаны сведения о выставленных к торгам активов, об их стоимости, объёме и спросе.

В различных источниках биржевой стакан может называться по разному: книга приказов, глубина рынка, стакан заявок. Все эти термины означают одно и тоже.

С помощью такой таблицы трейдеры анализируют ликвидность инструмента за конкретный временной интервал. Они могут, применив «биржевой стакан», определить силу уровня сопротивления и поддержки, реальные уровни спроса и предложения — возможные точки разворота.

Рейтинг Форекс брокеров:

Методы для анализа этого инструмента применяются разные. Одним из самых популярных является скальпинг.

Виды стаканов и где их искать

Внешний вид «биржевых стаканов» может различаться. Он в большей степени определяется используемым терминалом. Однако, все эти таблицы можно разделить на два типа:

Нужно принимать во внимание, есть ли в таблице графы, которые не заполнены. Такой стакан называют разреженным, так как клетки с некоторыми ценами пусты. По такой таблице удобнее анализировать насколько ликвиден конкретный инструмент, а гистограмма способствует визуальной оценке объёма.

Инструмент «биржевого стакана» доступен для игроков на любой бирже, как в США, так и в РФ.

Термин стакана – это чисто термин для биржи, многие же посетители данного сайта интересуются больше Форексом. Им хотелось бы узнать, а существуют ли такие же таблицы на Форексе? На Форексе «биржевой стакан» отсутствует, но есть его аналог.

Имеется ли «Глубина рынка» на Форекс?

В настоящее время «биржевой стакан» на Форекс отсутствует у всех провайдеров в режиме онлайн. Им это вовсе не интересно, зачем уступать преимущество небольшим трейдерам? Конечно, это не очень справедливо, и может когда-нибудь закон заставит их быть не такими жадными, однако пока ситуация в этом вопросе не изменяется.

Несмотря на проблемы с «биржевым стаканом» рынок Форест очень популярен, так как он ликвиднее других подобных учреждений. У него идёт настолько большой объем сделок, что информацию очень трудно обработать и предоставить к использованию. Пока эту задачу решить не представляется возможным.

Терминал мт4-мт5 предоставляет стакан с данными по стоимости. Однако показатели в нём не точны и далеки от совершенства, что может сказаться на качестве анализа биржевой ситуации.

Трейдерам, которые заинтересованы в торгах на Форекс, можно посоветовать пользоваться таблицами, которые составляют для личного пользования крупные брокеры. Они проводят настолько много сделок, что их базы довольно полны и полезны.

На сегодняшнее время для онлайн посетителей доступны только две брокерских фирмы: SaxoBank и Oanda.

У каждого из брокеров, свои недостатки и достоинства в таблице с данными:

Туда заносятся сведения о тейк профитах и стоп лосах.
Новые сведения появляются не сразу, а через 20 минут.
Сведения выражены в процентах, а не в конкретных цифрах.

Вывод

«Биржевой стакан» очень важен для трейдера, так как он отражает реальную ситуацию с ценами на бирже. Прочие инструменты скорее математика, чем средство для предсказания колебания биржевой стоимости.

Если вам понравилась статься про биржевой стакан, будем благодарны, если поделитесь с друзьями, коллегами, знакомыми в соцсетях по кнопкам ниже.

Как работает биржевой стакан?

Биржевой стакан дает трейдерам ценные сведения о рынке. На какой бы бирже вы не торговали, будь то акции, фьючерсы или криптовалюты, у каждой из них есть свой биржевой стакан, но как он работает?

Вы можете видеть лимитные ордера на покупку и продажу других участников биржи. Цены продавцов и покупателей котируются исходя из этих лимитных ордеров. Инвесторы могут применять торговые стратегии на основе анализа биржевого стакана вместе с этими данными.

Когда другие трейдеры выставляют рыночные ордера, они исполняются лимитными ордерами из верхней части стакана. По мере того как ордера будут перемещаться по стакану, спотовая цена будет корректироваться, как и весь биржевой стакан.

К сожалению, индустрия розничной торговли на рынке Форекс лишена этой замечательной функции. Платформа MetaTrader 4, которой пользуется большинство трейдеров, не предлагает биржевой стакан для Форекс. Более того, большинство Форекс-брокеров предоставляют своим клиентам агрегированный поток рыночной информации и показывают лишь несколько ценовых уровней из биржевого стакана.

Возможность видеть глубину рынка позволяет не только определить рыночное настроение, но и общий потенциал каждой цены. Торговля с помощью биржевого стакана помогает трейдерам в скальпинге – она распознает сигналы на покупку и продажу и более эффективно определяет время входа в рынок большими ордерами, чтобы не допустить проскальзывание.

Научившись учитывать детальную информацию из биржевого стакана в своей торговой стратегии, вы получите ценное преимущество. Вы можете спросить: “Как воспользоваться преимуществами торговли на основе биржевого стакана, если в популярных торговых приложениях нет такой функции?” Отвечаем: команда FXSSI разработала индикатор OrderBook для терминала MT4.

Форекс-индикатор OrderBook для МТ4

Форекс-индикатор OrderBook для MetaTrader 4, который мы создали и включили в наш набор аналитических инструментов для рынка Форекс, работает совершенно иначе по сравнению с обычными биржевыми стаканами.

Индикатор FXSSI.OrderBook разбит на две гистограммы. На гистограмме слева можно увидеть биржевой стакан, показывающий не только лимитные, но и стоп-ордера. На гистограмме справа отображены открытые позиции других трейдеров, которые ни одна биржа никогда бы не смогла показать ввиду того, что трейдеры не удерживают позиции на бирже.

Теперь, когда вы узнали, чем наш инструмент отличается от обычного инструмента анализа биржевого стакана, мы можем перейти к следующему вопросу: “Как можно получить практически ценную информацию из данного индикатора?”

Как пользоваться биржевым стаканом в торговле?

Трейдеры, ориентирующиеся, в основном, на индикаторы технического анализа, графические паттерны и свечные формации, зачастую совершенно забывают о том, что же на самом деле движет рынками. Оказывается, что именно спрос и предложение, а также решения, которые принимают трейдеры, оказывают влияние на рынок.

Индикатор OrderBook показывает как спрос, так и предложение, а также настроения на рынке.

Курсы финансовых инструментов, которыми мы торгуем на биржах Форекс и CFD, поступают с крупных бирж, таких как CME, CBoT и других. “Киты” рынка обладают наибольшей силой, способной приводить его в движение, поэтому можно не сомневаться в том, что они не торгуют через розничного Форекс-брокера, как вы и мы.

“Киты” могут довольно легко “стереть” вашу недельную прибыль, выставив свои ордера на фьючерсных биржах или прикупив опционные контракты. Очень важно следить за тем, что происходит на этих торговых площадках, а не тем, чем занимаются наши коллеги – розничные трейдеры. Если вы хотите знать больше о биржевом стакане и фьючерсных объемах, обязательно прочитайте нашу статью. Наблюдение за фьючерсным рынком позволит понять, куда, по мнению инвесторов, цена пойдет в дальнейшем.

Определенные формы поведения и дисбаланс рыночных сил в биржевом стакане могут быть сигналом чего-то важного. Стакан помогает определять уровни поддержки и сопротивления, потенциальные пробои и изменения в настроениях.

Сигналы и стратегии торговли по биржевому стакану на Форекс

Приведем несколько примеров сигналов и сведений, которые могут быть получены с помощью нашего гистограммного индикатора OrderBook, показывающего отложенные ордера и позиции.

Определяйте уровни поддержки и сопротивления

Гистограмма Отложенные Ордера. Группа лимитных ордеров на покупку может быть распознана как уровень поддержки. В то же время группа лимитных ордеров на продажу может рассматриваться как уровень сопротивления. Вы можете подтвердить эти уровни, нанеся горизонтальную линию на график, после чего вы должны заметить корреляцию.

Устанавливайте цели в местах скоплений стоп-лоссов

Гистограмма Отложенные Ордера. Мы заметили одну тенденцию: где бы большинство трейдеров не установило свои стоп-лоссы, рынок все равно будет тяготеть к ним и в конечном итоге потеряет свою движущую силу. С помощью данного ориентира нельзя судить о продолжении или развороте текущего тренда. Но вы можете использовать данные скопления стоп-лоссов как довольно удачный уровень для выхода из прибыльных позиций.

Принимайте сигналы при скоплении убыточных сделок

Гистограмма Позиции. Она позволяет получить общее представление об открытых сделках. Общим симптомом эффекта диспозиции является склонность “пересиживать” убыточные сделки. Трейдеры стараются “пересидеть” убыточные позиции лишь для того, чтобы сбросить их. По нашим наблюдениям, скопление убыточных сделок на продажу толкнет цену вверх, а на покупку – вниз.

Ожидайте разворотов при скоплении прибыльных сделок

Гистограмма Позиции. Мы заметили, что всякий раз, когда образуется скопление прибыльных позиций, это длится совсем недолго, т.к. цена резко меняет свое направление, превращая эти прибыльные сделки в убыточные. Звучит довольно удручающе. Если вы умеете замечать подобные события, вы можете сделать прямо противоположное.

Насколько надежна стратегия торговли по биржевому стакану?

Когда вы узнали как пользоваться Order Book индикатором, вам может понравиться идея использования анализа биржевого стакана в вашей торговой стратегии Форекс. К сожалению, этот инструмент рыночного анализа не является святым Граалем торговли. Биржевой стакан может дать вам ценную информацию, на что не способен ни один другой индикатор, но на него не стоит всецело полагаться. Согласно нашим оценкам, сигналы, генерируемые нашим индикатором OrderBook, являются точными на 55%-60%.

Хотя этот процентный показатель и является несомненно положительным, точность наших сигналов может быть значительно выше, если использовать данный индикатор в сочетании с другими методами торговли. Мы рекомендуем использовать его для того, чтобы быть в курсе торговых возможностей на рынке, но при этом искать дополнительное подтверждение его сигналам. Кроме того, биржевой стакан можно использован в качестве инструмента для подтверждения показаний других индикаторов.

Глубина рынка

Depth of Market (Биржевой стакан) — это список с цифровыми индикаторами текущих ордеров на покупку или продажу определенного криптовалютного актива по ценам, установленным участниками. Этот индикатор отражает настроения участников торгов и является одним из наиболее важных инструментов трейдера.

Глубина рынка — это таблица, которая отражает информацию об ордерах, представленных продавцами и покупателями на текущий момент.

Если вы проанализируете криптовалюту и глубину рынка, то можно сделать краткосрочный прогноз рыночной ситуации. Котировки биржевого стакана вместе с таблицей прошлых транзакций используется для мониторинга действий других трейдеров на рынке, выявления основных участников рынка, определения размера спреда и принятия решений о продаже или покупке.

Основное различие между графиком глубины рынка и графиком цен заключается в том, что он не обеспечивает визуального отображения рыночных данных. Он отображает только входящие заявки, которые близки к рынку, и выполнение которых каким-то образом повлияет на дальнейшее ценообразование. Если вы поймете, как читать графики глубины рынка, вы начнете понимать рынок изнутри.

Изображение биржевого стакана

Как уже упоминалось, Order Book — это список лимитных ордеров на рынке на данный момент. Как правило, ордера на продажу располагаются сверху и выделяются красным цветом — их также называют «аски» (от англ. Ask). Ордера на покупку выделены зеленым цветом, расположены ниже и называются «биды». Оба они также называются «предложениями».

Цифра на цене указывает количество лотов (или контрактов на рынке криптовалют), которые можно купить / продать по этой цене. Если вы хотите купить, например, 100 лотов, то вы можете купить 15 лотов по цене 74,84 и все остальное за 74,85. Если вы продаете, то всю сумму можно продать по 74,8. Если эти цены вас не устраивают, вы размещаете лимитный ордер по интересующей вас цене, он появляется на графике, и вы ждете, пока найдется участник, который его исполнит.

Вот реальный пример биржевого стакана на покупку и продажу Биткоина на бирже Биттрекс:

Зеленая стена — покупатели, красная — продавцы. Высота графика основана на количестве ордеров на продажу или покупку по соответствующим ценам. В середине графика есть точка, в которой обе стены постепенно стекаются и образуют реальную цену за определенный период времени.

Важно понимать, что ни один из стаканов криптовалютных бирж не может отображать все активные ордера. Поэтому в видимой части размещаются только те ордера, которые расположены близко к текущей цене. Тем не менее, игра крупных участников рынка обычно всегда заметна под пристальным наблюдением.

Вид биржевого стакана на бирже Bitfinex:

Какие виды ордеров могут отображаться?

Существует несколько типов ордеров на бирже криптовалют. Рассмотрим три наиболее распространенных типа ордеров:

  • Рыночный ордер. Эти ордера на покупку / продажу исполняются по лучшей рыночной стоимости в желаемом объеме.
  • Лимитированный ордер. Такие ордера представляют собой обычные заявки, включая необходимый актив, его цену, а также желаемый объем.
  • Условный ордер. Это все заявки, требующие соблюдения условий, установленных участником рынка, за исключением лимитных заявок.

Ордера, отражающие глубину рынка, также делятся на маленькие, средние и крупные. Такое деление является условным и относится к среднедневному объему торгов по инструменту на конкретном сайте криптовалютной биржи:

  • Малый — 20–100 контрактов. Такое количество контрактов не заслуживает особого внимания трейдеров, поскольку этот объем сделки не сможет повлиять на цену инструмента.
  • Средний — 400–1000 контрактов. Такие объемы значительны, только если большое количество накапливается в узком диапазоне цен, подобных им. В этом случае давление на цены возникает из-за плотности заказов, которые создают увеличенный объем.
  • Большой — 4000–10 000 контрактов. Такие ордера считаются важными, так как они существенно влияют на колебания котировок. Эти позиции тщательно отслеживаются и учитывают их влияние на рынок при планировании своей торговой деятельности.

Кто играет?

Обычно биржевой стакан криптовалют заполняется трейдерами, однако трейдер трейдеру рознь, поэтому для более эффективного анализа глубины рынка необходимо понимать, какие типы игроков участвуют в ее формировании.

Как правило, это инвесторы, на балансе которых находятся достаточно большие суммы актива. Крупные игроки могут вызвать серьезные изменения в цене актива. Их идентификация, а также выяснение их целей, является основной задачей анализа биржевого стакана приктовалют. Это не очень легко сделать, потому что крупные инвесторы разбивают большие объемы на несколько более мелких ордеров, что можно увидеть при анализе ленты транзакций.

БИРЖЕВОЙ СТАКАН Котировок | Как Читать И Понимать Стакан Ордеров? Что Такое Стакан Цен На Бирже?

Средние трейдеры и инвесторы

Это самая большая аудитория криптовалютных бирж. Они торгуют в соответствии со своими собственными стратегиями. Эта категория наиболее подвержена панике, и их поведение легко предсказать. Можно выделить трейдеров и средних инвесторов по объему их сделок и частоте выдачи ордеров.

Эта категория игроков размещением ордеров поддерживают ликвидность определенных активов на рынке, а также уменьшают размер спреда.

Такая деятельность довольно рискованная, поэтому маркет-мейкеры используют специальные алгоритмы для установки двусторонних ордеров в своей работе. Криптовалютные биржи поощряют участников рынка льготными комиссиями, что дает им возможность заключать сделки в разных направлениях.

В эту категорию входят трейдеры и торговые роботы, которые открывают значительное количество транзакций в течение одной биржевой сессии с коротким сроком исполнения. Эта категория биржевых игроков получает прибыль в результате торговли внутри спреда.

Примерно это выглядит так: после анализа биржевого стакана на криптовалютной бирже скальпер размещает ордер с лучшей ценой Bid и практически одновременно вместе с ним ордер Ask. Если момент правильно рассчитан, то прибыль от сделки значительно превысит размер комиссии.

Высокочастотные торговые роботы

Биржевой стакан криптовалюта, АНАЛИЗ БИРЖЕВЫХ (торговых) стаканов BINANCE

Из-за почти мгновенного выполнения ордеров высокочастотных роботов довольно трудно заметить в стакане криптовалютной биржи, но они четко видны в ленте сделок. Роботы работают по специальным алгоритмам и характеризуются очень высокой скоростью вычислений.

Что анализировать в биржевом стакане?

Если вы анализируете биржевой стакан, вам необходимо обратить внимание на следующие вещи:

1. Большие ордера

Чтение данных ленты, отслеживание ордеров, объем которых превышает средний. Большой ордер рассматривается в контексте его выдачи. Это заслуживает внимания в таких случаях:

2. Дубликаты ордеров

Дилеры очень крупного рынка в связи с отсутствием возможности открытия позиций на внебиржевом рынке вынуждены использовать различные мошенничества для набора позиций в биржевом стакане, чтобы их не было видно. Одним из таких методов является включение алгоритма, который покупает / продает определенное количество партий лотов по рыночной цене через определенные промежутки времени. Это может быть равный объем через фиксированный интервал времени или изменяющийся (10, 20, 30 лотов) через случайные интервалы (например, в диапазоне 3–20 с).

Анализ стен и заказов помогает лучше понять рынок и настроение игроков. Тем не менее, стоит знать следующее: на рынке криптовалют цена движется в большинстве случаев по просьбе крупных игроков. Их также называют китами. Миллиардеры могут вводить в заблуждение по ложным ордерами. Представьте, трейдер открывает график ордеров и видит это:

Новички подумают, что это сигнал к продаже монеты, и поторопятся избавиться от нее. Но, скорее всего, мы видим ложную стену. График неестественен и создан явно с целью психологической манипуляции. Красная волна слишком большого размера. Такие волны появляются, когда намечается какое-то негативное событие, в связи с чем пользователи начинают продавать монеты в больших количествах.

В этом случае крупные игроки размещают поддельные ордера, которые вряд ли будут полностью выполнены. Не профессиональные трейдеры в панике попытаются избавиться от монеты, тем самым невольно сбивают цену до уровня, который «киты»* откупят. Тогда цена снова вырастет и привлечет новых «хомяков». И так далее…

* Термин «кит» часто используется для описания игроков с большими деньгами.

4. Спрос и предложение

По спросу или предложению можно судить о настроении игроков на рынке. Если спрос превышает предложение, то рынок выглядит как бычий, или скоро изменит тренд на этот. Если предложений больше, чем покупателей, то цена, вероятно, упадет, и тогда это медвежий рынок.

Эффективность использования биржевого стакана:

Десять лет назад трейдеры не представляли свою работу без использования данных котировочного журнала. Но в настоящее время эффективность криптовалютных отчетов ставится под сомнение. С каждым годом на рынке появляются все более сложные торговые стратегии, демонстрирующие их надежность и прибыльность. В связи с постоянным совершенствованием подходов к торговле участники рынка с меньшей вероятностью прибегают к использованию журналу котировок ордеров.

Сегодня также многие трейдеры больше не находят полезной таблицу Журнала ордеров, и есть несколько веских причин:

  • Огромный массив скрытых ордеров не позволяет в полной мере оценить текущую торговую ситуацию.
  • Крупные игроки рынка часто используют метод размещения поддельных ордеров для извлечения прибыли за счет неопытных трейдеров.
  • Ложные сигналы. Часто бывает так, что технический индикатор дает сигнал для продолжения тренда, а биржевой стакан показывает обратное. Такая ситуация может сыграть плохую шутку с трейдером.

Заключение

Биржевой стакан — настоящий помощник для дневного и свинг-трейдера. Среднесрочная и долгосрочная торговля не подразумевает использование этих инструментов, но понимание информации в стакане может помочь улучшить оценку ситуации на рынке и выбрать моменты открытия сделок с наилучшим соотношением риска и прибыли.

Зафиксировав и запомнив структуру манифеста, вы можете приобрести навык использования биржевого стакана на уровне, который будет достаточен для целенаправленного увеличения прибыльности и стабильности вашей собственной торговли.

Биржевой стакан на бирже и в трейдинге — что это такое и его анализ, принципы исполнения ордеров

Чтобы обеспечить прибыль, направление движения цены и торговли трейдера должны совпадать. Одним из инструментов, помогающих увидеть соотношение сил на рынке является биржевой стакан.

Что такое биржевой стакан и для чего он нужен

Стакан — представленный в форме таблицы перечень ордеров от продавцов и покупателей по выбранному инструменту.

Такой структурированный список , который также называют книгой приказов, глубиной рынка, level 2 (на американском рынке), используется спекулянтами для анализа ситуации на площадке.

Для краткосрочной торговли и скальпинга важно правильно определить точку входа и направление смещения вероятности изменения стоимости ценной бумаги или фьючерса.

Особенности

Заявки (офферы) на покупку (биды от англ. «bid») и продажу (аски от англ. «ask») по торговым инструментам размещаются в стакане с указанием объема и количества лотов, а на срочном рынке — контрактов.

Один из параметров стакана — глубина. Например, в терминале QUIK глубина 20*20 означает, что список будет состоять из 20 лучших предложений, как от продавцов, так и покупателей. На фьючерсных площадках по индивидуальной просьбе могут предоставить более глубокий стакан.

Аналог Level 1 на американском рынке — лента сделок в распространенной в России торговой программе QUIK находится в меню “Создать окно” и называется «Таблица обезличенных сделок». Поток данных может быть отключен по умолчанию и потребуется запросить у своего брокера о включении.

  1. В биржевом стакане представлены лимитные ордера и их общее количество по той или иной цене.
  2. В “принтах” — строчках ленты, смотрят объем по ценам и его распределение.

Структура стакана цен на рынке

Для лучшего понимания, что такое стакан на бирже, нужно хорошо усвоить его структуру :

  1. Чаще всего красным цветом показывают приказы продавцов, а зеленым или синим — покупателей. Особенности оформления могут быть разными в зависимости от сервиса.
  2. В первом столбце указывается стоимость инструмента, втором — число предложений игроков. (разница между ценой продавца и покупателя) хорошо виден в месте соединения цветов (ордеров ask и bid).

Виды заявок в стакане

Для удобства игроков в трейдинге применяют несколько видов торговых приказов:

Биржевой стакан котировок. Как использовать стакан котировок в торговле на бирже?

  1. Лимитные . Размещаются заранее, содержат указание по стоимости актива и количеству контрактов (лотов). Наиболее распространенный тип.
  2. Рыночные . Исполняются сразу после создания по цене на момент. Ордер может закрываться по разным ценам.
  3. Условные . Включают любые не лимитные приказы, которые осуществляются при выполнении на рынке заданных условий.

Сделки по рыночным заявкам в стакан не попадают, так как выполняются мгновенно. Чтобы сработал условный ордер, ждут, когда будет подходящая ситуация. Такие заявки тоже не попадают в стакан. В зависимости от биржи разные ордера считаются крупными, средними или мелкими.

Агрессивные и пассивные заявки

Агрессивные заявки толкают рынок в требуемую игроку, который их выставляет, сторону.

Такие ордера бывают 2 видов:

  • рыночного типа — могут появиться в любой момент и выполняются по текущей цене, двигая ее;
  • лимитированные , но быстро изменяются, все время подтягиваясь к стоимости на рынке и могут долго удерживать его направление.

Пассивные приказы удерживают уровни сопротивления или поддержки. Чаще всего ордера такого типа располагаются у сильных графических уровней. Когда пассивные заявки закрываются, цена, которую они защищали, пробивается, и с помощью агрессивных приказов рынок двигается дальше.

Анализ и применение в торговле

На рынке фьючерсов и опционов при скальпинге, кратко- и среднесрочной торговле таблица ордеров является основным инструментом для принятия решений игроками.

Что анализировать в стакане

При отслеживании ордеров в ленте нужно обращать внимание на:

  • появление больших объемов — крупных продавцов или покупателей;
  • прохождение по сравнительно небольшому ордеру множества принтов , с суммарным объемом, превышающим оффер;
  • скупку у некоторой цены всех контрактов;
  • размещение заявок с равным или изменяющимся по видимому закону объемом через одинаковые промежутки времени;
  • постановка больших ордеров в противоположных направлениях .

Крупные заявки

Главное в чтении ленты — определить наличие крупных игроков и понять их намерения.

Заявки больше среднестатистических по объему могут выставляться, если:

  1. Игрок принял решение зафиксировать прибыль . Возможен разворот рынка. С подобной целью ордера выставляют вблизи минимумов/максимумов внутри дня.
  2. Нужно удержать уровень и/или набрать позицию . Чаще всего такие заявки появляются рядом с поддержкой или сопротивлением. Когда торговая система заключается в отработке отскоков цены, то за уровнем ставят стоп-лосс. Если остаток по крупной заявке у уровня быстро уменьшается и частота принтов у оффера растет, то возможен пробой и следует размещать стоп-приказы за поддержкой/сопротивлением.

Канал

Как и при торговле, по графику в биржевом стакане можно определить канал, когда цена движется от поддержки к сопротивлению и обратно.

Если торговая система рассчитана на работу в канале , то приказы размещаются у его границ, где скупаются и распродаются большие объемы. Заявки в форме лимитных и стоп-ордеров позволяют отрабатывать движение цены между уровнями, которые также являются основой для расчета стоп-лосса.

Айсберг приказы

По аналогии с айсбергами у ордеров такого типа присутствует “подводная” невидимая часть . Понять, какие объемы скрываются за небольшой повторяющейся позицией невозможно.

Назначения таких заявок — скрыть свои намерения, совершать относительно крупные сделки без движения рынка. Например, выставлено 150 лотов на покупку по цене 100 — это видят все. При закрытии ордера появляется следующий и т.д.

В терминале QUIK отслеживать такие сделки удобно по “Таблице обезличенных приказов”.

Buy hunt, sell hunt

Для набора позиции или удержания поддержки/сопротивления существуют торговые алгоритмы, позволяющие покупать или продавать все активы у нужной цены.

Buy-hunt — скупка инструмента по заданной цене и ниже, sell hunt — продажа от уровня и выше него.

Как правильно настроить объем в стакане CryptoScalp.

Импульс

После коррекции цены перед началом нового трендового движения в биржевом стакане может сложиться ситуация, когда почти отсутствуют продавцы или покупатели .

Например, после коррекции вниз мало покупателей, а плотность заявок на продажу большая. Чаще всего следует ожидать движения вверх. Рынок движется против толпы , от объема к объему. В таких ситуациях рекомендуется открывать ордер на покупку при первых признаках сдвига баланса в ленте — начала движения вверх.

Повторяющиеся заявки

Чтобы до нужного момента не изменять ситуацию на рынке, крупные трейдеры вынуждены разными способами скрывать свои действия и намерения.

Один из способов маскировки — повторяющиеся приказы, когда через 3-30 секунд появляются офферы с равным или закономерно изменяющимся количеством лотов (10, 15, 20 и т.д.).

При фиксации подобного положения можно ожидать движения рынка после того, как крупный игрок сформирует заданные объемы. Мелкий трейдер будет в выигрыше, если торгует на одной стороне с большими операторами.

Флиппинг (flipping)

Стратегия применяется для манипуляции рынком и состоит в том, чтобы создать видимость возможного движения цены в одну из сторон, с намерением играть в противоположном направлении.

Для этого, например, снизу открывают айсберг-бид, а вверху ставят аск большого объема.

В нужный момент аск сверху убирают без исполнения, а снизу появляется крупный бид и направляет рынок против не понявших махинации и попавших в ловушку трейдеров.

Контакт агрессивных и пассивных заявок

Перед пробоем уровня бывает, что пассивные и агрессивные ордера сходятся.

В этой ситуации существуют следующие способы поведения:

  1. Торговать вместе с агрессивными игроками после пробоя плотности пассивных заявок с расположением стоп-лосса под пробитым уровнем.
  2. Торговать откат от цены , где расположены пассивные приказы.
  3. Дождаться более ясной ситуации и не участвовать в торгах.

Диапазоны без цен

Если образовалась зона, в которой нет или мало ордеров , то открытие в ней офферов может как остаться незамеченным, так и спровоцировать импульс.

Эффективность применения биржевого стакана

Для долгосрочной и среднесрочной торговли стакан на бирже используется редко. Игроки, торгующие внутри дня, скальперы и свинг-трейдеры используют стакан и ленту. Наблюдение за рынком с помощью этих инструментов помогает снизить риски и увеличить прибыль.

Ценность информации от анализа глубины рынка снижается при торговле посредством роботов.

Манипуляции крупных участников на бирже увеличивают количество ложных торговых сигналов и вынуждают трейдеров использовать более сложные системы с целым набором инструментов.

Стакан цен на Форекс

На валютном межбанковском рынке Форекс таблица ордеров или лента не отображаются в терминале MetaTrader 4. По своей структуре Форекс состоит из множества площадок с суммарным оборотом несколько трлн долл. в день.

Тот стакан цен, что представлен, например, в Метатрейдере не способен выполнять функции, традиционно отводимые таблице приказов для срочных инструментов бирж.

Как торговать от объемов? : Трейдинг по стакану (Скальпинг на миллион)

Трейдеры, торгующие разными инструментами Форекс, применяют другие стратегии, без использования стакана.

Что такое биржевой стакан и есть ли он на Форекс

Задавались ли вы когда-нибудь вопросом, почему цена растет или падает, и что заставляет ее это делать?

Ответ на этот вопрос нам поможет найти биржевой стакан, потому что именно в его основе лежит главный принцип ценообразования.

Что такое биржевой стакан

Любая биржа чем-то похожа на обычный рынок, где покупатели встречаются с продавцами. Первые хотят купить подешевле, а вторые продать подороже. И если собрать пожелания всех участников рынка в одну таблицу, выйдет примерно такая картина:

Этих продавцов и покупателей можно условно назвать пассивными, так как они будут ждать до тех пор, пока кто-то не исполнит их заявку. Такие участники повышают ликвидность инструмента, а их заявки называются лимитными ордерами.

Когда рынок заполнен лимитными ордерами, в игру вступает вторая группа, уже активных участников рынка. Они не хотят ждать и желают купить по той цене, которая сейчас доступна на рынке.

Активные участники выкупают лимитные заявки пассивных участников по лучшей рыночной цене, поэтому их заявки называются – рыночным ордером.

Рыночные ордера не отображаются в стакане, так как исполняются моментально. Давайте на примере рассмотрим исполнение рыночного ордера:

Как видно на картинке, после совершения сделки цена ASK сдвинулась на 1 пункт вверх. Это и есть процесс ценообразования. В дальнейшем, если активность покупателей по рынку будет больше, чем активность продавцов, цена будет расти и наоборот.

Итак, что такое стакан?

Биржевой стакан – это таблица с данными о лимитных ордерах на покупку и на продажу по конкретному инструменту. В каждой строке таблицы содержится информация о цене и объеме выставленных на продажу/покупку активов.

У биржевого стакана есть и другие названия: Глубина рынка (Depth of market), Level II quotes, Стакан заявок, Книга приказов (orderbook).

С помощью биржевого стакана трейдерам проще оценить ликвидность инструмента в конкретный момент времени. А используют его в основном для определения реальных уровней поддержки и сопротивления. Однако самих методов анализа книги приказов существует множество, например, очень популярен скальпинг с использованием стакана.

Какие бывают стаканы и где их найти

Визуально стаканы бывают разные, а их внешний вид зависит от терминала, которым вы пользуетесь. Но по общим характеристикам их можно разделить на два вида:

Инструмент Depth (глубина рынка) — что показывает и как им пользоваться

Обратите внимание на наличие «пустых» цен в разреженном стакане. Он лучше подходит для оценки ликвидности инструмента, а гистограмма упрощает восприятие объемов.

«Глубина рынка» доступна практически на всех биржах как на американских, так и на российских.

Итак, мы определили, что стакан это чисто биржевой инструмент, а большинство читателей этой статьи, скорее всего, интересуются Форексом.

Поэтому напрашивается вопрос, а есть ли стакан цен на Форекс?

Истинного стакана, как на биржах, на Форексе нет, но есть нечто похожее.

Есть ли стакан цен на Форекс?

Появился индикатор OrderBook позволяющий отобразить стакан ордеров в вашем терминале мт4.

На данный момент ни один из существующих провайдеров ликвидности не предоставляет биржевой стакан цен Форекс в реальном времени (онлайн).

Возможно, в будущем какой-то регулятор вынудит их это сделать, но на сегодня таких данных в общем доступе нет.

С другой стороны, Форекс в десятки, а то и в сотни раз быстрее и ликвиднее других рынков. Только представьте себе объемы той информации, которую надо обработать и доставить клиенту в терминал. Скорее всего, реализовать биржевой стакан в реальном времени пока просто не получится.

В терминале мт4 и мт5 есть некий стакан цен Форекс, который выглядит примерно так:

Но в нем нет каких-то реальных или близких к реальным данных.

Единственное, на что остается надеется Форекс-трейдерам, это стаканы от крупных брокеров. То есть у них настолько большая клиентская база, что сводные данные о позициях могут представлять из себя достаточно интересную информацию.

На данный момент встречается два вида рыночных стаканов, скриншоты которых вы можете видеть ниже:

У них есть ряд недостатков и преимуществ относительно биржевого стакана:
Отображаются данные о стоп лосах и тейк профитах (биржевые трейдеры могут только позавидовать).
Данные обновляются не в реальном времени, а с промежутком в 20 минут.
Данные только в процентах, а не в реальных цифрах.

Подведем итоги. Чем так важен стакан для трейдера? Тем, что это единственный действительно опережающий индикатор. Все другие инструменты тех. анализа являются всего лишь математической формулой, в основе которой лежит цена. Соответственно они никак не могут прогнозировать будущее поведение цены.

Объемный анализ, или как вычислить крупного игрока на биткоин-рынке

Можете ли вы с уверенностью сказать, почему цена должна отскочить от того или иного уровня, трендовой линии? Или почему она непременно должна упасть при выходе из перекупленности на индикаторе RSI? Что послужит настоящей причиной для этого движения цены?

Основатель проекта Coin Trade Александр Марченков и глава отдела коммуникаций Екатерина Скобицкая расскажут о различных методах объемного анализа, которые могут повысить значимость сигналов свечных моделей, индикаторов и графических паттернов, а также эффективность прогнозирования движения цены.

Объемы — один из самых надежных источников информации о текущем состоянии рынка и верный помощник трейдера в принятии торговых решений.

Однако перед тем как перейти к разбору методов объемного анализа, давайте немного поговорим о механике рынка. Знать основные законы, по которым движется цена, крайне важно. Пытаться торговать на рынке без глубокого понимания его механики — это все равно, что играть в покер, не зная правил игры.

Перед вами биржевой стакан ордеров, в котором отображаются лимитные заявки трейдеров на покупку и продажу.

В верхней части стакана расположены ордера продавцов, а в нижней — лимитные ордера покупателей.

Лимитные ордера принадлежат трейдерам, которые не согласны совершать сделку по текущей рыночной стоимости актива и вместо этого выставляют заявку по той цене, которая их бы устроила. После этого они ждут, пока рыночная цена достигнет значения, указанного в ордере.

Ask — цена ближайшей заявки на продажу, Bid — цена ближайшей заявки на покупку.

Если придет покупатель, которого устраивает рыночная цена, — он будет покупать рыночным ордером у ближайшего лимитного продавца по цене Ask. Если же придет продавец, которого устраивает рыночная цена, он будет продавать рыночным ордером ближайшему лимитному покупателю по цене Bid.

Рыночные ордера приведут цену в движение, если поглотят (удовлетворят) ближайшие лимитные заявки.

Таким образом, рыночные ордера двигают цену, а лимитные сопротивляются этому движению. Чем больше выставлено лимитных заявок по определенной цене, тем больше потребуется рыночных ордеров, чтобы преодолеть эту цену.

Большие скопления лимитных ордеров образуют так называемые стенки, которые служат препятствием дальнейшему движению цены.

Чтобы узнать, куда пойдет цена, необходимо предсказать момент, когда возникнет дисбаланс между спросом и предложением или, другими словами, когда рыночная сила преодолеет лимитную. В этом поможет анализ объема.

Рыночный объем может быть представлен в трех видах — вертикальный, горизонтальный и кластерный. Анализировать объемы можно при помощи различных сервисов: Trading View, TensorCharts.com или на платформе Tiger Trade.

Вертикальный объем

Обычно вертикальный объем отображается в виде вертикальной гистограммы в нижней части графика:

Часовой график BTC/USD биржи Bitfinex от TradingView

Каждый столбик гистограммы показывает совокупный объем сделок, совершенных в рамках одной свечи. Например, если таймфрейм графика H1 (часовой) — столбик покажет объем за один час. По размеру столбика можно узнать величину данного объема относительно других свечей. Чем выше столбик — тем больше проторгованный объем, а цвет его соответствует цвету свечи.

Теперь поговорим о том, как можно применять вертикальный объем в анализе. Перед нами часовой график бессрочного контракта на биткоин на бирже BitMEX:

Часовой график бессрочного свопа на биткоин биржи BitMEX от TradingView

Горизонтальные уровни размечены в местах, где предположительно находится наибольшее число стоп-ордеров.

Стоп-ордер — это отложенный приказ на исполнение рыночного ордера. Устанавливается он на определенную цену, при достижении которой бирже отправляется приказ на исполнение рыночной покупки или продажи. Стоп-ордер отличается от лимитного тем, что его с помощью, например, можно выставить отложенный ордер на покупку выше текущей цены.

Трейдеры обычно используют стоп-ордер, если хотят купить или продать актив при пробое определенного уровня. Также стоп-приказ используется для страховки от возможных убытков. Например, можно поставить стоп-ордер на продажу ниже текущей цены. Тогда в случае сильного падения платформа автоматически продаст актив, ограничив убытки.

Вернемся к нашему графику. Многие трейдеры ставят стопы-приказы за ценовые пики, представляющие собой локальные максимумы и минимумы, либо за границы флэта. По таким точкам можно строить уровни. И чем очевиднее уровень, тем больше трейдеров будут ставить за него свои ордера. Это важный элемент рыночной психологии, о котором следует знать каждому биржевому игроку.

Часовой график бессрочного свопа на биткоин биржи BitMEX от TradingView

Если цена пробивает такой уровень, то срабатывает большое количество стоп-ордеров. Например, при пробое нижнего уровня срабатывают sell-стопы, происходит множество рыночных продаж. Если же цена пробивает верхний уровень, то срабатывают buy-стопы, осуществляется много рыночных покупок.

Как уже говорилось, именно рыночные ордера двигают цену, а лимитные — наоборот, ее тормозят. Одновременное срабатывание большого количества стоп-ордеров может значительно ускорить рост или падение, если, конечно, цена на своем пути не натолкнется на достаточное количество лимитных ордеров.

Часовой график бессрочного свопа на биткоин биржи BitMEX от TradingView

Ложный пробой подобного уровня является очень сильным сигналом. Если цена не продолжила свое движение за счет сработавших стоп-ордеров — это означает, что вся ликвидность была поглощена рынком, и, вероятнее всего, цена будет двигаться в противоположном направлении. Почему так происходит?

Представим, что цена пробивает уровень вниз. При этом срабатывают стоп-ордера, что приводит к большому количеству рыночных продаж. Но продавцов встретили лимитные покупатели, которые поглотили все предложение и тем самым остановили падение. Желающих продавать не осталось, и цена свободно возвращается в исходную точку, не встречая на своем пути сопротивления.

Именно так устроена механика ложного пробоя. В данном случае очевидно, что покупатели явно преобладают над продавцами, и цена пойдет скорее вверх, чем вниз.

Накладывая уровни на график, мы, на самом деле, лишь предполагаем, что за этими уровнями находится много стоп-ордеров. Как можно повысить уверенность в правильности торговых решений? Тут на помощь приходит вертикальный объем.

Часовой график бессрочного свопа на биткоин биржи BitMEX от TradingView

Если появляется высокий объем на свече, которая пробила уровень, это означает, что данный уровень действительно был интересен трейдерам и что там было совершено много сделок. Это в свою очередь подтверждает нашу теорию о большом количестве сработавших стоп-ордеров и повышает уверенность в надежности рыночного сигнала.

Также вертикальный объем может усиливать графические паттерны теханализа и свечные модели:

Часовой график бессрочного свопа на биткоин биржи BitMEX от TradingView

Профиль рынка (горизонтальный объем)

Ниже на графике объем представлен в виде горизонтальной гистограммы:

Индикатор накладывается на определенную область и в виде горизонтальных столбиков показывает объем на разных ценовых отметках. Чем длиннее столбик — тем больше объема относительно других ценовых уровней находится на выбранной области. При помощи этого инструмента можно, например, посмотреть, на каких ценах проторгован максимальный объем за последнюю неделю или за любой другой временной диапазон. Данный инструмент доступен на сервисе TradingView.com, а также на платформе Tiger Trade.

На TradingView профиль объема (Volume Profile) доступен только по подписке, которую можно получить бесплатно на 30 дней. После оформления подписки этот инструмент можно найти в меню Индикаторы, раздел Профиль объема. Мы используем инструмент профиля Фиксированный диапазон, который растягиваем на нужную область графика.

Что такое стакан заявок на бирже

Теперь поговорим о том, как можно применять данный инструмент для прогнозирования движения цены. Перед нами дневной график монеты OAX биржи Binance:

График OAX/BTC от TradingView

Как можно заметить, поначалу нисходящий тренд замедлился, а затем постепенно перетек во флэт. Мы наложили профиль рынка на соответствующий участок графика, чтобы увидеть более широкую картину.

Как выявить активность крупного игрока?

Ни для кого не секрет, что на рынке есть как мелкие трейдеры, торгующие относительно небольшими суммами, так и крупные, в распоряжении которых огромные средства. Своими сделками киты способны существенно влиять на цену.

Если крупный трейдер хочет закупиться определенной монетой на солидную сумму — он не может поглотить весь объем сразу, одной сделкой. Происходит так потому, что в этот самый момент обычно недостаточно продавцов, способных удовлетворить условия столь крупного ордера. Если же крупный игрок попытается заполучить весь объем рыночным ордером, то это спровоцирует мощный ценовой импульс. Сделку просто размажет по стакану, а средняя цена исполнения торговой операции будет заметно отличаться от первоначальной.

Именно поэтому крупные трейдеры для набора позиции вынуждены прибегать к различным хитростям. Например, устраивать ложные пробои или накапливать позиции постепенно, аккуратно скупая актив во время бокового движения цены.

Вернемся к графику монеты OAX. С помощью Профиля рынка мы видим, как в монету начал заходить объем. Благодаря этому нисходящий тренд сначала замедлился, а затем и полностью остановился. Это говорит о том, что столь низкие цены могли привлечь крупных покупателей, которые постепенно стали накапливать позиции, выкупая рыночное предложение. Также, возможно, киты владеют какой-то инсайдерской информацией по данной монете, что и послужило поводом для покупки.

На криптовалютном рынке инсайдерская торговля все еще весьма распространена, что, вероятно, во многом обусловлено правовой неопределенностью. Например, на этом рынке часто бывает, что крупные покупки происходят задолго до выхода позитивной новости в СМИ.

Биржевой стакан и принципы исполнения ордеров

Но не всегда крупному игроку обязательно владеть какой-либо важной информацией. Ведь он может оказывать влияние на цену своими деньгами. Например, сначала постепенно выкупить все предложение по монете, и когда желающих продавать не останется — просто подтолкнуть цену еще одной покупкой вверх.

Другие трейдеры увидят, что структура нисходящего тренда нарушена, при этом индикаторы указывают на рост, и начнут активно закупаться. Этих покупок будет достаточно, чтобы сильно повлиять на цену — ведь желающих продавать нет, и, следовательно, некому сопротивляться восходящему импульсу. Цена пойдет по пути наименьшего сопротивления.

Если вы видите, что нисходящий тренд замедлился и начался горизонтальный флэт — используйте индикатор горизонтального объема. Во многих случаях он прояснит ситуацию и даcт качественный сигнал к покупке. Также Профиль объема может усиливать сигналы разворотных паттернов.

Рассмотрим еще несколько интересных ситуаций:

Кластерные свечи

По сути, это обычные свечи, только внутри них находится гистограмма объема. Каждый столбик гистограммы показывает величину проторгованного объема по определенной цене внутри данной свечи. И на этих столбиках есть точные числовые значения объема.

В столбиках находится два числовых значения:

— слева — объем сделок по цене Bid или объем рыночных продаж (лимитных покупок);
— справа — объем сделок по цене Ask или объем рыночных покупок (лимитных продаж).

Величина столбика гистограммы складывается из общего объема, то есть рыночные покупки и продажи суммируются. Чем больше совокупный объем сделок по определенной цене — тем длиннее столбик.

Цвет столбика зависит от того, каких рыночных сделок было больше — покупок или продаж. Если рыночных покупок больше — цвет столбика будет синим. А если преобладали рыночные продажи, то столбик окрашивается в красный. Кластерные свечи доступна на платформе Tiger Trade.

Кластерный анализ хорошо дополняет свечные паттерны. Давайте разберем на примере торговой ситуации:

Произошел ложный пробой, в результате которого образовался свечной паттерн Внутренний бар. Накладывая профиль, мы видим, что основной объем проторгован в верхней части — значит, рыночные покупатели встретились с лимитным сопротивлением, которое не смогли преодолеть. Мы видим подтверждение этому благодаря кластерному анализу — в верхней части свечей было совершено большое количество рыночных покупок, которые в итоге не привели к росту.

Как найти важные уровни в биржевом стакане в ATAS || Индикатор DOM levels

Стоит отдельно упомянуть tensorcharts.com. Данный сервис позволяет анализировать историю лимитных плотностей (стенок) прямо на графике в очень удобной форме. Это еще больше расширяет картину рынка: все, что происходит, можно видеть буквально как на ладони.

Наблюдение за ценой и объемом, кластерами и стенками чрезвычайно полезно при обучении трейдингу — ведь только через самостоятельное наблюдение и анализ можно понять, как устроен рынок.

Неважно, какие именно инструменты для анализа вы используете, суть кроется далеко не в кластерах и объемах. Для прибыльной торговли достаточно даже одного свечного графика.

Самое главное — это знание психологии участников рынка и умение предсказывать их действия. Всегда смотрите на цену только с этой точки зрения. Ищите закономерности, основанные на этой логике, и торгуйте их. Наблюдение и практика помогут вам развить данную логику.

Подписывайтесь на новости ForkLog в Telegram: ForkLog Live — вся лента новостей, ForkLog — самые важные новости и опросы.

Рецепты MQL5 — Пишем свой стакан цен

Язык MQL5 постоянно развивается и с каждым годом предоставляет все больше возможностей для работы с биржевой информацией. Одним из таких биржевых типов данных является информация о биржевом стакане цен. Это специальная таблица, показывающая ценовые уровни и объемы лимитных заявок. MetaTrader 5 имеет встроенный стакан цен для отображения лимитных заявок, однако этого не всегда бывает достаточно. В первую очередь необходимо дать простой и удобный доступ к стакану цен своему торговому эксперту. Конечно, в языке MQL5 есть несколько специальных функций для работы с этим типом информации, но все эти функции достаточно низкоуровневые и требуют дополнительных математических расчетов.

Тем не менее, всех промежуточных расчетов можно избежать. Все что для этого нужно, это один раз написать специальный класс для работы со стаканом цен. Все сложные расчеты будут производиться внутри него, а сам класс будет предоставлять удобные методы для работы с ценами и уровнями стакана. Благодаря этому классу будет достаточно просто создать эффектную панель в виде индикатора, которая будет быстро отображать текущее состояние цен в стакане:

Рис. 1. Биржевой стакан цен в виде панели

Эта статья научит читателей программно работать со стаканом цен, а также подробно опишет принципы работы класса CMarketBook, который органично расширит стандартную библиотеку классов MQL5 и предоставит удобные методы для работы со стаканом.

Из первой главы данной статьи будет ясно, что штатный стакан цен, предоставляемый MetaTrader 5, обладает внушительными возможностями. Мы не будем пытаться дублировать все эти многочисленные возможности в своем индикаторе, наша задача будет иной. На практическом примере создания удобной торговой панели — стакана цен — мы покажем, что принципы объектно-ориентированного программирования позволяют достаточно легко оперировать сложными структурами данными. Мы убедимся в том, что с помощью MQL5 не представляет трудностей получить доступ к стакану цен прямо из своего эксперта и, как следствие, визуализировать его представление так, как будет удобно нам.

Глава 1. Стандартный стакан цен в MetaTrader 5 и методы работы с ним


1.1. Стандартный стакан цен в MetaTrader 5

MetaTrader 5 поддерживает работу на централизованных биржевых площадках и предоставляет штатные средства для работы со стаканом цен. В первую очередь это, конечно же, сама таблица лимитных заявок, с недавнего времени обладающая также расширенным режимом представления. Для того чтобы открыть стакан цен, необходимо прежде всего подключиться к одной из бирж, поддерживающей MetaTrader 5, и выбрать в контекстном меню «Вид» —> «Стакан цен» —> «Название инструмента». После этого появится отдельное окно, сочетающее тиковый график цены и таблицу лимитных заявок:

Рис. 2. Стандартный стакан цен в MetaTrader 5

Штатный стакан цен в MetaTrader 5 обладает богатой функциональностью. В частности, он позволяет отобразить:

  • лимитные ордера на покупку и продажу, их ценовой уровень и объем (стандартный вид классического биржевого стакана цен);
  • текущий уровень спреда и ценовые уровни на занятые лимитными заявками (расширенный режим);
  • тиковый график и визуализированные объемы спроса, предложения и последней сделки на нем;
  • общий уровень заявок на покупку и продажу (отображаются в виде двух линий внизу и вверху тикового графика соответственно).

Из приведенного списка видно, что возможности стандартного стакана цен более чем внушительные. Но давайте разберемся с тем, как работать с данными, получая к ним доступ программным путем. Прежде всего необходимо получить представление о том, как устроен биржевой стакан цен, и об общей организации данных в нем. Подробно об этом написано в статье «Основы биржевого ценообразования на примере срочной секции Московской биржи» в разделе «1.3. Сведение продавцов и покупателей, биржевой стакан цен». Мы же не будем подробно останавливаться на описании этой таблицы, подразумевая, что читатель уже имеет достаточные представления об этом.

1.2. Событийная модель для работы со стаканом цен

Стакан цен — крайне динамичная таблица данных. На быстрых, динамичных рынках за одну секунду таблица лимитных заявок может изменяться десятки раз. Поэтому необходимо стараться обрабатывать только ту информацию, которая действительно необходима для обработки, иначе количество переданных данных и загрузка центрального процессора по обработке этих данных может превысить все разумные пределы. Именно поэтому в MetaTrader 5 необходима специальная событийная модель, которая препятствует получению и обработке данных, которые в реальности не планируется использовать. Разберем эту модель подробно.

Каждое событие на рынке, такое как приход нового тика или совершение торговой операции, можно обрабатывать, вызывая соответствующую ассоциированную с ним функцию. Например, при приходе нового тика в MQL5 вызывается специальная функция-обработчик OnTick(). Изменение размера графика или его положения вызывает свою функцию — OnChartEvent(). Эта событийная модель также распространяется и на изменение стакана цен. Например, если кто-то выставит лимитную заявку на продажу или покупку в стакане цен, то его состояние изменится, что вызовет специальную функцию OnBookEvent().

Так как в терминале доступны десятки и даже сотни разных символов, каждый из которых обладает своим стаканом цен, количество вызовов функции OnBookEvent может быть огромным и крайне ресурсоемким. Чтобы этого не происходило, терминал необходимо заранее уведомить в момент запуска своего индикатора или эксперта, с каких именно инструментов необходимо получать информацию о котировках второго уровня (так еще называют информацию, предоставляемую стаканом цен). Для этих целей служит специальная системная функция MarketBookAdd. Например, если мы хотим получать информацию о стакане цен по инструменту Si-9.15 (фьючерсный контракт на доллар-рубль с экспирацией в сентябре 2022 года), нам необходимо в своем эксперте или индикаторе в функции OnInit написать следующий код:

С помощью этой функции мы сделали так называемую «подписку» — уведомили терминал, что эксперт или индикатор необходимо информировать в случае изменения стакана по инструменту Si-9.15. При этом изменения стаканов других инструментов будут нам недоступны, что существенно снизит потребляемые программой ресурсы.

Противоположной функцией MarketBookAdd является функция MarketBookRelease. Она, напротив, «отписывает» нас от уведомлений по изменению стакана. Считается хорошим тоном программиста делать такую отписку в секции OnDeinit, закрывая, таким образом, получение данных при закрытии эксперта или индикатора:

Вызов функции MarketBookAdd по сути означает, что в момент изменения стакана цен по требуемому инструменту будет вызываться специальная функция-обработчик OnBookEvent(). Таким образом, простейший эксперт или индикатор, работающий со стаканом цен, будет содержать три системные функции:

  • OnInit — функция инициализации эксперта или индикатора, в которой осуществляется подписка на получение события изменения стакана цен по требуемому инструменту.
  • OnDeinit — функция деинициализации эксперта или индикатора, в которой осуществляется отписка от получения события изменения стакана цен по требуемому инструменту.
  • OnBookEvent — функция, вызываемая вслед за изменением стакана цен и сигнализирующая о том, что стакан цен изменился.

Наш первый простейший эксперт будет содержать эти три функции. Например, в примере ниже эксперт при каждом изменении стакана цен будет печатать соответствующее сообщение: «Стакан цен по Si-9.15 изменен»:

Ключевые инструкции в коде выделены желтым маркером.

1.3. Получение котировок второго уровня с помощью функций MarketBookGet и структуры MqlBookInfo

Теперь, когда мы научились получать уведомления об изменении состояния стакана цен, настало время научиться получать доступ к информации стакана. Для доступа к этой информации необходимо использовать функцию MarketBookGet. Давайте изучим ее прототип и использование.

Как уже было сказано, стакан цен представляет собой специальную таблицу лимитных заявок, условно состоящую из двух частей: заявок на продажу и заявок на покупку. Как и любую другую таблицу, стакан цен легче всего представить в виде массива, где индексом массива является номер строки таблицы, а значением массива является некая строка или последовательность данных, включающая в себя объем, цену и тип заявки. Давайте и мы представим стакан цен в виде таблицы с указанием индекса каждой строки в ней:

Индекс строки Тип заявки Объем Цена
0 Sell Limit 18 56844
1 Sell Limit 1 56843
2 Sell Limit 21 56842
3 Buy Limit 9 56836
4 Buy Limit 5 56835
5 Buy Limit 15 56834

Таблица 1. Представление стакана цен в виде таблицы

Для того чтобы было проще ориентироваться в таблице, заявки на продажу окрашены в розовый цвет, а заявки на покупку — в голубой. Приведенная таблица стакана цен по своей сути является двумерным массивом. В первом измерении указывается номер строки, а во втором измерении — один из трех факторов таблицы (тип заявки — 0, объем заявки — 1 и цена заявки — 2). Однако для того чтобы не работать с многомерными массивами, в MQL5 используется специальная структура MqlBookInfo. Она включает в себя все необходимые значения. Таким образом, каждый индекс стакана цен содержит структуру MqlBookInfo, которая, в свою очередь, содержит информацию о типе заявки, ее объеме и цене. Давайте приведем определение этой структуры:

Теперь нам должен быть ясен метод работы со стаканом цен. Функция MarketBookGet возвращает массив структур MqlBookInfo. Индекс массива указывает на строку таблицы цен, а сама структура по индексу содержит информацию об объеме, цене и типе заявки. Зная это, попробуем получить доступ к самой первой заявке стакана цен, для чего немного модифицируем функцию OnBookEvent нашего эксперта из предыдущего примера:

Запустив эксперт на любом из графиков, мы будем получать сообщения о самой первой цене в стакане и ее параметрах:

Смотря на нашу предыдущую таблицу, нетрудно догадаться, что уровень, доступный по нулевому индексу стакана, соответствует самой худшей цене предложения (BOOK_TYPE_SELL). Напротив, уровень самого худшего спроса занимает последний индекс в полученном массиве. Лучшие цены на продажу (Ask) и покупку (Bid) находятся примерно в середине стакана цен. Первое неудобство получаемых цен состоит в том, что в стакане цен отсчет принято производить с лучших цен, которые находятся, как правило, в середине таблицы. Цены же худшего спроса и предложения имеют второстепенное значение. В дальнейшем, рассматривая класс CMarketBook, мы решим эту проблему, предоставляя специфичные индексаторы, удобные для работы со стаканом цен.

Глава 2. Класс CMarketBook для простого доступа к стакану и работы с ним


2.1. Проектирование класса CMarketInfoBook

В первой главе мы ознакомились с системными функциями для работы со стаканом цен и выяснили особенности событийной модели для организации доступа к котировкам второго уровня. В этой главе мы создадим специальный класс CMarketBook для удобной работы со стандартным стаканом цен. На основе знаний, полученных из первой главы, мы можем порассуждать о том, какими свойствами должен обладать наш класс для работы с этим типом данных.

Итак, первое, что необходимо учитывать в проектировании этого класса — это ресурсоемкость получаемых данных. Стакан может обновляться десятки раз в секунду, к тому же, он содержит десятки элементов типа MqlBookInfo. Следовательно, наш класс должен изначально работать лишь с одним из инструментов. В случае, когда потребуется обработка сразу нескольких стаканов цен с разных инструментов, будет достаточно создать несколько экземпляров нашего класса с указанием конкретного инструмента:

Второе, о чем придется позаботиться — это организация быстрого доступа к данным. Так как лимитные заявки генерируют высокочастотный поток ценовых уровней, копировать стакан цен в безопасную объектно-ориентированную таблицу не представляется возможным. Поэтому наш класс будет предоставлять прямой, пусть и не столь безопасный, доступ к массиву MqlBookInfo, предоставляемому системной функцией MarketBookGet. Например, для доступа к нулевому индексу стакана цен с помощью нашего класса, необходимо будет написать следующее:

MarketBook при этом является массивом, непосредственно получаемым с помощью функции MarketBookGet. Однако удобство использования нашего класса будет заключаться прежде всего в том, что помимо прямого доступа к массиву лимитных заявок, наш класс позволит адресно обращаться к наиболее часто используемым ценам в стакане. Например, для того чтобы получить лучшую цену предложения, достаточно будет написать следующее:

Это гораздо удобнее, чем рассчитывать индекс лучшего предложения в своем эксперте, а затем получать значение цены по этому индексу. Из написанного выше кода становится понятным, что CMarketBook, так же как и многие системные функции MQL5 вроде SymbolInfoDouble или OrderHistoryInteger, использует свой набор модификаторов и методов InfoGetInteger и InfoGetDouble для доступа к целочисленной и вещественной информации соответственно. Для получения необходимого свойства необходимо указать определенный модификатор этого свойства. Давайте опишем подробно модификаторы этих свойств:

Торговля по стакану. Как торговать с помощью биржевого стакана? Обзор обучающего курса «СТАКАН»

Конечно же, помимо методов группы InfoGet. наш класс будет содержать метод Refresh, вызывающий обновление стакана цен. Благодаря тому, что наш класс требует явного обновления информации вызовом метода Refresh(), мы будем задействовать ресурсоемкое обновление класса лишь тогда, когда это будет необходимо.

2.2. Расчет индексов наиболее часто используемых уровней стакана цен

Класс CMarketBook по сути является своеобразной обложкой для массива MqlBookInfo. Его основная работа заключается в быстром и удобном предоставлении наиболее часто востребованной информации из этого массива. Следовательно, основных ресурсоемких операций, задействованных классом, всего две:

  • копирование массива MqlBookInfo системной функцией MarketBookGet;
  • расчет индексов наиболее часто используемых цен.

Ускорить работу системной функции MarketBookGet мы не можем, но этого и не нужно, так как все системные функции языка MQL5 максимально оптимизированы. Но мы можем произвести максимально быстрый расчет требуемых индексов. Еще раз обратимся к модификаторам свойств ENUM_MBOOK_INFO_INTEGER и ENUM_MBOOK_INFO_DOUBLE. Как видно, практически все доступные свойства базируются на расчете четырех индексов:

  • индекс лучшего предложения (Ask);
  • индекс лучшего спроса (Bid);
  • индекс худшего спроса;
  • индекс худшего предложения.

Также используется три целочисленных свойства:

  • количество ценовых уровней на продажу или глубина стакана на продажу (глубина предложения);
  • количество ценовых уровней на покупку или глубина стакана на покупку (глубина спроса);
  • общая глубина стакана, равная общему количеству элементов в стакане.

Очевидно, что индекс худшего предложения всегда будет равен нулю, так как именно с худшей цены предложения начинается массив, получаемый с помощью функции MarketBookGet. Также тривиальным является определение индекса худшего спроса — он всегда будет занимать самый последний индекс в получаемом массиве MqlInfoBook (напомним, что индекс последнего элемента в массиве меньше общего количества элементов этого массива на единицу) :

индекс худшего предложения = 0

индекс худшего спроса = общее количество элементов в стакане — 1

Индексы целочисленных свойств также просты для вычисления. Так, общая глубина стакана всегда равна количеству элементов в массиве MqlBookInfo. Глубина стакана со стороны предложения равна:

глубина предложения = индекс лучшего предложения — индекс худшего предложения + 1

Мы всегда прибавляем единицу, так как нумерация в массиве начинается с нуля, и для определения количества элементов требуется прибавлять единицу к лучшему индексу. Однако, прибавляя единицу к индексу лучшего предложения, мы уже получаем индекс лучшего спроса. Например, если мы в таблице 1 прибавим к строке с вторым номером единицу, то перейдем от лучшей Sell Limit заявки по цене 56 842 к лучшей Buy Limit заявке по цене 56 836. Также мы уже выяснили, что индекс худшего предложения всегда равен нулю. Следовательно, мы можем сократить формулу определения глубины предложения до следующей:

глубина предложения = индекс лучшего спроса

Расчет глубины спроса несколько иной. Очевидно, что количество заявок на покупку равно общему количеству заявок за вычетом количества заявок на продажу или глубины предложения. Поскольку из предыдущей формулы мы выяснили, что глубина предложения равна индексу лучшего спроса, нетрудно рассчитать формулу для определения количества заявок на покупку или глубины спроса:

глубина спроса = общая глубина стакана — индекс лучшего предложения

Общая глубина стакана всегда равна сумме глубины спроса и предложения и, следовательно, равна общему количеству элементов в стакане:

6. Стакан котировок: секретный инструмент профессионалов.

общая глубина стакана = общее количество элементов в стакане

Аналитически мы нашли практически все наиболее часто используемые индексы. С помощью математических сокращений мы заменили расчет индексов на прямую индексацию. В классе CMarketBook это очень важно, так как требуется максимально быстрый доступ к свойствам и индексам стакана.

Помимо самих индексов, зачастую бывает необходимо знать средний уровень спреда для текущего инструмента. Спред — это разница между ценами лучшего спроса и предложения. Класс CMarketBook позволяет получить среднее значение этого показателя с помощью метода InfoGetDouble, для чего его необходимо вызывать с модификатором MBOOK_AVERAGE_SPREAD. CMarketBook производит расчет текущего спреда в методе Refresh и рассчитывает его среднее значение запоминая количество вызовов этого метода.

Однако задачу по нахождению основных индексов лучшего спроса и предложения мы пока не решили, поэтому перейдем к следующему разделу.

2.3. Предсказывание индексов лучшего спроса и предложения на основе предыдущих значений этих индексов

Более сложной задачей, которую нам осталось выполнить, является расчет индексов лучшего предложения и лучшего спроса. Например, в таблице 1 индексом лучшего предложения будет индекс с номером 2, а индексом лучшего спроса будет индекс 3. В этой таблице представлен упрощенный стакан, состоящий всего из 6 уровней. В реальности стакан может быть гораздо больше и содержать до 64 уровней на продажу и покупку. Это существенная величина, учитывая, что обновление стакана может происходит несколько раз в секунду.

Самым простым способом поиска может показаться способ деления на два. В самом деле, если мы возьмем общее количество уровней в таблице 1, равное 6, и разделим его на два, то получившееся число (3) будет индексом лучшего спроса. Следовательно, предшествующий ему индекс будет индексом лучшего предложения (2). Однако данный метод сработает только в том случае, если количество уровней в стакане на продажу равно количеству уровней на покупку. На ликвидных рынках, как правило, так и есть, однако на неликвидных рынках стакан может быть заполнен не полностью, и на одной из сторон может вовсе не быть ни одного уровня.

Наш класс CMarketBook должен работать на любых рынках и с любыми стаканами, поэтому простой метод деления на два нам не подходит. Для иллюстрации ситуации, когда метод деления на два может не сработать, обратимся к следующему рисунку:

Рис. 3. Количество уровней спроса не всегда равно количеству уровней предложения

На рисунке 3 изображены два стакана. Первый из них — стакан фьючерсного контракта на двухлетние облигации федерального займа (OFZ2-9.15). Второй — фьючерсный контракт евро/доллар (ED-9.15). Видно, что для OFZ2-9.15 количество ценовых уровней покупателей равно четырем, в то время как количество ценовых уровней продавцов равно восьми. На более ликвидном рынке ED-9.15 количество уровней как продавцов так и покупателей равны и составляют 12 уровней для каждой из сторон. Видно, что в случае с ED-9.15 способ определения индексов делением на два сработал бы, а в случае с OFZ2 — нет.

Куда более надежным способом определения индекса был бы перебор стакана до момента первого вхождения заявки с типом BOOK_TYPE_BUY. Предыдущий индекс при этом автоматически становился бы индексом лучшего предложения. Именно таким методом обладает класс CMarketBook. Обратимся к нему для иллюстрации сказанного:

Основная работа этого метода заключена в переборе стакана оператором for. Как только в стакане встречается первая заявка с типом BOOK_TYPE_BUY, устанавливаются индексы лучшего спроса и предложения, а перебор прерывается. Но полный перебор стакана при каждом его обновлении был бы слишком ресурсозатратным решением.

Вместо того чтобы осуществлять перебор при каждом обновлении, можно запомнить ранее найденные индексы лучшего спроса и предложения! В самом деле, стакан цен, как правило, содержит не меняющееся количество уровней на продажу и покупку. Поэтому каждый раз перебирать стакан в поисках нужных нам индексов не нужно. Достаточно обратиться по ранее найденным индексам и понять, являются ли они по-прежнему индексами лучшего спроса и предложения. Именно этим и занимается приватный метод FindBestBid. Настало время посмотреть его содержимое:

Его работа проста. Прежде всего метод удостоверяется, что текущий индекс лучшего предложения по-прежнему соответствует индексу предложения. Затем он сбрасывает индекс лучшего спроса и заново пытается его найти, обращаясь к элементу, следующему за индексом лучшего предложения:

Если найденный элемент действительно является лучшим индексом спроса, значит, предыдущее состояние стакана имело то же количество уровней продавцов и покупателей, что и текущее. Благодаря этому перебора стакана удается избежать, ведь в методе SetBestAskAndBidIndex перед перебором делается вызов метода FindBestBid. Таким образом, перебор стакана производится лишь в момент первого вызова функции, а также в случае изменения количества уровней на продажу и/или на покупку.

Хотя результирующий исходный код получился больше и сложнее простого перебора стакана, в действительности он будет работать быстрее. Особенно выигрыш в производительности будет заметен на больших стаканах ликвидных рынков. Простые инструкции на проверку условий выполняются очень быстро, а само количество этих проверок значительно меньше циклов оператора for. Поэтому производительность этого метода поиска индексов лучших цен будет выше обычного перебора.

2.4. Определение предельного проскальзывания с помощью метода GetDeviationByVol

Зачастую стакан цен используется многими трейдерами для определения текущей ликвидности на рынке, то есть стакан цен используется ими как дополнительный инструмент для контроля своего риска. Ведь если ликвидность на рыкне низкая, вход в рынок с помощью рыночных приказов может вызвать высокое проскальзывание. Проскальзывание — это всегда дополнительные убытки, порою оно может достигать существенных величин.

Чтобы не происходило подобных ситуаций, необходимо использовать дополнительные приемы, контролирующие вход в рынок. Более подробно об этих приемах написано в специальной статье «Как обезопасить себя и своего эксперта при торговле на Московской бирже». Поэтому мы не будем подробно описывать эти методы, а лишь скажем, что получая доступ к стакану, мы можем оценить величину своего потенциального проскальзывания еще до входа в рынок. Величина проскальзывания зависит от двух факторов:

  • текущей ликвидности стороны спроса (для продажи) и предложения (для покупки);
  • объема заключенной сделки.

Имея доступ к текущему стакану, мы можем увидеть, каким объемом и по каким ценам будет выполнена наша заявка. Зная объем нашей заявки, можно рассчитать средневзвешенную цену входа в рынок. Разница между этой ценой и ценой лучшего спроса или предложения (в зависимости от направления входа) и будет нашим проскальзыванием.

Рассчитывать средневзвешенную цену входа вручную невозможно, так как требуется произвести большой объем вычислений за очень короткое время (напомню, что состояние стакана может меняться несколько раз в секунду). Таким образом, естественно делегировать эту задачу торговому эксперту или индикатору.

Класс CMarketBook содержит специальный метод для вычисления этой характеристики: GetDeviationByVol. Так как на величину проскальзывания влияет объем сделки, методу необходимо передать объем, который предполагается исполнить на рынке. Поскольку в методе используется целочисленная арифметика объемов, принятая на срочном рынке Московской биржи, метод принимает объем в виде целочисленного типа long. Помимо этого, методу необходимо знать, для какой стороны ликвидности требуется выполнить расчет, для чего используется специальное перечисление ENUM_MBOOK_SIDE:

Теперь давайте приведем исходный код метода GetDeviationByVol:

Как видно, код занимает существенный объем, но его принцип расчета несложен. Во первых, делается перебор стакана от лучшей к худшей цене. Для каждого направления производится перебор в свою сторону. Во время перебора текущий объем добавляется к суммарному объему. Если суммарный объем набран и соответствует заявленному объему, происходит выход из цикла. Затем рассчитывается средняя цена входа для заданного объема. И наконец, рассчитывается разница между средней ценой входа и лучшей ценой спроса/предложения. Абсолютная разница и будет составлять оценочное отклонение.

Данный метод требует для расчета прямой перебор стакана. И хотя перебирается лишь одна из двух частей стакана цен и, как правило, не полностью, все равно данный расчет требует больше времени, чем расчет часто используемых индексов в стакане. Поэтому этот расчет реализован непосредственно в отдельном методе и производится по требованию, то есть только лишь в тех случаях, когда требуется получить эту информацию в явном виде.

2.5. Примеры работы с классом CMarketBook

Итак, мы рассмотрели основные методы класса CMarketBook, и настало время немного попрактиковаться в его использовании. Наш тестовый пример будет достаточно простым и понятным даже для начинающих программистов. Напишем тестовый советник, выполняющий однократный вывод текущей информации по стакану. Конечно, для этих целей скрипт подошел бы лучше, однако доступ к стакану через скрипт невозможен, и необходимо использовать либо советник, либо индикатор. Исходный код нашего советника представлен ниже:

Запустив этот тестовый эксперт на графике OFZ2, мы получим следующий отчет:

Сравним получившийся отчет со скриншотом стакана по этому инструменту:

Рис. 4. Стакан цен по OFZ2 в момент запуска тестового отчета

Как видно, полученные индексы и цены полностью соответствуют текущему стакану цен, в чем нам и требовалось убедиться.

Глава 3. Пишем свой стакан цен в виде панели-индикатора


3.1. Общие принципы проектирования панели стакана цен. Создание индикатора

Без индикаторов. Биржевой стакан. Основа анализа

Имея в своем распоряжении класс CMarketBook, достаточно просто создать специальную панель, отображающую текущий стакан цен прямо на графике. Мы создадим нашу панель на основе пользовательского индикатора. Выбор на использование индикатора в качестве основы пал потому, что на каждом графике может находится лишь один торговый эксперт, в то время как индикаторов может быть неограниченное количество. Если бы мы за основу панели взяли эксперт, то торговать с помощью эксперта на этом же графике было бы уже нельзя, а это было бы неудобно.

Мы снабдим наш стакан возможностью появления и скрытия на графике, подобно тому, как это реализовано в стандартной торговой панели для каждого графика. Мы будем использовать такую же кнопку для его отображения и скрытия:

Рис. 5. Стандартная торговая панель в MetaTrader 5

Располагаться наш стакан цен будет в левом верхнем углу графика, там же, где располагается и торговая панель. Это связано с тем, что на графике с индикатором стакана может быть запущен торгующий эксперт. Чтобы не перекрывать его иконку, находящуюся в правом верхнем углу, мы и разместим свою панель слева.

При создании индикатора необходимо использовать одну из двух системных функций OnCalculate. Так как наша панель не использует информацию, получаемую в этих функциях, мы оставим эти методы пустыми. Индикатор также не будет использовать ни одной графической серии, поэтому свойство indicator_plots в нашем случае будет равно нулю.

Системная функция OnBookEvent будет основной, которую будет использовать наш индикатор, для чего необходимо будет подписать текущий символ графика на получение событий об изменении стакана цен. Подписку мы выполним с помощью уже знакомой нам функции MarketBookAdd.

Панель стакана цен будет реализована в виде специального класса CBookPanel. Сейчас, не вдаваясь в подробности этого класса, приведем код самого стартового файла индикатора:

Сейчас класс CBookPanel содержит только базовые элементы для своей работы: стрелку, при нажатии на которую в будущем будет появляться наш стакан цен, и надпись «MarketBook», подписывающую наш будущий стакан. При запуске нашего индикатора, график будет выглядеть следующим образом:

Рис. 6. Расположение будущей панели MarketBook на графике

Каждый элемент этого класса — также независимый класс, производный от базового класса CNode. Этот класс содержит базовые методы, вроде Show и Hide, которые можно переопределить в классах-потомках. Также класс CNode генерирует уникальное имя для каждого экземпляра, что делает более удобным использование стандартных функций для создания графических объектов и задания их свойств.

3.2. Обработка события нажатия и создание формы стакана

Сейчас наш индикатор не реагирует на нажатие стрелки, поэтому продолжим его дорабатывать. Первое, что необходимо сделать для нашей панели — это ввести обработчик события OnChartEvent. Назовем этот метод Event. Он будет принимать параметры, получаемые из OnChartEvent. Также расширим базовый класс CNode, снабдив его массивом CArrayObj, в котором будут храниться другие графические элементы типа CNode. В будущем это поможет нам создавать множество однотипных элементов — ячеек стакана.

Теперь приведем исходный код класса CBookPanel и его класса-родителя CNode:

Метод Refresh, обновляющий состояние стакана, еще не заполнен. Его мы создадим чуть позже. Текущий функционал уже позволяет показать нам первый прототип нашего стакана. Пока при нажатии стрелки отображается только стандартная серая подложка. При повторном нажатии она исчезает:

Рис. 7. Внешний вид будущего стакан цен

Пока стакан цен выглядит не очень убедительно, но мы продолжим его совершенствовать.

3.3. Ячейки стакана.

Основу стакана составляют его ячейки. Каждая ячейка — это элемент таблицы, содержащий информацию об объеме или цене. Также ячейка различается по цвету: для лимитных ордеров на покупку она окрашивается в синий цвет, для лимитных ордеров на продажу — в розовый цвет. Для каждого стакана цен количество ячеек может быть разным, следовательно, все ячейки необходимо создавать динамически, по требованию, и хранить их в специальном контейнере данных CArrayObj. Так как все ячейки, независимо от того, что они показывают, имеют одинаковый размер и тип, то класс, реализующий разные типы ячеек, будет одним для всех типов ячеек.

И для ячеек, показывающих объем, и для ячеек, показывающих цену, будет использоваться специальный класс CBookCeil. Тип ячейки будет указываться во время создания объекта этого класса, таким образом, каждый экземпляр класса будет знать, какую именно информацию из стакана цен ему будет необходимо отобразить, и каким цветом окрасить свой фон. CBookCeil будет использовать два графических примитива: текстовую метку OBJ_TEXT_LABEL и прямоугольную метку OBJ_RECTANBLE_LABEL. Первая будет отображать текст, вторая — саму ячейку стакана.

Приведем исходный код класса CBookCeil:

Основную работу этого класса выполняют методы Show и Refresh. Последний, в зависимости от переданного типа ячейки, окрашивает ее в тот или иной цвет и отображает в ней объем либо цену. Чтобы создать ячейку, необходимо указать ее тип, местоположение по оси X, местоположение по оси Y, индекс стакана цен, которому соответствует данная ячейка, и собственно стакан цен, из которого ячейка будет получать информацию.

Создавать ячейки будет специальный приватный метод CreateCeils в классе, реализующем подложку стакана цен. Приведем его исходный код:

Он будет вызываться при нажатии на стрелку, раскрывающую стакан цен.

Теперь все готово для создания нашей новой версии стакана. После внесения изменений и компиляции проекта наш индикатор приобрел новый вид:

Рис. 8. Первая версия стакана цен, в виде индикатора

3.4. Отображаем гистограмму объемов в стакане цен

Получившийся стакан цен уже выполняет основную функцию — он показывает торговые уровни, объем и цены лимитных заявок на продажу и покупку. При этом каждое изменение значений в стакане цен также меняет значения в соответствующих ячейках. Однако визуально непросто отслеживать величину объемов в получившейся таблице. Например, в стандартном стакане MetaTrader 5 объем отображается на фоне гистограммы, которая показывает относительную величину текущего объема по отношению к максимальному объему в стакане. Нам также не мешало бы внедрить подобный функционал в наш стакан.

Мы можем решить эту задачу разными путями. Самым простым решением было бы сделать все нужные расчеты прямо в классе CBookCeil. Для этого в его методе Refresh необходимо было бы написать следующее:

Анализ Стакана Ордеров: Полная Техника Анализа Котировок на Крипторынке (Пример Ripple)

В методе путем полного перебора стакана находится максимальный объем, затем текущий объем делится на максимальный. Полученная доля умножается на максимальную ширину ячейки таблицы объема (она представлена константой в 50 пикселей). Получившаяся ширина подложки и будет искомой гистограммой:

Рис. 9. Стакан цен с гистограммой объемов

Однако проблема данного кода в том, что полный перебор стакана делается в каждой ячейке при каждом вызове Refresh. Для стакана с глубиной сорок элементов это означает 800 итераций цикла for за одно обновление стакана. Каждая ячейка делает перебор стакана только для своей стороны, поэтому перебор внутри каждой ячейки будет состоять из двадцати итераций (глубина стакана, разделенная на два). И хотя современные компьютеры справляются с этой задачей, это слишком неэффективный прием работы, особенно учитывая то, что работать со стаканом необходимо максимально быстрыми и эффективными алгоритмами.

3.5. Быстрый расчет максимальных объемов в стакане, оптимизация перебора

К сожалению, от полного перебора в стакане цен нельзя избавиться. После каждого обновления стакана цен, максимальный объем и его ценовой уровень может кардинальным образом измениться. Однако мы можем минимизировать количество переборов. Для этого перебор стакана нужно научиться делать не более одного раза между двумя вызовами Refresh. Второе, что необходимо сделать — это минимизировать само количество вызовов полного перебора. Для этого необходимо воспользоваться отложенным расчетом или, иными словами, выполнять этот расчет только при явном требовании. Все расчеты также непосредственно перенесем в класс стакана цен CMarketBook, для чего напишем специальный расчетный подкласс CBookCalculation, находящийся внутри CMarketBook. Ниже приведем его исходный код:

Весь перебор стакана и ресурсоемкие вычисления скрыты внутри приватного метода Calculate. Он вызывается только в том случае, если флаг расчета m_calculate сброшен в состояние false. Сброс этого флага происходит только в одном-единственном месте — в методе Reset. Так как этот класс создан исключительно для работы внутри класса CMarketBook, доступ к нему имеет только этот класс.

После обновления стакана метод Refresh класса CMarketBook сбрасывает состояние расчетного модуля, вызывая его метод Reset. Благодаря этому полный перебор стакана происходит не более одного раза между двумя его обновлениями. Также используется отложенное выполнение. Иными словами, метод Calculate класса CBookCalcultae вызывается только в том случае, когда происходит явный вызов одного из шести его общедоступных методов.

Помимо нахождения объема, в класс, осуществляющий полный перебор стакана, были добавлены поля, содержащие суммарный объем лимитных ордеров на продажу и покупку. Дополнительного времени для расчета эти параметры не потребуют, так как рассчитываются в общем цикле массива.

Теперь вместо постоянного перебора стакана используется умный перебор по требованию. Это существенно сокращает используемые ресурсы и делает работу со стаканом максимально эффективной и быстрой.

3.6. Последние штрихи: гистограмма объемов и разделительная черта

Мы практически полностью завершили работу над созданием нашего индикатора. Практическая необходимость в нахождении максимального объема помогла нам создать эффективный метод экономного расчета необходимых показателей. Если в дальнейшем мы захотим добавить новые расчетные параметры в наш стакан, сделать это будет достаточно просто — для этого достаточно будет расширить наш класс CBookCalculate соответствующими методами и ввести соответствующие модификаторы в перечисления ENUM_MBOOK_INFO_INTEGER и ENUM_MBOOK_INFO_DOUBLE.

Теперь нам осталось воспользоваться проделанной работой и переписать метод Refresh для каждой ячейки:

Визуально наша панель-индикатор работает так же, как и в предыдущей версии, однако в реальности скорость расчета гистограммы существенно увеличилась. Именно в этом и состоит искусство программирования — создавать эффективные и простые в использовании алгоритмы, скрывая сложность их реализации внутри приватных методов соответствующих модулей (классов).

С появлением гистограммы объемов стало не совсем понятно, где проходит разделительная черта между объемами спроса и предложения. Поэтому мы создадим такую черту, дополнив класс CBookPanel специальным подклассом CBookLine, реализующим эту черту:

Это очень простой класс, фактически определяющий лишь свое положение. Положение черты по оси Y нужно рассчитать в момент ее создания в методе Show. Сделать это достаточно просто, зная индекс лучшего предложения:

В данном случае индекс ячейки best_bid умножается на ширину каждой ячейки (15 пикселей), и к ней прибавляется дополнительная константа в 19 пикселей.

Наш новый стакан, наконец, приобрел тот минимальный внешний вид и функционал, при котором его использование становится приятным. Конечно, еще многое можно было бы сделать. При желании наш индикатор можно было бы максимально приблизить по своей функциональности к стандартному стакану MetaTrader 5.

Но основная цель данной статьи не в этом. Панель стакана цен создавалась лишь с целью показать возможности класса CMarketBook. Она помогла сделать этот класс быстрее, лучше и функциональнее, и поэтому полностью выполнила свою задачу. Мы же покажем небольшое видео, на котором будет видна проделанная нами работа. Внизу представлена наша панель стакана цен в динамике:

3.7. Дополняем свойства стакана информацией об общем количестве лимитных ордеров по инструменту

Одной отличительной особенностью Московской биржи является трансляция информации об общем количестве лимитных ордеров в режиме реального времени. Данная статья освещает работу стакана цен как такового, безотносительно к конкретному рынку. Тем не менее, данная информация, хотя и является специфической (свойственной конкретной торговой площадке), доступна на системном уровне терминала. К тому же, она расширяет данные, предоставленные стаканом цен. Поэтому было решено расширить перечисления модификаторов свойств и включить поддержку этих свойств прямо в класс стакана цен CMarketBook.

Итак, Московская биржа предоставляет следующую информацию в режиме реального времени:

  • количество всех лимитных ордеров на продажу, выставленных по инструменту в текущий момент времени;
  • количество всех лимитных ордеров на покупку, выставленных по инструменту в текущий момент времени;
  • общий объем всех лимитных ордеров на продажу, выставленных по инструменту в текущий момент времени;
  • общий объем всех лимитных ордеров на покупку, выставленных по инструменту в текущий момент времени;
  • количество открытых позиций или открытый интерес (только для фьючерсных рынков).

Хотя открытый интерес непосредственно не связан с количеством лимитных ордеров на рынке (т.е. с его текущей ликвидностью), тем не менее, данная информация зачастую требуется совместно с информацией о лимитных ордерах, поэтому доступ к ней через класс CMarketBook также выглядит уместным. Для доступа к этой информации необходимо использовать функции SymbolInfoInteger и SymbolInfoDouble. Однако для того чтобы эти данные были доступны из одного места, наш класс стакана цен мы расширим, введя дополнительные перечисления и изменения в его функции InfoGetInteger и InfoGetDouble:

Как видно, код достаточно прост. По сути он дублирует стандартный функционал MQL. Но смысл его добавления в класс CMarketBook именно в том, чтобы предоставить пользователям удобный и централизованный модуль для доступа к информации о лимитных ордерах и их ценовых уровнях.

Глава 4. Документация к классу CMarketBook

Мы завершили описание и создание класса для работы со стаканом цен CMarketBook. Четвертая глава содержит документацию по его открытым методам. Благодаря этой документации использование класса станет простым и понятным, даже для начинающих программистов. Также данную главу удобно будет использовать в виде небольшого справочника по работе с классом.

4.1. Методы для получения основной информации из стакана и работы с ним

Метод Refresh()

Обновляет состояние стакана. При каждом вызове системного события OnBookEvent (состояние стакана изменилось) необходимо также вызывать данный метод.

Использование

Пример использования смотрите в соответствующем разделе четвертой главы.

Метод InfoGetInteger()

Возвращает одно из свойств стакана, соответствующее модификатору ENUM_MBOOK_INFO_INTEGER. Полный перечень поддерживаемых свойств смотрите в описании перечисления ENUM_MBOOK_INFO_INTEGER.

Возвращаемое значение

Целочисленное свойство стакана типа long. В случае неудачи возвращает -1.

Использование

Пример использования смотрите в соответствующем разделе четвертой главы.

Биржевой стакан: Как дурят хомяков на рынке акций

Метод InfoGetDouble()

Возвращает одно из свойств стакана, соответствующее модификатору ENUM_MBOOK_INFO_DOUBLE. Полный перечень поддерживаемых свойств смотрите в описании перечисления ENUM_MBOOK_INFO_DOUBLE.

Возвращаемое значение

Свойство стакана типа double. В случае неудачи, возвращает -1.0.

Использование

Как читать ленту и стакан ордеров | Полное руководство для трейдеров (NYSE, MOEX, CME, Криптовалюты)

Пример использования смотрите в соответствующем разделе четвертой главы.

Метод IsAvailable()

Возвращает true, если информация по стакану доступна, и false в противном случае. Данный метод необходимо вызывать перед началом работы с классом стакана для проверки возможности работы с данным видом информации.

Возвращаемое значение

True, если стакан доступен для дальнейшей работы, и false в противном случае.

Метод SetMarketBookSymbol()

Устанавливает символ, со стаканом цен которого необходимо работать. Также символ стакана цен можно установить во время создания экземпляра класса CMarketBook, явно указав в конструкторе название используемого символа.

Возвращаемое значение

True, если символ ‘symbol’ доступен для торговли, false в противном случае.

Метод GetMarketBookSymbol()

Возвращает символ инструмента, для работы со стаканом цен которого настроен текущий экземпляр класса.

Возвращаемое значение

Всё о СТАКАНЕ простыми словами | Трейдинг с нуля | Обучение трейдингу | Binance | Криптовалюта

Название инструмента, чей стакан отображает текущий экземпляр класса. NULL, если инструмент не выбран либо не доступен.

Метод GetDeviationByVol()

Возвращает величину потенциального проскальзывания при входе в рынок рыночным ордером. Эта величина носит оценочный характер и фактическое получаемое проскальзывание может отличаться от рассчитанного этой функцией, если состояние стакана в момент входа изменится. Тем не менее, данная функция дает достаточно точную оценку проскальзывания, которое произойдет при входе в рынок, и может служит источником дополнительной информации.

Метод принимает два параметра: объем предполагаемой сделки и перечисление, указывающее на тип используемой ликвидности при заключении сделки. Например, для покупки будет использована ликвидность лимитных ордеров, выставленных на продажу, и в этом случае в качестве стороны ‘side’ необходимо будет указать тип MBOOK_ASK. Для продажи, наоборот, потребуется указать MBOOK_BID. Более подробную информацию о стороне стакана смотрите в описании перечисления ENUM_BOOK_SIDE.

Параметры:

  • [in] vol — объем предполагаемой сделки;
  • [in] side — сторона стакана, которая будет использоваться при заключении сделки.

Возвращаемое значение

Величина потенциального проскальзывания в пунктах инструмента.

4.2. Перечисления и модификаторы класса CMarketBook

Перечисление ENUM_MBOOK_SIDE

Перечисление ENUM_BOOK_SIDE содержит модификаторы, указывающие на тип используемой ликвидности. Поля перечисления и их описания указаны ниже:

Поле Описание
MBOOK_ASK Указывает на ликвидность предоставленную лимитными ордерами на продажу.
MBOOK_BID Указывает на ликвидность предоставленную лимитными ордерами на покупку.

Примечание

Каждый рыночный ордер может быть исполнен лимитными заявками. В зависимости от направления заявки используются лимитные ордера на покупку или на продажу. Обратной стороной сделки на покупку будет один или несколько лимитных ордеров на продажу. Обратной стороной сделки на продажу будет один или несколько лимитных ордеров на покупку. Данный модификатор, таким образом, указывает на одну из двух частей стакана: сторону покупки или сторону продажи. Модификатор используется функцией GetDeviationByVol, для работы которой необходимо знать, какую сторону ликвидности будет задействовать предполагаемая рыночная сделка.

Перечисление ENUM_MBOOK_INFO_INTEGER

Перечисление ENUM_MBOOK_INFO_INTEGER содержит модификаторы свойств, которые требуется получить с помощью метода InfoGetInteger. Поля перечисления и их описания указаны ниже:

Поле Описание
MBOOK_BEST_ASK_INDEX Индекс лучшей цены предложения
MBOOK_BEST_BID_INDEX Индекс лучшей цены спроса
MBOOK_LAST_ASK_INDEX Индекс худшей или последней цены предложения
MBOOK_LAST_BID_INDEX Индекс худшей или последней цены спроса
MBOOK_DEPTH_ASK Глубина стакана цен со стороны предложения или его общее количество торговых уровней
MBOOK_DEPTH_BID Глубина стакана цен со стороны спроса или его общее количество торговых уровней
MBOOK_DEPTH_TOTAL Общая глубина стакана цен или количество торговых уровней на покупку и продажу
MBOOK_MAX_ASK_VOLUME Максимальный объем предложения
MBOOK_MAX_ASK_VOLUME_INDEX Индекс уровня максимального объема предложения
MBOOK_MAX_BID_VOLUME Максимальный объем спроса
MBOOK_MAX_BID_VOLUME_INDEX Индекс уровня максимального спроса
MBOOK_ASK_VOLUME_TOTAL Суммарный объем лимитных ордеров на продажу, доступный в текущем стакане
MBOOK_BID_VOLUME_TOTAL Суммарный объем лимитных ордеров на покупку, доступный в текущем стакане
MBOOK_BUY_ORDERS Весь объем лимитных ордеров на покупку, выставленных в текущий момент на бирже
MBOOK_SELL_ORDERS Весь объем лимитных ордеров на продажу, выставленных в текущий момент на бирже

Перечисление ENUM_MBOOK_INFO_DOUBLE

Перечисление ENUM_MBOOK_INFO_DOUBLE содержит модификаторы свойств, которые требуется получить с помощью метода InfoGetDouble. Поля перечисления и их описания указаны ниже:

Поле Описание
MBOOK_BEST_ASK_PRICE Цена лучшего предложения
MBOOK_BEST_BID_PRICE Цена лучшего спроса
MBOOK_LAST_ASK_PRICE Цена худшего или последнего предложения
MBOOK_LAST_BID_PRICE Цена худшего или последнего спроса
MBOOK_AVERAGE_SPREAD Средняя разница между лучшим спросом и предложением или спред
MBOOK_OPEN_INTEREST Открытый интерес
MBOOK_BUY_ORDERS_VOLUME Количество ордеров на покупку
MBOOK_SELL_ORDERS_VOLUME Количество ордеров на продажу

4.3. Пример использования класса CMarketBook

Данный пример содержит исходный код в виде эксперта, выводящего основную информацию по стакану цен в момент его запуска:

Заключение

Статья получилась достаточно динамичной. Мы рассмотрели стакан цен с технической точки зрения и предложили высокопроизводительный класс-контейнер для работы с ним. В качестве примера мы создали на базе этого класса-контейнера индикатор стакана цен, который можно компактно отобразить на ценовом графике инструмента.

Наш индикатор стакана цен получился очень простым, в нем еще многого не хватает. Однако главная цель была достигнута — мы убедились, что с помощью созданного нами класса CMarketBook можно относительно быстро создавать сложные эксперты и индикаторы, анализирующие текущую ликвидность по инструменту. Большое внимание при проектировании класса CMarketBook уделялось производительности, ведь стакан цен — очень динамичная таблица, меняющаяся сотни раз за минуту.

Класс, описанный в статье, станет хорошей основой для вашей скальперской или высокочастотной системы. Вы сможете дополнить его специфическим для вашей системы функционалом. Для этого просто создайте свой класс стакана, производный от CMarketBook, и напишите методы расширения, требующиеся вам. Однако мы надеемся, что даже те базовые свойства и методы, что предоставлены классом стакана, сделают вашу работу гораздо легче и надежнее.

Лучшие Форекс платформы: