Блог им. ArhipovVladimir

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 — инкрементальные вычисления для финансовых приложений. Пересчёт рисков за миллисекунды вместо минут.

293
15 комментариев

Добрый день! 

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

avatar
Op_Man💰, да, залью примеры на днях
Op_Man💰, github.com/likeslines-maker/PhiFlow/tree/main/AdvantageDemo

Там один файл. Он делает живое сравнение:

Как обычно делают (полный пересчёт всего подряд)

Как делают «продвинутые» (с индексами, но всё равно пересчёт)

Как делает PhiFlow (инкрементально)

И главное — он показывает цифры и контрольные суммы: ускорение в 14 раз, но ответы ТОЧНО такие же. Никакого читерства.
Что будет видно после запуска (чтобы сразу понять)

Типичная картина на компе будет такая:

Обычный подход: 58 мс на шаг

PhiFlow: 4 мс на шаг

Разница в 14 раз. Жизненные сценарии, где это реальные деньги:

В финансах:

Банк с портфелем $10 млрд считает риски 15 минут → за это время рынок может уйти на 0.5% = $50 млн потенциального убытка. PhiFlow сделает это за 2 секунды.

В играх:

Игрок ждёт ответ 5 секунд («а что если построить тут?») → теряет интерес и не донатит. С PhiFlow ответ мгновенный → конверсия в покупку растёт.

В рекламе:

RTB-аукцион: кто быстрее обновил бюджет, тот не слил деньги впустую. Экономия 30% бюджета.
Архипов Владимир, спасибо за подробный ответ. Посмотрю!
avatar
Чел, ты просто задайся вопросов. Вот если ты так легко и просто через ИИ делаешь порты с Питона, как думаешь, нужна ли другим в эпоху вайбкодинга библиотека по математике? Опционы-дериваты. Ты действительно думаешь что твоя библиотека да пусть даже за 1 доллар будет кому-то нужна когда не то что обучение, а готовый торгующий код вайбится за пол часа?

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

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

Ладно, я вам дал пищу для ума. Вы её отказываетесь принять. Мне искренне вас жаль, что вы потратили столько времени на то, что обесценивается развитием технологий. Я за развитие, но мне жаль пустата трата усилий. Впрочем, чтобы вам было не так грусно, посмотрите на тулзу ОсЭнджин. Создатель там потратил куда больше ваших усилий, и даже они обнулились ИИ.
Просто трейдер, вы сравниваете не сравниваемое, дело не в коде, а в совершенно в новом подходе, которого ещё не было ранее, это как раз то, чего вайбкодингом не добиться, чего не сделать просто дав задание программисту, это надо изобрести, а не закодить
Просто трейдер, очень похоже, что вы вообще не понимаете сути библиотеки и что она делает и как

Читайте на SMART-LAB:
Фото
Итоги первичных размещений ВДО и некоторых розничных выпусков на 13 февраля 2026 г.
Следите за нашими новостями в удобном формате:  Telegram ,  Youtube ,  RuTube,   Smart-lab ,  ВКонтакте ,  Сайт
Фото
Евро игнорирует хороший ВВП: рынок прайсит риск ускорения роста ИПЦ
 Евро четвертую сессию подряд отступает против доллара и во время лондонской сессии держится чуть выше 1.1850, постепенно сдавая важный...
Фото
📅 Как ведёт себя рынок в зимние месяцы
Декабрь, январь и февраль на российском фондовом рынке традиционно демонстрируют яркую сезонность. 🔹 Декабрь Один из лучших месяцев...
Фото
Мой Рюкзак #63: ВТБ - дальше без меня, меняем на более крепкий банк, дивидендные отсечки близко
Февраль продолжает радовать стоимостных инвесторов, все по стратегии, которую описывал в конце прошлого года Прошлый пост тут —...

теги блога Архипов Владимир

....все тэги



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