L'Apprentissage Automatique dans le trading : théorie, modèles, pratique et trading algo - page 9
![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Un petit complément au post précédent. Non, il n'y a pas de deltas. Je vais devoir l'essayer.
Quoi qu'il en soit, j'ai essayé de chercher une corrélation sur vos données. Plus probablement non que oui. J'ai trouvé quelque chose sur la moitié des observations prises au hasard dans le train. J'ai commencé à vérifier sur l'autre moitié, et la même dépendance n'est pas là. Il s'avère que soit il est absent, soit les données sont construites de telle manière qu'aucune bonne dépendance ne peut être trouvée sur elles.
Laissez-moi essayer à nouveau. Je vais donner mon avis.
Alexey
Je soupçonne qu'il manque quelque chose dans ces données. C'est comme dans votre mission du premier message - si vous retirez l'une de ces 6 entrées de l'échantillon, le résultat devient imprévisible. Le Forex dépend clairement de son propre prix passé, de l'heure de la journée, etc. Et ce "itd" est exactement ce qui manque dans mes données, et donc les modèles ne peuvent tout simplement pas trouver de régularités adéquates et décrire la logique. Les ne peuvent apparemment pas essayer différentes combinaisons comme "soustraire le haut du bas" et prendre la meilleure d'entre elles, et de telles choses doivent être ajoutées à l'échantillon lui-même. Je suis en train de refaire mon script qui sauvegarde les données forex en csv, j'y ajoute beaucoup de deltas, plus les distances aux sommets passés des zigzags, selon les conseils. Je posterai un nouveau fichier de données plus tard pour l'expérimentation.
Vous trouverez ci-joint un certain nombre d'articles qui sont censés résoudre le problème de la suppression du bruit de l'ensemble original de prédicteurs, et ce avec une qualité bien supérieure. Malheureusement, je n'ai pas le temps de l'essayer pour le moment. Peut-être que quelqu'un va l'essayer et poster le résultat ?
J'ai pu répéter le processus décrit. Selon les résultats - mon ensemble de prédicteurs décrit le résultat avec 0,1% de confiance, ou quelque chose comme ça... Il y a beaucoup de théories qui dépassent mes connaissances, je n'ai pas tout compris.
J'ai ajouté 3 fichiers. Il vous suffit de modifier le chemin d'accès au fichier csv et vous pouvez l'exécuter. Le résultat requis doit se trouver dans la dernière colonne du csv, tout le reste étant des prédicteurs. Ne normalisez rien au préalable, alimentez les données telles qu'elles sont.
1) Régression en composantes principales 01. Un peu de code de la partie introductive de l'article, il me semble qu'il manque quelque chose, car j'ai des erreurs en exécutant le code. Il devrait donner à chaque entrée un score, et dessiner un graphique, ici, malheureusement, je ne comprends pas quoi à quoi et comment l'appliquer.
2) Régression en composantes principales 03. Régression en composantes principales, Pt. 2 : Méthodes Y-Aware. J'ai sauté la première partie, parce que l'article dit que la première partie est un autre algorithme, plus faible.
Le code est divisé en deux parties et il faut les exécuter l'une après l'autre pour voir le graphique dessiné dans R après chaque partie.
La première exécution - vous devez copier et exécuter tout ce qui se trouve dans le fichier jusqu'au début de la deuxième étape (le début de la deuxième étape est indiqué en caractères gras STEP 2). La console R affichera un tableau où plus la valeur de l'entrée est faible, plus elle est bonne. Valeur = 1 = déchets. Plus le graphique, là, plus la ligne est longue, plus c'est mauvais, comme dans le tableau.
Ensuite, nous devons exécuter le code de l'étape 2. A la fin, il y aura un graphique, plus la ligne est longue par rapport à l'entrée, plus elle est fiable (c'était l'inverse à l'étape 1). Il y a également une variable exemplePruneSig dans le code qui est responsable du tri des entrées en fonction de la valeur psig du tableau de l'étape 1. Vous pouvez définir la valeur de la variable =1, si vous voulez voir la valeur transformée de la plausibilité de toutes les entrées. Il est en effet possible qu'une entrée ait été mal évaluée lors de la première étape, mais qu'elle soit devenue meilleure lors de la deuxième étape. Il est recommandé de prendre une certaine valeur seuil ou exemplePruneSig = 1/nombre d'entrées, mais il n'y a pas d'instructions précises.
La troisième étape est l'analyse en composantes principales (prcomp) elle-même. C'est quelque chose de nouveau pour moi, mais le fait est que cette fonction essaie de produire de nombreuses "composantes principales" (PC) (quelque chose comme des variables internes, dont dépend le résultat souhaité). Chacune de ces variables internes repose sur un ensemble différent de données d'entrée. La tâche se résume alors à trouver l'ensemble minimal de ces PC qui permet de déterminer le résultat de manière fiable. Et l'échantillon de prédicteurs qui en résulte est lui-même les prédicteurs des PC qui tombent dans cet ensemble minimal.
L'article lui-même ne résout pas ce problème, il prend juste les 2 premiers PC et regarde s'il réussit ou non. Mais j'ai peut-être manqué quelque chose, donc si vous comprenez le prcomp, vous feriez mieux de le lire vous-même.
Mais, à la fin de l'étape, un diagramme sera dessiné des 5 premiers PCs, et des entrées utilisées par ceux-ci. Plus la ligne est longue sur le diagramme, plus l'entrée est importante.
Quatrième, cinquième et sixième étapes - évaluation du résultat sur les données de formation et de test.
3) Régression en composantes principales 04. Une fonction d'un autre paquet qui fait la même chose que dans Principal Components Regression 03. Cependant, un avantage est qu'il élimine les PC et laisse un ensemble minimal de ceux qui peuvent décrire le résultat avec une précision de 95 %.
Mais il n'y a pas d'exemples et de graphiques adéquats, je suppose que vous devez utiliser quelque chose de la régression en composantes principales 03.
tl;dr :
1) Éliminer les valeurs bruyantes. Nous prenons le fichier "Principal Components Regression 03", exécutons seulement le code jusqu'à la deuxième étape (sans inclure la deuxième étape). R contiendra un tableau, seules les entrées avec une valeur de psig inférieure au seuil devraient être prises. Une valeur de "1" correspond au bruit et au hasard. "0" est bon. Un seuil de (1/nombre d'entrées) est incertain. Cette méthode ne donne aucune garantie que les entrées sont échantillonnées correctement, mais elle élimine simplement les valeurs vraiment aléatoires et bruyantes.
2) Une approche plus complexe. Un algorithme astucieux crée des composantes principales qui peuvent être utilisées pour calculer le résultat. Le PC est un type de fonction qui décrit un processus interne se déroulant dans le modèle modélisé. Et le résultat du modèle lui-même est un ensemble de PC en interaction. Ensuite, nous prenons un ensemble minimum de PC qui décrivent le résultat avec une grande précision, et nous examinons les entrées utilisées pour ces PC. Le fichier "Principal Components Regression 04" nous permet d'obtenir l'ensemble minimum de ces PCs, mais on ne sait pas trop quoi en faire, nous devons extraire les prédicteurs utilisés.
Voici à nouveau l'article lui-même, ainsi que le code qui l'accompagne.
http://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/
https://github.com/WinVector/Examples/blob/master/PCR/YAwarePCA.Rmd
Je soupçonne qu'il manque quelque chose dans ces données. C'est comme votre mission dans le premier message - si vous retirez ne serait-ce qu'une seule de ces 6 entrées de l'échantillon, le résultat devient imprévisible. Le Forex dépend clairement de son propre prix passé, de l'heure de la journée, etc. Et ce "itd" est exactement ce qui manque dans mes données, et donc les modèles ne peuvent tout simplement pas trouver de régularités adéquates et décrire la logique. Les ne peuvent apparemment pas essayer différentes combinaisons comme "soustraire le haut du bas" et prendre la meilleure d'entre elles, et de telles choses doivent être ajoutées à l'échantillon lui-même. Je suis en train de refaire mon script qui sauvegarde les données forex en csv, j'y ajoute beaucoup de deltas, plus les distances aux sommets passés des zigzags, selon les conseils. Je posterai plus tard un nouveau fichier de données pour les expériences.
J'ai essayé de chercher un peu plus. Et j'ai fait un contrôle de validation. Mais la dépendance constatée n'a pas été confirmée. Dans l'ensemble, je pense qu'il n'y a pas assez d'informations dans les données. Essayer d'élargir la liste des entrées, oui.
Et voici mes données forex : https://drive.google.com/drive/folders/0B_Au3ANgcG7CYnhVNWxvbmFjd3c
dat_train_final est un fichier pour la formation du modèle. Il contient l'historique de 5 paires de devises sur 10 ans et tous mes prédicteurs.
Many_samples - J'ai besoin de charger dans R. Il s'agit d'une liste - dans chaque élément il y a un échantillon de validation, et il y en a 49 au total. Tout ou partie d'entre eux peuvent être validés.
Je ne peux pas voir vos fichiers, le lien est juste un dossier vide.
Quoi qu'il en soit, voici mon nouveau fichier pour le modèle d'entraînement sur eurusd (h1, 5 barres, l'objectif est la hausse ou la baisse du prix pour la prochaine barre). Je l'ai analysé en suivant l'article mentionné ci-dessus principal-components-regression-pt-2-y-aware-methods et il s'est avéré que les données décrivent de manière fiable moins de 1% des résultats.
(RData par SanSanych a ce nombre plus de 10% pour Rat_DF1), donc il semble que j'ai encore des déchets. Il est peu probable de former un modèle sur ce fichier, il est plus approprié si l'on veut former pour trier les prédicteurs.
L'archive contient 2 fichiers, la condition est d'entraîner le modèle dans le premier fichier (il est plus pratique de le diviser en plusieurs morceaux pour le test et la validation, par défaut Rattle le divise en 75%/15%/15%), puis, lorsque les entrées sont sélectionnées et que le modèle est entraîné, faire un test physique sur le second fichier. Si l'erreur est inférieure à 45%, vous avez une chance de négocier avec un tel modèle sur le marché des changes. Vous ne ferez peut-être pas de bénéfices, mais vous pouvez obtenir des bonus de la part des courtiers pour le nombre de transactions et les rabais. Si l'erreur de classification sur le deuxième fichier est inférieure à 40% - c'est déjà une stratégie rentable.
2) Régression en composantes principales, 2e partie : méthodes tenant compte de l'âge. J'ai omis la première partie car l'article indique qu'il s'agit d'un autre algorithme, plus faible.
Il m'a semblé, peut-être ai-je tort, que l'incertitude de votre résultat est due à une méconnaissance de l'essence même de la méthode des composantes principales. Et l'essence est la suivante.
À partir des prédicteurs existants, créez de nouveaux prédicteurs qui ont de nouvelles propriétés utiles.
Le résultat est présenté dans un tableau, avec PC1, PC2... dans l'en-tête, les noms des lignes du tableau sont les noms de vos prédicteurs et dans les colonnes sous chaque PC se trouvent des chiffres - les coefficients par lesquels vous devez multiplier votre prédicteur initial pour former la valeur de PC. C'est-à-dire que pour une certaine barre, nous prenons les valeurs des prédicteurs initiaux, les multiplions par les coefficients et obtenons la valeur PC, puis la barre suivante et ainsi de suite. En conséquence, en plus de vos vecteurs initiaux, par exemple Ask, nous obtenons un vecteur supplémentaire
Tous les PC du tableau sont commandés. Le premier est le MS qui explique le mieux la variabilité de l'ensemble original, le second est le MS qui explique le mieux la variabilité de ce qui reste du premier MS. Par exemple, PC1 = 0,6, PC2 = 0,2, alors au total PC1+PC2 expliquent 0,8 de la variabilité. Habituellement, pour de grands ensembles de prédicteurs, 5 à 6 de ces "composantes principales" suffisent à expliquer plus de 95 % de la variabilité. C'est le cas si la plupart des prédicteurs sont du bruit et qu'il existe de véritables composantes "principales" parmi eux !
J'ai décrit les classiques "composantes principales". Cet article est intéressant pour nous car, contrairement au classique, il calcule la variabilité par rapport à la variable cible. Les seuils, en revanche, sont nécessaires pour choisir quelque chose parmi un ensemble de prédicteurs complètement désespérés. Cela ne me semble pas pertinent pour nous. Elle est pertinente, par exemple, pour les statistiques en sociologie, où il est très difficile de collecter des éléments supplémentaires. Dans notre cas, une seule paire de devises peut être utilisée pour construire un nombre énorme de prédicteurs.
Peut-être pourriez-vous faire un autre tour (hit) sur ces composants fondamentaux ?
PS.
1. N'oublions pas que les composantes principales nécessitent une normalisation préalable des données brutes.
2. Les composantes principales qui en résultent ont la propriété remarquable d'être indépendantes les unes des autres.
3. Les composantes principales peuvent être prédites.
Je comprends maintenant, merci pour la clarification. Je n'ai appris l'existence de ce modèle qu'en lisant l'article. Je pensais que PC1 et PC2,3,4,... correspondent à des ensembles différents de prédicteurs, et non de coefficients. J'ai vu le tableau des coefficients, maintenant je sais rapidement où trouver quoi.
Le code du fichier PrincipalComponentRegression04.txt semble trop compliqué. De plus, il ne semble pas y avoir de définition de la variabilité par rapport àla variable cible. Je suis retourné au fichier PrincipalComponentRegression03.txt de l'archive que j'ai jointe ce matin.
Il faut faire les 5 premières étapes.
Suivant,
(Intercept) PC1 PC2
0.02075519 0.40407635 -0.42250678
Le résultat de l'exécution devrait être intercept + coef1 * PC1 + coef2 * PC2 + ... + PC restant, le cas échéant
Les valeurs de PC1, PC2. :
> proj
PC1 PC2
X_clean 0.00516309881 0.00477076325
X1_clean 0.00142866076 0.00149863842
X2_clean -0.00008292268 0.00001010802
.....
PC1 = X_clean * 0.00516309881 + X1_clean*0.00142866076 +.
C'est un mystère pour moi maintenant si le postfixe "clean" est une référence pour prendre la valeur originale des entrées, X, X1, X2,.... avant les normalisations et les transformations, ou non.
Plus tard, je prendrai un exemple plus facile et je calculerai toutes les valeurs manuellement pour comparer si j'ai bien compris les formules ou non. Juste une supposition pour le moment)
Mais il s'avère que cette méthode n'est pas destinée à éliminer les prédicteurs, mais plutôt à entraîner un modèle qui ignore lui-même le nombre maximal de prédicteurs. Tout ce que nous pouvons faire est de calculer le coefficient moyen de chaque prédicteur et d'exclure ce qui est inférieur au seuil.
Ce modèle est lui-même très similaire à neuroncu, mais sans fonction d'activation et sans décalage sur les neurones de la couche interne. Mais l'essence est la même.
Un autre problème : combien de composants de PC faut-il prendre ? Si j'obtiens moins de 95% de confiance, je dois revenir à l'étape 3 et changer proj <-extractProjection(2,princ) de deux à trois, puis effectuer les étapes 3,4,5, calculer l'erreur et si elle est inférieure à 95%, revenir à l'étape 3 et augmenter à nouveau le nombre de composants.
Si nous avions un accès direct à R dans MT5, nous aurions un modèle fini prêt à être négocié. Je comprends que ce modèle ne souffre pas du problème du réapprentissage, c'est très bien si c'est le cas. C'est-à-dire que le niveau de confiance de 10% est atteint et c'est bien.
Presque tout est clair dans ce modèle. Il serait très bien de l'implémenter dans MT5, pour implémenter uniquement la logique de prise de décision par coefficients. La façon de connecter R avec MT5 n'est pas claire. Je peux exporter toutes les données de mt5 vers csv, puis les traiter dans R, entraîner le modèle et écrire les coefficients dans un autre csv. CSV avec les coefficients lus depuis l'Expert Advisor. De plus, ce sera très mauvais car R a de nombreuses fonctions qui normalisent les données avant d'en calculer le PC. Il n'est guère possible de répéter ce code pour la normalisation dans MT5. Nous devons réfléchir.
Je comprends maintenant, merci pour la clarification. Je n'ai appris l'existence de ce modèle qu'en lisant l'article. Je pensais que PC1 et PC2,3,4,... correspondent à des ensembles différents de prédicteurs, et non de coefficients. J'ai vu le tableau des coefficients, maintenant je sais rapidement où trouver quoi.
Le code du fichier PrincipalComponentRegression04.txt semble trop compliqué. De plus, il ne semble pas y avoir de définition de la variabilité par rapport àla variable cible. Je suis retourné au fichier PrincipalComponentRegression03.txt de l'archive que j'ai jointe ce matin.
Il faut faire les 5 premières étapes.
Suivant,
(Intercept) PC1 PC2
0.02075519 0.40407635 -0.42250678
Le résultat de l'exécution devrait être intercept + coef1 * PC1 + coef2 * PC2 + ... + PC restant, le cas échéant
Les valeurs de PC1, PC2. :
> proj
PC1 PC2
X_clean 0.00516309881 0.00477076325
X1_clean 0.00142866076 0.00149863842
X2_clean -0.00008292268 0.00001010802
.....
PC1 = X_clean * 0.00516309881 + X1_clean*0.00142866076 +.
C'est un mystère pour moi maintenant si le postfixe "clean" est une référence pour prendre la valeur originale des entrées, X, X1, X2,.... avant les normalisations et les transformations, ou non.
Plus tard, je prendrai un exemple plus facile et je calculerai toutes les valeurs manuellement pour comparer si j'ai bien compris les formules ou non. Juste une supposition pour le moment)
Mais il s'avère que cette méthode n'est pas destinée à éliminer les prédicteurs mais plutôt à former un modèle qui ignore le nombre maximal de prédicteurs. Tout ce que nous pouvons faire est de calculer le coefficient moyen pour chaque prédicteur et d'exclure tout ce qui est en dessous du seuil.
Ce modèle est lui-même très similaire à neuroncu, mais sans fonction d'activation et sans décalage sur les neurones de la couche interne. Mais l'essence est la même.
Un autre problème : combien de composants de PC faut-il prendre ? Si j'obtiens moins de 95% de confiance, je dois revenir à l'étape 3 et changer proj <-extractProjection(2,princ) de deux à trois, puis effectuer les étapes 3,4,5, calculer l'erreur et si elle est inférieure à 95%, revenir à l'étape 3 et augmenter à nouveau le nombre de composants.
Si nous avions un accès direct à R dans MT5, nous aurions un modèle fini prêt à être négocié. Je comprends que ce modèle ne souffre pas du problème du réapprentissage, c'est très bien si c'est le cas. C'est-à-dire que le niveau de confiance de 10% est atteint et c'est bien.
Presque tout est clair dans ce modèle. Il serait très bien de l'implémenter dans MT5, pour implémenter uniquement la logique de prise de décision par coefficients. La façon de connecter R avec MT5 n'est pas claire. Je peux exporter toutes les données de mt5 vers csv, puis les traiter dans R, entraîner le modèle et écrire les coefficients dans un autre csv. CSV avec les coefficients lus depuis l'Expert Advisor. De plus, ce sera très mauvais car R a de nombreuses fonctions qui normalisent les données avant d'en calculer le PC. Il n'est guère possible de répéter ce code pour la normalisation dans MT5. Nous devons réfléchir.
D'après ce que j'ai vu, la régression en composantes principales, partie 2 : méthodes tenant compte de l'âge.
De la vue superficielle du texte, je comprends que le zeste est que la mise à l'échelle est basée sur la fonction cible. Dans l'ACP normale, la fonction cible n'est pas du tout prise en compte. Pour cette raison, on suppose que les premières composantes sont les composantes les plus importantes pour expliquer la fonction cible, plutôt que d'expliquer la variabilité de l'ensemble des prédicteurs !
Un autre problème est de savoir combien de composants de PC il faut prendre
C'est la raison de toute cette agitation. Intuitivement, il n'y a pas de seuils. Si les 5 premières composantes n'expliquent pas plus de 95 % de la variabilité, nous devons chercher un nouvel ensemble de prédicteurs. Bien que je puisse me tromper.
A propos du modèle, presque tout est clair. Ce serait très bien de l'implémenter dans MT5.
Tout fonctionne bien dans MT4. Il existe une bibliothèque Pascal avec le code source. Je ne l'ai pas essayé moi-même, mais pour moi si MT4 est capable de faire appel à la bibliothèque sur pascal, alors MT5 devrait le faire aussi.
L'appel à R ressemble à ceci.
1. OnInit établit la connexion avec R. S'il existe des données spéciales préparées, la zone de travail est chargée. En dehors de cela, le code en R disposé dans une ou plusieurs fonctions est chargé. Le nombre de chaînes de caractères dans chaque fonction est bien sûr arbitraire - déterminé par la logique.
2. Le corps du conseiller expert ou de l'indicateur appelle ces fonctions.
Si l'on considère que R possède les graphiques les plus riches qui ne sont pas liés à la fenêtre du terminal, nous avons de grandes possibilités de visualiser les données parallèlement au terminal.
Je suis en train de lire, de lire.... et ne peut pas comprendre quelle est la variable cible d'abord d'un point de vue formel : un nombre réel (régression) ou une valeur nominale (classification). De même, si nous discutons de la mesure dans laquelle les prédicteurs influencent la variable cible, il est bon de connaître la signification substantielle de cette même variable cible.
Paradoxalement, la classification est identique à la régression.
Ce n'est que pour la régression que le résultat est réel, alors que pour la classification, il s'agit d'une probabilité.
Et la cible pour la régression est une courbe continue, alors que pour la classification ce sont des impulsions (0, 1) ou (-1,+1).
Cette sortie est ensuite traduite dans la classe appropriée (ifelse(y > 0,5, 1, 0).
Je ne peux pas voir vos fichiers, le lien montre juste un dossier vide.
c'est la formation : https://drive.google.com/file/d/0B_Au3ANgcG7CN2tTUHBkdEdpVEU/view?usp=sharing
c'est la validation : https://drive.google.com/file/d/0B_Au3ANgcG7CZmFWclFOd0RqNFk/view?usp=sharing
la validation doit être traitée comme ceci load(validation_file)
chaque élément de la liste contient un échantillon de validation unique, avec des observations indépendantes. Il n'y a presque pas de chevauchement entre les échantillons de validation car les observations qu'ils contiennent sont prises à des moments aléatoires. Chaque échantillon de validation peut être traité comme une estimation ponctuelle du commerce.
Ceci est fait afin de ne pas simuler des transactions se produisant à chaque minute. Les transactions sont modélisées toutes les 12 heures environ.