Ce que je fais ces derniers temps
Ce blog est à l'abandon depuis un bout de temps. Il a néanmoins depuis sa création servi 280 000 pages, ce qui est une goutte d'eau dans l'océan du trafic internet mondial.Je n'ai toutefois pas été totalement inactif pendant tout ce temps. Ces derniers temps, j'ai investi beaucoup de temps dans l'exploration du trading algorithmique dans un premier temps, et du machine learning par la suite.
On ne peut pas aborder ce sujet sans rentrer de pied ferme dans la technique. Le machine learning s'est relativement peu développé dans les environnements techniques les plus établis comme Java ou C++. Très rapidement les chercheurs ont favorisé des environnements techniques dédiés comme R, Python, Torch (lua) ou Julia. J'utilise pour ma part python, dont j'aime la facilité d’accès et la polyvalence, même si R offre plus de librairies statistiques et que Torch offre un meilleur support pour le deep learning.
Dans un premier temps, j'ai juste construit des automates de trading basés sur le momentum ou le trend. Dans cette phase, j'ai vraiment apprécié la plateforme quantopian. Elle offre des outils de back testing, de paper trading en python avec une totale facilité d’accès. Le seul pré-requis est de s'initier un minimum au python.
Les forums d'utilisateurs sont assez limités mais il permettent quand même de se familiariser avec les plus courantes commises par les débutants comme l'overfitting (voir le screeenshot ci-dessus pour une illustration.
Monter son propre système
La plateforme quantopian montre toutefois quelques limitations. Tout d'abord elle ne permet pas de trader des actifs européens (devises, obligations, actions, etfs,etc). Ensuite elle place des limites sur les outils accessible depuis la plateforme. Or, j'ai je l'avoue succombé à la hype du deep learning et des réseaux de neurones (en anglais neural network i.e: NN). Impossible avec quantopian, d'autant plus que les capacités de calcul des serveurs distants sont limités pour des raisons évidentes.Quand on parle de système de trading algorithmmique, on pense souvent immédiatement au haute fréquence, sur des serveurs en mode cloud, mais il n'y a aucun mal à mettre en place des systèmes beaucoup moins élaborés
A ce stade, mon système est essentiellement un système d'aide à la décision pour un investissement sur un horizon 1 mois. Il se présente sous la forme d'un outil graphique que j'appelle un dashboard, qui liste les options disponibles dans le cadre d'un système d'allocation d'actif stratégique. A tout moment cet outil peut me recommander sur quel actif allouer mes fonds.
Pour être plus précis, cet outil utilise le machine learning pour prédire à un horizon donné le rendement simple d'un investissement sur un actif donné. Plusieurs prédictions pour différents actifs sont mis en rapport pour sélectionner l'actif le plus pertinent.
Les données que j'utilise sont des données de clôture journaliers (Ouverture, plus haut, plus bas, volume, clôture ) et des indicateurs économiques issus de la banque fédérale américaine (VIX, Dividend yield, TED spread,...) ou de Quandl (EUR/USD).
A partir des données, je procède aux étapes suivantes:
- Feature engineering: Je construit des indicateurs techniques et statistiques sur mes données: momentum, RSI, volatilité, ATR en utilisant la librairie TA-Lib. Je construit une cinquantaine d'indicateurs sur un historique qui démarre en 2005.
- Normalization/scaling: Pour les NN, il est absolument impératifs de nettoyer (retirer les nan) et de normaliser (moyenne à 0, ecart-type à 1.0) toutes les données.
- Feature selection: Toutes les prédicteurs ne s'appliquent pas à tous les actifs. Chaque actif dépend d'un sous-ensemble des données, en mettre trop dégrade les performances. Il faut mettre en place un processus de selection des données significatives. J'utilise scikit-learn pour cette étape. J'utilise l'outil RFECV: Recursive Feature Elimination with Cross Validation avec un estimateur Extra-Trees. Je le combine avec un sélecteur de stabilité appelé Randomized Lasso. Enfin, je filtre ces sélections en utilisant un algorithme greedy basé sur les NN.
- Je définis mon algorithme de machine learning. Pour l'instant, j'utilise la librairie Keras pour ce processus. J'utilise actuellement une Gated Recurrent Unit (GRU) avec dropout pour produire mes prédictions. Les NN récurrents sont particulièrement adaptés à la tâche que je leur assigne car ils capturent les dépendances temporelles. Chaque prédiction dépend de la prédiction précédente, ce qui des avantages et des inconvénients.
- Cross validation: Je divise mon espace de données en intervalles imbriqués avec sklearn TimeSeriesSplit CV et je mesure des indicateurs de performance de régression comme le R2 ou en réduisant mes données à deux classes un ROC AUC.
- Finalement, Je backtest mon outil avec la librairie PyalgoTrade. Le rendement annuel offert par un backtest ne représente rien, il permet seulement de sélectionner des alternatives.