Объёмы покупок и продаж

Опубликовано в Роботы

В последнее время стала весьма популярной тема анализа состояния рынка путём разделения объёма торгов на объём покупки и объём продаж. Такой заказ поступил и мне.

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

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

Собственно, техническое задание было коротко и очень конкретно:

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

Задача выглядит классической. Однако её реализация оказалась сложной. Причина - в невозможности получения исходных данных стандартным способом (через плагин).

Единственным полноценным источником данных для построения индикатора объёмов покупки и продажи в терминале QUIK является таблица всех сделок. Это упорядоченный по времени список сделок за торговый день без каких-либо возможностей интервального структурирования. Для решения задачи необходимо в реальном времени просчитывать всю таблицу. Однако взависимости от анализируемого  инструмента размер этого списка может оказаться весьма большим. К примеру, количество сделок фьючерса на индекс РТС за торговый день находится в пределах от миллиона до двух. Если же брать таблицу сделок, где собраны сделки по всем инструментам без фильтрации, то размер  таблицы вырастает многократно. Становится очевидно, что обработка всей таблицы сделок ликвидного инструмента в реальном времени есть задача непосильная - количество сделок в секунду может достигать десятков, а в некоторые моменты даже сотен.

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

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

  • Первая сложность. Амиброкер не имеет такого понятия как "список возможных теймфреймов". Кроме общепринятых, таких как 1 тик, 1 минута, 5 минут, 15 минут, 1 час, дневной, недельный и им подобных Амиброкер позволяет оперировать любыми иными, на вкус пользователя. Можно использовать как любые регулярные промежутки времени (2 сек, 13 минут, 5 часов, 4 дня и т.п.), так и синтетику типа 2 тика или 13 тиков. Пользователь может конструировать таймфреймы исходя из собственных нужд. Поэтому нет возможности заранее рассчитать все данные для всех возможных таймфреймов - алгоритм кэширования должен учитывать возможность использования пользователем произвольного таймфрейма, а также возможность его (таймфрейма) изменения во время работы в любое время. Алгоритм становится весьма сложным.
  • Вторая сложность состоит в том, что источник данных предоставляет информацию исключительно за текущий торговый день. Это означает, что для показа истории за предудущие дни результаты кэширования должны сохраняться не только в оперативной памяти, но и где-то на жестком диске. И это при том, что заранее никогда неизвестно, на каком таймфрейме пользователь  будет эксплуатировать индикатор. Таким образом, при переключении таймфрейма графика необходим перерасчет всей истории. Задача перестаёт быть томной из-за требований к её универсальности и производительности.

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

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

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

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

Еще по теме: 

 

 


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

Комментарии   

# Armin 16.02.2013 21:30
здравствуйте. Есть плагин для Ами от АйТи Инвест. В поле "Aux1" записываются данные о направлении сделки, присылаемое биржей в виде цифр 1 (покупка) и 2 (продажа). Сколько будет стоить сделать такой же индикатор дельты?
Ответить | Ответить с цитатой | Цитировать
# admin 16.02.2013 21:42
Armin,

Мне недостаточной той информации, что Вы привели, для полного понимания Вашей задачи и оценки её стоимости. Давайте свяжемся посредством скайпа (mikemsk), чтобы осознать подробности.
Ответить | Ответить с цитатой | Цитировать
# m1911 22.12.2013 02:28
Судя по скриншотам, индикатор сам по себе не дает возможности спрогнозировать дальнейшее движение цены, и это вполне объяснимо - он ведь не показывает объемы, стоявшие на тех или иных уровнях в стакане. Интересно и познавательно.
Ответить | Ответить с цитатой | Цитировать
# admin 22.12.2013 10:43
m1911

Задача, описанная Вами, требует совершенно иного подхода. Здесь происходит анализ таблицы всех сделок. То, о чем пишете Вы, требует анализа стакана котировок. Тоже возможно.
Ответить | Ответить с цитатой | Цитировать
# m1911 22.12.2013 13:37
Да, конечно, я понимаю.
Ответить | Ответить с цитатой | Цитировать
# Mickle 08.05.2015 11:58
Скажите пожалуйста,как построить индикатор разделяющий объемы "съеденные" на покупку или продажу в Квике?
Ответить | Ответить с цитатой | Цитировать
# admin 08.05.2015 17:21
Mickle

Эта задача решаема путем написания скрипта на языке lua. Надо сказать, что он будет довольно сложным, если его делать аккуратно и надежно.
Встроенными средствами терминала построить этот индикатор невозможно.
Ответить | Ответить с цитатой | Цитировать
# Mickle 12.05.2015 19:30
Не подскажите,в каком торговом терминале есть этот индикатор?
Ответить | Ответить с цитатой | Цитировать
# admin 13.05.2015 08:55
Я боюсь ошибиться, но на российском рынке ничего готового вы не найдете. Буду очень рад, если кто-то меня поправит.
Ответить | Ответить с цитатой | Цитировать
# Mickle 13.05.2015 13:42
Спасибо,вам за ответы.Я так понимаю что такой индикатор можно установить на Amibroker.Буду вам очень благодарен если вы подскажете как найти его в программе или реализовать через вставку скрипта в редактор AFL code Wizard?
Ответить | Ответить с цитатой | Цитировать
# admin 13.05.2015 16:24
И тут вынужден вас огорчить. В стандартной поставке Амиброкера такого индикатора нет. Да его и не может быть по определению.

Его придется изготавливать дополнительно (см. несколько постов выше)
Ответить | Ответить с цитатой | Цитировать
# Nordon 08.05.2017 16:52
Здравствуйте. А для QUIK есть такая же программа, чтобы работала на всех таймфреймах?
Ответить | Ответить с цитатой | Цитировать
# admin 08.05.2017 17:00
Цитирую Nordon:
Здравствуйте. А для QUIK есть такая же программа, чтобы работала на всех таймфреймах?


Она есть на этом сайте: www.bot4sale.ru/.../bs-volume.html
Ответить | Ответить с цитатой | Цитировать

Добавить комментарий


Защитный код
Обновить