Jak zbudować osobisty terminal analizy quant z Polars i DuckDB
Każdy programista, który próbował analizować notowania giełdowe za pomocą kodu, przeszedł przez ten sam scenariusz. Najpierw otwierasz Jupyter Notebook, podłączasz Pandas i pobierasz historyczne świece przez jakieś losowe darmowe API. W ciągu kilku dni notebook rozrasta się do setek nieczytelnych komórek, obliczenia wskaźników zaczynają się zawieszać na minuty, a zamiast porządnego interfejsu musisz męczyć się z wykresami Matplotlib.
Ostatnio natknąłem się na projekt shy3130/tick-stock-panel na GitHubie. Autor zbudował kompletną otwartą platformę do analizy quant, backtestingu i monitorowania akcji, którą można uruchomić lokalnie w jednym kontenerze Docker. Projekt jest początkowo dostosowany do chińskiego rynku A-shares, ale jego decyzje architektoniczne i stos technologiczny zasługują na osobną recenzję, niezależnie od tego, jakie aktywa handlujesz.
Co jest w środku i jak to działa
Głównym problemem większości domowej roboty skrinerów jest wydajność. Jeśli obliczasz średnie kroczące, MACD, RSI i wstęgi Bollingera dla tysięcy tickerów w pętli przez Pandas, maszyna szybko się dusi.
W tick-stock-panel ten problem został rozwiązany za pomocą nowoczesnego stosu danych:
- Polars obsługuje równoległe obliczenia wskaźników i przesiewanie całego rynku w ułamkach sekundy.
- Parquet jest używany jako lokalny format przechowywania wzbogaconych tabel.
- DuckDB wykonuje szybkie zapytania analityczne na Parquet bezpośrednio na dysku bez uruchamiania ciężkich baz danych.
- vectorbt jest używany w izolowanym module backtestingu.
- FastAPI i sse-starlette serwują dane i przesyłają strumieniowo postęp ciężkich obliczeń przez Server-Sent Events.
- React 18 z bibliotekami Lightweight Charts i ECharts tworzy czysty panel kontrolny.
Architektura jest zwarta: backend i spakowany frontend są zapakowane w dwuetapowy Dockerfile. Aplikacja nie potrzebuje zewnętrznego PostgreSQL ani Redis — cała baza danych jest przechowywana lokalnie.
Główne funkcje platformy
Deweloper podzielił funkcjonalność na cztery kluczowe bloki: filtrowanie, testowanie hipotez, śledzenie rynku i analizę poszczególnych aktywów.
| Dashboard | Strategy Screener |
![]() |
![]() |
| Backtesting | Factor Search |
![]() |
![]() |
Skriner i wbudowane strategie
System zawiera 18 gotowych strategii selekcji akcji. Mechanizm filtrowania działa na Polars: po zamknięciu rynku pipeline oblicza wzbogacony zbiór danych, a zapytanie użytkownika sprawdza warunki w całej tabeli tickerów. Możesz łączyć standardowe wskaźniki, wolumeny i formacje świecowe lub pisać własne sygnały.
Backtesting i wyszukiwanie czynników alfa
Testowanie jest podzielone na dwa tryby:
- Indywidualna ocena czynników z obliczeniami metryk IC i IR, zwrotów kwantylowych i spreadów long-short. Pomaga to filtrować szum przed zbudowaniem systemu tradingowego.
- Pełny backtesting strategii z zasadami rozliczenia T+1, poślizgiem, prowizjami brokera i stop-lossami.
Moduł wydobywania czynników jest ciekawie zaimplementowany. System wyszukuje kombinacje rang na zbiorze treningowym, filtruje skorelowane metryki i waliduje wyniki na danych out-of-sample. Jednak odkryte reguły nie są stosowane ślepo: kandydat jest zapisywany do wersji roboczych i wymaga ręcznego potwierdzenia przed dodaniem do puli roboczej.
| Centrum monitoringu | Drabina limitów |
![]() |
![]() |
| Analiza sektorów | Obserwowane |
![]() |
![]() |
Monitorowanie w czasie rzeczywistym i anomalie
Dashboard zawiera moduł monitoringu na żywo. Możesz ustawić reguły wyzwalające oparte na poziomach cen, wskaźnikach lub odchyleniach od średnich. Gdy wystąpi zdarzenie, panel wysyła webhook, pokazuje powiadomienie w przeglądarce, a nawet wypowiada ticker na głos przez Web Speech API.
Integracja modeli językowych
Projekt dodał integrację LLM przez interfejs kompatybilny z OpenAI. Możesz połączyć Ollama, DeepSeek lub zamknięte API. Modele pełnią dwie praktyczne role: generowanie kodu reguł skrinera z opisów tekstowych i komponowanie wieczornego raportu z analizą ruchów sektorów po zamknięciu rynku.
Jak wdrożyć i uruchomić
Najszybszy sposób na uruchomienie projektu to przez Docker Compose:
cp .env.example .env
docker compose up --build
Po zbudowaniu panel otwiera się pod http://localhost:3018.
Do lokalnego rozwoju potrzebujesz Pythona 3.11+, Node.js 20, menedżerów pakietów uv i pnpm:
cp .env.example .env
./dev.sh
Skrypt sprawdzi środowisko, zainstaluje zależności backendu przez uv i frontendu przez pnpm, a następnie uruchomi FastAPI na porcie 3018 i serwer deweloperski Vite na 3011.
Konfiguracja jest ustawiana w pliku .env:
TICKFLOW_API_KEY= # Ключ источника данных TickFlow (можно оставить пустым для базового режима)
AI_API_KEY= # Ключ LLM-провайдера для генерации стратегий
PORT=3018 # Порт приложения
Podłączanie własnych źródeł danych
Projekt bazowy jest skonfigurowany dla chińskiego SDK usługi TickFlow, jednak deweloper uczynił warstwę danych podłączalną. Repozytorium zawiera wtyczkę Node.js stock-sdk i przykłady deklaratywnych opisów źródeł przez YAML.
Jeśli chcesz dostosować panel dla MOEX, giełd kryptowalut lub Yahoo Finance, wystarczy zaimplementować interfejs dostawcy dziennych słupków i karmić je w formacie Parquet. Wszystkie inne mechanizmy — obliczenia średnich kroczących, silnik backtestingu, wykresy Lightweight Charts i system alertów — będą nadal działać bez zmian.
Czy warto spróbować
Projekt tick-stock-panel jest interesujący przede wszystkim ze względu na czystość architektoniczną. Autor porzucił ciężkie relacyjne bazy danych na rzecz Polars + DuckDB + Parquet, co sprawia, że system śmiga na zwykłym laptopie.
Jeśli handlujesz na chińskim rynku, projekt może być używany jako gotowe narzędzie robocze out of the box. Jeśli Twoje zainteresowania leżą na innych giełdach, kod repozytorium posłuży jako doskonały szablon do zbudowania własnego terminala analitycznego.
Powiązane projekty







