Сразу оговорюсь — к сожалению все, что описано в посте проделано на данных с рынка CME, конкретно — для фьючерса пшеницы с декабрьским месяцем поставки. Но в целом ничего не мешает работать и с данными с любой биржи. Инструмент для анализа, обработки данных и построения торговой системы — MatLab. Не сильно распространенный среди русских алготрейдеров, но с огромным количеством функционала и возможностей. Расшифровывется на русский язык MatLab как матричная лаборатория: изначальная цель языка и среды программирования это работа с большими массивами данных разных типов. Касаемо трейдинга — также присутствует много ништяков, писать про все не очень хочется если интересно можно например посмотреть
тут (не реклама, сайт не мой)) — нашел в сети). Но хочется отдельно отметить возможность подключаться напрямую из MatLab к примеру к терминалу Reuters, Bloomberg, к известным софтам для трейдинга типа XTrader, CQG, софт от Interactive brokers и др. Подключения можно использовать для различных целей — как для обработки данных, так и непосредственно торговли. Для HFT роботов слышал, что MatLab занимает заслуженное место, правда вся логика написанная в нем нуждается все равно в конвертации кода в Си если периодичность отсыла операций роботом ниже 1 секунды. Почему не писать сразу на Си? — В матлабе с их библиотеками и функциями все исследования и построения роботов разы делается проще и быстрее, да и присутствует авто конвертация кода из матлаб в си.
Итак, исходные данные: Soft Red Whinter Wheat Dec 2014. Проще говоря обычная пшеница, из муки которой потом пекут пироги. Данные взяты из IQFeed за полгода. Файл с данными в txt весит чуть более 100 мб, и содержит в себе полтора миллиона строк. Это данные ленты сделок с точностью до миллисекунд. Содержат в себе время, цену трейда, объем трейда, бест бид и бест аск на момент трейда + еще пара не сильно важных столбцов.
Анализируя данные от IQFeed не скажу, что они очень качественные. Проблема в том, что как я понял IQFeed склеивают свои тиковые данные и данные бест бид-аск полученные другим путем. Поэтому можно не редко встретить трейды по цене не соответствующей бест аск или бест бид на момент трейда. Выглядит это так:
На рисунке тиковый график, агрегированный до миллисекунд средствами матлаб. Стрелками — не соответствие трейдов бест аску (красным) или бест биду (зеленым). Сами трейды черные кружочки. Но пока бесплатно такие данные нашел только у IQFeed, поэтому приходится довольствоваться этим. К слову сказать, импортировать в матлаб сырые тиковые данные за полгода (длиной в полтора миллиона строк) и сделать агрегацию до миллисекунд занимает пару минут. Конечно, при условии, что код для данных действий уже написан. Но и сам код достсточно прост, вся функция импорта и обработки заняла около 100 строк. Далее графическое представление данных.
Интерфейс управления созданный мною, выглядит оч просто
Кнопка для выбора файлов, можно сразу грузить несколько файлов, все будут обработаны и представлены графически в одном окне. После обработки выдается чарт, что выше. Количество строк, что получилось после агрегации с точностью до миллисекунд около 570 тысяч. Еще одна интересная возможность при просмотре агрериванного графика:
Объемы отрисованы гистограммой с типом stacked — когда все данные, что были агрегированны в один тик (в один бар) выделяются разным цветом. И довольно наглядно можно увидеть места, когда маркетом взяли крупную лимитку, которая содержала в себе много продавцов (именно продавцов с разных счетов). Чтобы понять немного теории: если 5 человек выставляют каждый по одному контракту лимит ордер на продажу на одной цене, а потом приходит покупатель и разом скупает все что они выставили — в ленте пробегает 5 зеленых тиков по 1 контракту с одинаковым временем выхода до миллисекунд. Между этими тиками данные об изменении бест бид и аск поступить не успевают (для справки). Яркий бар это пример, что там кто то скупил около 80 контрактов разом, а на противоположной стороне стояло довольно много мелких участников.
На этих барах построил простейшую стратегию. Ищем в агрегированной ленте такие вот бары(принты) с объемами более или равно 100 контрактов, и количеством тиков в них, к примеру, больше или равно 25. При появлении такого сигнала помогаем)) крупняку — покупаем (или продаем) по рынку вместе с ним. Держим до появления сигнала в другую сторону и переворачиваемся.
Параметры не оптимизировал, сразу вбил круглое число для объема и примерно поставил количество агрегированных тиков. Результаты стратегии можно представить в таком виде (чарт за пол года что есть данные):
Первый график — цена фьючерса, второй это сигнал на покупку или продажу (0 — ждем сигнала, 1 — мы в покупке, -1 — в продаже). Сигнал 0 — есть только в начале, тк уже написал стратегия перевертыш. Далее два чарта типа бар, первый — объем принта, второй количество агрегированных тиков. Нижний чарт — изменения эквити. Комиссия в этом не учтена, она подсчитана в заголовке первого чарта, где также обозначены параметры стратегии. Комиссия за полный круг 1 контракта примерно 0,125 тика = около 6 usd. + там же уже учтено проскальзывание в среднем 0,5 тика (другими словами каждый второй трейд проскальзывает на пункт). Сумма всех этих расходов около 250 долларов, при итоговом результате +10000 usd за 27 трейдов.
И еще напоследок так вот выглядит сама функция построения торговой системы (буквально несколько строчек)) ), можно почитать комменты в ней чтоб понять что за что отвечает. Стопы и тейки пока не прикрутил, сделаю для след идеи их.
Такой вот пример. Спасибо за внимание++))
ftp.moex.ru/pub/info/stats/history/F/
по годам… фьючи в файлах ft
2 когда купают стакан — расширяется спред… т.е тебе тупо не нальют по нужной цене…
Там есть пример ордер лога.
Сам всегда хотел освоить всю силу и мощь MatLab. Но потом отказался из-за необходимости городить костыли. Ушел в чистый C#, но даже сейчас завидую возможностям MatLab, так как некоторые вещи с 0 писать очень тяжело.
Кстати сам недавно пришел к стрелочкам) Очень удобная вещь для синхронизации логов с графиками:
www.softalgotrade.com/allImages/%D1%81%D1%82%D1%80%D0%B5%D0%BB%D0%BA%D0%B0.png
А как вообще скорость работы с dll сгенерированными в Matlab? HFT вытягивает? А через что проторговываете?
При написании HFT, что будет использовать библиотеки матлаб их генерить не нужно, они же созданы уже, просто к проекту добавятся они.
Про стрелочки не понял, если вы про 1 скрин — то там просто подрисовал их в снагите, чтоб быстро показать места.
Очень интересно как Вы интегрируете код написанный в MatLab с реальной системой проторговки стратегии. Или MatLab уже умеет стабильно коннектиться к Бирже?
Я думал, что код из Matlab экспортируется в dll на C++, а потом эти библиотеки уже прикрепляются к коду торгового робота и торгуются.
П.С. Мне показалось, что стрелочки MatLab сгенерировал) Я стрелочки использую для синхронизации логов. Например, выбрал лог и на графике сразу стрелочка указыаает, где и когда эта сделка была совершена. Так проще ориентироваться.