Блог им. Zefir01

Разработка платформы для анализа финансовых рынков

Разработка платформы для анализа финансовых рынков

В данной статье я описываю платформу для анализа финансовых рынков, которую разрабатываю. Я назвал ее MarketLab.

Почему я решил ее создать, в чем ее особенности и конечная цель.

Возможно, кому-то будет интересно присоединиться к проекту.

 

 

Понимание рыночных механизмов

 

Что движет конкретным лицом, когда он нажимает кнопку продать или купить?

Как правило, это является коммерческой тайной. Ведущие курсов по трейдингу и финансовые аналитики говорят, что знают, кто, где и зачем торгует.

Но, рынок это не двигатель автомобиля, который можно разобрать и посмотреть, как крутятся шестеренки. О значимости тех или иных событий для рынка мы можем судить только как внешние наблюдатели, т.е. только статистически. Если перефразировать, то получается, что никто точно не знает почему цена движется, есть только много догадок, с тем или иным статистическим подтверждением.

 

 

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

Тот, кто ищет знания в рыночных данных, похож на человека в поисках черной кошки в темной комнате. Но, чем меньше данных мы используем, тем меньшую площадь комнаты мы исследуем в поисках кошки.

Главным критерием возможности использования типа данных является возможность их машинного анализа. Современные алгоритмы позволяют извлекать знания практически из любых типов данных. Не используя какие-либо данные мы рискуем не получить важные знания.

 

Датафид. Зачем он нужен?

 

В общем виде датафид состоит из информации о сделках, и информации о лимитных ордерах. Также в датафиде указан таймстемп. Т.е. имея запись датафида, можно точно рекнструировать торги на бирже. Кроме того, из него можно выделять большое количество событий влияющих на поведение цены. Биржа транслирует датафид по всем торгуемым инструментам. Если смотреть на график цены, то он двумерный: цена и время. Если использовать еще и объем, то график будет трехмерным. Чем больше данных мы используем, тем больше измерений мы получим. Т.е. много важной информации скрыто в измерениях, которые многие не используют, тем самым ограничивая свои возможности анализа.

 

 

Отличия от других платформ

 

Есть платформы поддерживающие работу с объемом, т.е. третье измерение графика. Например: Atas, Volfix, MarketDelta. В реальности количество измерений и типы используемых данных ограничены только фантазией пользователя. При использовании готовой платформы мы упираемся в ее ограничения.

 

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

Поддержка плагинов не всегда спасает, т.к. возможности плагинов сильно ограничены.

 

На этом фоне очень хорошо выглядит StockSharp.  Примерно это я и хочу реализовать в своем проекте. Почему я не стал использовать готовый продукт — StockSharp ?

Исходники этой платформы закрыты, но продаются. У них есть API, для возможности интеграции с чем угодно, это плюс. Но, если возникнет необходимость изменить закрытый код? Мне не хочется иметь зависимость  от разработчиков, которые мне ничего не должны. Кроме того, это коммерческий продукт. Я не вижу смысла вкладывать деньги в их продукт, когда я могу вложить деньги в свою систему и получить тоже удовлетворяющий меня результат.

 

 

 

 

История разработки и структура MarketLab

 

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

Платформа имеет следующие компоненты:

  1. Коннекторы для получения датафидов;

  2. Базу для хранения “сырого” датафида и производной информации;

  3. Серверная часть для постоянной записи и передачи клиентам информации и онлайн генерации производной информации;

  4. Клиент для анализа и визуализации данных.

 

Как основной язык я выбрал 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, чтоб можно было редактировать код компонентов не перезагружая клиент, но пока не дошли руки.

 

Вот скриншоты некоторых визуализаций:

 

Разработка платформы для анализа финансовых рынков

2.jpg

 

 

Цель создания платформы

 

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

 

На данный момент я не хочу ее продавать, или продавать обучение по работе с ней.

И вообще проект не коммерческий.

Но и полностью открытый доступ выкладывать тоже не хочу.

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

 

 

П.С.

Уважаемые читатели, все вышеописанное является исключительно моим мнением, возможно, неверным. Я за конструктивный диалог.

★4
44 комментария
Чем отличается от StockSharp-а?
avatar
Александр, тем что исходники стокшарпа по большей части закрыты. я не представляю, как можно делать что то серьезное не имея исходников.
avatar
Петр, Часть исходников лежит на гитхабе, для остального есть рефлектор. А собственно даже не об исходниках, а об архитектурных отличиях? У вас вот тоже исходников вообще нет.
avatar
Александр, да, я видел. но мне не понравилось их решение. они делают сохо решение. я юникс админ, мне привычнее и удобнее работать с более серьезными решениями. короче много факторов есть лично для меня…
avatar
Петр, Тогда C# явно странное решение. Не проще с++ или java, они как бы более органичны в юникс системах.
avatar
Александр, не проще. C# дает скорость разработки, я один разработчик, поэтому количество человекочасов потреченых на разработку критично. Кроме того, визуализация это очень важная часть анализа, а шарп обладает, на мой взгляд, более совершенной системой визуализации — WPF. Насчет юникс систем: никто не мешает часть системы реализовать на плюсах и линуксе, но я это использую только там где без этого не обойтись.
avatar
Петр, Я пописываю подобную систему. Но я сделал на плагинах с interface, поэтому можно использовать любой язык программирования, который поддерживает стандартные interface при этом нет необходимости создавать com сервера.
avatar
Александр, неплохое решение. но ком я тоже не использую, использую сборки и tcp между процессами.
avatar
Александр, а насчет исходников, я не вижу смысла раздавать свой код, который, к тому же, будет бесполезен без меня. Да и зачем он кому то, кто не хочет работать со мной…
avatar
Петр, тогда в чем смысл этого? Найти бесплатную раб. силу?
avatar
Александр, смысл в том чтоб потрепаться. шутка.
если ты участвуешь в разработке то и пользуешься платформой и данными. а если ты хочешь просто исходники, то идешь и пишешь сам.
avatar
Петр, Ну, если только потрепаться. Просто существует авторское право. Вопрос довольно сложный. Вы с каждым будете заключать договор? А если вам захочется закрыть исходники после 10 лет работы. К тому же без вас исходники бесполезны. Это маленький тонкий момент. Гит хаб хорош тем, что там можно автоматически принять лицензию.
avatar
Александр, мне не интересно потрепаться.
avatar
Петр, Просто интересно, как вопрос то с авторским правом решать будете? С каждым договор?
P.S. Когда не интересно трепаться — не отвечают.
avatar
Александр, я не буду его решать. меня интересует рабочий инструмент. в остальном вертитесь как хотите.
avatar
я бы подключился, но C# не знаю, пишу под MQL5 и С++, т.к. они схожи между собой
по какой схеме организовали коннектор? 
Константин, тут главное желание. предлагаю обсудить голосом, скайп odmin01
avatar
Константин, все равно стоит подключиться!
avatar
Игорь Алексеевский, так и сделал, даже винду с дуру сегодня обновил до 10 )) буду читать про C#, может и смогу помочь чем в проекте в будущем ))
через минут 30, ок?
Константин, ага, пиши как сможешь…
avatar
Александр, да, это интересный вопрос. смотря какой. если синхронизированный типа нинзи или ритмика, то можно визуализировать как в алговизоре. на плазе без полного лога, такое не прокатит. самый простой способ агрегировать в специальные бары.
avatar
Александр, ну так узнать не сложно, посмотри видео на ютубе.
не идеальна, т.к. должна удовлетворять кучу народу, а я делаю то что нужно мне. В столовой всегда менее вкусно, чем приготовленное себе самим. Коммерческим не будет по тем же причинам, платформа отражает мое понимание. На счет пусто, ты прав. Но, подумай, как торгуют очень крупные организации, не через нинзю же…
avatar
«Т.е. имея запись датафида, можно точно рекнструировать торги на бирже.»

Айсберг-заявки и внебиржевые сделки сведут пользу от этой реконструкции к нулю.
avatar
Вы не написали, зачем нужна система. Предугадывать движение цены?
avatar
В.И.Чапаев, разрабатывать стратегии.
avatar
Петр, синхронизация Level I и Level II заложена в записи потока?
avatar
Игорь Алексеевский, я так понимаю, имеется ввиду плаза.
Если коротко: нет, но можно синхронизировать в серверном процессе.
Я не покупаю полный лог. С срезах стакана не транслируется время формирования. Поэтому точно синхронизироваться невозможно. Но можно синхронизировать неточно.
avatar
Kolyan, а что такое ГСЧ?
avatar
Kolyan, сам ты «генератор»
avatar
Мне понравилось все написанное, из того, что я понял. Заглянем на минутку в будущее. Вот Вы закончили, все красиво отображается, базы данных заполняются, коннекторы быстро и надежно коннектят. 
И что дальше?
avatar
SergeyJu, а дальше есть много идей ) основные сильно отличаются от того, что можно найти в паблике… не было бы идей, смысл писать такой огромный проект…
avatar
SergeyJu, а может получиться хотя бы что то подобное:



avatar
Игорь Алексеевский, не просто может, а запланировано ) похоже здравый смысл на всех один ) И даже есть идеи по расширению этого…
avatar
Петр, мы протестировали обобщающий, синтетический индикатор — я доволен! Но платформа была в разработке, глючила и мне пришлось бросить! Она не моя и зря создатель пошел по такому тернистому пути! ... 
Вот скрины с платформы и работа синтетики:



avatar
Игорь Алексеевский, давайте отложим обсуждение деталей до вечера. У меня немного другое понимание технических деталей, я все расскажу и все обсудим голосом.
avatar
Игорь Алексеевский, а что это такое?
avatar
SergeyJu, хрен его знает! Что то напрограммировал, а зачем и почему — не ведаю! Потому как недалекий я человек и глупый!
avatar

теги блога Петр

....все тэги



UPDONW
Новый дизайн