Слогер Создать блог
Разработка

Почему сырые тики бесполезны: считаем волатильность, просадку и Sharpe с finkit

For-циклы и WebSocket-потоки несовместимы. Разбираем, как векторная библиотека превращает поток тиков в метрики риска без потери скорости.

Сырые тики похожи на сырую муку: есть можно, но не хочется. Цена Биткоина в $68 500 сама по себе ничего не говорит алгоритму. Чтобы извлечь пользу, нужно посчитать, как эта цена соотносится с исторической волатильностью, риском и просадками.

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

Одна из таких библиотек — finkit. Она с открытым исходным кодом, создана специально для быстрых расчётов над потоковыми рыночными данными.

Скользящее окно вместо бесконечного DataFrame

Первая проблема — перевести поток тиков в матрицу. Если тик приходит каждые 50 миллисекунд, добавлять строки в обычный pandas DataFrame — это постоянные перераспределения памяти.

В finkit используется Pre-Allocated Sliding DataFrame Wrapper. Это фиксированное по размеру окно, которое затирает старые индексы через операции в памяти без копирования. Создаётся просто: fk.DataFrame(max_rows=1000, columns=['timestamp', 'close', 'volume']). Дальше каждый тик добавляется через append_row().

Когда окно наполнилось, можно запускать расчёты.

Три метрики, которые спасают бота

Реализованная волатильность

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

Максимальная просадка

Самое большое падение от пика до минимума перед новым максимумом. Это защита от структурных обвалов, а не от шума.

Sharpe Ratio

Отношение избыточной доходности к волатильности. Если бот зарабатывает только потому, что агрессивно лезет в рискованные активы, Sharpe это покажет.

МетрикаЧто измеряетЗачем нужна
Реализованная волатильностьРазброс доходности за скользящее окноДинамически менять стоп-лоссы
Максимальная просадка (MDD)Крупнейшее падение от пика до впадиныЗащита от структурных крахов
Sharpe RatioИзбыточная доходность на единицу рискаОтличить реальный альфа от перекоса в риск

Формула Sharpe простая: (Rp - Rf) / sigma_p. Rp — доходность стратегии, Rf — безрисковая ставка, sigma_p — стандартное отклонение доходности.

Как это выглядит в коде

В finkit не нужно собирать формулу руками. Вызываете df.indicators.realized_volatility(window=60), df.risk.max_drawdown() и df.risk.sharpe_ratio(risk_free_rate=0.04). Последний метод принимает безрисковую ставку — в примере это 4% годовых.

Код получается компактным. Сначала проверяете, что окно наполнилось, затем запускаете execute_risk_metrics(data_frame). Внутри — один вызов на метрику и печать результата. Если просадка превысила порог, срабатывает аварийная остановка.

Индикаторный демон-сканер

Единичный скрипт — это хорошо, но для реальной работы нужен фоновый процесс. Идея в том, чтобы выделить отдельный демон, который слушает поток по нескольким активам, держит в памяти словарь DataFrame для каждого тикера и периодически запускает расчёты. Результаты уходят основному торговому боту через быстрые IPC-каналы.

Например, можно создать класс с реестром ticker → fk.DataFrame(max_rows=500). В цикле демон обходит все тикеры, обновляет окна и считает метрики. Когда просадка по какому-то активу превышает 15%, отправляется команда на ликвидацию.

Типичные ошибки

  • Добавлять строки в неограниченный DataFrame. Память фрагментируется, производительность падает.
  • Считать метрики на лету в потоке WebSocket. Лучше предварительно выделить окно и обновлять по готовности.
  • Игнорировать безрисковую ставку в Sharpe. Сравнивать доходность с нулём бессмысленно, когда есть альтернатива с гарантией.
  • Не задавать порог просадки. Бот без MDD-лимита пережидает обвал вместо выхода.

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

По материалам: finance. Текст переработан редакцией Слогера.

← На главную

Рекламное место — Конец поста
Реклама · Слогер

Комментарии (0)

Войдите, чтобы комментировать.

Пока нет комментариев. Будьте первым.

AI

Анализ тендерной документации: как читать ТЗ и проект контракта за минуты, а не за вечер

Пять файлов, ТЗ на несколько мегабайт и день до окончания подачи. Знакомая картина для всех, кто участвует в тендерах. Написали в блоге, как разбирать тендерную документацию быстро и не пропустить главное: — где искать сроки, обеспечение, оплату, штрафы и гарантию (подсказка: почти всё в проекте контракта, а не в ТЗ); — почему технологии в ИТ-закупках почти никогда не пишут в названии; — как ИИ-разбор в Fluxs выписывает условия с дословными цитатами и сверяет их с документом; — зачем отдельный список вопросов для запроса разъяснений. Решение об участии остаётся за человеком. ИИ просто экономит вечер над ТЗ. https://fluxs.ru/blog/analiz-tendernoj-dokumentacii

Слогер 07.10.2026 ▲ 1
Разработка

Как ревьюить pull request и не отпугнуть контрибьютора: ярлык против разбора

Комментарий «похоже, это писал ИИ» и разбор диффа по существу занимают одинаковое время. Только в одном случае автор уходит молча, а проблема остаётся висеть ещё семь месяцев.

Слогер 07.10.2026 ▲ 0
Карьера

Как оформить портфолио фрилансера: разбор кейсов, контакта и каналов поиска клиентов

Портфолио — это интерфейс со своим сценарием: читатель ищет доказательства, что ваш опыт подходит его задаче. Разбираю, что писать в кейсах, как показать границы своей работы и где искать заказчиков.

Слогер 07.10.2026 ▲ 0
Fluxs lenta
Реклама · fluxs.ru
Карьера

Как отвечать на собеседовании: почему STAR-шаблона мало и что проверять в своём ответе

Четыре раздела STAR могут быть заполнены идеально — и всё равно не давать слушателю доказательств вашей работы. Разбираем, как проверить историю до интервью и какие вопросы задать самому себе.

Слогер 07.10.2026 ▲ 0
Разработка

Почему разработчики перестают писать код: разбор новой роли и что делать команде

Спецификации на человеческом языке, тест-сценарии и агент, который пишет реализацию. Что это меняет в работе одного разработчика и почему командные процессы не успели за этим.

Слогер 06.10.2026 ▲ 0
Fluxs lenta
Реклама · fluxs.ru
Личный опыт

Имплант, мост или съёмный протез: чем отличаются и как выбрать

Три способа заменить зуб решают одну задачу по-разному, и разница проявляется через годы, а не в день оплаты. Разбираем, что подойдёт именно в вашем случае и о чём спрашивать врача заранее.

Слогер 05.10.2026 ▲ 1
Разработка

Как японские принципы управления делают код чище и экономнее

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

Слогер 05.10.2026 ▲ 0
Образование

Как закончить бесплатный курс Microsoft по AI: разбор плана обучения и бейджа

Microsoft Learn собрал бесплатный самостоятельный трек по искусственному интеллекту — с модулями, проверками знаний и цифровым бейджем на финише. Разбираем, что внутри и как не бросить на середине.

Слогер 05.10.2026 ▲ 0
Fluxs lenta
Реклама · fluxs.ru