Архипов Владимир
Архипов Владимир личный блог
Вчера в 17:33

PhiFlow: Инкрементальные вычисления для финансовых приложений — пересчёт рисков за миллисекунды вместо минут

PhiFlow: Инкрементальные вычисления для финансовых приложений — пересчёт рисков за миллисекунды вместо минут

Привет, коллеги!

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

Проблема, знакомая каждому, кто строил риск-модели

Представьте: у вас портфель из тысяч инструментов. Вы считаете Value-at-Risk (VaR), ожидаемые потери (Expected Shortfall), греки для опционов, скоринговые модели. Данные обновляются постоянно — новые цены, ставки, волатильности.

Как это обычно работает?

  • Либо вы пересчитываете всё с нуля каждый раз (дорого, медленно, особенно если инструментов много)

  • Либо вы строите сложные триггеры и кэши, которые потом отлаживаете месяцами

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

Как мы пытались решить эту проблему

Мы начали с простого вопроса: «А что, если пересчитывать только то, что реально изменилось?»

Звучит очевидно, но реализация оказалась нетривиальной. Когда у вас многослойная модель (например: цены → греки по инструментам → агрегация по секторам → портфельные метрики → общебанковские лимиты), одно изменение в цене может затронуть десятки тысяч зависимых значений.

Мы перепробовали разные подходы:

  • Самописные кэши с инвалидацией — получили спагетти-код

  • Потоковые движки вроде Apache Flink — мощно, но тяжеловесно и не оптимизировано под иерархии

  • Реляционные БД с материализованными представлениями — медленно для real-time

Что получилось в итоге

В результате родился PhiFlow — библиотека для .NET, которая делает ровно одну вещь, но делает её хорошо: инкрементально пересчитывает иерархические модели и даёт мгновенные ответы на аналитические запросы.

Как это работает (без сложной математики)

Представьте, что ваша риск-модель — это многослойная сеть. Когда меняется цена одного инструмента, PhiFlow определяет минимальную область влияния этого изменения (конус влияния) и пересчитывает только те узлы, которые действительно зависят от этого инструмента.

Остальная часть модели остаётся нетронутой.

А теперь самое интересное — цифры

Мы прогнали библиотеку через бенчмарки на реальных сценариях. Вот что получилось:

 
Сценарий Обычный подход (полный пересчёт) PhiFlow (инкрементальный) Ускорение
1 изменение, сложные вычисления (KWork=50) 10.7 секунды 0.195 секунды 55x
4 изменения, сложные вычисления 10.8 секунды 0.75 секунды 14x
1 изменение, лёгкие вычисления (KWork=10) 1.8 секунды 0.035 секунды 51x
Запросы Top-K (50 наибольших значений) 1.74 секунды 0.034 секунды 51x
Подсчёт количества элементов > порога 1.83 секунды 0.035 секунды 52x

Другими словами: то, что раньше занимало секунды или десятки секунд, теперь занимает миллисекунды.

Где это может пригодиться трейдерам и аналитикам

1. Управление рисками в реальном времени

Представьте, что вы мониторите VaR портфеля. Каждое изменение цены требует пересчёта. С PhiFlow это происходит мгновенно, а не раз в минуту.

Сценарий:

  • Слой 0: цены инструментов, ставки, волатильности

  • Слой 1: греки по каждому инструменту

  • Слой 2: агрегация по секторам (например, нефтегаз, финансы)

  • Слой 3: портфельные метрики (VaR, ES)

  • Слой 4: контроль лимитов и алерты

При изменении цены фьючерса на Brent обновляются только:

  • сам инструмент (слой 0)

  • его греки (слой 1)

  • сектор «нефтегаз» (слой 2)

  • портфельные метрики (слой 3)

  • проверка лимитов (слой 4)

Всё остальное (финансовый сектор, технологический и т.д.) не трогается.

2. Алгоритмическая торговля

Вы строите торговые сигналы на основе иерархии: тики → свечи → признаки → сигналы → решения.

Каждый новый тик запускает пересчёт. С PhiFlow это происходит достаточно быстро, чтобы использовать в HFT-системах с субмиллисекундными задержками.

3. Скоринговые модели и антифрод

Транзакция → пользователь → счёт → кластер → флаг риска.

При поступлении новой транзакции вы мгновенно получаете обновлённый риск-скор и можете принимать решение «пропустить/блокировать» в реальном времени.

4. Бэктестинг и симуляции

Запускаете Монте-Карло? Отлично. Каждая симуляция меняет входные параметры. Вместо полного пересчёта каждой симуляции с нуля, PhiFlow обновляет только то, что изменилось относительно предыдущей итерации.

Почему это лучше, чем писать самому?

Мы тоже начинали с попытки написать свой велосипед. Быстро поняли, что:

  • Корректность — легко ошибиться в логике инвалидации и получить неконсистентные данные

  • Производительность — наивная реализация может оказаться медленнее полного пересчёта

  • Индексация запросов — если вы ещё и хотите быстро отвечать на вопросы вроде «сколько элементов превысило порог», нужно строить индексы и поддерживать их в актуальном состоянии

PhiFlow даёт готовое, проверенное решение с гарантированной корректностью.

Технические детали для интересующихся
  • Дискретный домен: все значения в ограниченном диапазоне (0..N-1) — это позволяет использовать точные структуры данных, а не вероятностные

  • Fenwick tree (дерево Фенвика) для быстрых подсчётов количества элементов больше порога

  • Гистограммы для Top-K запросов (сумма K наибольших значений)

  • Интервальное представление затронутых узлов — оптимально для кэша процессора

  • Никаких аллокаций на горячем пути — подходит для 24/7 сервисов с высокими требованиями к стабильности задержек

Как это попробовать

Библиотека доступна на NuGet:

bash
dotnet add package PhiFlow

Есть бесплатная Community-версия для разработки и тестирования. Этого достаточно, чтобы поиграться и понять, подходит ли подход под ваши задачи.

Для продакшна — коммерческая лицензия от $500/мес (Startup) до enterprise-тарифов.


Буду рад обратной связи и идеям! Если хотите покопаться в коде или задать вопросы — пишите в телеграм @vipvodu.


PhiFlow — инкрементальные вычисления для финансовых приложений. Пересчёт рисков за миллисекунды вместо минут.

18 Комментариев
  • Op_Man💰
    Вчера в 19:14

    Добрый день! 

    Есть ли где‑то в открытом доступе (или может здесь добавите) отработанные примеры использования этой библиотеки с наглядной демонстрацией возможностей? Интересно посмотреть живые кейсы и выгоду применения, чтобы не «ковырять» всё с нуля и лучше понять, в каких задачах это может пригодиться.

      • Op_Man💰
        Вчера в 22:06
        Архипов Владимир, спасибо за подробный ответ. Посмотрю!
  • Просто трейдер
    Вчера в 19:32
    Чел, ты просто задайся вопросов. Вот если ты так легко и просто через ИИ делаешь порты с Питона, как думаешь, нужна ли другим в эпоху вайбкодинга библиотека по математике? Опционы-дериваты. Ты действительно думаешь что твоя библиотека да пусть даже за 1 доллар будет кому-то нужна когда не то что обучение, а готовый торгующий код вайбится за пол часа?

    Я тебя не упрекаю за попытку оседлать коммерцию через вайбкодинг. Но попробуй подумать на перед. Один ли ты знаешь про вайбкодинг. А если не один, насколько твоя библиотека в целом уместа в мире вайбкодинга.
      • Просто трейдер
        Вчера в 21:28
        Архипов Владимир, попробуйте взглянить на ситуации с другой стороны — а нужно ли делать аналог. Вайб кодинг решает вопросы здесь и сейчас. Без попытки монстроузных проектов. Захотел свой блэк шолз — получи. Захотел свой контанго — получи. Никакой даже самый динамично развивающийся проект не сможет даже близко сравнивать с адаптивным кодом. Тем более по скорости. Скорость это всегда заточенное под собственную архитектуру решение. А не что там какая-то одна из библиотек очень быстро матрицу транспонирует.
          • Просто трейдер
            Вчера в 21:39
            Архипов Владимир, если вы вдруг не поняли, то все текущие вопросы рисерча анализа тестирование и запуска стратегий я делаю на вайбе. И поверьте, прирост стал колоссальный за счет масштабируемости усилий.

            По началу были то что вы описали. Это по началу. Потому пришел опыт и понимание, как использовать. Или модели стали умнее. Я не знаю, мне хочется думать что я поумнел, а не модели.
          • Просто трейдер
            Вчера в 21:40
            Архипов Владимир, вы про компании? Еще больше вас разочарую. Компаниям проще свое разработать, чем иметь зависимость от программиста-энтузиаста.
              • Просто трейдер
                Вчера в 21:58
                Архипов Владимир, не от таких которые создаются одиночками. Может конечно какой-то из программистов подключит библиотеку, созданную Кулибиным. Но это будет 99% бесплатная опен сорс библиотека. Вы такое предоставляете? )) Вот и то то же.

                Ладно, я вам дал пищу для ума. Вы её отказываетесь принять. Мне искренне вас жаль, что вы потратили столько времени на то, что обесценивается развитием технологий. Я за развитие, но мне жаль пустата трата усилий. Впрочем, чтобы вам было не так грусно, посмотрите на тулзу ОсЭнджин. Создатель там потратил куда больше ваших усилий, и даже они обнулились ИИ.
                  • SergeyJu
                    Сегодня в 10:54
                    Архипов Владимир, собственно про новизну не понял. Что нового в том, чтобы пересчитывать только то, что изменилоcь? 
                    В самой примитивной форме это реализовано, например, в экселе. У Вас компот из разнородных объектов. Как тики в акциях связаны с кредитным скорингом. На уровне банковского казначейства? Ну так там и надо сводить.  Ощущение такое, что сначала свалили все в одну кучу, а потом разработали способ в ней барахтаться. 
                  • Просто трейдер
                    Сегодня в 12:51
                    Архипов Владимир, я вам объективную реальностью со стороны показываю. Вы сделали что-то. Покупают? Нет. Иначе бы за вас здесь девочка на зарплате писала, и даже не комментарии не отвечала.

                    Можете дальше удлинять бессмысленную позицию. Маржин кол наступит, когда придет понимание — годы слиты в унитаз, и сделано то, что агенты делают как семечки. И да, в вашей библиотеке судя по описанию в этом блоге я не нашел абсолютно никакого ноухау. Вся ценность (была) чтобы это не делать еще раз. Но теперь эту задачу решает агент. Верите вы в ИИ или нет — это не важно. Вам уровень продаж покажет насколько вы правы, или насколько вы ошибаетесь. Посморите на историю ОсЭнджин. Автор столько лет угробил на не понятно что. И что по итогу? Зарабатывает обучением программированию. Мог бы сразу пойти в учители, сохранив себе 10 лет жизни как он утверждает. Вам наглядный пример фейл-бизнеса. А вы упорно хотите пойти тем же путем. Идите, ваше право. Мне то что вас останавливать. Я даже больше не буду вам писать в блоге, чтобы не вредить вашим потенциальным покупателям (если таковые есть на этом полу-мертвом сайте).
  • Sprite
    Сегодня в 13:34
    Мне кажется, что вот так сходу продать свой велосипед без документации, кейсов и отзывов — людям, съевшим собаку на строительстве собственных, будет затруднительно. Кому надо, должен уметь сам реализовывать онлнайн алгоритмы, а не дивиться цифрам бессмысленного сравнения между постоянным перебором массивов и немудренной хитростью хранить то, что можно не пересчитывать.

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

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