Всем привет. Увлекаюсь алготрейдингом, иногда пишу сюда. Придумал, реализовал и протестировал простую стратегию. Решил поделится своим личным достижением, чтобы продемонстрировать Вам как многокритериальный анализ и подбор коэффициентов индивидуально для каждого инструмента (акции) может отражаться на результате.
Суть, философия и детальное описание стратегии
Суть банальна и проста «Покупаем дешевле продаем дороже». Да, только лонг с усреднением при падении, у меня аллергия на шорты. Без учета сигналов индикаторов, фундаменталки, бреда нейронных сетей и прочего. Задумка создать простой инструмент, а как/когда/где его использовать — решает пользователь.
Философия: считаю что каждая акция индивидуальна и зависит от стоимости лота, ликвидности, волатильности. Задача скрипта — за счет подстройки коэффициентов — максимально эффективно зарабатывать на любых движениях акции.
Описание стратегии:
Решил заморочиться над анализом обезличенных сделок.
Зачем ?
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 секунду), есть риск не успеть подгрузить данные, т.к. альфа-директ может их затеречь очередной порцией новых данных.