Zo bouw je een trading bot in Python zonder het wiel opnieuw uit te vinden
Wanneer een programmeur voor het eerst besluit om algoritmische handel te proberen, begint alles meestal met het maken van een eigen script. Het script haalt candles op via REST API, berekent een paar indicatoren en verstuurt orders. Een maand later verandert het project in een logge constructie van netwerkfoutafhandeling, socket-desynchronisatie en chaotische workarounds voor orderbeheer.
In plaats van alles vanaf nul te schrijven, heeft het meer zin om een kant-en-klaar framework te gebruiken. Het VeighNa-project (voorheen bekend als VN.py) verscheen in 2015. Het heeft meer dan 43 duizend sterren op GitHub, en actieve ontwikkeling gaat tot op de dag van vandaag door.
Wat het Platform Is
VeighNa is een open-source framework voor algoritmische handel in Python. De interne architectuur is gebouwd rond een event engine. Het systeem hoeft geen eindeloze wachtlussen uit te voeren - het reageert op inkomende ticks, orderstatuswijzigingen en systeemtimersignalen.
Het project heeft een institutionele focus. In China wordt het gebruikt door futures brokers, vermogensbeheermaatschappijen en private hedgefondsen. Dit laat een bepaald stempel achter op de codebase.
De meeste ingebouwde connectors out-of-the-box zijn afgestemd op de Chinese financiële markt (CTP, XTP, HTS). Desondanks is er een adapter voor Interactive Brokers voor het werken met internationale beurzen. Als de gewenste exchange of crypto platform niet op de lijst staat, moet je je eigen gateway schrijven door over te erven van de basis Gateway-klasse.
Modules voor het Oplossen van Praktische Taken
De systeemarchitectuur bestaat uit drie hoofdcomponenten: de kern, trading applicaties (apps) en data adapters.
Voor strategieën worden diverse gespecialiseerde engines geleverd:
- CTA Strategy verwerkt standaard trend- en contratrendhandel op individuele instrumenten.
- Spread Trading helpt bij het implementeren van pair trading en ruimtelijke arbitrage.
- Option Master bevat tools voor optiewaardering, volatiliteitscurve-constructie en Grieken-berekening.
- Portfolio Strategy is gericht op strategieën die tegelijkertijd een mandje van activa verhandelen.
Onder de mooie extra's is de aanwezigheid van kant-en-klare interfaces voor backtesting. Om een idee te testen op historische data, hoef je niet perse Jupyter Notebook te openen. Het systeem heeft een ingebouwde grafische interface gebaseerd op PyQt, waar je parameteroptimalisatie kunt uitvoeren en direct de equity curve en drawdown-grafieken kunt bekijken.
Voor het opslaan van historie worden reguliere relationele databases zoals SQLite en MySQL ondersteund, evenals gespecialiseerde columnar stores QuestDB en TDengine, geoptimaliseerd voor snelle time series input en output.
Machine Learning in Release 4.0
De vierde generatie van het framework introduceerde module vnpy.alpha. De ontwikkelaars geven eerlijk toe dat ze geïnspireerd werden door Microsofts Qlib-project.
De module sluit de ontwikkelingscyclus voor ML-strategieën:
- Feature-generatie en -verwerking gebaseerd op het Alpha158 factor expression set.
- Training van voorspellingsmodellen met LightGBM, Lasso of multilayer perceptron (MLP).
- Snelle overgang van onderzoeksnotebook naar uitvoering op een live of gesimuleerde account.
De repository bevat kant-en-klare Jupyter notebooks met voorbeelden, dus wennen aan de datapreparatie en training pipeline zal niet moeilijk zijn.
Hoe de Code Eruitziet
Het opstarten van een trading terminal met de benodigde set modules kan letterlijk in een dozijn regels. In het onderstaande voorbeeld stellen we een applicatie samen met een CTP gateway-verbinding en twee modules: CTA strategie-uitvoering en historisch testen.
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()
Na het opstarten opent zich een volledig desktopvenster met ordertabellen, posities, logs en candlestick-grafieken.
Is het de Moeite Waard om in Productie te Gebruiken
VeighNa is een enorm platform. Als je alleen een paar orders naar de spotmarkt hoeft te sturen via REST API, zal het framework overcomplicated aanvoelen.
Echter, het gereedschap zal zeker van pas komen als je op zoek bent naar een tijdgebonden architectuur voor event-driven handel, van plan bent om je eigen connectors te schrijven, of een kant-en-klare desktop terminal met risicobeheer en backtesting-mogelijkheden wilt. Het belangrijkste is om voorbereid te zijn op het feit dat sommige documentatie en community-opmerkingen vertaald zijn uit het Chinees via een vertaler.
Gerelateerde projecten