Come Creare un Trading Bot in Python Senza Reinventare la Ruota
Quando un programmatore decide per la prima volta di provare il trading algoritmico, di solito tutto inizia con la creazione di un proprio script. Lo script richiede le candele tramite REST API, calcola un paio di indicatori e invia ordini. Passa un mese, e il progetto si trasforma in una costruzione ingombrante di gestione degli errori di rete, desincronizzazione dei socket e workaround caotici per il controllo degli ordini.
invece di scrivere tutto da zero, ha più senso utilizzare un framework già pronto. Il progetto VeighNa (precedentemente noto come VN.py) è nato nel 2015. Ha oltre 43 mila stelle su GitHub e lo sviluppo attivo continua ancora oggi.
Cosa Rappresenta la Piattaforma
VeighNa è un framework open-source per il trading algoritmico in Python. L'architettura interna è costruita attorno a un motore di eventi. Il sistema non ha bisogno di eseguire cicli di attesa infiniti: reagisce ai tick in entrata, ai cambiamenti di stato degli ordini e ai segnali del timer di sistema.
Il progetto ha un focus istituzionale. In Cina, viene utilizzato da broker di futures, società di gestione patrimoniale e fondi hedge privati. Questo lascia un certo imprinting sul codebase.
La maggior parte dei connettori integrati out of the box sono personalizzati per il mercato finanziario cinese (CTP, XTP, HTS). Tuttavia, esiste un adapter per Interactive Brokers per lavorare con le borse internazionali. Se lo scambio o la piattaforma crypto richiesta non è nell'elenco, dovrai scrivere il tuo gateway personale ereditando dalla classe base Gateway.
Moduli per Risolvere Compiti Pratici
L'architettura del sistema è composta da tre parti principali: il core, le applicazioni di trading (apps) e gli adapter dei dati.
Per le strategie, vengono forniti vari motori specializzati:
- CTA Strategy gestisce il trading trend e contro-trend standard su strumenti singoli.
- Spread Trading aiuta a implementare il pair trading e l'arbitraggio spaziale.
- Option Master contiene strumenti per la valutazione delle opzioni, la costruzione di curve di volatilità e il calcolo dei Greeks.
- Portfolio Strategy è focalizzato su strategie che scambiano un paniere di asset contemporaneamente.
Tra i dettagli interessanti c'è la presenza di interfacce pronte per il backtesting. Per testare un'idea sui dati storici, non è necessariamente necessario aprire Jupyter Notebook. Il sistema ha un'interfaccia grafica integrata basata su PyQt, dove è possibile eseguire l'ottimizzazione dei parametri e visualizzare immediatamente il grafico dell'equity curve e i drawdown.
Per la memorizzazione della cronologia, sono supportati database relazionali regolari come SQLite e MySQL, così come archivi columnar specializzati come QuestDB e TDengine, ottimizzati per l'input e output rapido di serie temporali.
Machine Learning nella Release 4.0
La quarta generazione del framework ha introdotto il modulo vnpy.alpha. Gli sviluppatori ammettono onestamente di essere stati ispirati dal progetto Qlib di Microsoft.
Il modulo chiude il ciclo di sviluppo per le strategie ML:
- Generazione e elaborazione delle feature basate sul set di espressioni dei fattori Alpha158.
- Training dei modelli di previsione utilizzando LightGBM, Lasso o perceptron multistrato (MLP).
- Transizione rapida dal notebook di ricerca all'esecuzione su un account reale o simulato.
Il repository contiene Jupyter notebook pronti all'uso con esempi, quindi familiarizzare con la pipeline di preparazione dei dati e training non sarà difficile.
Come Appare il Codice
Avviare un terminale di trading con il set richiesto di moduli può essere fatto in letteralmente una dozzina di righe. Nell'esempio qui sotto, assembliamo un'applicazione con una connessione gateway CTP e due moduli: esecuzione della strategia CTA e test storico.
from vnpy.event import EventEngine
from vnpy.trader.engine import MainEngine
from vnpy.trader.ui import MainWindow, create_qapp
from vnpy_ctp import CtpGateway
from vnpy_ctastrategy import CtaStrategyApp
from vnpy_ctabacktester import CtaBacktesterApp
def main():
qapp = create_qapp()
event_engine = EventEngine()
main_engine = MainEngine(event_engine)
main_engine.add_gateway(CtpGateway)
main_engine.add_app(CtaStrategyApp)
main_engine.add_app(CtaBacktesterApp)
main_window = MainWindow(main_engine, event_engine)
main_window.showMaximized()
qapp.exec()
if __name__ == "__main__":
main()
Dopo l'avvio, si aprirà una finestra desktop completa con tabelle degli ordini, posizioni, log e grafici a candele.
Vale la Pena Usarlo in Produzione
VeighNa è una piattaforma massiccia. Se hai solo bisogno di inviare un paio di ordini al mercato spot una volta al giorno tramite REST API, il framework sembrerà troppo complicato.
Tuttavia, lo strumento tornerà sicuramente utile se stai cercando un'architettura collaudata nel tempo per il trading event-driven, se pianifichi di scrivere i tuoi connettori personalizzati, o se vuoi un terminale desktop pronto all'uso con gestione del rischio e funzionalità di backtesting. La cosa principale è essere preparati al fatto che parte della documentazione e dei commenti della community sono tradotti dal cinese tramite traduttore.
Progetti correlati