Блог им. ArhipovVladimir

🚀 QuantCore.Net: .NET-библиотека для количественных расчётов. 100 000 опционов в секунду и zero-alloc

О чём это.
Все нормальные расчёты (опционы, VaR, греки) либо дёргают неуправляемый C++ код, либо жрут память и GC, либо просто медленные.

Я написал свою библиотеку — QuantCore.Net. Это in-process .NET 8 ядро для финансовых вычислений. Без REST, без Python-прослоек, без боли.

Под капотом: SIMD, ArrayPool, детерминированный RNG, батч-режимы. Всё, чтобы считать сотни тысяч инструментов за миллисекунды и не ловить StopTheWorld в 3 часа ночи.


📊 Для кого это вообще?
  1. Вы пишете своих роботов на C#.
    — Хотите быстро считать справедливую цену опционов или греки в реальном времени.
    — Надоело дёргать Excel или самопальные функции из интернета, которые плавают на 5%.

  2. Вы управляете портфелем и считаете риск.
    — Historical VaR / ES (CVaR) за 0.4 мс на 100 000 наблюдений.
    — Ни одной аллокации памяти — GC молчит.

  3. Вы делаете factor model PnL.
    — SIMD-скалярка экспозиций и факторных доходностей.
    — 100 000 позиций × 32 фактора = 2.8 мс.

  4. Вы просто устали от QuantLib.
    QuantLib — это великий монстр. Но подключать его в .NET проект — тот ещё квест.
    QuantCore.Net — managed, ставится через dotnet add package.


⚡ Цифры, ради которых всё затевалось

Процессор: Intel i5-11400F, .NET 8, BenchmarkDotNet.

 
Операция Размер пачки Время Пропускная способность
Black–Scholes Price (батч) 100 000 5.1 мс 19.5 млн опционов/сек
Black–Scholes Greeks (батч) 100 000 10.4 мс 9.6 млн опционов/сек
Monte Carlo GBM (антитетик) 10 000 траекторий 0.26 мс 38 млн траекторий/сек
Historical VaR 99% 100 000 0.44 мс zero alloc
Factor PnL SIMD (32 фактора) 100 000 2.77 мс AVX2/SSE

📌 Zero allocations — после прогрева нет ни одного объекта в Gen 1/Gen 2. Никогда.


🧩 Что внутри сейчас (MVP, но всё работает)

1. Ценообразование и греки

  • Black–Scholes–Merton (европейские, дивидендная доходность).

  • Одиночный вызов: ~40 наносекунд (чувствителен к JIT, но кому это важно, когда есть батч).

  • PriceBatch, GreeksBatch — аллокаций нет, выходной массив вы даёте сами.

2. Монте-Карло

  • Европейский GBM с антитетическими переменными.

  • Генератор XorShift128Plus — детерминированный, сидируете один раз — получаете повторяемые результаты.

  • Для бэктестов и отладки — идеально.

3. Риск-метрики

  • Historical Value-at-Risk.

  • Expected Shortfall (CVaR).

  • Два режима: мутирующий входной массив и non-mutating (через ArrayPool, копия не создаётся, если не надо).

4. Факторные модели

  • FactorModelPnlFast.ComputePnL() — SIMD dot product через SlidingRank.FastOps.

  • Экспозиции × доходности факторов. Никаких for-циклов.

5. Статистика one-pass

  • Среднее, дисперсия, skewness, kurtosis.

  • Хранить выборку не нужно — обновляется инкрементально.


💰 Сколько стоит и почему не бесплатно?

QuantCore.Net — коммерческая библиотека.
Но я не пытаюсь окупить яхту.

🔹 Оценка / некоммерческое использованиебесплатно.
Никаких таймеров, ватермарок, урезанных функций. Просто работает.

🔹 Старт$299/мес.
1 организация, до 2 продакшен-сервисов.

🔹 Профессиональный$1499/мес.
До 10 разработчиков, до 10 сервисов.

🔹 Enterprise$4999/мес.
Безлимит в рамках одной организации.

📌 Нужна перпетуальная лицензия или revenue-share? — пишите, договоримся.


❓ Почему не взять готовое?

Math.NET — отличная библиотека… для университетских лаб.
Греки? Батч-ценообразование? Нет.

QuantLib — стандарт де-факто. Но:

  • Это C++, вам нужен wrapper.

  • Wrapper ломается при смене версии.

  • Deployment в контейнере — боль.

Писать самому — можно.
Я тоже так делал 10 лет. Но потом ты проводишь 2 недели, отлаживая численную устойчивость при страйк = 0.001 * S.

QuantCore.Net закрывает 80% повседневных задач проп-шопа или хедж-фонда.
Он не умеет экзотику вроде барьеров или азиатских опционов.
Он умеет считать быстро, детерминированно и без GC то, что нужно каждый день.


🧪 Как попробовать?bash
dotnet add package QuantCore.Net

Одна функция — одна строка:

csharp
using QuantCore.Net.Pricing;

double[] prices = new double[100_000];
BlackScholes.PriceBatch(
    OptionType.Call,
    s: spotPrices,
    k: strikes,
    r: 0.03,
    q: 0.01,
    sigma: vols,
    t: expiries,
    outPrice: prices
);

19.5 миллионов опционов в секунду.
Ни одной аллокации.
Ни одного extern-вызова.


🔮 Какие перспективы это открывает для трейдера / разработчика?
  1. Вы перестаёте экономить на спичках.
    Раньше вы могли позволить себе посчитать Greeks только для десятка позиций — иначе лаг.
    Теперь считайте все. Каждый тик. Без тормозов.

  2. Вы можете гонять Monte Carlo прямо в онлайне.
    10 000 траекторий за 0.26 мс — это не бэктест, это риал-тайм оценка.
    Хотите переоценивать VaR каждые 5 секунд? Легко.

  3. Вы пишете роботов на C# — и не чувствуете боли.
    Никаких мостов в Python, никаких DLL из прошлого десятилетия.
    Один стек, один язык, отлаживается F12.

  4. Вы перестаёте бояться GC.
    В 24/7 системах сборка мусора — это внезапный лаг.
    QuantCore.Net не создаёт мусор. Вообще.

  5. Вы получаете инженерную базу.
    Это не чёрный ящик. Вы видите код, вы можете его форкнуть, вы можете его отлаживать.
    Я не прячу реализацию за obfuscation. Это честный .NET.


📎 Ссылки и контакты
Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
542 | ★1
12 комментариев
19.5 миллионов опционов в секунду.

На следующий новый год загадаю деду морозу, чтобы на нашей бирже появилась хотя бы сотая доля от этих 19.5 млн опционов — уже был бы праздник.
avatar
Давать ссылку на приватный гитхаб это интересно придумано
avatar
Aleksandr Chernikov, да,  сорри, ссылка не та была, поправил

Aleksandr Chernikov, сперва прочитал голосом Йоды:

Давать ссылку на приватный гитхаб — это интересно придумано

avatar

В 24/7 системах сборка мусора — это внезапный лаг.
QuantCore.Net не создаёт мусор. Вообще.



Это не чёрный ящик. Вы видите код, вы можете его форкнуть, вы можете его отлаживать. Я не прячу реализацию за obfuscation. Это честный .NET.


Посмотрел, это и правда здорово, что вы не спрятали код и желающие могут посмотреть как писать на C# без GC. Но тут непонятно что лицензируется, если всё видно. Саппорт?

PS А мусор с вашей либой мы и сами создадим! )

avatar

Sprite, Видимость кода ≠ отсутствие лицензирования. Лицензируется не “секрет”, а право использования и условия:
право коммерческого применения (в продукте/сервисе, внутренние прод‑системы, перепродажа/встраивание и т.д.)

“QuantCore.Net не создаёт мусор. Вообще.”
Точнее формулировка такая: мы целимся в zero/min‑alloc на критических путях (batch‑операции, переборы,Span/ArrayPool и т.п.). Но абсолютное “вообще” зависит от того, как вы вызываете API и что делаете вокруг (логирование,LINQ, создание коллекций, форматирование строк и т.д.).

“PS: мусор с вашей либой мы и сами создадим :)”
Да,100%. И это нормальная мысль. Смысл библиотеки — чтобы ядро расчёта не приносило неожиданных аллокаций/пауз, а остальное — уже дисциплина использования.

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

Спасибо.

avatar
algodsp, в репозитарии только примеры

Архипов Владимир, спасибо за ответ, в описании написано, что код реализации открыт:

— «Я не прячу реализацию за obfuscation. Это честный .NET.»

— «Оценка / некоммерческое использование — бесплатно.»

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

avatar
Правильно ли понимаю из вышенаписанного, что данная библиотека решает задачу численного моделирования в том числе с использованием равномерных псевдослучайных последовательностей?
avatar
ch5oh, Да, всё верно. Библиотека включает модуль Монте-Карло для численного моделирования (например, ценообразование опционов GBM), который использует генератор псевдослучайных чисел XorShift128Plus для создания равномерных последовательностей с возможностью точной воспроизводимости результатов (через параметр seed).

Читайте на SMART-LAB:
Фото
БЦ АВИУМ: от котлована до IPO на Московской бирже
🔹 БЦ АВИУМ: от котлована до IPO на Московской бирже CORE.XP совместно с Alias Group проведёт вебинар, на котором обсудят ключевые...
Фото
Совет директоров Аэрофлота рекомендовал выплату дивидендов акционерам
Совет директоров Аэрофлота рекомендовал предстоящему годовому Общему собранию акционеров утвердить выплату дивидендов за 2025 год. ✈️ 21,0 млрд...
Фото
Рынок ЗПИФ недвижимости в России достигнет 2 трлн рублей в перспективе 2-3 лет
На прошлой неделе в Санкт-Петербурге завершилась конференция институциональных инвесторов Investfunds Forum XVII. Марина Харитонова, управляющий...
Фото
Газпром: EBITDA за 1-й квартал близка к 1 триллиону рублей, но акции дешевеют. Ормузский пролив не помог, смотрим отчет
Газпром отчитался по МСФО за 1-й квартал 👉 Выручка на уровне прошлого года (-0,3% г/г) 👉 Операционная прибыль +27,1% г/г...

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

....все тэги



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