Блог им. DenisBazarnov

Анализ обезличенных сделок, рабочий прототип приложения.

Решил заморочиться над анализом обезличенных сделок.
Зачем ?
1) Меня интересует структура объема по конкретному инструменту. Не просто общий объем на покупку и продажу, а были ли очень крупные покупки или продажи, на количество акций, которое раз в 30-100 превышает среднее количество? А каково соотношение покупка/продажа таких крупных сделок? Например: по конкретному инструменту «цену» колбасит вверх/вниз на 1% но при этом видно, что кто-то аккуратно, с учетом большого объема заявок на продажу — только выкупает акции большими лотами. Какой вывод можно сделать, если увидеть подобную ситуацию ?
2) Меня интересует скорость изменения числа сделок по каждому инструменту.
3) Анализ поведения ботов. Приведу пример: если наблюдать за лентой сделок, то периодически встречается серия сделок с разницей во времени в доли секунды, с одинаковым числом акций (часто либо «1» либо «100») и либо вообще без разницы в цене, либо цена отличается на копейку. И таких сделок, одна за другой может «пролететь» по 50-100 за раз. Это вот зачем? Понятно, что скорей всего чей-то софт «старается», но почему именно так, а не одним лотом? И опять же — какая доля данного «выдающегося» поведения в минутном объеме по инструменту ?

Надеюсь мне удалось объяснить, для чего я решил заняться анализом. А реализовать свой прототип я решил в Excel-e :) Да, кто-то улыбнется. И да, можно было придумать что-то мудреное, в духе «я создал свой сервис, с использованием современного мультиплатформенного языка программирования и современных фреймворков, с использованием искусственного интеллекта на базе обученных нейронных сетей и разместил это все в облаке». Но, во-первых я не собираюсь Вам ничего продавать, а во-вторых я по своей сути — практик. Лично мне пофиг как будет реализовано решение, главное чтобы оно было рабочим. Поэтому excel с использованием visual basic. Вот так вот просто. И, чтобы окончательно вывести Вас из себя своими выходками простолюдина, добавлю, что свой проект я назвал «stuck», т.е. «прилипала» по русски. Вспомнил про рыбку, которая плавает рядом с акулами и доедает объедки.

Как это работает. В качестве торгового терминала я использую «альфа-директ». Он мне также не нравится как и Quick, но если сравнивать с жадным и неповоротливым терминалом от Interactive Brokers — то не все так печально. Что в квике, что в альфа-директе есть возможность не только показывать ленту сделок по всем инструментам из Вашего списка, но и выгружать все в excel и в текстовый файл. У альфа-директа все сделано максимально убого: выгрузка в текстовый файл происходит не постоянно, пока запущено окно, а «одноразово». Что касается выгрузки в excel — в окне альфы отражается только 200 строк последних по времени сделок и если появляется информация о новых сделках то терминал по прежнему отражает 200 строк, опять же показывая информацию о последних сделках. Также идет и выгрузка в excel — выгружается 200 строк, при появлении новой информации — эти же строки перезаписываются поверх старых. С точки зрения автоматизации загрузки данных — очччень неудобно. Как это реализовано у меня — когда запускается макрос, он в зависимости от указанного в настройках времени, например каждые 0.5 секунды — пробегается по загруженному из альфа-директ списку и ищет те заявки, которые еще не загрузил, ну и сортирует их дальше. Если поставить время еще меньше (0.1 секунды) — система будет работать, но на слабеньких компах начнутся проблемы с отрисовкой данных (пока работает макрос), если поставить время меньше (1 секунду), есть риск не успеть подгрузить данные, т.к. альфа-директ может их затеречь очередной порцией новых данных.

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


На текущий момент реализовано следующее:
1) данные из альфа-директа грузятся в excel в лист «IN». Кстати из Quicka данные также можно выгружать, я в свое время пробовал. На листе «SETTINGS» указывается соответствие колонок, например «Цена» отражается в первой колонке листа «IN», количество во второй ну и так далее.
Анализ обезличенных сделок, рабочий прототип приложения.
Анализ обезличенных сделок, рабочий прототип приложения.




2) при нажатии на кнопку «Старт» в вечном цикле запускает макрос, который каждые полсекунды «пробегается» по списку в листе «IN» и анализирует сделки. Что именно он делает:
2.1) Если он впервые встречает «Тикет»(инструмент, акцию), которая отсутствует в списке — он вносит ее в список и создает отдельный лист в книге для сохранения крупных сделок.
2.2) Если макрос только-только начал работать, то по первой сотне сделок по конкретному инструменту — макрос считаем только объем и среднее количество сделок. В настройках можно исправить число, поставить 1000 сделок к примеру, тогда среднее будет точнее.
2.3) После подсчета среднего количества одной сделки по каждому инструменту, макрос помимо подсчета из пункта 2.2 начинает искать большие сделки. Насколько большие — вы также можете указать в настройках (у меня стоит в 30 раз больше среднего количества). Как только попадается подобная сделка — она отражается в листе с именем тикета данного инструмента. Ну а дальше Вы смело можете рисовать красивые графики, проводить анализ и прочее.
3) Кнопкой «Стоп» можно остановить скрипт.
4) Кнопка «очистить данные» удаляет все листы с тикетами (но не листы STATUS, IN, SETTINGS и HELP) и чистит таблицу. Зачем это? Я делал так, как удобно мне — в конце каждого дня я файлик сохраняю под отдельным именем, потом беру этот же файлик, жму «очистить данные» — и вот у меня файл готов для работы в следующий торговый день.

Что хочу добавить в дальнейшем в первую очередь.
1) Соотношение крупных сделок по покупке и продаже по каждому инструменту в отдельности. Отражать это в общей таблице в листе STATUS
2) пока не придумал как, но хочу показывать изменение скорости числа сделок по каждому инструменту. Говоря по простому, я хочу замечать, что по какому-то инструменту начинается «крупный движняк» :)
3) Хочу видеть изменение объема на покупку/продажу по конкреному инструменту, причем как по всему объему сделок по данному инструменту так и по «большим» сделкам данного инструмента

Файл с макросом можно скачать вот здесь: https://github.com/BazDen/Stuck/blob/master/stuck.xlsm
Все открыто, Вы можете посмотреть на код макроса, исправить его или дописать под свои нужны. Да, бесплатно. С чего такая щедрость, возможно спросите Вы? Отвечаю: во-первых это прототип для проверки моих идей и не факт, что мой анализ приведет к открытию закономерности, которая позволит мне стабильно зарабатывать деньги, ну а если это все же случится — то зачем тогда продавать софт, который и так приносит деньги, правда? :) Тогда почему я все же написал этот пост и выложил свой прототип? Потому как ищу единомышленников, например тех у кого есть идеи, но в силу отсутствия базовой квалификации программиста — нет возможности их проверить. Мой адрес электронной почты есть в файлике, пишите, постараюсь ответить всем.

 

★3
Эксель раком встанет от ленты за, например, месяц, да и бегать по нему будет мучительно, на мой взгляд. Для себя этот вопрос закрыл полноценным десктопным приложением на c#, данные лью в SQLite, уже несколько терабайт накопил. Думал перетащить все в PostgreSQL, но пока не горит, SQLite, конечно, убогонькой, но худо-бедно в монопольном режиме справляется
avatar

PSH

PSH, неа, не встанет :) Точнее так: в течение одного дня — вполне нормально. Но если есть необходимость анализировать данные за длительный промежуток времени — тут без базы данных не обойтись, согласен полностью. Но автоматически возникает потребность в постоянной выгрузке данных -> а эта потребность тянет за собой потребность в совсем другом софте, прокладка между альфа-директом (или квиком) и базой данных уже не прокатит. Короче, это уже совсем другой уровень, другой софт. Мой же случай — генерация гипотез, поиск паттернов, хотя бы в течение дня. Дешево и сердито. 
avatar

Денис Базарнов

А разве нельзя считать сделки каждую секунду по условию, установив числовой фильтр??? Это же вроде не трудно закодить?? Можно высчитывать среднее значение для каждого инструмента.Например считаем сделки в секунду на интервале 30 последних секунд, если идёт превышение во сколько-то раз, то будет оповещение.
avatar

ivanov petya

ivanov petya, ну так именно это я и реализовал. Считается среднее (отдельно по каждому инструменту) — дальше отслеживаются крупные сделки и попутно анализируется соотношение всего объема продаж к покупке, а также доля крупных сделок во всем объеме конкретно по каждому инструменту. Причем у себя я анализирую объемы по всему первому эшелону акций. Можно ли это реализовать средствами самого терминала, можно, но на мой взгляд — неудобно. Вам под каждый инструмент придется открывать отдельное окно «лента сделок», вручную считать среднее (которое постоянно изменяется) и вы не увидите всей картины в целом. 

Денис Базарнов, я имел ввиду пункты 2 и 3… Вы считаете просто средний размер сделки, а я предлагаю считать объёмы или кол-во сделок в каком-то промежутке(например последние 10 сек.)… То есть сделать привязку ко времени… Поэтому если ускорится скорость сделок или вырастут объёмы это вам просигнализирует посредством alert… На сколько это сложно написать-я не знаю)Плюс добавить в процентном отношении изменение актива, за сегодня, чтобы сразу прикинуть кол-во сделок и как ведёт себя актив
avatar

ivanov petya

Денис, здравствуйте. Можете написать подробную инструкцию, что и откуда выгружать из quika& не могу разобраться. Спасибо
avatar

Ян

Ян, доброе утро. Сожалею, у меня нет квика под рукой, работаю через альфа-директ. Но вот, вот краткое описание как создать ленту сделок под квиком, цитирую: Лента сделок (level 1 на американском рынке) в российской действительности, где в качестве основного торгового терминала свои позиции прочно удерживает терминал QUIK, она называется «Таблица обезличенных сделок». Найти её можно в меню Создать окно -> Таблица обезличенных сделок. Если она окажется пустой, значит нужно исправить настройки в меню «Система ->Заказ данных -> Поток обезличенных сделок». Если и там Вас встретит пустой список, необходимо обратиться к брокеру с просьбой включить поток обезличенных сделок. По умолчанию он может быть отключен, чтобы снизить нагрузку на интернет пользователя. 

Подробнее на БКС Экспресс:
bcs-express.ru/novosti-i-analitika/o-chem-mogut-rasskazat-birzhevoi-stakan-i-lenta-sdelok
Денис Базарнов, я в Открытии, там понятное дело альфа-директа нет, есть Квик. Но я не понял, как будет ли работать Ваш макрос с Квиком. Положим сделаю таблицу обезличенных сделок, через DDE можно сделать вывод на лсит в Excel. А дальше? Ваша макрос же как понимаю обращается за данными напрямую в альфа-директ, а не на лист экселя?
avatar

Weddy

Weddy, не совсем так. Торговый терминал (Квик, Альфа-директ) сами передают данные на конкретный лист Excel-я. В нашем с Вами случае, это лист IN, нашей книги. А макрос лишь с периодичностью в полсекунды считывает данные с листа IN и анализирует их. 

....все тэги
UPDONW