MARGO

Actualité

Tutoriel : installer un environnement de développement de stratégies de trading et l’adapter au monde des cryptomonnaies

Par Eric Fokou Data Scientist @fokou_eric

01/06/2018

Introduction

De nos jours, la technologie est devenue indispensable au secteur de la finance.  Elle y apporte de l’innovation, de la rapidité et de la compétitivité. Le besoin d’émettre des transactions financières à haute fréquence, couplé avec celui de traiter des volumes importants de données, ont fait de la technologie l’un des principaux moteurs de la finance.

Ces dernières années nous avons également été les témoins de deux phénomènes : l’intelligence artificielle et les crypto-monnaies.

L’intelligence artificielle occupe aujourd’hui une place primordiale dans les sociétés de gestion d’actifs. Les programmes d’intelligence artificielle sont utilisés pour déterminer efficacement les meilleures périodes de Trading (achat ou vente), les actifs à considérer mais aussi la quantité adéquate à acheter ou à vendre.

Parallèlement à cela, on constate que de nombreuses personnes détiennent des crypto-monnaies (Bitcoin, Ethereum, Ripple…). Pour la plupart d’entre elles, leur stratégie est de garder leur position en espérant que leurs actifs prennent de la valeur sur les marchés. Cependant si l’on se base sur le cours du Bitcoin en début d’année 2018 (figure 1), on se rend compte que cette stratégie n’est peut-être pas la plus efficace.

En effet on observe une réelle augmentation du prix en fin d’année 2017, mais celui-ci a nettement chuté dès le début de l’année 2018. Aujourd’hui, le cours du Bitcoin est de plus en plus volatile. Quelle est alors la bonne stratégie à adopter face aux réactions du marché ?

Le développement d’une stratégie de Trading passe par plusieurs phases, notamment celle durant laquelle nous devons définir les événements susceptibles de générer du signal. Une fois cela fait, nous devons faire des tests préliminaires (Backtesting) sur notre ordinateur, afin d’optimiser notre stratégie et d’évaluer les performances et la robustesse de celle-ci. Bien sûr, tout cela repose fortement sur la théorie ou la conviction sous-jacente selon laquelle toute stratégie qui a bien fonctionné dans le passé fonctionnera probablement aussi bien à l’avenir, et que toute stratégie qui a mal fonctionné dans le passé fonctionnera mal dans le futur.

Tout cela peut rapidement devenir très contraignant. Dans tous les cas, il est crucial de disposer d’un environnement de travail stable pour nous permettre de nous focaliser sur le développement d’une stratégie.

Nous proposons donc d’apporter une solution sur la création d’un environnement de travail robuste permettant d’explorer (Backtester) efficacement des stratégies de Trading. Cet environnement est utile à toutes personnes intéressées par le développement d’algorithmes de Trading. Pour cela nous proposons dans ce tutoriel de présenter la configuration nécessaire permettant d’obtenir un environnement de Trading local sur notre poste. Cet environnement permettra ainsi de tester des stratégies (nous en présenterons quelques-unes dans de futurs articles) sur des actifs des marchés traditionnels (NYSE, NASDAQ, …). Ensuite nous montrerons comment intégrer les données de différentes crypto-monnaies dans notre environnement de Trading.

Nous mettons en garde tout lecteur de cet article car le développement d’une stratégie nécessite des connaissances dans de nombreux domaines : mathématiques, statistiques, développement de logiciels, microstructure des marchés et même psychologiques. Nous n’allons pas couvrir ces sujets dans cet article car nous ne proposons aucune stratégie efficace vous permettant de gagner sur les marchés. En revanche, nous proposons de vous aider dans la construction d’un environnement efficace vous permettant de vous focaliser et de Backtester rapidement des idées que vous pourriez avoir afin d’être plus confiant sur les actions à prendre dans le futur.

 

N’oubliez surtout pas : il ne faut investir que l’argent que l’on est prêt à perdre.

 

Création d’un environnement de Backtesting

Le développement d’un environnement de Backtesting peut être très contraignant et il faut être vigilant car il est facile de commettre des erreurs dans l’implémentation de cet outil.

Un outil de Backtesting se compose généralement des composants essentiels suivants :

Un gestionnaire de données (DataHandler) : qui est une interface en charge de la gestion des données des marchés.

Une stratégie (Strategy) : qui est une interface récupérant des données de marché et générant des Signaux. Un signal défini une direction (LONG ou COURT) sur un actif (symbole).

Un portefeuille (Portofolio) : qui est une interface assurant la gestion des ordres par rapport à nos positions actuelles pour une stratégie donnée.

Un gestionnaire de risque (RiskManagement) : qui assure la gestion des risques dans l’ensemble du portefeuille, y compris la taille des positions à prendre.

Un gestionnaire d’exécution (ExecutionHandler) : qui envoie des ordres au courtier (broker) et reçoit un signal indiquant si le stock a bien été acheté ou vendu. Ce module permet de gérer les frais associés aux transactions, notamment les frais liés à l’ordre même, la commission du broker et les frais liés aux retards d’exécution (slippage) s’il est important de modéliser cela.

En plus de ces composants, il y en a beaucoup d’autres que nous pouvons ajouter à notre Backtester, en fonction de la complexité.

De plus un Backtester doit fournir une large gamme de mesures de performance permettant d’évaluer une stratégie, à savoir : la volatilité, la rentabilité (Return), le Sharpe-ratio, le Sortino-ratio, le Drawdown et bien d’autres encore.

Afin de s’affranchir de toute cette complexité nous recommandons d’utiliser une API spécialisée qui fournit tous ces composants. Nous utilisons donc dans cet article l’API Zipline (http://www.zipline.io/appendix.html ).

Nous allons donner dans la section suivante les étapes à suivre afin de créer notre environnement basé sur l’API Zipline.

 

Procédure d’installation

Dans cette partie nous allons configurer un environnement de Trading local permettant de manipuler des actifs (AAPL, GOOG, FB, AMZN, …) échangés sur des places boursières bien connues (NYSE, NASDAQ, …).  Nous allons utiliser l’API Zipline.

Nous allons utiliser des versions spécifiques de paquets à chaque fois ; nous ne garantissons pas que cela marchera si vous êtes amenés à utiliser des versions plus récentes ou antérieures.

Système d’exploitation

Nous avons utilisé UBUNTU 16.04 LTS comme système d’exploitation. Vous pouvez obtenir une version gratuite via l’adresse suivante : http://cdimage.ubuntu.com/netboot/16.04/.

Pour l’installation vous pouvez vous référer à la procédure indiquée ici : https://doc.ubuntu-fr.org/installation

Installer Anaconda

Afin de créer notre environnement de travail Python, installez une version d’anaconda. Nous avons utilisé la version 5.1 que vous pouvez obtenir via l’adresse suivante : https://repo.continuum.io/archive/Anaconda3-5.1.0-Linux-x86_64.sh .

Vous pouvez la télécharger facilement en utilisant la commande wget ( https://doc.ubuntu-fr.org/wget ).

Une fois téléchargée, procédez à l’installation avec la commande suivante :

bash Anaconda3-5.1.0-Linux-x86_64.sh zz

 

Installation de paquets spécifiques

Afin de faciliter le processus de création de l’environnement et de gérer les potentiels problèmes de dépendance entre les versions de paquets que vous pourriez rencontrer, nous avons créé une copie de notre environnement de travail (fichier requirement.txt téléchargeable ici).

Afin de pouvoir utiliser ce fichier et cloner ainsi notre environnement, saisissez la commande suivante :

conda create –name zipline –file requirements.txt

Cette commande va donc créer un environnement avec le nom zipline et va installer des versions spécifiques de paquets.

Afin d’activer l’environnement saisir la commande suivante :

source activate zipline

Vous pouvez obtenir une liste de commandes nécessaires pour la gestion des environnements Anaconda via l’adresse suivante :https://conda.io/docs/user-guide/tasks/manage-environments.html

Saisissez ensuite les deux commandes suivantes :

sudo apt-get update

sudo apt-get install build-essential

Ces commandes permettent d’obtenir des librairies nécessaires permettant de compiler un paquet Debian. Elles vont nous permettre par exemple d’obtenir les compilateurs gcc et g++, et d’autres utilitaires.

 

Installation de zipline

Zipline ( http://www.zipline.io/index.html ) est une bibliothèque de trading algorithmique. C’est un système basé sur les événements pour le Backtesting (https://www.quantstart.com/articles/Event-Driven-Backtesting-with-Python-Part-I ).

Zipline est utilisé en production comme moteur de Backtesting et de Trading sur Quantopian (https://www.quantopian.com/home) qui est une plate-forme gratuite pour la construction et l’exécution de stratégies de Trading.

C’est une bibliothèque facile d’utilisation nous permettant de nous concentrer sur le développement d’algorithmes. Nous avons utilisé la version 1.2.0 de zipline.

Afin de l’installer, saisissez la commande suivante :

pip install zipline==1.2.0

Zipline utilise la notion de Bundle ( http://www.zipline.io/bundles.html ). Un Bundle est une base de données contenant les données historiques d’actifs sur différents marchés. Les Bundles nous permettent ainsi de précharger toutes les données dont nous aurions besoin pour exécuter des Backtests.

La première étape de l’utilisation d’un Bundle consiste à télécharger les données sur la plateforme Quandl (https://www.quandl.com/). Cette étape peut prendre un certain temps car elle implique le téléchargement et le traitement d’un volume important de données.  Nous avons besoin d’une clé API Quandl (https://docs.quandl.com/docs#section-authentication) pour cette opération.

Afin d’obtenir les données du Bundle quantopian-quandl, saisissez la commande suivante :

QUANDL_API_KEY=<your_key> zipline ingest -b quantopian-quandl

Dans la seconde partie de l’article nous allons montrer comment créer notre Bundle Blockchain qui s’appuie sur les données des crypto-monnaies.

Afin d’avoir la liste des bundles, vous pouvez taper la commande :

zipline bundles

Vous devriez voir apparaître le Bundle qauntopian-quandl avec la date de création.

 

Test de notre environnement

Notre environnement est prêt pour un test. Nous allons utiliser à cet effet le code buyapple.py fourni ici. Vous pouvez obtenir des exemples de code via l’adresse suivante : https://github.com/quantopian/zipline/blob/master/zipline/examples/

Pour une compréhension de chacune des instructions, nous vous invitons à regarder la documentation officielle ( http://www.zipline.io/appendix.html ).

Le code présenté dans buyapple.py consiste tout simplement à acheter des actions APPLE et à garder la position.

Afin d’exécuter ce code, saisissez la commande suivante :

zipline run -f buy_and_hold.py –capital-base 500 –bundle quantopian-quandl -s 2018-1-1 -e 2018-4-30

Les différentes options (http://www.zipline.io/beginner-tutorial.html#running-the-algorithm) fournies ci-dessus permettent respectivement de :

-f : indiquer le fichier à exécuter

–capital-base : indiquer le capital initial pour la simulation

–bundle : indiquer la base de données à considérer

-s : indiquer la date de début de la simulation

-e : indiquer la date de fin de la simulation

Après l’exécution du code, vous devriez obtenir la figure suivante :

La première figure indique la valeur de notre portefeuille (cash + valeur totale des actifs) et la figure suivante indique le prix unitaire d’une action. Il est donc normal que notre portefeuille se comporte de façon similaire au marché car nous avons pris une position longue.

Dans la section suivante nous allons montrer comment créer un Bundle Blockchain qui utilise les données des principales crypto-monnaies. Ensuite nous pourrons utiliser ce Bundle afin de créer nos stratégies sur les marchés des crypto-monnaies.

 

Création d’un Bundle Blockchain

Dans la première partie de l’article, nous avons montré comment utiliser des données d’actifs financiers traditionnels, APPLE pour l’exemple.

Dans cette section nous allons montrer comment créer un Bundle en utilisant les données des crypto-monnaies. Les différentes étapes à suivre sont décrites ci-dessous.

Cette section s’inspire des travaux suivants : http://www.prokopyshen.com/create-custom-zipline-data-bundle. Vous pouvez également consulter la documentation officielle en ligne : http://www.zipline.io/bundles.html#writing-a-new-bundle

Définition des fichiers CSV des actifs à intégrer dans le Bundle

Zipline utilise le format : open-high-low-close-volume (OHLC) pour stocker les données sur les actifs. Pour cela vous devez créer des fichiers CSV sous ce format pour chaque crypto-monnaie que vous souhaitez intégrer dans le Bundle. Vous pouvez utiliser les deux fichiers fournis ici ; ils contiennent l’historique des prix du Bitcoin et de l’Ethereum sur l’année 2018.

IMPORTANT : Les jours définis dans les fichiers sont ceux pendant lesquels le marché NYSE est ouvert car il s’agit du calendrier utilisé par défaut dans Zipline ( http://www.zipline.io/trading-calendars.html ). Afin de définir un nouveau calendrier, par exemple permettant d’acheter ou vendre des actifs tous les jours de l’année, veuillez vous référer à la page suivante : http://www.zipline.io/trading-calendars.html.

 

Définition du module responsable de la création du Bundle

Le code permettant de créer un Bundle à partir d’un ensemble de fichier csv est fourni dans le fichier load_csv.py. Pour une explication détaillée veuillez consulter la documentation à l’adresse suivante : http://www.zipline.io/appendix.html#bundles.

Copiez le fichier load_csv.py dans zipline/data/bundles/.

Afin d’avoir des traces d’exécution, vous devez affecter à la variable boDebug la valeur True.

Pour terminer cette étape copiez les fichiers Bitcoin.csv et Ethereum.csv dans le répertoire ~/notebooks/csv/. Vous pouvez modifier ce chemin directement dans le fichier load_csv.py

Définition d’une extension permettant d’enregistrer le Bundle

Afin de créer le Bundle Blockchain, nous avons besoin de définir une extension qui chargera les données. Pour cela le fichier extension.py fournit le code nécessaire permettant d’enregistrer notre Bundle avec les données du Bitcoin et de l’Ethereum en utilisant le calendrier NYSE.

 

Copiez le fichier extension.py dans le dossier ~/.zipline/ en utilisant la commande suivante :

cp extension.py ~/.zipline/

Nous pouvons finalement créer concrètement notre Bundle Blockchain en lançant la commande suivante :

zipline ingest -b Blockchain

Vous devez avoir la sortie suivante sur votre console si vous avez laissé la variable boDebug à True dans le fichier load_csv.py

Test du Bundle Blockchain

 

Afin de vérifier que notre Bundle Blockchain a bien été enregistré, nous pouvons utiliser la commande suivante :

zipline bundles

On se rend bien compte que le Bundle Blockchain apparaît sur la console :

Finalement, nous allons tester notre Bundle blockchain avec les données du Bitcoin enregistrées. Le code défini dans le fichier buy_bitcoin.py consiste tout simplement à acheter 1 Bitcoin et à garder cette position.

Afin d’exécuter le code, saisissez la commande suivante :

zipline run -f buy_bitcoin.py –bundle Blockchain -s 2018-1-1 -e 2018-1-28

Nous avons ajouté une nouvelle option :

-bundle Blockchain : qui indique le Bundle à utiliser

Après l’exécution du code, vous devriez obtenir la figure suivante :

La première figure indique la valeur de notre portefeuille (cash + valeur totale des actifs) et la figure suivante le prix unitaire d’une action. Le portefeuille a le même cours que le marché, ce qui est normal car nous avons acheté un Bitcoin et nous avons gardé cette position.

Conclusion

Dans cet article nous avons commencé par donner un ensemble d’étapes permettant de créer un environnement de Trading local utilisant des données des marchés traditionnels grâce à l’API Zipline.

Par la suite nous avons donné la procédure à suivre permettant d’intégrer les données des crypto-monnaies dans cet environnement.

Dans le contenu des articles qui vont suivre, nous ferons une présentation plus élaborée de l’API zipline et nous allons également proposer des stratégies simples mais qui sont aujourd’hui la base de nombreuses stratégies largement utilisées dans les sociétés de gestion d’actifs financiers.

 

Télécharger les ressources

 


Par Eric Fokou Data Scientist @fokou_eric
Blockchain
Cryptomonnaies
e-trading
Intelligence Artificielle
Trading
Actualité

Blockchain : derrière la tech en folie, quels marchés ?

Le 08 novembre dernier, Sébastien Bourguignon, Principal & Lead Digital Influencer chez Margo, est intervenu aux côtés de Didier TESTOT, Benoit Flamant et Marie Dollé, à l'occasion de l'événement Tech Invest Paris. Il s'est ainsi exprimé sur la blockchain, son sujet d'expertise, lors d'une table ronde dédiée à l'engouement des entreprises pour les nouvelles technologies. Retour sur les principaux éléments abordés lors de cette discussion.

Découvrir 
Actualité

La blockchain, un atout clé pour l'économie sociale et solidaire ?

La blockchain et les cryptomonnaies n’en n’arrêtent pas de faire parler d’elles dans de nombreux secteurs d’activité, mais s'il y a bien un secteur qui peut bénéficier de la puissance de ces technologies c’est celui de l’économie sociale et solidaire (ESS).

11/10/2018 Découvrir 
Actualité

Blockchain et grands groupes : où en sommes-nous ?

Il y a environ un an de cela les grandes entreprises étaient en pleine expérimentation sur la technologie blockchain. La plupart avaient lancé un POC pour mieux comprendre l’intérêt de cette technologie, ses enjeux et ses impacts. À cette même période de nombreux experts annonçaient 2018 comme l’année des mises en production. Alors où en sommes-nous concrètement ?

05/10/2018 Découvrir 
Actualité

Loi PACTE : vers une augmentation des ICOs en France ?

Les députés ont entamé hier 25 septembre l’examen du « Plan d’action pour la croissance et la transformation des entreprises » (loi PACTE). Près de 70 mesures seront discutées, touchant à une grande variété de domaines. L’article 26 vise notamment à créer un cadre juridique pour les émissions de jetons numériques (Initial Coin Offering, ICO), nouveau mode de financement en plein essor. Une avancée majeure pour l’écosystème Blockchain ?

26/09/2018 Découvrir 
Actualité

Des ICOs pour les sociétés du CAC 40, fausse bonne idée ?

En juillet dernier, plusieurs cabinets de conseils annonçaient le lancement imminent d’une ICO pour des sociétés du CAC 40 qu’ils accompagnaient. Au-delà du marketing et du coup de com’ que cela représente, quels sont les bénéfices pour une société autre qu’une startup pour se lancer dans une ICO ?

04/09/2018 Découvrir 
Actualité

3 questions pour Sébastien Bourguignon, expert des technologies blockchain

Une fois par semaine, Havas Blockchain interviewe des personnalités phares de l’écosystème blockchain. Sébastien Bourguignon, notre Principal & Lead Digital Influencer, a accepté de participer à cette initiative. Découvrez son interview

26/07/2018 Découvrir