Je propose de dissiper ces doutes une fois pour toutes et de transférer le discours du domaine du «peut prédire ou non» au domaine du «prédit bon ou mauvais». Et nous le ferons de manière simple, rapide et visuelle. Je vais donner un outil prêt à l'emploi et chacun pourra avoir le résultat sur son ordinateur. Le projet gratuit GoogleColaboratory nous y aidera. Il s'agit d'une plate-forme ouverte pour le développement collaboratif, tous les calculs ont lieu sur les serveurs de Google, toutes les interactions se font via le navigateur, l'enregistrement n'est pas nécessaire.
Le code de notre travail est ouvert et déjà chargé dans GoogleColab. Les résultats de la formation d'un réseau neuronal pour chacun seront individuels. En effet, les poids initiaux sont distribués de manière aléatoire et les résultats sont légèrement différents. Aussi, gardez à l'esprit que l'historique des citations est une donnée très bruyante, donc la qualité de la formation est faible, mais suffisante pour voir comment le réseau de neurones va prédire. La prévision doit être approximativement au niveau d'un bon indicateur.
Le seul endroit où nous raccourcirons notre chemin est la collecte de données sur l'histoire d'une paire de trading. La collecte est effectuée par une application pour MetaTrader5, le processus n'est pas compliqué, mais nécessite des compétences pour travailler avec un testeur dans MetaTrader5. Des instructions détaillées mèneront à un article séparé, par conséquent, nous utilisons des données pré-préparées pour la paire Euro / Dollar (pour ceux qui utilisent MT5, le lien vers Expert se trouve à la fin de l'article). Il sera possible de s'assurer que les données préparées à l'avance ne «regardent pas en avant» et ne suggèrent pas de réseaux de neurones à la dernière étape, lorsque nous passerons aux tests avec le marché réel.
Commençons ...
GoogleColaboratoire
Notre "ordinateur portable" dans GoogleColab peut être trouvé à ce lien . N'oubliez pas de vous connecter d'abord à votre compte Google (ou Gmail).
Copiez le "portable" sur vous-même.
Vous devez maintenant exécuter séquentiellement tous les blocs de haut en bas.
1. Installation des bibliothèques
Cette étape installera TensorFlow et d'autres bibliothèques. Le processus se terminera par lui-même, il n'y a rien à faire.
2. Chargement et préparation des données pour la formation
À ce stade, l'ensemble de données sera chargé et des ensembles de données séparés pour la formation et les tests seront préparés. L'ensemble de données a été collecté pour la paire EURUSD pour la période allant du début de 2015 à nos jours, l'étape de collecte de données est le chandelier M6. 2 dernières semaines - site de test. Les données de l'ensemble de données sont un ensemble de centaines de milliers de lignes, dont chacune est quelque chose comme ceci
0.32,0.26,0.00,0.43 ... 0.66,0.25,0.24,0.05,0,1,1600144440,1.189240
Les prédicteurs sont séparés par des virgules, les champs 3 et 4 à partir de la fin - c'est la bonne réponse là où la tendance est allée (0,1 - vers le bas; 1,0 - vers le haut). Le deuxième champ à partir de la fin est l'identifiant du chandelier. Le dernier est le prix à l'ouverture de la bougie. Les deux derniers champs ne sont pas utilisés pour la formation.
3. Formation et test du modèle
Laissez les paramètres de réseau neuronal par défaut lors du premier lancement. La formation se déroulera en cinq passes jusqu'à ce qu'un résultat acceptable soit obtenu. En cas de formation réussie, quelque chose comme ce tableau apparaîtra:
+------------+---------+----------+-------------+------------+
| | | | (%) | (%)
+------------+---------+----------+-------------+------------+
| 0 | 7174 | 7173 | 50 | 100.0 |
| 2 | 6956 | 6731 | 50 | 95.4 |
| 4 | 6430 | 6224 | 50 | 88.2 |
| 6 | 5867 | 5630 | 51 | 80.1 |
| 8 | 5250 | 5065 | 50 | 71.9 |
| 10 | 4636 | 4450 | 51 | 63.3 |
| 12 | 3964 | 3772 | 51 | 53.9 |
| 14 | 3330 | 3152 | 51 | 45.2 |
| 16 | 2758 | 2539 | 52 | 36.9 |
| 18 | 2198 | 2012 | 52 | 29.3 |
| 20 | 1700 | 1544 | 52 | 22.6 |
| 22 | 1298 | 1167 | 52 | 17.2 |
| 24 | 958 | 825 | 53 | 12.4 |
| 26 | 699 | 517 | 57 | 8.5 |
| 28 | 446 | 278 | 61 | 5.0 |
| 30 | 246 | 127 | 65 | 2.6 |
+------------+---------+----------+-------------+------------+
La réponse du réseau neuronal est une classification binaire où [0 1] est "down" et [1 0] est "up". Mais le réseau de neurones ne répond jamais avec une valeur entière, sa réponse, selon le degré de "confiance", peut être du type [0,4 0,6]. Dans cette réponse, le réseau de neurones pense que le prix va baisser, mais n'est pas très confiant, et dans la réponse [0,1 0,9] il est également en baisse, mais il y a beaucoup plus de confiance. Voici à quoi ressemble le tableau des réponses réelles:
[[0.5084921 0.49150783]
[0.3930727 0.6069273 ]
[0.4930727 0.50692725]
...
[0.5189831 0.48101687]
[0.27955987 0.7204401 ]
[0.476914 0.5230861 ]]
Le champ de la table «Réponse du réseau» est la différence au sein de cette réponse binaire multipliée par 100. Évidemment, cette différence caractérise la «confiance» du réseau dans sa prévision. En conséquence, après avoir multiplié par 100, nous avons des valeurs comprises entre 0 et 100. Désormais, vous ne pouvez pas prendre toutes les réponses, mais ne sélectionner que celles dans lesquelles le réseau de neurones a une "confiance" significative. Pour comprendre dans quelle mesure la réponse affecte le résultat de la prévision, la section de test est vérifiée pour l'exactitude de la prévision à différents niveaux de cette "confiance". Chaque ligne du tableau est un contrôle pour une nouvelle valeur plus élevée pour la réponse réseau. Plus le filtre de réponse réseau est élevé, moins il y a de réponses, mais meilleures elles sont. Cela peut être vu dans les champs «Gagné» et «Perdu». Le processus s'arrête lorsque les réponses (signaux) sont inférieures à 1% de toutes les données de test.
Si le réseau n'a pas été formé en un seul passage, redémarrez simplement ce bloc (vous n'avez pas besoin de recharger les données).
4. Résultats sur le graphique de négociation
Exécutez ce bloc. Tout est évident ici, sur le graphique de la paire de trading de l'ensemble de test, les signaux du réseau neuronal sont dessinés, vert en haut, rouge en bas.
5. Test sur le marché réel
Au cours de cette vérification, les données du réseau neuronal sont chargées, qui sont créées au fur et à mesure que de nouvelles bougies sont ajoutées en temps réel. Ceux. la dernière partie des données reçues a été créée à l'ouverture du chandelier, dans notre cas, le chandelier zéro M6. Ces données, bien sûr, ne contiennent pas la bonne réponse, le réseau est invité à faire une véritable prévision. Vous pouvez vous assurer que les données ne sont pas modifiées lors de leur entrée dans l'historique en décommentant la ligne d'impression (données) et en comparant les valeurs d'une ligne particulière lors de la saisie et après un certain temps.
def get_from_ennro(symbol, tfm, dim, lim):
...
# print(data)
...
Il se peut qu'il n'y ait aucun signal sur le marché réel. Cela se produit lorsque la volatilité est inférieure à celle de la zone de test, auquel cas le réseau neuronal ne voit pas les points d'entrée.
conclusions
Oui! La qualité des prévisions n'est pas adaptée aux ouvertures de positions. Mais nous ne nous sommes pas fixé une telle tâche, l'essentiel est que le réseau de neurones apprenne et reconnaisse quelque chose sur la carte, devine la tendance, sa prévision n'est évidemment pas chaotique. Veuillez noter que nous avons utilisé la configuration de réseau neuronal la plus simple - Sequential Dense avec 2 couches et seulement 10 époques pour la formation. Il y a place pour d'autres développements.
Il existe déjà des solutions qui améliorent qualitativement les prévisions, mais à leur sujet dans le prochain article.
PS Pour ceux qui souhaitent collecter et préparer eux-mêmes les données de n'importe quelle paire de MetaTrader5 , lisez ici et utilisez GoogleColab qui est fourni sur ce lien .