Tickflow Stock Panel как собрать собственный терминал для квант-анализа акций
Когда начинаешь копаться в алгоритмической торговле и анализе рынка, быстро упираешься в одну и ту же стену. Готовые терминалы либо стоят как крыло самолета, либо завязаны на проприетарные облака, где нельзя покрутить сырые данные руками. Если же собирать свой велосипед из разрозненных скриптов на Python, всё заканчивается зоопарком из Jupyter ноутбуков, которые падают от нехватки памяти при попытке обработать историю за пару лет.
Недавно наткнулся на интересный проект tickflow-stock-panel (сокращенно TSP). Это опенсорсная self-hosted панель для скрининга, бэктестинга и мониторинга акций. Проект изначально ориентирован на китайский рынок A-shares и API TickFlow, но с инженерной точки зрения сделан очень аккуратно. Внутри отличный современный стек: Polars для быстрой обработки таблиц, DuckDB с Parquet для хранения и выборки, FastAPI на бэкенде и чистый React на фронтенде.
Что умеет панель
Автор репозитория сразу делает оговорку: проект не пытается быть заменой брокерским терминалам вроде Tongdaxin или Thinkorswim, и здесь нет «волшебных AI-кнопок для гарантированного заработка». Это именно рабочая станция для проверки гипотез и отслеживания сигналов.

Если разобрать возможности по полочкам, получается добротный набор инструментов:
- Скрининг и фильтрация акций. Встроено 18 готовых стратегий, плюс можно настраивать собственные условия или генерировать правила через LLM (поддерживаются любые OpenAI-совместимые API, вроде DeepSeek или локальной Ollama). За счет Polars сканирование всего рынка по списку индикаторов отрабатывает за доли секунды.
- Пайплайн расчета технических индикаторов. Система на лету считает классические метрики (MA, EMA, MACD, RSI, KDJ, полосы Боллинджера) и сохраняет обогащенные данные в локальные файлы Parquet.
- Модуль бэктестинга. Движок умеет гонять исторические тесты в нескольких режимах (факторный анализ с расчетом метрик вроде IC/IR и полноценный бэктест стратегий). Считаются кривая доходности, просадки, коэффициент Шарпа, винрейт с учетом комиссий, проскальзывания и стоп-лоссов. Прогресс выполнения отдается на клиент через Server-Sent Events в реальном времени.
- Мониторинг и алерты. Можно завязать правила на стратегии, уровни цен или рыночные аномалии. Поддерживается озвучка сигналов в браузере и отправка уведомлений через вебхуки.

Технический стек под капотом
Архитектура проекта заслуживает отдельного внимания. Тут нет раздутых реляционных баз данных или тяжелых очередей сообщений.
┌─────────────────────────────────────────────────────────┐
│ React 18 UI │
│ (Vite, Tailwind, Lightweight Charts, ECharts, dnd) │
└────────────────────────────┬────────────────────────────┘
│ REST / SSE
┌────────────────────────────▼────────────────────────────┐
│ FastAPI Backend │
│ (Pydantic v2, APScheduler, sse-starlette) │
└──────────────┬───────────────────────────┬──────────────┘
│ │
┌──────────────▼──────────────┐ ┌──────────▼──────────────┐
│ Вычисления │ │ Хранение │
│ Polars / vectorbt │ │ DuckDB + Parquet │
└─────────────────────────────┘ └─────────────────────────┘
Разработчик сделал ставку на производительность локальной машины:
- Polars задействован для всех тяжелых табличных трансформаций. Он утилизирует все ядра процессора и не захлебывается на миллионах строк, в отличие от чистого Pandas.
- DuckDB и Parquet закрывают вопрос аналитических запросов. Данные лежат локально в компактном бинарном формате, читаются мгновенно без необходимости держать запущенный PostgreSQL или ClickHouse.
- vectorbt используется строго на этапе бэктестинга, как проверенная векторная библиотека для симуляции сделок.
- Docker с двухэтапной сборкой упаковывает скомпилированный фронтенд и бэкенд в один легковесный контейнер.

Как запустить локально
Развернуть систему можно двумя путями. Если хочется поковырять исходники и дописать что-то под себя, проще всего использовать режим разработки.
Потребуются Python 3.11+, Node 20+, менеджер пакетов uv и pnpm:
# Клонируем проект и настраиваем переменные окружения
git clone https://github.com/shy3130/tickflow-stock-panel.git
cd tickflow-stock-panel
cp .env.example .env
# Запуск dev-скрипта (поднимет фронтенд на :3011 и бэкенд на :3018)
./dev.sh
Второй вариант — чистый Docker Compose:
cp .env.example .env
docker compose up --build
После старта веб-интерфейс доступен по адресу http://localhost:3018.

Базовый конфиг в .env минималистичен:
TICKFLOW_API_KEY= # Ключ данных (можно оставить пустым для базовой истории)
AI_API_KEY= # Ключ LLM (OpenAI-compatible) для автогенерации стратегий
PORT=3018 # Порт веб-сервера
Если вы не торгуете на китайском рынке, проект все равно представляет интерес. Архитектура подключения кастомных источников данных описана в docs/custom-data-source.md. Можно подсунуть свои CSV, JSON или написать адаптер под MOEX / Yahoo Finance / криптобиржи, переиспользовав готовый интерфейс скрининга, графики и движок векторного тестирования.


Для кого этот проект
В первую очередь репозиторий оценят разработчики, интересующиеся финтехом и алготрейдингом.
С одной стороны, это готовый инструмент для тех, кто ищет легкую self-hosted систему мониторинга без лишней инфраструктурной возни. С другой стороны, кодовая база служит наглядным примером того, как правильно связывать FastAPI, Polars и DuckDB в единое отзывчивое приложение с потоковыми ответами и интерактивными графиками.
Если вы давно собирались написать собственный скринер или бэктестер, стоит заглянуть в репозиторий shy3130/tickflow-stock-panel хотя бы ради подходов к работе с данными.
