[PYTHON] Une histoire de prédiction du taux de change avec Deep Learning

Aperçu

En supposant que la date actuelle est $ T $, utilisez Deep Learning pour prédire la moyenne mobile simple des prix quotidiens de $ T + 1 $ à $ T + 30 $. image.png Nous avons effectué une transaction de simulation dans laquelle les bénéfices sont confirmés si le prix dépasse (en dessous) la moyenne mobile prévue du prix lors de la détention (ou de la vente à découvert) d'une position longue. De plus, si vous le tenez pendant 30 jours, vous serez obligé de le fermer. Je ferai de mon mieux pour faire des entrées s'il y a un solde pour chaque date et heure. image.png

Cadre DL utilisé

chainer ver1.3~1.5 Juste dans la version 1.5, la compatibilité a considérablement changé et il était difficile de la gérer. Il semble que ce soit la version 2.0.2 d'août 2017.

Des données d'utilisation

Données historiques de Mizuho https://www.mizuhobank.co.jp/rate/market/historical.html Ci-dessous, nous avons utilisé les données de date et d'heure pour 23 devises. Tous sont contre le yen japonais. Les 8 principales devises en gras sont les devises qui ont vérifié la simulation de trading. (Du 1er avril 2002 au 29 janvier 2016, uniquement les devises qui ont des données quotidiennes sans faute pendant une journée) image.png Au moment de l'apprentissage, tous sont normalisés par 0-1.

Des données d'entrée

Données quotidiennes pour les devises des 23 pays ci-dessus et des 30 derniers jours. La raison du choix de ces données d'entrée est que nous supposons que les fluctuations des taux de change dans chaque devise peuvent être corrélées à des facteurs fondamentaux et techniques.

Données des enseignants

Soit les données de l'enseignant une moyenne mobile simple sur 30 jours 30 jours après une devise. Cette fois, nous avons prédit chacune des huit devises couramment utilisées par les sociétés japonaises de change (les devises en gras dans les données ci-dessus). Au fait, j'ai essayé des prédictions ponctuelles (comme la prédiction des données quotidiennes pour le lendemain) au lieu de moyennes mobiles, mais je n'ai pas obtenu de bons résultats. Après tout, on dit que c'est une marche aléatoire, donc cela peut être difficile à moins que vous ne prédisiez la tendance pour une certaine période de temps.

Modèle d'apprentissage

Il s'agit d'un simple feed forward NN avec 3 couches intermédiaires. (La couche d'entrée est 690, la couche intermédiaire 1 est 512, 2 est 256, 3 est 128, la couche de sortie est 1) image.png Il est délicat de savoir si cela peut être appelé apprentissage en profondeur, mais dans wikipedia, il semble que cela puisse être dit à partir de la couche intermédiaire 3 couches, donc je suis autorisé à le nommer pour le moment. J'ai utilisé ReLU comme fonction d'activation et Adam comme fonction d'optimisation. Les hyperparamètres auraient dû être la valeur par défaut de Chainer. J'ai également utilisé des décrocheurs, mais je me souviens de ne pas avoir obtenu de très bons résultats. La fonction d'activation de la couche de sortie est $ tanh $ et la fonction d'erreur est l'erreur carrée.

Résultat d'apprentissage

Nous avons appris et vérifié avec 2000 jours de données de formation et 1325 jours de données de test. Les résultats de la livre sterling contre le yen japonais avec des résultats particulièrement bons sont les suivants. Tous les résultats avaient tendance à être plus divergents plus tard au cours de la période d'essai. Cela ne semble pas être simplement un janken tardif (le taux de la veille est utilisé comme valeur prédite). Je pense que cela est en partie dû à l'évolution des tendances du marché, il peut donc être préférable de diviser la période d'apprentissage et la période de vérification en plus petits morceaux, ou d'utiliser un modèle spécifique aux séries chronologiques tel que LSTM. .. image.png Le résultat d'apprentissage global est le suivant. L'erreur est exprimée sous forme de dispersion. image.png Le franc suisse a un grand écart car la partie de la poussée de 2015 vient de chevaucher la période d'essai. Il est impossible de prédire les mouvements de prix qui ne sont pas liés aux données d'entrée utilisées pour l'apprentissage, donc s'il y a des mouvements de prix importants dus à des facteurs fondamentaux, il est difficile d'utiliser simplement les données des séries chronologiques passées et les dernières informations telles que Twitter et les actualités. Je pense qu'il est nécessaire de détecter le plus tôt possible la partie susceptible d'affecter le mouvement des prix.

Résultats de la simulation de trading

J'ai facilement fait un test de dos par moi-même et je l'ai fait. La période de vérification est de 1325 jours du 2010/7/7 au 2015/12/11, qui est la période des données de test. Le montant initial est de 10 millions, l'unité de transaction est de 1 000 unités monétaires et le spread est également pris en compte. Cependant, comme les données n'utilisent que les données quotidiennes ci-dessus, elles fluctuent finement dans le commerce réel et on ne sait pas si le contrat sera décidé, de sorte que la reproductibilité en tant que test arrière est faible. image.png image.png image.png Après tout, de bons résultats ont été obtenus avec GBP, qui avait la plus grande précision d'apprentissage. Au contraire, le CHF a un mauvais résultat d'apprentissage, donc le résultat de trading est également mauvais.

Pour rappel, cette fois nous apprenons à réduire l'erreur de la période de test à la limite inférieure, donc ce résultat d'apprentissage est optimisé dans la période de test, et il ne fonctionnera pas même si nous testons en utilisant le même résultat d'apprentissage dans une autre période. (Ajustement de la courbe) Il y a une possibilité. Par exemple, la façon dont le marché évolue change en fonction de la période, car l'écart devient plus grand dans la seconde moitié de la période de test. Par conséquent, il est préférable de définir une période de vérification en dehors de la période de test et d'effectuer une simulation réelle, mais cette fois, nous ne l'avons pas fait.

Résumé

Je pense qu'il est difficile de prédire exactement le taux de change par apprentissage profond. Cependant, en fonction des données d'utilisation et de la méthode d'achat et de vente, il semble que le trading utilisant le deep learning puisse produire des résultats même à partir de données de séries chronologiques uniquement. Bien sûr, il y a un risque que les tendances du marché fluctuent, il semble donc que ce ne sera pas rentable à long terme. Puisqu'il y a beaucoup de problèmes, j'aimerais étudier et vérifier en lisant d'autres résultats et documents de vérification. Si vous êtes convaincu que vous ferez des bénéfices en répétant les améliorations et les vérifications, je voudrais essayer le fonctionnement réel.

↓ Tutoriel pour créer un système de trading de devises (FX) en utilisant le deeplearning http://qiita.com/jiji_platform/items/268377c542706e6f44b1

Recommended Posts

Une histoire de prédiction du taux de change avec Deep Learning
Une histoire sur l'apprentissage automatique avec Kyasuket
L'histoire d'un ingénieur directeur de 40 ans qui réussit "Deep Learning for ENGINEER"
Une histoire sur l'automatisation du mahjong en ligne (Jakutama) avec OpenCV et l'apprentissage automatique
L'histoire de l'apprentissage profond avec TPU
Une histoire sur l'apprentissage automatique simple avec TensorFlow
Une histoire sur l'implémentation d'un écran de connexion avec django
Histoire de l'analyse de données par apprentissage automatique
Histoire de l'utilisation du jeton logiciel de Resona avec 1Password
L'histoire de la création d'une partition de type Hanon avec Python
Une histoire d'essayer un monorepo (Golang +) Python avec Bazel
L'histoire de la gestion de theano avec TSUBAME 2.0
Essayez l'apprentissage en profondeur avec TensorFlow
À propos de l'apprentissage avec Google Colab
Apprentissage profond du noyau avec Pyro
Essayez le Deep Learning avec FPGA
Générez des Pokémon avec Deep Learning
Essayez de créer un réseau de neurones / d'apprentissage en profondeur avec scratch
Une histoire de compétition avec un ami dans Othello AI Preparation
(Maintenant) Construisez un environnement GPU Deep Learning avec GeForce GTX 960
Une histoire sur l'installation de matplotlib à l'aide de pip avec une erreur
Une histoire sur un amateur faisant une rupture de bloc avec python (kivy) ②
Une histoire sur la façon de traiter le problème CORS
Une histoire sur un amateur faisant une rupture de bloc avec python (kivy) ①
Une histoire sur la création d'une courte chanson par hasard avec Sudachi Py
Une histoire de regroupement de données de séries chronologiques d'échange
J'ai essayé d'écrire dans un modèle de langage profondément appris
Une histoire à propos d'un débutant en python coincé avec aucun module nommé'ttp.server '
Apprentissage automatique Une histoire sur des personnes qui ne sont pas familiarisées avec GBDT utilisant GBDT en Python
Essayez le Deep Learning avec les concombres FPGA-Select
Identification de la race de chat avec Deep Learning
Une histoire coincée avec l'installation de la bibliothèque de machine learning JAX
Une histoire rafraîchissante sur Slice en Python
Faites de l'art ASCII avec l'apprentissage en profondeur
Une histoire sur la prédiction des préfectures à partir des noms de villes avec Jubatus
Une histoire sur l'ajout d'une API REST à un démon créé avec Python
Essayez l'apprentissage en profondeur avec TensorFlow Partie 2
Une histoire de mauvaise humeur sur Slice en Python
À propos de la gestion de projet de deep learning (DNN)
J'ai recherché une carte similaire de Hearthstone avec Deep Learning
Une histoire sur le développement d'un type logiciel avec Firestore + Python + OpenAPI + Typescript
Vérifiez la forme de squat avec l'apprentissage en profondeur
Catégoriser les articles de presse grâce au Deep Learning
L'histoire de l'utilisation de la réduction de Python
Prévisions des ventes de collations avec apprentissage en profondeur
Faites sourire les gens avec le Deep Learning
Enquête sur PYNQ - Faisons du Deep Learning avec FPGA en utilisant Python -
L'histoire d'un débutant en apprentissage profond essayant de classer les guitares avec CNN
PPLM: Une technique simple de Deep Learning pour générer des phrases avec des attributs spécifiés
J'ai essayé l'histoire courante de prédire la moyenne Nikkei à l'aide du Deep Learning (backtest)
Une histoire sur un remodelage magique qui met Lubuntu dans un Chromebook
Classez les visages d'anime avec l'apprentissage en profondeur avec Chainer
Essayez les prévisions de prix Bitcoin avec Deep Learning
Essayez avec Chainer Deep Q Learning - Lancement
Essayez l'apprentissage profond de la génomique avec Kipoi
Analyse émotionnelle des tweets avec apprentissage en profondeur
Une histoire sur Python pop and append