Je suis le marchand d'algo de maman: à la recherche de frameworks gratuits pour tester des hypothèses et lancer en mode bataille (Python)

Supposons que vous ayez déjà eu quelque chose à voir avec le marché boursier. Ou, ne pas en avoir, s'est laissé emporter par le thème chaud (mais ces derniers mois déjà nettement refroidi ...) de la crypto-monnaie. Supposons également que vous êtes allé encore plus loin et avez décidé que le «contrôle manuel» des vols est déjà inefficace et que vous auriez besoin d'automatiser vos idées brillantes et de transformer le singe en quelque chose de plus technologique. Exactement à ce stade, les questions que je voudrais aborder dans l'article commencent, à savoir: existe-t-il une solution prête à l'emploi pour le backtesting des idées de trading (gratuit est souhaitable), où obtenir des données historiques (idéalement gratuites), et aussi quoi faire avec tout cela plus tard, c'est-à-dire Quelles sont les solutions pour le lancement au combat de systèmes de trading automatisés qui ont été testés avec succès lors d'un backtest? Remarque un et deux: l'article est écrit pour les bibliothèques et les systèmes basés sur Python, je ne peux pas juger comment l'accessibilité pour d'autres langues peut être; la priorité est donnée aux marchés étrangers et / ou aux crypto-monnaies; je ne présume pas non plus de juger de la pertinence du marché boursier russe.

image

Ce matériel n'est pas un guide ou une revue exhaustive, mais plutôt une proposition d'échange d'idées de travail sur la base d'une recherche pratique d'un ensemble de travail normal pour un usage personnel. Face à la nécessité d'automatiser même des stratégies de trading simples (momentum trade, suivi de tendance, etc.), un certain nombre de problèmes se sont posés immédiatement. Précisons ce que nous devons:

  • Formuler une hypothèse et l'algorithmiser
  • Testez l'hypothèse sur des données historiques. Une note super importante: vous devez également comprendre quelles données historiques entrent dans la catégorie des «adaptées» pour une utilisation dans le backtest des systèmes de trading. Je ne m'engagerai pas à écrire un article séparé à ce sujet maintenant (bien que cela l'exige, mais il y a beaucoup de documents sur ce sujet dans le domaine public), je décrirai quelques problèmes clés avec les données historiques: les entreprises qui ont abandonné les indices ou en faillite sont-elles prises en compte, sont les actions divisées, et aussi comment la rentabilité est considérée - en tenant compte des dividendes (rendement total) ou non. Je m'excuse vraiment pour la brièveté, mais ce post n'est pas encore à ce sujet, et ce n'est pas un ensemble exhaustif d'exigences de données.
  • Si la vérification est réussie, comment transférer l'hypothèse sur un vrai compte de trading, en ajoutant un système de gestion des risques, de gestion des ordres, de rééquilibrage et d'évaluation du résultat.

Il est maintenant temps de faire deux digressions importantes concernant l '«introduction» avec laquelle nous travaillons dans cet article. Le premier est le choix du langage: beaucoup diront que C # pour créer des robots de trading / systèmes de trading automatisés est beaucoup plus courant et plus rapide que Python. Je ne peux pas être en désaccord, mais je dois prendre en compte le deuxième point important - la différence entre le trading algorithmique et l'automatisation des systèmes de trading. D'après des conversations avec des praticiens du trading quantitatif et simplement à partir de documents théoriques trouvés, on peut conclure que le trading algorithmique (souvent utilisé comme synonyme de «trading à haute fréquence (HFT)» est une tactique pour travailler avec des ordres, avec des flux de données vers différents échanges, en fonction de la vitesse leur accès (et en fonction des millisecondes), et là exclusivement C # peut faire face aux tâches. Dans le même temps, les tâches que le trader algo «domestique» poursuit sont très probablement Python, car nous visons à automatiser les systèmes de trading spéculatifs à court et moyen terme, dont le chiffre d'affaires du portefeuille n'atteint pas 100% par jour, et le nombre d'ordres et de besoins la vitesse de leur exécution ne dépasse pas un certain seuil raisonnable qui sépare le trading haute fréquence et le trading automatisé à court / moyen terme.

Comment les systèmes de trading sont évalués, comment les algorithmes de trading sont écrits et ainsi de suite - tout cela est maintenant hors de portée, sinon il n'y a aucun moyen de s'intégrer dans l'article. Regardons un exemple spécifique - j'ai un système de trading basé sur celui décrit dans le livre «Stocks on the Move: battre le marché avec les stratégies de momentum des hedge funds». La stratégie de trading est écrite en Python et ne comprend aucun élément super-complexe. La première chose dont vous avez besoin est la possibilité de tester la stratégie sur des données historiques. Je n'ai aucun problème à discuter du choix du courtier, j'utilise les services de courtiers interactifs et ils ont déjà une API native pour Python. Néanmoins, la possibilité d'un backtest même avec des abonnements de données payants n'y est pas prévue. Voici ce que j'ai réussi à trouver pour le backtest:

1) Tout le monde entend - Quantopian.com

Seul Python 2.7 est pris en charge, il est possible de créer et de tester des systèmes de trading gratuitement, il existe des données historiques gratuites à utiliser (actions américaines et futures), en ligne est disponible, l'installation locale n'est pas possible. Je n'écrirai pas une longue critique, je décrirai immédiatement les problèmes rencontrés même au niveau de base: puisqu'ils ont supprimé la possibilité de se connecter à un compte de courtage, il n'y a aucun moyen d'utiliser les systèmes de trading développés et testés pour le trading en direct. Cela impose immédiatement des restrictions (certaines d'entre elles aideront à résoudre la zipline-live, plus sur celle ci-dessous), car Quantopian est basé sur la bibliothèque zipline et, en outre, il existe certaines fonctions qui ne fonctionnent qu'à l'intérieur de leur système, donc lorsque vous souhaitez transférer votre système auto-écrit et testé vers la même API native du courtier, vous devrez en réécrire la moitié pour fonctionner, et décidez également quoi faire avec les extraits de code basés sur la tyrolienne. Le moins (pour certains systèmes) peut également être considéré comme l'interdiction des tickers dynamiques, mais pour l'instant nous laissons cette thèse sans détails.

Le principal avantage de Quantopian (IMHO) (en plus d'un système gratuit pour les tests et les données historiques) est une communauté très active, beaucoup de messages sur l'analyse et les nuances des systèmes de construction. Important: les données historiques disponibles là-bas prennent en compte certains des problèmes (vous pouvez non seulement travailler avec des sociétés actives, mais aussi obtenir des listes d'indices des années passées à prendre en compte abandonnés, en faillite, etc.), les scissions sont également prises en compte, et il y en a même (!) Les jeux de données Total Return, c'est-à-dire que vous pouvez utiliser des indicateurs de rentabilité avec dividendes.

2) veut vraiment être entendu par tout le monde, mais ne l'a pas encore fait - Backtrader.com

Python 2.7, 3.2-3.6 est pris en charge, il est disponible uniquement pour une utilisation sur la machine locale.
Il semble qu'il y ait intégration avec les courtiers et il sera possible de lancer des systèmes utilisant cette bibliothèque au combat avec des efforts d'intégration minimaux. Franchement - c'est très douteux, je n'ai vu aucun exemple vivant, la communauté est presque morte - il y a du silence sur le forum. L'auteur de la bibliothèque en fait la promotion active sur Quora et d'autres ressources. Il n'y a pas de données historiques, vous devez donc acheter ou rechercher des sources gratuites - mais là commencent les problèmes des «survivants», des dividendes (qu'ils soient ou non inclus dans les données), des scissions et d'autres choses. Je serai heureux d'obtenir de vrais commentaires sur la pratique de l'utilisation de cette bibliothèque.

3) QuantConnect - quantconnect.com

Il s'agit d'une plate-forme en ligne (prenant en charge Python, respectivement), offrant à la fois des données, un backtest et une intégration avec des courtiers populaires. Mais en même temps, disons que pour pouvoir vivre en direct via Interactive Brokers, vous devez payer un minimum de 20 $ par mois pour vous abonner à QuantConnect, et cela ne prend pas en compte les abonnements aux données du courtier, etc.
Mon opinion subjective est que la plate-forme n'est pas très pratique pour une utilisation constante, d'une manière ou d'une autre, tout est trop encombré et incommode, plus payé, en plus, il a été initialement écrit en C # et juste emballé pour que vous puissiez utiliser Python. Donc, après avoir essayé de tester plusieurs stratégies là-bas, j'ai refusé de l'utiliser davantage. Bien que nous devions rendre hommage - la communauté y est moins active, il y a beaucoup de matériel sur les forums et les problèmes peuvent être rapidement résolus. Je serais heureux si vous partagez de véritables critiques - peut-être que je n'avais tout simplement pas d'expérience utilisateur.

4) QuantRocket - quantrocket.com

A en juger par la description - c'est juste une «chanson». Il y a tout - installation en ligne et locale, et backtesting, et les données historiques qui peuvent être collectées auprès du courtier ou fournies par vous-même (pour 9 $ par mois), et immédiatement l'intégration avec les courtiers, et l'intégration est si bonne qu'ils promettent de ne rien réécrire vous devrez ... Et ils promettent même que si vous étiez auparavant intéressé par Quantopian et que vous avez écrit des choses sur la tyrolienne, ils aideront à la transition vers leur plate-forme et vers la bibliothèque interne (Moonshot), ce qui permettra le trading en direct via un courtier à mettre en œuvre avec un minimum d'effort ... semble parfait sinon pour un sur "mais" - au moins 30 $ par mois pour avoir l'opportunité de tester comme tout le monde vraiment. Je n'ai pas osé, car il y a des mois qui ne nécessitent pas votre participation au marché (par exemple, tous les filtres pour entrer sur le marché montrent "restez assis") et puis une redevance de 30 $ pour l'opportunité de tester des hypothèses semble trop injustifiée. Mais je serai reconnaissant pour de véritables critiques - qui a essayé, quels sont les avantages et les inconvénients, etc. Un autre point embarrassant est la liaison à la plate-forme et à la bibliothèque, qui n'est utilisée que sur celle-ci, est ensuite lourde d'une augmentation des «coûts de commutation», c'est-à-dire demain, ils livreront au lieu de 30 $ pour un tarif simple de 150 $, et vous l'avez lié à leur bibliothèque Moonshot unique et déployé via leur plateforme ... Comme on dit, vos œufs dans un même panier ...)

5) Zipline & Zipline-live (http://www.zipline.io, www.zipline-live.io )

Il est installé localement, fonctionne avec Python 2.7 et 3.5 pour Zipline et seulement 2.7 pour zipline-live.
Nous sommes arrivés au paquet chéri, qui, selon mes observations, est le plus souvent utilisé dans la communauté des amateurs de systèmes de trading automatisés à la maison.
Ce que nous avons: la bibliothèque zipline, qui est la pierre angulaire du moteur quantopien (voir point 1) et son frère cadet, zipline-live, qui prend en charge l'intégration avec Interactive Brokers et vous permet d'exécuter des algorithmes créés à l'aide de zipline en production avec un minimum de modifications. En bref sur l'histoire du problème - quand il y a quelques années, chez Quantopian, ils ont décidé d'abandonner le commerce en direct, la communauté est devenue agitée, les eaux ont moussé et le résultat des efforts collectifs est apparu (y compris l'équipe Quantopian, qui a promis de soutenir le développement de la bibliothèque en direct sur une base désintéressée). Après cela, Zipline-live est devenu, en fait, le seul (?) Moyen pratique et gratuit (et sans inscription :) d'adapter les systèmes testés sur Quantopian (ou localement sur tyrolienne) au vrai trading via des courtiers interactifs (avec lesquels il y a intégration, mais sans nombre certaines fonctions importantes et pas si tyroliennes). Que dire de ce bouquet:

  • zipline vous convient localement si vous disposez d'une source fiable de données historiques ou si vous disposez de suffisamment de jeux de données quandl qui sont intégrés gratuitement dans la bibliothèque. Il convient de garder à l'esprit que la bibliothèque ne prend pas en charge la traduction des données en ligne, et vous devrez la télécharger puis effectuer un téléchargement pour le backtest ( ici vous trouverez plus de détails à ce sujet)
  • zipline-live est en théorie approprié si l'intégration avec IB est implémentée normalement, et les algorithmes transférés de Quantopian n'auront pas besoin de traitement et d'ajustement significatifs en raison des fonctions non implémentées dans zipline-live.

6) QsTrader - github.com/mhallsmoore/qstrader

Il s'agit d'une bibliothèque des créateurs du portail quantstart, d'une communauté et d'un ensemble de matériel pédagogique, de conférences, etc. Installé localement, utilise Python 3 et supérieur. Il n'y a pas de réelle opportunité de trading via un courtier, mais ils promettent d'ajouter. S'appuie en grande partie sur la pile habituelle de Data Science de Python - pandas, numpy, scipy, etc., vous devrez donc l'installer en une seule fois. Je n'ai pas pu obtenir d'estimations objectives de la prévalence de cette bibliothèque et je dirai franchement - je ne l'ai pas essayé dans la pratique, car à en juger par l'historique des mises à jour, le travail sur celui-ci est inactif, les fonctions ne sont pas ajoutées, ce qui signifie qu'il ne fonctionne pas pour un système complet, même «domestique» approprié, mais s'il y a des résultats de son utilisation et qu'une opinion personnelle se forme - partagez, soudain, cette solution est meilleure que d'autres.

7) Ensuite, je vais lister les bibliothèques que j'ai réussi à trouver, mais je ne peux pas en dire beaucoup à leur sujet. Le plus souvent, ils sont soutenus exclusivement par les auteurs des blogs qui les ont créés, et ils n'ont pas la capacité de s'intégrer à un courtier, ce qui signifie qu'il s'agit simplement de backtest sans possibilité d'être utilisé au combat, sans communauté et avec un rythme de développement lent, c'est-à-dire ne remplit pas toutes les tâches assignées.

- bt (Backtesting pour Python)
- commerce de système

Résumant les résultats intermédiaires, je partage les conclusions subjectives:

  • Si cela ne vous dérange pas d'utiliser des plates-formes en ligne qui deviennent obsolètes Python 2.7 et que vos instruments cibles dans les stratégies sont les actions / contrats à terme sur les sites américains (et le courtier IB), alors une combinaison de Quantopian + zipline-live sera pratique et définitivement gratuite (!) dont vous recevrez gratuitement des données historiques (± répondant aux critères de qualité), un IDE gratuit pour tester les hypothèses, ainsi qu'une bibliothèque locale qui vous permet d'intégrer vos réalisations avec un compte de courtage et de lancer le système dans un vol de combat, en tenant compte de toutes les clauses et une combinaison de limites qui ont été ci-dessus décrit. Personnellement, j'ai choisi cette option pour vous en raison de la commodité, des fonctionnalités de base gratuites et d'une communauté très active. Dans le prochain article, je vous dirai combien il était facile (ou pas facile) de tester et de transférer la stratégie des stocks de momentum de Quantopian en ligne vers zipline-live sur la machine locale, comment l'intégration avec le compte de courtage en IB dans cette bibliothèque est bien établie, et partagerai également les détails de l'utilisation du natif API Python d'IB.
  • Si la priorité est une installation locale, un contrôle total sur le système et ne dérange pas la nécessité de télécharger des données historiques sous forme de bundle de données pour tester les hypothèses, ou s'il existe une source de ces données ou est libre de quandl, alors une solution possible serait le bundle Zipline + Zipline-live, qui Vous pouvez mettre en œuvre des stratégies testées sur une machine locale sur des données historiques (propres ou gratuites) via IB et tout cela est gratuit dans le cadre des fonctionnalités des bibliothèques indiquées et du courtier API Python.

  • Si vous ne pouvez pas ou ne voulez pas ouvrir un compte avec des courtiers interactifs, alors dans l'ensemble, une grande partie de la liste ci-dessus fera l'affaire, car QuantConnect, par exemple, fonctionne avec d'autres courtiers qui prennent également en charge le trading FX / Crypto, etc. Et si les tâches, en principe, n'ont pas besoin de faire du trading en direct via un courtier, vous pouvez essayer toutes les bibliothèques / plates-formes décrites pour le backtesting et choisir celle qui répond le mieux à vos tâches.

PS En conclusion, je tiens à noter que l'importance de choisir une plate-forme / bibliothèque n'est pas seulement pratique, mais aussi «l'évolutivité» des systèmes. Disons que j'ai développé quelque chose d'intelligible et l'ai testé sur la tyrolienne. Il a ensuite décidé de l'implémenter sans backtest d'aucun courtier via son API - et commence ici un million de détails supplémentaires que vous ne tiendrez pas en compte en mode sandbox - comment les ordres sont exécutés, comment votre système traite dans les différents modes de trading, et si il y a un écart / une session supervoltaic post-trading après le rapport trimestriel et ainsi de suite ... Par conséquent, à mon avis subjectif, il est important de choisir un tel assemblage que le code fonctionne à la fois pour le backtest et la mise en œuvre du système commercial en bataille, puis il corrigera les défauts, h d'améliorer la qualité des deux.

Source: https://habr.com/ru/post/fr434244/


All Articles