CryDer – Introduction

Il y a quelques mois, je me suis lancé dans la recherche et le développement d’outils qui pourraient me permettre de soutenir un travail de ce que j’appel un Crypto Trader, un mec qui trade des crypto monnaies quoi.

J’ai fait tous mes premiers travaux avec ce que je connaissais, c’est à dire Javascript et NodeJS. L’idée était assez simple, trouver des voies d’investigations qui me permettraient de déléguer le travail d’analyse de graphiques à une machine. 

Je me suis donc lancé corps et âme dans l’apprentissage du développement d’une Intelligence Artificielle. Et à vrai dire c’était assez naïf au départ, je partais sur un idéal d’une IA qui apprendrait par renforcement parce que mes recherches me permettaient de réaliser des exercices simples assez prometteur. Imaginez, une IA qui lit des données historique qui fait des fake positions et qui apprend toute seule de ses erreurs, le rêve.
Non, c’est beaucoup trop complexe à réaliser tout seul x)

J’ai bossé un moyen de pouvoir gérer et afficher des chandeliers de données, avec la gestion d’indicateurs calculé à partir des données récoltée. Je pouvais reprendre mes recherche sur la création d’un moteur 2D sur Javascript plutôt sympa.

Je me suis vite confronté à des problèmes de performance que Javascript et NodeJS ne pouvaient pas vraiment régler sauf en apprenant à aller encore plus profondément en apprenant la gestion des Shaders et l’utilisation des cartes graphique, boulot beaucoup trop lourd à mon goût et trop complexe sur NodeJS. Enfin, question développement Desktop, même en utilisant ElectronJS, ça devenait vraiment vite compliqué comparé à ce que peuvent faire des Java ou Python.

Du coup, j’ai bouffé une formation rapide sur Python pour intégrer la syntaxe et commencer à rechercher des Packages intéressants qui me permettraient de réaliser tout ce que j’avais déjà fait sur Javascript et NodeJS.

Et me voilà, avec tout un projet en tête, beaucoup de choses à faire et partager.

Ce qu’une IA n’est pas

Bon, on va tout de suite quitter les idées naïves et idéales qui font rêver d’une IA qui apprend toute seule juste en recevant les données OHLCV des 200 dernières périodes sur une timeframe de 5 minutes.

Oui, il est possible de faire des choses “impressionnantes” avec des données déjà existantes. Par exemple, prenez le cours du Bitcoin, coupez les données en deux, d’un côté vous avez 70% des données qui vont servir d’entraînement, les 30% restant serviront de données de test, pour voir l’efficacité de l’apprentissage.

Créez un modèle d’IA avec Tensorflow et passez toutes vos données dans la moulinette. Au final, l’IA arrivera à prédire les 30% de données de test.
Ce qui est, je vous l’accorde, vraiment impressionnant quand on voit ça comme résultat :

Sauf qu’en faite, c’est trompeur. L’apprentissage de l’IA se fait par essai erreur grosso merdo (j’expliquerai ça plus en détail dans un autre article). Le but de l’IA ici c’est d’arriver au meilleur score de prédiction, donc pour chaque données à prédire elle va s’adapter aux données auxquelles elle peut faire référence indirectement. Ces données servent de points de comparaison pour l’apprentissage, donc forcément il y a un moment où on arrive à un résultat pas dégueulasse du tout. Mais ces données existent déjà ! Elle n’ont pas à être “prédites”.

Mais une fois qu’on travail avec des données qui n’existe pas, qu’on utilise le modèle de l’IA en live, tout part en sucette presque directement. La raison en est très simple, on ne peut pas prédire ce qui n’existe pas avec autant de précision parce qu’il existe autant de scénario qu’il existe de trader qui vont chacun prendre une décision unique de leur côté.

Votre IA pourra certainement prédire certains coup de manière précises, mais vous ne serrez pas à l’abris des “imprévus”, et on sait tous que les marchés en sont rempli.

Si un mec vous propose une app qui peut soit-disant prédire l’avenir des marchés, barrez vous en courant, c’est de l’arnaque.

Comment profiter de la puissance d’une IA ?

Passé le côté rêveur et naïf, je me suis demandé : “Bon, ok, mais il y a clairement des trucs à faire, quid des données existantes ? Si mon IA peut lire ces données, elle peut donc détecter des patterns si je le lui apprend ?!”

Prenez par exemple les IA de reconnaissance d’image, en fonction des données de pixels qu’on leur suggère on peut leur apprendre à reconnaître vraiment facilement des objets.

Il y a des applications amusantes qui se sont développée comme les App de reconnaissance de fleur, vous prenez une photo d’une fleur, vous la soumettez à l’application et celle ci vous donne le nom et la description de la fleur.

Chaque fleur à sa forme précise, sa couleur, ses spécificités reconnaissables parce qu’elles sont organisées en pattern. Une rose est une rose parce que sa forme et ses couleurs sont reconnaissable.

Les marchés, c’est pareil, les données brutes OHLCV permettent d’identifier déjà beaucoup de choses parce qu’on peut en dégager des patterns. Ces données sont des images fixes des marchés desquelles on peut tirer des observations : C’est une tendance haussière, il va falloir vendre parce que la tendance faibli et n’a pas su faire un dernier plus haut creux, on est dans un Bottom et on attend le 3ème plus haut creux, etc..

Nos observations servent à prendre des décisions, une IA entraînée le fera 100 fois mieux parce que c’est une machine.

Un exemple simple c’est l’effet balancier, si on montre plusieurs set de données de ce type à notre IA:

Elle saura finir par reconnaître à quel moment il peut être intéressant d’acheter et donner une target précise.

Si on décompose l’évolution complète d’un Double Bottom, on peut déterminer chaque étape et déterminer si le pattern va fail ou pas, déterminer un stop et une ou plusieurs target potentielle pour peu qu’on lui ait présenté suffisamment de situations.

L’ensemble des images données à l’IA ne seront pas sous forme de pixels mais sous forme de tableau de données OHLCV.

Et on a pas encore imaginé ce qu’on pouvait faire avec des données d’indicateur comme le RSI, la MACD, les EMA, etc… 

Avec un apprentissage et un modèle adéquat, une IA peut être d’un soutien vraiment important lors de prise de décisions sur les marchés. Et ça, c’est notre premier objectif de développement et le premier objectif de CryDer.

Oublier la magie, focus sur la connaissance

Avant de me lancer sur tout ça, j’ai passé quelques mois à suivre Crypto Fanta, j’avais déjà abordé un peu les marchés tout seul, mais sans jamais savoir vraiment si j’étais dans le bon ou non. J’ai donc suivi sa formation, je me suis documenté, créé un trading plan, j’ai trade un moment, j’ai réussi des trades, j’en ai raté beaucoup plus. 

Mon principal point faible était mon manque de gestion de mes émotions et mon attitude trop greedy. Mes analyses n’étaient pas forcément mauvaises, mais je partais trop dans tous les sens et changeais d’avis par impatience et parce que je laissais mon ego prendre le dessus.

Il m’arrivait parfois d’entrer dans des états d’esprit où je devais réussir des trade comme par magie, je perdais complètement toute forme de rationalité.

Du coup, j’ai arrêté de le Trading parce que cela devenait ridicule de perdre sans pouvoir remédier à ces soucis. 

Mais, cela ne veut pas dire que j’ai arrêté de chercher et ce projet est une réponse à mes faiblesses. Comme on dit, on fait avec ce qu’on a.

Aujourd’hui, j’ai envie d’apporter 2 solutions concrètes à mes points faibles :

  1. Avoir un outil graphique me permettant de parcourir les données historique et ajouter des “images” dans une base de données sur laquelle l’IA va pouvoir s’entraîner.
  2. Pouvoir avoir une IA qui me donne des informations visuelles sur les charts me permettant d’avoir une vue plus générale et plus lisible. Affichage des pattern, affichage de moment clé comme des retournement, etc…

L’IA deviendrait un outil de confirmation de mes décisions et allégerait le poids de mon mental et mes angoisses.

Créer un outil graphique permet de ne pas devoir faire de l’encodage massif et facilite le travail, mais surtout, partager cet outil me permettrait en tant que développeur Open Source de fournir mes compétences aux trader qui le désirent sans forcément avoir à leur dire quoi faire en terme de trading. L’outil resterait flexible et demanderait à chacun de se former soit même au Trading pour pouvoir utiliser correctement l’outil.

On oublie donc totalement l’idée de l’IA qui fait tout pour nous et on se concentre sur nos connaissances et nos stratégies personnelles et les transmettre à notre IA pour qu’elle les applique avec une rigueur de machine.

Proposer un outil Open Source et gratuit

Quand je faisais mes recherches et que je parlais de mon projet autour de moi, on m’a demandé si j’allais le vendre. 

J’y ai pensé et effectivement, c’est le genre d’outil qu’on peut vendre assez cher s’il est bien fait. 

Mais il est important de rappeler quelque chose, étant donné que je me suis lancé seul sur ce projet, il y a énormément de travail à faire.
Il serait impossible pour moi de maintenir des dizaines de gros packages majeurs internes à l’application et surtout il existe déjà tellement de solutions pour des questions ou des problématiques qui se posent déjà quand on réfléchit à l’application. Tous sont open source. 

Par exemple, le simple package TA-Lib qui propose le calcul d’un grand nombre d’indicateur, c’est quelque chose qu’il m’aurait été impossible à faire tout seul.

Ou la gestion de tableau de données géré par Pandas, ou la création de Charts qu’on peut modifier à souhaits, ou encore le package pour la création de l’IA, etc…, etc…

Énormément d’outils sont déjà fait, mon désire c’est de pouvoir les intégrer tous dans une application cohérentes qui remplit ses objectifs. Pas de faire une machine qui fait le café et qui mine du bitcoin en même temps. Je veux rester simple, léger et flexible.

Connaissant un poil le monde du trading, je sais à quel point les Traders sont attachés à leur stratégies personnelles et ne désirent pas les partager.
Un des objectif, comme je l’ai dit plus haut, c’est de fournir un outil capable d’établir des modèles d’apprentissage pour l’IA. Chaque trader aurait donc le loisir de développer ses stratégies personnelles en fonction de ses connaissance en Trading et pourra les garder pour lui/elle.

Au delà du fait que j’utilise beaucoup de package Open Source, je désire aussi rester dans cet état d’esprit, mon but n’est pas de devenir millionnaire en vendant des produit à prix d’or. Je suis un créatif, j’ai besoin de passer énormément de temps à chercher, tester, produire des trucs qui ne voit finalement pas le jour. Me planter, découvrir, apprendre, etc..

Le jour où je n’aurais plus l’envie, les moyens ou le temps d’entretenir le projet, je ne doute pas qu’il sera repris par un autre passionné.

En abordant le Trading je croyais naïvement pouvoir faire un peu d’argent, l’équivalent d’un salaire d’ouvrier, pour pouvoir vivre tranquillement et continuer mon mode de vie de créatif librement. 

Me placer comme personnage utile aux Trader et leur fournir un outil intéressant me permettrait peut-être d’être soutenu correctement, autant intellectuellement en partageant des idées sur comment l’application devrait fonctionner, que financièrement si certains décident de faire des dons.

Comment cela devrait se passer maintenant ?

Voilà, vous venez de lire une longue introduction à ce projet. Entrons un peu dans le concret maintenant. 

Y a t-il déjà des productions concrètes ?

Il y a des parties d’applications, des tests que j’ai fait, il y a des tentative de développement d’IA, de constructions d’applications chacune différentes qui creuse plus un sujet qu’un autre. Par exemple j’ai déjà une portion de code qui me permet de télécharger les données historique OHLCV de n’importe quel marchés de crypto depuis n’importe quelle plateforme.

Quelle est la suite tout prochainement ?

J’ai commencé l’écriture d’un document d’analyse du projet pour rassembler toutes les idées et les découverte que j’ai fait ces 6 derniers mois.
A vrai dire c’est la première fois que je me lance vraiment dans un projet de cette ampleur, et même si cela devrait prendre du temps je veux pouvoir le faire de manière organisée et structurée. Donc, avant de taper quoi que ce soit de plus comme code j’ai vraiment envie de construire et alimenter tout un dossier d’analyse pour ne pas être perdu en cours de route et finir par abandonner le projet parce que je n’avais pas assez approfondi les choses sur papier.

Je compte utiliser, entre autre, la schématisation UML pour décrire le projet.

Quels sont les packages que tu as repéré/sélectionné pour le projet ?

  1. PonyORM : C’est un package de gestion de base de données, un Object Relation Mapper. Ca facilite grandement l’écriture de code exploitant une ou plusieurs base de données. Pour les BDD je compte utiliser Sqlite3.
    Site : https://ponyorm.org/
  2. CCXT Python : CCXT est une librairie qui fournit une API permettant de se connecter à un nombre assez large de plateforme d’échange de crypto et y effectuer des actions comme charger des données de marchés ou effectuer des opération comme prendre position, acheter, vendre, etc..
    Github : https://github.com/ccxt/ccxt
  3. Tensorflow : Une librairie dédiée à la création d’Intelligence Artificielle et tout ce qui est lié au machine learning.
    Je n’ai aucunement l’intention de créer moi même ce genre d’outil, ce serait beaucoup trop complexe. J’ai pu en faire des simple, mais une librairie aussi grosse fournit des outils beaucoup plus puissant.
    Site : https://www.tensorflow.org/
  4. PyQT5 : Librairie Python qui permet d’utiliser le puissant framework QT, je l’utiliserai pour créer et gérer toutes les fenêtres de l’application.
    Github Libraire Python : https://riverbankcomputing.com/software/pyqt
    Site QT : https://www.qt.io/
  5. Matplotlib et MPLFinance : Python regorge de package ultra puissant permettant de gérer des données et effectuer des opération mathématique dessus.
    MPLFinance me permettra de gérer les charts graphiques autant pour pouvoir faire du live trading que pour pouvoir modéliser les image de pattern à donner à l’IA pour qu’elle apprenne.
    Github : https://github.com/matplotlib/mplfinance
  6. TA-Lib Python : TA-Lib est indispensable au projet, cette librairie fourni des centaines d’indicateurs, momentum, candle pattern, overlap, volatilité, etc..
    Des trucs que j’aurais été incapable de faire tout seul.
    Il existe d’autre librairie mais TA-Lib est pour moi la plus complète à ce jour.
    Son seul soucis c’est d’être uniquement en 32bit (mais on passera au dessus).
    Site: http://mrjbq7.github.io/ta-lib/
    Github Librarie Python : https://github.com/mrjbq7/ta-lib 

Va tu ouvrir un Github pour le projet ?

Oui c’est déjà fait et ça se trouve là : https://github.com/Morgiver/cryder

Y a t-il un moyen de te suivre pour se tenir au courant de l’évolution du projet ?

Oui, je suis présent sur différents réseaux sociaux et je compte publier les avancements dessus :

Je met ma chaîne Youtube en premier car je risque fortement de reprendre des live matinaux que je dédiais justement à la programmation.

Merci d’avoir lu cette introduction jusqu’au bout, c’est un début pour moi.
A bientôt en live ou dans d’autres articles !

N’hésitez pas à vous inscrire et taper des commentaire pour me dire ce que vous pensez de tout ça !