В данной статье я описываю платформу для анализа финансовых рынков, которую разрабатываю. Я назвал ее MarketLab. Почему я решил ее создать, в чем ее особенности и конечная цель. Возможно, кому-то будет интересно присоединиться к проекту.
О понимании рыночных механизмов
Что движет конкретным лицом, когда он нажимает кнопку продать или купить? Как правило, это является коммерческой тайной. Ведущие курсов по трейдингу и финансовые аналитики говорят, что знают, кто, где и зачем торгует.
Но, рынок это не двигатель автомобиля, который можно разобрать и посмотреть, как крутятся шестеренки. О значимости тех или иных событий для рынка мы можем судить только как внешние наблюдатели, т.е. только статистически. Если перефразировать, то получается, что никто точно не знает почему цена движется, есть только много догадок, с тем или иным статистическим подтверждением.
На форекс форумах большинство людей анализируют только цену. Причем в аналитике принимает участие только цена прогнозируемого инструмента. На самом деле можно использовать практически любую информацию, такую как цены финансовых инструментов, экономические показатели, объемы денег прошедшие через рынок, финансовая отчетность, высказывания важных лиц и т.п. Что угодно, вплоть до сообщений в твиттере. Но, я считаю наиболее важными, в краткосрочной перспективе, данные о торгах с биржи (датафид).
Тот, кто ищет знания в рыночных данных, похож на человека в поисках черной кошки в темной комнате. Но, чем меньше данных мы используем, тем меньшую площадь комнаты мы исследуем в поисках кошки.
Главным критерием возможности использования типа данных является возможность их машинного анализа. Современные алгоритмы позволяют извлекать знания практически из любых типов данных. Не используя какие-либо данные мы рискуем не получить важные знания.
Датафид. Зачем он нужен?
В общем виде датафид состоит из информации о сделках, и информации о лимитных ордерах. Также в датафиде указан таймстемп. Т.е. имея запись датафида, можно точно рекнструировать торги на бирже. Кроме того, из него можно выделять большое количество событий влияющих на поведение цены. Биржа транслирует датафид по всем торгуемым инструментам. Если смотреть на график цены, то он двумерный: цена и время. Если использовать еще и объем, то график будет трехмерным. Чем больше данных мы используем, тем больше измерений мы получим. Т.е. много важной информации скрыто в измерениях, которые многие не используют, тем самым ограничивая свои возможности анализа.
Отличия от других платформ
Есть платформы поддерживающие работу с объемом, т.е. третье измерение графика. Например: Atas, Volfix, MarketDelta. В реальности количество измерений и типы используемых данных ограничены только фантазией пользователя. При использовании готовой платформы мы упираемся в ее ограничения.
Существует вероятность, что идея, не проверенная из-за отсутствия нужного функционала платформы, окажется рабочей и позволит заработать. Оплачивать доработку чужой платформы для каждой идеи не выгодно. Такой подход, скорее, выгоден владельцам платформы. Они получают, деньги, идею, и новый функционал.
Поддержка плагинов не всегда спасает, т.к. возможности плагинов сильно ограничены.
На этом фоне очень хорошо выглядит StockSharp. Примерно это я и хочу реализовать в своем проекте. Почему я не стал использовать готовый продукт — StockSharp?
Исходники этой платформы закрыты, но продаются. У них есть API, для возможности интеграции с чем угодно, это плюс. Но, если возникнет необходимость изменить закрытый код? Мне не хочется иметь зависимость от разработчиков, которые мне ничего не должны. Кроме того, это коммерческий продукт. Я не вижу смысла вкладывать деньги в их продукт, когда я могу вложить деньги в свою систему и получить тоже удовлетворяющий меня результат.
История разработки и структура MarketLab
Придя к вышеописанным выводам, я решил написать свою платформу-фрэймворк для анализа рыночной информации.
Платформа имеет следующие компоненты:
- Коннекторы для получения датафидов;
- Базу для хранения “сырого” датафида и производной информации;
- Серверная часть для постоянной записи и передачи клиентам информации и онлайн генерации производной информации;
- Клиент для анализа и визуализации данных.
Как основной язык я выбрал C#, а как средство для построения визуализаций WPF.
Базу данных для хранения я выбирал мучительно. Сначала пробовал Oracle, но он был недостаточно быстр. Ведь датафид — это огромное количество маленьких записей. Потом пробовал EF и MSSQL. Здесь показатели скорости тоже не подошли. Я пришел к выводу, что нужна NoSQL база. Некоторое время использовал Cassandra. Но на тот момент она имела детские болячки: то репликацию сломают, то после большого delete вся база перестала отвечать. Пришлось отказаться из-за ее нестабильности. На данный момент использую MongoDB. Доволен всем. Быстро, просто и пока не встречал багов. Для API между клиентом и сервером использую стороннюю библиотеку NetworkComms.Net.
Написал коннекторы к NinjaTrader 8 в виде аддона, к Rithmic и Plaza2.
От Rithmic в результате отказался, из-за очень неудобного API и проблем с передачей датафида по большому количеству инструментов. Plaza2 работает нормально, но пока еще полируется. Уж больно много в ней нюансов, особенно в плане обработки ошибок.
WPF для создания визуализаций
WPF всем хорош. Кроме скорости. Он не предназначен для отображения десятков тысяч объектов. Поэтому, пришлось во многих местах наследоваться от самых примитивных классов и делать свою логику позиционирования и отрисовки. Лаги стали в допустимых пределах.
В клиенте используется библиотека GraphX, она позволяет строить графы. Из графов я делаю аналитические схемы. Например: BarSet получает с сервера датафид по инструменту, передает его следующему узлу, следующий узел BarGenerator строит бары и передает их на Chart, который их отображает. Можно вносить изменения в код клиента (например, изменить алгоритм построения баров), в то время как серверная часть работает и продолжает писать данные. Конечно, можно прикрутить VSPackage, чтоб можно было редактировать код компонентов не перезагружая клиент, но пока не дошли руки.
Вот скриншоты некоторых визуализаций:
Цель создания платформы
Я создаю платформу, которая не имеет ограничений в доработке и масштабировании. Платформу которую можно развивать параллельно со своим пониманием рынков и аналитики.
На данный момент я не хочу ее продавать, или продавать обучение по работе с ней. И вообще проект не коммерческий. Но и полностью открытый доступ выкладывать тоже не хочу.
В идеале, я хочу найти людей которым тоже интересно иметь свою платформу и вместе с которыми я буду ее использовать и совершенствовать.
П.С. Уважаемые читатели, все вышеописанное является исключительно моим мнением, возможно, неверным. Я за конструктивный диалог.
Автор: Наташа