
Jupiter Platform
Ottimizzazione Piattaforma Trading
Panoramica
Il Problema
Apex Invest BF aveva una piattaforma di trading per testare strategie su dati storici. Il problema era il tempo: ogni backtest su tre anni di dati storici richiedeva 4 ore e mezza in NodeJS. Con migliaia di strategie da validare e parametri da ottimizzare, iterare era impossibile. Un ricercatore poteva testare al massimo 5-6 strategie al giorno.
L'analisi del codice ha mostrato il problema: cicli for annidati che leggevano milioni di righe CSV una per volta. Ogni tick di mercato veniva caricato dal disco, parsato da stringa a numero, e poi elaborato singolarmente. Tre strati di inefficienza sovrapposti.
La Soluzione
Ho riscritto il motore di calcolo in Python con tre ottimizzazioni fondamentali.
Prima: ho sostituito i loop Python con operazioni NumPy vettorizzate. Invece di processare un tick alla volta, NumPy lavora sull'intero array in un'operazione sola, usando istruzioni SIMD del processore. Per le sezioni più critiche ho usato Numba, che compila il codice Python in C nativo a runtime con JIT: velocità C senza cambiare sintassi Python.
Seconda: ho sostituito i CSV con il formato colonnare Parquet. Un file CSV carica tutto in memoria anche se servono solo 3 colonne su 50. Parquet legge solo le colonne richieste, riducendo l'I/O del 70%. I dati storici compressi in Parquet occupano una frazione rispetto ai CSV originali.
Terza: elaborazione parallela. Ogni strategia gira su un core CPU separato. Il sistema può testare 10 strategie contemporaneamente sullo stesso hardware.
Il sistema si integra con IG.com per dati storici e trading live, calcola drawdown, Sharpe ratio e simulazioni margin call in tempo reale durante ogni test, e usa Monte Carlo per validare la robustezza statistica delle strategie prima di eseguirle con denaro reale.
Il Risultato
Da 4 ore e mezza a meno di 10 minuti per strategia. 95% di tempo risparmiato. Un ricercatore può testare centinaia di strategie in un giorno invece di settimane. L'I/O è sceso del 70% grazie a Parquet.
Funzionalità Chiave
- Backtesting 95% più veloce: da 4+ ore a meno di 10 minuti per strategia
- Operazioni NumPy vettorizzate + Numba JIT per sezioni critiche: calcoli C nativi invece di Python
- Formato Parquet colonnare -70% I/O: legge solo colonne necessarie invece di CSV intero
- Risk management real-time: drawdown, Sharpe ratio, simulazione margin call durante test