Блог им. ArhipovVladimir

БЕСПЛАТНО и СЕРДИТО! Portfolio Stress Lab:интерактивная стресс‑лаборатория портфеля на .NET (QuantCore.Net + Tinkoff Invest API)

1) Что это за программа

Portfolio Stress Lab — настольное WPF‑приложение для продвинутого инвестора/разработчика, которое подключается к Tinkoff Invest API, загружает портфель и историю цен, и позволяет интерактивно “крутить кризис” ползунками:
БЕСПЛАТНО и СЕРДИТО! Portfolio Stress Lab:интерактивная стресс‑лаборатория портфеля на .NET (QuantCore.Net + Tinkoff Invest API)




“Индекс −12%”
“Волатильность +40%”
“Ставка +150 б.п.”
“Корреляции → кризисные”

И мгновенно видеть:
стресс‑PnL портфеля
исторические VaR/ES (99%)
вклад каждой позиции в стресс‑PnL

Вычислительное ядро — QuantCore.Net (высокопроизводительная библиотека количественных расчётов).

---

2) Сравнение с другими решениями


Тип A: брокерские приложения/личные кабинеты
Примеры: мобильное/веб‑приложение Тинькофф, другие брокеры.

Что обычно есть:
текущая стоимость портфеля
доходность
иногда простые “риск‑показатели” в мягкой форме
новости/события

Чего почти никогда нет (или есть в сильно упрощённом виде):
интерактивные стресс‑сценарии (особенно “падение индекса на X%” + “кризис корреляций”)
VaR/ES на локальной истории по вашему портфелю
детализация вклада позиции в стресс‑PnL
прозрачность методики и возможность её менять

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

Тип B: профессиональные риск‑системы/платные платформы
Примеры:Bloomberg‑класс (без точных сравнений), риск‑платформы для институционалов, внутренние банковские системы.

Что обычно есть:
сценарии
VaR/ES
факторные модели
стресс‑тестинг

Минусы для частного/продвинутого пользователя:
дорого
сложно внедрять
заточено под институционалов
часто “не для домашнего использования”

---

2.2 Преимущество нашей программы (сильные стороны)

1) Интерактивный UX сценариев
Программа не “строит отчёт раз в день”, а даёт ползунки, которые меняют риск‑картину мгновенно. Это ключевая ценность:what‑if анализ становится живым.

2) Локальный in‑process расчёт
Нет серверной задержки, нет очередей, нет “запрос обработается через 3–10 секунд”. Все расчёты идут локально в приложении.

3) Скорость и предсказуемость вычислений
За счёт QuantCore.Net:
VaR/ES на 100k значений считается в долях миллисекунды (в ваших замерах < 0.5 ms на 100k)
факторный PnL считается батчами и хорошо масштабируется
Это позволяет UX “крутить слайдеры без лагов”.

4) Прозрачность модели
Пользователь видит, что именно считается и какие допущения приняты. Это большой плюс по сравнению с “чёрным ящиком” в брокерском приложении.

5) Безопасность данных (в рамках клиента)
Сценарии и расчёты выполняются локально; наружу уходят только запросы к Invest API. Это проще объяснить корпоративным пользователям, чем “мы грузим ваш портфель на наш сервер”.

---

2.3 Честные ограничения текущего MVP

Для обычных акций (type share) греческие (Delta/Vega/Rho) не показываются — это нормально, они относятся к опционам.
Для акций сейчас стресс‑PnL в MVP основан на простой факторной модели (market‑шок). Это “правильный кирпич”, но без сложных моделей корреляций/кривых.
История VaR/ES зависит от качества и длины загруженных свечей (период, ликвидность, пропуски).

---

3) Инструкция по запуску (от нуля до первого расчёта)

3.1 Предварительные требования
Windows (WPF)
.NET 8 runtime/SDK установлен (если вы запускаете из исходников)
Доступ к Tinkoff Invest API и токен (Personal token)

3.2 Где указать API‑ключ (токен)
appsettings.json
Откройте файл appsettings.json в блокноте и укажите:


{
 «Tinkoff»:{
 «Token»:«t.xxxxxxxxxxxxxxxxxxxxxx»,
 «AccountId»:"",
 «UseSandbox»:false
 }
}




3.3 Нужно ли указывать AccountId
Нет. Если AccountId пустой, программа:
1) вызывает Users.GetAccounts
2) берёт первый аккаунт

AccountId нужен только если у вас несколько счетов и вы хотите конкретный.

---

4) Как пользоваться программой (по шагам)

Кнопки

1) Load Portfolio
Что делает:
подключается к Invest API с вашим токеном
загружает позиции (shares/bonds/etfs/futures/options)
загружает справочники инструментов (для тикеров/названий)
загружает last prices для инструментов с FIGI и для базовых активов опционов
строит список позиций в таблице

Что вы увидите:
Status:“Loaded positions:N”
Таблица заполнится строками

Если ошибка:
Unauthenticated → неверный токен/нет прав/пробелы в токене
ResourceExhausted → слишком большой ответ (вы уже исправили увеличением MaxReceiveMessageSize)

2) Load History (VaR/ES)
Что делает:
загружает дневные свечи (CandleInterval.Day) за HistoryDays (по умолчанию 180)
берёт не все инструменты, а только топ‑N по величине (MaxHistoryInstruments, например 50)
строит ряд дневного PnL портфеля:
  — для каждого дня t:PnL[t] = Σ (Close_i[t] — Close_i[t-1]) * Quantity_i
включает расчёт VaR/ES

Что вы увидите:
VaR(99%) и ES(99%) перестанут быть —
Notes покажет, сколько инструментов реально использовано для истории

Зачем это нужно:
VaR/ES — это “исторический риск” (на основе реальных дневных движений).

3) Recalculate
Что делает:
пересчитывает стресс‑PnL и таблицу вкладов по текущим положениям ползунков
если история загружена — пересчитывает VaR/ES (с учётом “Correlation crisis”)

На практике вам часто не нужно нажимать эту кнопку: слайдеры уже вызывают пересчёт автоматически. Кнопка полезна, если вы хотите “пересчитать после загрузки/изменений”.

---

5) Ползунки (смысл каждого)

1) Index shock (%)
Пример:−12% означает “рынок/базовый актив падает на 12%”.

Как влияет:
На акции/ETF/фьючерсы: даёт основной вклад в стресс‑PnL.
На опционы: используется как шок базового актива (spot).

2) Volatility shock (%)
Пример:+40% означает “волатильность выросла на 40% относительно базовой”.

Как влияет:
На опционы: меняет sigma в Black‑Scholes и влияет на цену/vega‑часть.
На акции в MVP напрямую не влияет (пока нет модели “vol → price”).

3) Rate shock (bps)
Пример:+150 bps означает “ставка +1.50%”.

Как влияет:
На опционы: меняет r и влияет на цену/rho.
На акции/ETF в MVP напрямую не влияет.

4) Correlation crisis (0..1)
Это UX‑ручка “насколько кризисно”.

Как влияет сейчас (упрощённо, но полезно):
усиливает стресс‑PnL множителем (1 + 0.25 * crisis)
усиливает исторический ряд PnL перед VaR/ES множителем (1 + 0.8 * crisis)



---

6) Таблица позиций (что означает каждый столбец)

Ticker — тикер инструмента (из справочника)
Name — название инструмента
Type — тип: например share,bond,etf,future,option
Qty — количество (баланс)
Price — last price (для некоторых инструментов может быть —, например опционы без FIGI)
Value — текущая оценка позиции (Price × Qty). Для опционов в MVP может быть — (если мы используем только теоретическую оценку в расчёте, но не выводим её как Value)
Stress PnL — вклад этой позиции в стресс‑PnL при текущих ползунках
Delta / Vega / Rho — показываются только если позиция распознана как option и у неё есть:
  — StrikePrice
  — ExpirationDate
  — BasicAssetPositionUid → найден underlying → есть spot
  — не истёк срок до экспирации

---

7) Что это даёт “в жизни”

Вы видите не только “текущий профит/убыток”, а “что будет если завтра рынок -X%”.
Вы видите риск хвоста (VaR/ES) по вашему портфелю.
Вы видите вклад каждой позиции — что именно создаёт риск/прибыль в сценарии.

---

8) Частые проблемы и решения

Unauthenticated 40003
неверный токен
токен с пробелом/переносом
токен не от Invest API
env var TINKOFF_TOKEN переопределяет appsettings

ResourceExhausted maximum message size
слишком большой ответ gRPC (справочники, особенно опционы)
решение: увеличить MaxReceiveMessageSize (вы это уже сделали)

VaR/ES = “—”
вы не нажали Load History
по инструменту мало свечей (менее 20)
инструмент не попал в топ‑N выбранных для истории

---

9) Почему этот продукт “не дают брокеры”
Потому что стресс‑лаборатория:
поднимает юридические/репутационные вопросы (“вы пугаете клиентов”)
требует объяснимости модели и оговорок
рассчитана на продвинутых пользователей

Доступно бесплатно (благодарность приветствуется — кошелёк для доната в программе)  — скачать - https://disk.yandex.ru/d/vWqxHoMWBFI1eg
233
#196 по плюсам, #107 по комментариям
2 комментария
Ачуметь. Вот это работа! Респект. Сыкономили людям 1 час вайбкодинга.
Просто трейдер, основной продукт библиотека, делалось чтобы показать как пользоваться библиотекой, исходники залил — github.com/likeslines-maker/QuantCore.Net, если интересно…

Читайте на SMART-LAB:
Фото
Южная Корея: рынок, который смог
Алексей Девятов Президент Южной Кореи в ходе предвыборной кампании в прошлом году обещал поднять индекс KOSPI до 5000 пунктов — эта...
Фото
BRENT: цена мечется между геополитическими страхами и плохой статистикой
Нефть после скачка к локальным максимумам продолжила колебаться вблизи вершины, где удерживалась под влиянием геополитической премии за риск....
Фото
Список устойчивых ВДО от Иволги Капитал (по оценке самой Иволги)
В качестве эксперимента начинаю обновляемую публикацию «списка устойчивых ВДО» Иволги (возможно, найду более четкое определение). Это список...
Фото
НОВАТЭК отчитался за 2025 год - списал 301 млрд рублей, но удивил всех результатами, как правильно считать дивиденды?
НОВАТЭК — первым из нефтегазового сектора отчитывается по МСФО, за это им отдельный респект от Мозговика Я делал прогноз вчера в...

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

....все тэги



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