>_ DevTrendsfr

Langue

Accueil

Langages

Sections

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarqué Sécurité
Python

Comment créer un bot de trading en Python sans réinventer la roue

Lorsqu'un programmeur décide pour la première fois de se lancer dans le trading algorithmique, tout commence généralement par la création de son propre script. Le script demande des bougies via l'API REST, calcule quelques indicateurs et envoie des ordres. Un mois passe, et le projet se transforme en une construction lourde de gestion des erreurs réseau, de désynchronisation des sockets et de contournements chaotiques pour le contrôle des ordres.

Au lieu d'écrire tout à partir de zéro, il est plus logique d'utiliser un framework prêt à l'emploi. Le projet VeighNa (anciennement connu sous le nom de VN.py) est apparu en 2015. Il compte plus de 43 000 étoiles sur GitHub, et le développement actif se poursuit à ce jour.

Ce que représente la plateforme

VeighNa est un framework open source pour le trading algorithmique en Python. L'architecture interne est construite autour d'un moteur d'événements. Le système n'a pas besoin d'exécuter des boucles d'attente infinies — il réagit aux ticks entrants, aux changements d'état des ordres et aux signaux du minuteur système.

Le projet a une vocation institutionnelle. En Chine, il est utilisé par des courtiers en contrats à terme, des sociétés de gestion d'actifs et des fonds spéculatifs privés. Cela laisse une certaine empreinte sur la base de code.

La plupart des connecteurs intégrés sont adaptés au marché financier chinois (CTP, XTP, HTS). Néanmoins, il existe un adaptateur pour Interactive Brokers permettant de travailler avec les bourses internationales. Si la bourse ou la plateforme crypto requise n'est pas dans la liste, vous devrez écrire votre propre gateway en héritant de la classe de base Gateway.

Modules pour résoudre des tâches pratiques

L'architecture du système se compose de trois parties principales : le cœur, les applications de trading (apps) et les adaptateurs de données.

Pour les stratégies, plusieurs moteurs spécialisés sont fournis :

  • CTA Strategy gère le trading de tendance et contre-tendance standard sur des instruments uniques.
  • Spread Trading aide à mettre en œuvre le trading de paires et l'arbitrage spatial.
  • Option Master contient des outils pour l'évaluation des options, la construction de courbes de volatilité et le calcul des Greeks.
  • Portfolio Strategy se concentre sur les stratégies négociant un panier d'actifs à la fois.

Parmi les détails sympathiques, on note la présence d'interfaces prêtes à l'emploi pour le backtesting. Pour tester une idée sur des données historiques, vous n'avez pas nécessairement besoin d'ouvrir Jupyter Notebook. Le système dispose d'une interface graphique intégrée basée sur PyQt, où vous pouvez exécuter l'optimisation des paramètres et visualiser immédiatement la courbe de capitalisation et les graphiques de drawdown.

Pour le stockage de l'historique, les bases de données relationnelles classiques comme SQLite et MySQL sont prises en charge, ainsi que les bases de données orientées colonnes QuestDB et TDengine, optimisées pour l'entrée et la sortie rapide de séries temporelles.

Le machine learning dans la version 4.0

La quatrième génération du framework a introduit le module vnpy.alpha. Les développeurs admettent honnêtement avoir été inspirés par le projet Qlib de Microsoft.

Le module ferme le cycle de développement pour les stratégies de ML :

  • Génération et traitement des features basés sur l'ensemble d'expressions factorielles Alpha158.
  • Entraînement de modèles de prédiction utilisant LightGBM, Lasso ou le perceptron multicouche (MLP).
  • Transition rapide du notebook de recherche vers l'exécution sur un compte réel ou simulé.

Le dépôt contient des Jupyter notebooks prêts à l'emploi avec des exemples, donc se familiariser avec le pipeline de préparation des données et d'entraînement ne sera pas difficile.

À quoi ressemble le code

Lancer un terminal de trading avec l'ensemble requis de modules peut se faire en une douzaine de lignes à peine. Dans l'exemple ci-dessous, nous assemblons une application avec une connexion gateway CTP et deux modules : l'exécution de la stratégie CTA et le test historique.

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()

Après le lancement, une fenêtre de bureau complète s'ouvrira avec des tableaux d'ordres, des positions, des journaux et des graphiques en chandeliers.

Vaut-il la peine d'être utilisé en production

VeighNa est une plateforme massive. Si vous avez simplement besoin d'envoyer quelques ordres au marché au comptant une fois par jour via l'API REST, le framework semblera trop compliqué.

Cependant, l'outil sera certainement utile si vous recherchez une architecture éprouvée pour le trading événementiel, si vous prévoyez d'écrire vos propres connecteurs, ou si vous voulez un terminal de bureau prêt à l'emploi avec des capacités de gestion des risques et de backtesting. L'essentiel est d'être préparé au fait que certaines documentations et certains commentaires de la communauté sont traduits du chinois via un traducteur.

Projets similaires