>_ DevTrendsit

Lingua

Home

Linguaggi

Sezioni

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicurezza
Python

Come Costruire un Terminale di Analisi Quantitativa Personale con Polars e DuckDB

Qualsiasi sviluppatore che abbia mai provato ad analizzare quotazioni azionarie con il codice è inevitabilmente passato attraverso lo stesso scenario. Prima apri un Jupyter Notebook, connetti Pandas e scarichi candele storiche tramite qualche API gratuita casuale. Entro un paio di giorni, il notebook cresce fino a centinaia di celle illeggibili, i calcoli degli indicatori iniziano a bloccarsi per minuti, e invece di un'interfaccia corretta devi socchiudere gli occhi guardando i grafici Matplotlib.

Recentemente mi sono imbattuto nel progetto shy3130/tick-stock-panel su GitHub. L'autore ha costruito una piattaforma open-source completa per analisi quantitativa, backtesting e monitoraggio azionario che puoi eseguire localmente in un singolo container Docker. Il progetto è inizialmente orientato al mercato cinese A-share, ma le sue decisioni architetturali e il suo stack tecnologico meritano una recensione separata, indipendentemente da quali asset scambi.

Cosa c'è dentro e come funziona

Il problema principale della maggior parte degli screener fatti in casa è la prestazione. Se calcoli medie mobili, MACD, RSI e Bande di Bollinger per migliaia di ticker in un ciclo attraverso Pandas, la macchina si blocca rapidamente.

In tick-stock-panel, questo problema è stato risolto con uno stack di dati moderno:

  • Polars gestisce calcoli paralleli degli indicatori e screening a livello di mercato in frazioni di secondo.
  • Parquet viene utilizzato come formato di archiviazione locale per tabelle arricchite.
  • DuckDB esegue query analitiche veloci sopra Parquet direttamente su disco senza avviare database pesanti.
  • vectorbt viene utilizzato in un modulo isolato di backtesting.
  • FastAPI e sse-starlette servono i dati e trasmettono i progressi dei calcoli pesanti tramite Server-Sent Events.
  • React 18 con le librerie Lightweight Charts ed ECharts forma un pannello di controllo pulito.

L'architettura è compatta: il backend e il frontend in bundle sono impacchettati in un Dockerfile a due stadi. L'applicazione non ha bisogno di PostgreSQL o Redis esterno—l'intero database viene mantenuto locale.

Funzionalità principali della piattaforma

Lo sviluppatore ha diviso le funzionalità in quattro blocchi chiave: filtraggio, test di ipotesi, monitoraggio del mercato e analisi dei singoli asset.

Dashboard Strategy Screener
Pannello di stato Strategie
Backtesting Factor Search
Backtest Fattori

Screener e strategie integrate

Il sistema include 18 strategie di selezione azionaria pronte all'uso. Il meccanismo di filtraggio gira su Polars: dopo la chiusura del mercato, la pipeline calcola un dataset arricchito, e la query dell'utente verifica le condizioni attraverso l'intera tabella dei ticker. Puoi combinare indicatori standard, volumi e pattern di candele o scrivere i tuoi segnali personalizzati.

Backtesting e ricerca di fattori Alpha

Il testing è diviso in due modalità:

  1. Valutazione individuale dei fattori con calcoli delle metriche IC e IR, rendimenti quantile e spread long-short. Questo aiuta a filtrare il rumore prima di costruire un sistema di trading.
  2. Backtesting completo della strategia con regole di regolamento T+1, slippage, commissioni del broker e stop-loss.

Il modulo di mining dei fattori è implementato in modo interessante. Il sistema cerca combinazioni di rank sul training set, filtra le metriche correlate e valida i risultati su dati out-of-sample. Tuttavia, le regole scoperte non vengono applicate ciecamente: il candidato viene salvato in bozze e richiede conferma manuale prima di essere aggiunto al pool di lavoro.

Monitoring Center Limit Ladder
Monitor Limiti
Sector Analysis Watchlists
Settori Watchlist

Monitoraggio in tempo reale e anomalie

La dashboard include un modulo di monitoraggio live. Puoi impostare regole di trigger basate su livelli di prezzo, indicatori o deviazioni dalle medie. Quando si verifica un evento, il pannello invia un webhook, mostra una notifica del browser e persino pronuncia il ticker ad alta voce tramite la Web Speech API.

Integrazione dei modelli linguistici

Il progetto ha aggiunto l'integrazione LLM tramite un'interfaccia compatibile con OpenAI. Puoi connettere Ollama, DeepSeek o API chiuse. I modelli svolgono due ruoli pratici: generare codice di regole dello screener da descrizioni testuali e comporre un report serale con analisi dei movimenti settoriali dopo la chiusura del mercato.

Come distribuire ed eseguire

Il modo più veloce per lanciare il progetto è tramite Docker Compose:

cp .env.example .env
docker compose up --build

Dopo la compilazione, il pannello si apre a http://localhost:3018.

Per lo sviluppo locale, avrai bisogno di Python 3.11+, Node.js 20, i package manager uv e pnpm:

cp .env.example .env
./dev.sh

Lo script verificherà l'ambiente, installerà le dipendenze del backend tramite uv e del frontend tramite pnpm, poi avvierà FastAPI sulla porta 3018 e il server di sviluppo Vite sulla 3011.

La configurazione è impostata nel file .env:

TICKFLOW_API_KEY=              # Ключ источника данных TickFlow (можно оставить пустым для базового режима)
AI_API_KEY=                    # Ключ LLM-провайдера для генерации стратегий
PORT=3018                      # Порт приложения

Connessione delle tue fonti di dati

Il progetto base è configurato per l'SDK del servizio cinese TickFlow, tuttavia lo sviluppatore ha reso lo strato dati pluggable. Il repository include un plugin Node.js stock-sdk ed esempi di descrizioni dichiarative delle fonti tramite YAML.

Se vuoi adattare il pannello per MOEX, exchange di criptovalute o Yahoo Finance, devi solo implementare l'interfaccia del provider di barre giornaliere e alimentarle in formato Parquet. Tutti gli altri meccanismi—calcoli delle medie mobili, motore di backtesting, grafici Lightweight Charts e sistema di alert—continueranno a funzionare senza modifiche.

Vale la pena provare

Il progetto tick-stock-panel è interessante principalmente per la sua pulizia architetturale. L'autore ha abbandonato i pesanti database relazionali a favore di Polars + DuckDB + Parquet, il che rende il sistema volare su un normale laptop.

Se scambi sul mercato cinese, il progetto può essere utilizzato come strumento di lavoro pronto all'uso fin da subito. Se il tuo interesse è in altri exchange, il codebase del repository servirà come eccellente template per costruire il tuo terminale di analisi personale.

Progetti correlati