Петр
Петр личный блог
02 июля 2017, 17:55

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

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

В данной статье я описываю платформу для анализа финансовых рынков, которую разрабатываю. Я назвал ее 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

 

 

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

 

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

 

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

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

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

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

 

 

П.С.

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

44 Комментария
  • Александр
    02 июля 2017, 18:27
    Чем отличается от StockSharp-а?
      • Александр
        02 июля 2017, 18:53
        Петр, Часть исходников лежит на гитхабе, для остального есть рефлектор. А собственно даже не об исходниках, а об архитектурных отличиях? У вас вот тоже исходников вообще нет.
          • Александр
            02 июля 2017, 19:00
            Петр, Тогда C# явно странное решение. Не проще с++ или java, они как бы более органичны в юникс системах.
          • Александр
            02 июля 2017, 19:02
            Петр, Я пописываю подобную систему. Но я сделал на плагинах с interface, поэтому можно использовать любой язык программирования, который поддерживает стандартные interface при этом нет необходимости создавать com сервера.
          • Александр
            03 июля 2017, 18:02
            Петр, тогда в чем смысл этого? Найти бесплатную раб. силу?
              • Александр
                03 июля 2017, 20:25
                Петр, Ну, если только потрепаться. Просто существует авторское право. Вопрос довольно сложный. Вы с каждым будете заключать договор? А если вам захочется закрыть исходники после 10 лет работы. К тому же без вас исходники бесполезны. Это маленький тонкий момент. Гит хаб хорош тем, что там можно автоматически принять лицензию.
                  • Александр
                    03 июля 2017, 20:31
                    Петр, Просто интересно, как вопрос то с авторским правом решать будете? С каждым договор?
                    P.S. Когда не интересно трепаться — не отвечают.
  • Константин
    02 июля 2017, 18:31
    я бы подключился, но C# не знаю, пишу под MQL5 и С++, т.к. они схожи между собой
    по какой схеме организовали коннектор? 
    • БорисыЧ
      03 июля 2017, 15:17
      Константин, все равно стоит подключиться!
      • Константин
        03 июля 2017, 17:21
        Игорь Алексеевский, так и сделал, даже винду с дуру сегодня обновил до 10 )) буду читать про C#, может и смогу помочь чем в проекте в будущем ))
  • Константин
    02 июля 2017, 18:36
    через минут 30, ок?
  • Кремлебот
    02 июля 2017, 19:18
    «Т.е. имея запись датафида, можно точно рекнструировать торги на бирже.»

    Айсберг-заявки и внебиржевые сделки сведут пользу от этой реконструкции к нулю.
  • В.И.Чапаев
    02 июля 2017, 21:32
    Вы не написали, зачем нужна система. Предугадывать движение цены?
      • БорисыЧ
        03 июля 2017, 12:01
        Петр, синхронизация Level I и Level II заложена в записи потока?
  • SergeyJu
    03 июля 2017, 12:37
    Мне понравилось все написанное, из того, что я понял. Заглянем на минутку в будущее. Вот Вы закончили, все красиво отображается, базы данных заполняются, коннекторы быстро и надежно коннектят. 
    И что дальше?
    • БорисыЧ
      03 июля 2017, 15:22
      SergeyJu, а может получиться хотя бы что то подобное:



        • БорисыЧ
          03 июля 2017, 16:24
          Петр, мы протестировали обобщающий, синтетический индикатор — я доволен! Но платформа была в разработке, глючила и мне пришлось бросить! Она не моя и зря создатель пошел по такому тернистому пути! ... 
          Вот скрины с платформы и работа синтетики:



      • SergeyJu
        03 июля 2017, 16:37
        Игорь Алексеевский, а что это такое?
        • БорисыЧ
          03 июля 2017, 16:46
          SergeyJu, хрен его знает! Что то напрограммировал, а зачем и почему — не ведаю! Потому как недалекий я человек и глупый!

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн