LINUX.ORG.RU

FLOX 0.1.0

 , flox, hft, lowlatency,


1

1

Опубликован первый релиз FLOX.

FLOX это C++-фреймворк (стандарт C++23), предоставляющий компоненты и абстракции для построения событийных торговых систем с высокой пропускной способностью.

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

Архитектура модульная: компоненты связываются через шины данных, реализованные на базе lock-free очередей. Использование динамической памяти сведено к минимуму.

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

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

Архитектура спроектирована с прицелом на расширяемость: любые модули можно дополнять без изменения ядра.

В планах встроить JS‑движок для быстрого прототипирования и проверки гипотез.

Проект распространяется по лицензии MIT, код полностью открыт.

>>> Подробности на GitHub



Проверено: dataman ()
Последнее исправление: dataman (всего исправлений: 3)

Любопытно, а какие у этого есть проприетарные и свободные аналоги? Чем вообще обычно в HFT пользуются?

zabbal ★★★★★
()
Ответ на: комментарий от zabbal

Я бы тоже хотел узнать насчет аналогов. То что я видел либо не подходит для hft (много аллокаций, синхронная архитектура), либо нерасширяемый монолит на котором ничего не построить. Фирмы, специализированные на алготрейдинге, обычно держат собственные фреймворки

eeiaao
() автор топика
Ответ на: комментарий от eeiaao

Фирмы, специализированные на алготрейдинге, обычно держат собственные фреймворки

И там обычное дело приветы из 90х в духе «ты не захочешь это со-портить», разное UB ехало через UB в пирамиде велосипедов подпертых костылями. Типа трех разных реализаций autoptr (буквально autoptr2, autoptr3) разбросанных по кодовой базе, велосипедные же буфера и строки, у которых из пруфов надежности только наглые заявы велосипедистов наскока оно «быстрее stl»(с велосипедными микробенчмарками, меряющими вместо скорости кода разогрев кэша процессора и прочую погоду на Марсе) — ну и да. Примерно все любое быстрее stl засчет примерно всех срезанных углов типа сравнения строк формата только по длине. Другое дело что там где оно рили используется (запись в лог) «скорость» нафиг не упала, т.к. при буферизации не важно с какой скоростью запишется на диск то что уже произошло (не быстрее диска). Но эти мудрецы еще и буферизацию любят отключать, т.к. велосипедят персистентные хранилища через маппинг файлов... но при этом не лезут в дрова файловой системы, пытаясь диктовать ей железную волю на уровне максимум винапи и сисколов. Потом удивляются как внезапно все встает колом на I/O. А «строки» там — это пестня, которая ломается при любом использовании вне частного случая задуманного автором. Чаще всего выигрыш от этих слоптимизаций на уровне погрешности.

slackwarrior ★★★★★
()
Ответ на: комментарий от dataman

В планах встроить JS‑движок

Самописный? :)

Смех смехом, а у меня есть проект по компиляции js в натив через llvm, но пока не в приоритете

А если серьёзно - QuickJS рассматриваю как подходящий вариант, возможно будут альтернативы.

eeiaao
() автор топика
Последнее исправление: eeiaao (всего исправлений: 1)
Ответ на: комментарий от slackwarrior

И там обычное дело приветы из 90х в духе «ты не захочешь это со-портить»

Именно такое и слышал. Собственно основная цель flox это систематизация разработки, а не какие-то частные имплементации. Меня завалили вопросами из разряда «какие биржи поддерживаются». А это просто набор интерфейсов и малая часть строительных блоков…

eeiaao
() автор топика
Ответ на: комментарий от eeiaao

Меня завалили вопросами из разряда «какие биржи поддерживаются». А это просто набор интерфейсов и малая часть строительных блоков…

Тут основной треш и угар — особенные тараканы каждой биржи :) «да, у нас это сообщение тоже используется... но нимношк по-другому». Именно так при едином вроде бы FIX протоколе появляются в кодовой базе отдельные каталоги под каждого клиента.

slackwarrior ★★★★★
()
Ответ на: комментарий от dataman

Ну к этому все приходят:) в мосте для раздачи маркетдаты видел на одном конце SpiderMonkey, а в другое лично вкручивал v8 :) т.к. «конфигурирование» на C++ рано или поздно вызывает вопросы.

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 1)
Ответ на: комментарий от dataman

Lua

На мой взгляд, луа недостаточно популярен и будет осложнять развитие. На js просто больше людей пишет. Но кстати никто не мешает сделать и для луа биндинги. Спасибо за идею

eeiaao
() автор топика

построения событийных торговых систем с высокой пропускной способностью.

Когда читаю что-то подобное, всегда охота спросить - это такой белый прикол, в который черные не въезжают? (c)

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

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

В общем я это не понимаю и поэтому это не нужно, скажу без ложного стыда)

piyavking ★★★★★
()
Последнее исправление: piyavking (всего исправлений: 1)
Ответ на: комментарий от piyavking

Когда читаю что-то подобное

Независимо от того, для чего написан проект, плюсовикам будет интересно.
Особенно тем, кто всё ещё на C++11. :)

dataman ★★★★★
()
Ответ на: комментарий от dataman

плюсовикам будет интересно

class MyPullStrategy : public IMarketDataSubscriber {
public:
  SubscriberMode mode() const override { return SubscriberMode::PULL; }

  void readLoop(SPSCQueue<EventHandle<BookUpdateEvent>> &queue) {
    EventHandle<BookUpdateEvent> ev;
    while (queue.pop(ev)) {
      EventDispatcher<EventHandle<BookUpdateEvent>>::dispatch(ev, *this);
    }
  }
};

нет, не будет. Чем может быть интересно это си с классами? Сильно подозреваю, что реальное HFT так не пишут.

Lrrr ★★★★★
()
Ответ на: комментарий от Lrrr

Сильно подозреваю, что реальное HFT так не пишут.

Так и есть, да. Но если забыть про «HF» сам по себе «T» может быть кому-то интересен. В этом смысле проект может быть интересен на пересечении чужого опыта по двум пунктам - модульность в плюсах и реализации торгового сервера.

P.S.

это си с классами?

А где тут "си с классами", когда в коде шаблон на шаблоне и шаблоном погоняет?

LamerOk ★★★★★
()
Последнее исправление: LamerOk (всего исправлений: 2)
Ответ на: комментарий от Lrrr

Сильно подозреваю, что реальное HFT так не пишут.

Похоже мне стоит в доку дисклеймер добавить, чтобы никто не думал что объяснение концептов и прод код это одно и то же

eeiaao
() автор топика
Ответ на: комментарий от eeiaao

Похоже мне стоит в доку дисклеймер добавить,

Если по чесноку, то лучше поубирать любые упоминания low-latency и HF, потому что и о том, и о другом можно говорить только после замеров с цифрами на сетевом интерфейсе.

Бенчмарки, что есть сейчас, измеряют погоду на марсе - в них учитывается генерация случайных данных на тесты (чуть ли не самым тормозным из всех доступных генераторов - std::mt19937) и отсутствует какой-либо ввод / вывод.

LamerOk ★★★★★
()
Ответ на: комментарий от dataman

Слишком старый. Мы уже 5 лет используем C++26. Я HR, кстати!

zx_gamer ★★★
()
Ответ на: комментарий от LamerOk

Если по чесноку, то лучше поубирать любые упоминания low-latency и HF, потому что и о том, и о другом можно говорить только после замеров

Мне не до конца понятно как о LL и HFT в принципе можно говорить если вы не collocated. Но всё гораздо печальнее - для начала не мешало бы вот это вот просто заставить работать. А с этим там всё очень и очень плохо, прямо вот на самом базовом уровне, начиная с попыток агрегации books оставаясь в домене double, ага…

bugfixer ★★★★★
()
Ответ на: комментарий от bugfixer

Но всё гораздо печальнее

Да, но все когда-то с чего-то начинали. Линукс тоже поначалу был не ядром операционной системы, а кривым эмулятором терминала. Тут ведь главное что? Главное - продолжать меняться к лучшему. )))

Дорастёт проект хотя бы до приёма публично доступных котировок, можно будет и 0.0.1 версию ставить.

LamerOk ★★★★★
()
Ответ на: комментарий от bugfixer

как о LL и HFT в принципе можно говорить

Говорить можно, фреймворк предоставляет инфраструктуру для построения ядра системы. Заставить работать - задача того, кто им пользуется. Я не планирую выкладывать коннекторы в публичный доступ, в этом нет смысла. Их реализация во многом определяет ll и ft составляющие. Это другой уровень

оставаясь в домене double

Для арифметики используются специализации Decimal, это есть в демо, возможно в документации не обновил где-то

eeiaao
() автор топика
Последнее исправление: eeiaao (всего исправлений: 1)
Ответ на: комментарий от LamerOk

Если по чесноку, то лучше поубирать любые упоминания low-latency и HF, потому что и о том, и о другом можно говорить только после замеров с цифрами на сетевом интерфейсе.

Можно не убирать. И то и другое обычный в среднем по больнице рекламный шум (и замеры на интерфейсе тоже), потому что решается всё в итоге инфинибандами с пропуском TCP стека, либо пропеканием в ASIC и хостингом на колокейшене у маркетмейкера, а программные оптимизации без аппаратной поддержки (векторных расширений тех же) дают обычно вклад на уровне погрешности.

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 1)
Ответ на: комментарий от slackwarrior

Очень очень согласен с автором.

Но при этом - дофига бабла и постоянно нет времени.

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

blex ★★★★
()
Ответ на: комментарий от Lrrr

нет, не будет. Чем может быть интересно это си с классами? Сильно подозреваю, что реальное HFT так не пишут.

Там крайностей примерно две. Либо а) «долой все новое непонятное», ручными слоптимизациями, которые либо никто не мерял (давали выхлоп на древнем железе и процах... по рассказам автора), либо самописными микробенчмарками, которые показывают «странное» на любом другом проце, макро*бством в терминальной стадии и прочим старообрядством с заходо-восходами вручную, либо б) метапрограммный упоринум со специализацией шаблониума из-за которого простынка templates.cpp собиралась два дня :)

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 1)
Ответ на: комментарий от blex

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

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

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 3)
Ответ на: комментарий от slackwarrior

И то и другое обычный в среднем по больнице рекламный шум

Это-то понятно. Но в том виде проекта, что сейчас, - это скорее антиреклама.

решается всё в итоге

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

программные оптимизации без аппаратной поддержки

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

LamerOk ★★★★★
()
Ответ на: комментарий от LamerOk

Не-не-не, дэвид. Мы сейчас обсуждаем софтверную часть, на которую разраб может повлиять правкой кода.

И кончится все аппаратными боттлнеками, из-за которых софтрверная часть решает плюс-минус ничего.

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

Мне зочем? Я с 2010го насмотрелся уже этого их HFT изнутри, видел полтора десятка проектов, плюс-минус все по одним и тем же граблям по кругу. Надоело. Сначала в облаках отдохнул (там прикольно — уложился в транзакцию 10 секунд и 1Мб памяти — збс, кодинг в браузере весь, на толстом канале можно с любого калькулятора), потом полгода на свои вообще отдохнул, теперь в пожарку ушел объяснять что софт не тормозит — это их RS485 между узлами и кастомная частотно-импульсная модуляция тормозит :) И там тоже легко микросхема приемопередатчика оказывается боттлнеком, после замены которой на быстроходную я просто вырезаю из кода миллион «жутко оптимизированных»(ТМ) авторами костылей, которые решали не ту проблему :) Оптимизировать надо не софт или не один только софт — а аппаратно-программный комплекс как систему.

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 3)
Ответ на: комментарий от slackwarrior

И кончится все аппаратными боттлнеками

Если проект до этого доживёт - можно будет щитать успехом.

Мне зочем?

Чтоб не генерировать белый шум по ключевым словам как нейронка.

LamerOk ★★★★★
()
Ответ на: комментарий от LamerOk

Чтоб не генерировать белый шум по ключевым словам как нейронка

Твоя нейронка генерит какой-то особенный шум, который по-твоему стоит внимания?

slackwarrior ★★★★★
()
Ответ на: комментарий от eeiaao

Для арифметики используются специализации Decimal

Меня тригернуло вот это. Походу этот патч дропнули (даже не знаю как он мне на глаза попался), так что должен признать всё не так печально как мне изначально показалось :)

bugfixer ★★★★★
()
Ответ на: комментарий от slackwarrior

Как минимум я стараюсь, чтобы шум от моей нейронки имел непосредственное отношение к теме беседы. Насколько получается - это, конечно, отдельный вопрос.

LamerOk ★★★★★
()

Тут во всех цпп видосиках от ихних гуру говорят, что виртуальные функции не для хай перформанс. А тут какой файл не открою, virtual на virtual’е. Шо такое…

water_closed
()
Ответ на: комментарий от LamerOk

я стараюсь

Сам себя не похвалишь — как оплеванный ;)

Насколько получается - это, конечно, отдельный вопрос.

«Куку, Гриня» (с)

slackwarrior ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.