L'apprentissage automatique dans la négociation : théorie, modèles, pratique et algo-trading - page 15

 
Dr. Trader:

J'utilise des indicateurs standard comme base pour créer des prédicteurs. Je suis encore en train de l'expérimenter moi-même, en essayant les idées de ce fil de discussion du forum.

Je le fais depuis quelques semaines, maintenant le meilleur résultat est le suivant : (beaucoup de calculs, j'essaie d'utiliser l'unité de temps D1 pour une meilleure vitesse, ensuite j'utiliserai une unité de temps plus petite).

1) exportation de mt5 vers csv : ohlc, temps, indicateurs, tous pour les 10 dernières barres. J'ai récemment commencé à prendre le temps uniquement à partir de la barre la plus récente, je pense que le temps des autres barres est calculable et n'apporte donc aucune nouvelle information. Plusieurs centaines de prédicteurs "primaires" sortent. Le résultat requis de l'apprentissage est "1" ou "0" - hausse ou baisse du prix dans la barre suivante. Ma méthode avec les zigzags n'est pas stable et complexe, je suis meilleur pour travailler avec des prix proches maintenant. Lorsque j'aurai élaboré un algorithme complet pour l'entraînement du modèle à partir de zéro, je pourrai commencer à travailler sur les zigzags et la prédiction des tendances.

2) Dans R, j'effectue différentes opérations mathématiques avec les données disponibles - addition, deltas, min, max, etc. Il sort déjà plus d'un millier de prédicteurs.

3) Il est évident qu'il y a plus de déchets que nécessaire après la deuxième étape. Je le passe au crible en suivant la méthode de l'article sur les composants de basehttp://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/, SanSanych en a parlé plus tôt. Je n'enseigne pas le modèle PCR lui-même et je me suis contenté de la fonction de présélection des prédicteurs pour le moment :

srcTable est une table avec des prédicteurs, la dernière colonne doit être le résultat de l'entraînement requis.pruneSig est mieux de laisser -1.

En conséquence, la fonction renverra une liste avec les noms des colonnes du tableau qui contiennent des informations utiles. Ou une liste vide si rien d'utile n'est trouvé. Cette méthode est mentionnée dans l'article comme n'étant pas très significative, mais elle s'avère tout à fait adéquate, elle filtre très bien les déchets. En outre, la liste des résultats sera triée par pertinence, du plus utile au moins utile.

4) Si la fonction renvoie une liste vide, j'exécute à nouveau la deuxième étape, en générant à nouveau différentes combinaisons mathématiques sur les données disponibles, puis la troisième étape pour effectuer un tri. Je dois répéter cela 3-4 fois. Le volume de données augmente à chaque répétition, il est donc préférable de limiter d'une manière ou d'une autre le volume de nouvelles données générées. Nous pouvons modifier cette fonction pour le tamisage, de sorte que si la liste est vide, elle renvoie une centaine ou deux des meilleurs résultats et génère de nouveaux prédicteurs uniquement à partir de ceux-ci.

5) Ensuite, selon l'article, nous devons former le modèle du composant principal lui-même. J'ai des problèmes avec elle - jusqu'à présent, le meilleur r-carré pour le modèle formé est de 0,1, ce n'est pas suffisant, l'article dit que j'ai besoin d'au moins 0,95. Mais je peux entraîner un autre modèle R sur les prédicteurs obtenus et cela donnera un meilleur résultat. J'ai le plus d'expérience avec la neuronique, le meilleur résultat dans le fronttest avec elle sort avec une erreur d'environ 37%. Le modèle PCE est censé être plus stable, sans réapprentissage, etc., mais jusqu'à présent, je n'ai pu obtenir aucun prédicteur pour lui.


Félicitations, merci de poster le résultat.

J'espère que ce post de votre part sera apprécié -vous avez, sinon résolu le problème de base du commerce, c'est sans exagération.

Tout le reste viendra avec.

Encore une fois, félicitations et bonne chance !

 
Dr. Trader:

J'utilise des indicateurs standard comme base pour créer des prédicteurs. Je suis encore en train de l'expérimenter moi-même, en essayant les idées de ce fil de discussion du forum.

Je le fais depuis quelques semaines, maintenant le meilleur résultat est le suivant : (beaucoup de calculs, j'essaie d'utiliser l'unité de temps D1 pour une meilleure vitesse, ensuite j'utiliserai une unité de temps plus petite).

1) exportation de mt5 vers csv : ohlc, temps, indicateurs, tous pour les 10 dernières barres. J'ai récemment commencé à prendre le temps uniquement à partir de la barre la plus récente, je pense que le temps des autres barres est calculable et n'apporte donc aucune nouvelle information. Plusieurs centaines de prédicteurs "primaires" sortent. Le résultat requis de l'apprentissage est "1" ou "0" - hausse ou baisse du prix dans la barre suivante. Ma méthode avec les zigzags n'est pas stable et complexe, je suis meilleur pour travailler avec des prix proches maintenant. Lorsque j'aurai élaboré un algorithme complet pour l'entraînement du modèle à partir de zéro, je pourrai commencer à travailler sur les zigzags et la prédiction des tendances.

2) Dans R, j'effectue différentes opérations mathématiques avec les données disponibles - addition, deltas, min, max, etc. Il sort déjà plus d'un millier de prédicteurs.

3) Il est évident qu'il y a plus de déchets que nécessaire après la deuxième étape. Je le passe au crible en suivant la méthode de l'article sur les composants de basehttp://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/, SanSanych en a parlé plus tôt. Je n'enseigne pas le modèle PCR lui-même et je me suis contenté de la fonction de présélection des prédicteurs pour le moment :

srcTable est une table avec des prédicteurs, la dernière colonne doit être le résultat de l'entraînement requis.pruneSig est mieux de laisser -1.

En conséquence, la fonction renverra une liste avec les noms des colonnes du tableau qui contiennent des informations utiles. Ou une liste vide si rien d'utile n'est trouvé. Cette méthode est mentionnée dans l'article comme n'étant pas très significative, mais elle s'avère tout à fait adéquate, elle filtre très bien les déchets. En outre, la liste des résultats sera triée par pertinence, du plus utile au moins utile.

4) Si la fonction renvoie une liste vide, j'exécute à nouveau la deuxième étape, en générant à nouveau différentes combinaisons mathématiques sur les données disponibles, puis la troisième étape pour effectuer un tri. Je dois répéter cela 3-4 fois. Le volume de données augmente à chaque répétition, il est donc préférable de limiter d'une manière ou d'une autre le volume de nouvelles données générées. Nous pouvons modifier cette fonction pour le tamisage, de sorte que si la liste est vide, elle renvoie une centaine ou deux des meilleurs résultats et génère de nouveaux prédicteurs uniquement à partir de ceux-ci.

5) Ensuite, selon l'article, nous devons former le modèle du composant principal lui-même. J'ai des problèmes avec elle - jusqu'à présent, le meilleur r-carré pour le modèle formé est de 0,1, ce n'est pas suffisant, l'article dit que j'ai besoin d'au moins 0,95. Mais je peux entraîner un autre modèle R sur les prédicteurs obtenus et cela donnera un meilleur résultat. J'ai le plus d'expérience avec la neuronique, le meilleur résultat dans le fronttest avec elle sort avec une erreur d'environ 37%. Le modèle PCE est censé être plus stable, sans réapprentissage, etc., mais jusqu'à présent, je n'ai pu obtenir aucun prédicteur pour lui.

Si vous avez une erreur de 30% dans le fronttest, c'est déjà un modèle assez rentable, faites un conseiller expert pour mt5 et vérifiez-le dans le testeur de stratégie.

Allez-y ! Vous vous améliorerez avec le temps.
 
Dr. Trader:
J'ai commencé à regarder ce cours et il se concentre beaucoup sur le cadre Pandas en Python. Les premières leçons ressemblent plus à un tutoriel sur le cadre de travail qu'à une analyse des données. Mais le tutoriel semble adéquat, sans le typique "Je suis un gourou du Forex, je vais vous ouvrir les yeux et vous allez gagner des millions" comme dans beaucoup d'autres formations inutiles, cela donne l'espoir qu'ils diront des choses adéquates jusqu'à la fin. Mais il faut tenir compte du fait que ce cours est conçu pour le trading boursier, pas pour le Forex, je ne sais pas si les processus d'apprentissage des modèles dans ces deux domaines sont similaires.
Le principe est le même. Il y a des nuances dans le commerce. Par exemple, il n'existe pas beaucoup de terminaux proches de la réalité qui permettent de tester les échanges (slippage, exécution partielle, retards). Mais il y en a. Mais MT5 ne leur appartient pas, d'après ce que je comprends.
 
Dr. Trader:

J'utilise des indicateurs standard comme base pour créer des prédicteurs.

...

2) Je fais différentes opérations mathématiques avec les données disponibles dans R - addition, deltas, min, max, etc. Il en ressort déjà plus de mille prédicteurs.

3) Il est évident qu'il y a plus de déchets que nécessaire après la deuxième étape. Je le tamise en utilisant la méthode décrite dans l'article sur les composants de basehttp://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/, SanSanych en a parlé plus tôt.

...

En conséquence, la fonction renvoie une liste contenant les noms des colonnes du tableau qui contiennent des informations utiles. Ou une liste vide si rien d'utile n'est trouvé. Cette méthode est mentionnée dans l'article comme n'étant pas très significative, mais elle s'avère être tout à fait adéquate, elle filtre très bien les déchets. En outre, la liste des résultats sera triée par pertinence, du plus utile au moins utile.

On ne peut s'empêcher de penser que le calcul est entièrement dû au hasard ! Les prédicteurs ne sont rien d'autre que des déchets. Il y a peut-être un diamant au milieu d'eux, car la vie pourrait surgir de la "soupe" !

Il s'avère que cette approche est une optimisation intelligente de l'informatique. Quand il n'y a pas de forçage brutal, mais des algorithmes plus intelligents. Mais l'entrée est toujours la même connerie.

Il s'avère que si nous disposions d'une machine de calcul aussi puissante, capable d'effectuer n'importe quel calcul en une seconde, nous n'aurions pas besoin de formation du tout. Mais en même temps, nous ne verrions pas de changements qualitatifs dans la réception d'un TS rentable. Tristement.

 
Alexey Volchanskiy:

Un collègue m'a envoyé un lien vers un cours sur l'apprentissage automatique. Voulez-vous y jeter un coup d'œil ? C'est gratuit, mais c'est en Python pour une raison quelconque ((

https://www.udacity.com/course/machine-learning-for-trading--ud501

Tout est mieux montréici.

Bonne chance

 
Anton Zverev:

Je ne peux m'empêcher de penser que le calcul est entièrement basé sur le hasard ! Les prédicteurs sont tous nuls. Peut-être y aura-t-il un diamant parmi eux - après tout, la vie peut naître de la "soupe" !

.... C'est triste.

Vous avez tout à fait tort !

Laissez-moi vous expliquer à l'aide d'un exemple.

Prenez un kodobase. Tout ce qui s'y trouve est de la camelote, ou bien il y a quelque chose de valable. Le plus probable est qu'il y a, après tout, l'expérience de tant de personnes.

Supposons maintenant avec certitude que nous allons négocier des tendances. Parmi les indicateurs disponibles dans la kodobase, lesquels seront utiles pour le trading de tendance ? Devons-nous juger d'après le nom ou intuitivement ? Et combien pouvons-nous pratiquement en sélectionner pour les essayer ? 10, 20, 100 ? Je pense que 100 est par un testeur pour la vie, compte tenu de la combinaison.

Mais le plus important n'est pas seulement le nombre d'indicateurs à essayer. L'essentiel est de savoir si le conseiller expert fonctionnera à l'avenir. Et le conseiller expert ne fonctionnera à l'avenir que dans un seul cas - s'il n'est pas recyclé (pas sur-entraîné). Le principal problème dans la construction de systèmes de trading mécaniques est le problème du surentraînement (overfitting). De nombreuses personnes ont-elles réussi à surmonter ce problème ?

Je pense que leDr. Trader n'a pas construit ses prédicteurs à partir d'une torche, mais avait une idée - pour le moment, l'idée de générer autant de prédicteurs n'est pas intéressante.

Ce qui est intéressant est tout autre chose.

Ce qui est intéressant, c'est ce à quoi vous n'avez pas prêté attention.

Parmi ses milliers de prédicteurs,Dr. Trader peut sélectionner ceux qui ne provoqueront pas de sur-entraînement (overfitting) des conseillers experts.

Non seulement il sait comment sélectionner des prédicteurs qui ne provoqueront pas le développement d'EA surajoutées, mais il a également montré le code qui le fait.

 
СанСаныч Фоменко:

Vous vous trompez complètement !

Laissez-moi vous donner un exemple.

Prenons kodobase. Est-ce que c'est de la foutaise ou est-ce qu'il y a quelque chose de valable ? Il est fort probable qu'il y en ait, après tout, l'expérience de nombreuses personnes.

Des bêtises, bien sûr ! Eh bien, si l'on prend toute la base de données comme indicateur...

Trader sait comment sélectionner, parmi des milliers de prédicteurs, ceux qui ne conduiront pas à un réentraînement (surajustement) des Expert Advisors.

Non seulement il sait comment sélectionner des prédicteurs qui ne conduiront pas au développement de conseillers experts surajustés, mais il a également élaboré le code à l'aide duquel cela est possible.

Et il s'avère que dans un énorme tas d'ordures, il n'a pas trouvé une seule pierre, et encore moins des diamants. Je vous le dis, je tente ma chance.

Ou bien quelqu'un est-il capable de justifier que tel ou tel indicateur n'est pas un déchet ? Et montrer, chiffres à l'appui, l'importance relative de ce prédicteur ?

 

Oui, je reçois beaucoup d'actions aléatoires, je suis d'accord. Mais vous ne pouvez pas vous contenter de prendre un indicateur et d'en faire un EA, vous allez rapidement vous retrouver en territoire négatif avec cet indicateur. Les indicateurs ne sont pas à 100 % des déchets, mais ils ne fournissent pas à eux seuls suffisamment d'informations pour prédire l'évolution des prix. Mais j'ai constaté au cours de mes recherches que la combinaison d'indicateurs peut augmenter leur pouvoir prédictif, c'est-à-dire que l'on peut vraiment faire un diamant à partir de déchets. Le problème est qu'il existe des milliers de combinaisons possibles et que seules des dizaines d'entre elles sont utiles et je ne sais pas quels indicateurs sont initialement meilleurs que d'autres. Jusqu'à présent, ce problème a été résolu comme je l'ai écrit précédemment, en agissant par la force brute et de longs calculs. Au fil du temps, j'obtiendrai des statistiques sur les indicateurs qui entrent le plus souvent dans les prédicteurs finaux et je pourrai travailler uniquement avec eux, tout ira plus vite.

J'ai commencé à faire un Conseiller Expert basé sur les prédicteurs obtenus, le résultat sera vraiment visible dans le testeur. Ils disent que même avec 60% de barres correctement prédites, vous perdrez toujours de l'argent car le prix a parcouru moins de distance avec les barres correctement prédites qu'avec les barres incorrectes. Si c'est le cas, vous devez créer votre propre fonction de fitness pour entraîner les neurones à estimer non pas le pourcentage de barres mais la rentabilité du modèle.

 
Dr. Trader:

Oui, j'ai beaucoup d'actions au hasard, je suis d'accord. Mais vous ne pouvez pas vous contenter de prendre un indicateur et de l'utiliser pour créer un conseiller expert, vous y perdrez rapidement. Les indicateurs ne sont pas à 100 % des déchets, mais ils ne fournissent pas à eux seuls suffisamment d'informations pour prédire l'évolution des prix. Mais mes recherches ont montré que l'on peut améliorer le pouvoir prédictif des indicateurs en les combinant, c'est-à-dire que l'on peut faire un diamant à partir de déchets. Le problème est qu'il existe des milliers de combinaisons possibles et que seules des dizaines d'entre elles sont utiles et je ne sais pas quels indicateurs sont initialement meilleurs que d'autres. Jusqu'à présent, ce problème a été résolu comme je l'ai écrit précédemment, par la force brute et de longs calculs. Au fil du temps, je vais établir des statistiques sur les indicateurs qui se retrouvent plus souvent dans les prédicteurs finaux, je pourrai travailler uniquement avec eux et tout ira beaucoup plus vite.

Vous voulez trouver des corrélations dans un seul BP. Vous voulez trouver les interrelations qui doivent être présentes à tout moment dans cette BP.

Ces deux circonstances (en gras) semblent pour le moins étranges.

Les méthodes d'apprentissage automatique ont appris à reconnaître des objets (un chien, une orange, etc.) à partir de photos. C'est-à-dire qu'ils ont appris à reconnaître des choses que les humains ou certains types d'animaux peuvent reconnaître. Lorsqu'une personne ou un animal voit un prix BP, il ne se rend compte de rien. C'est-à-dire qu'ils ne sont pas en mesure de faire des comparaisons dans leur NS. Toutefois, lorsqu'un homme examine plusieurs BP à la fois, il constate des similitudes, même à l'œil nu. Et ces similitudes, en effet, sont réalisées. Par conséquent, c'est la conscience d'un objet qui est l'objet logique des techniques d'apprentissage automatique.

D'abord nous le réalisons nous-mêmes, puis nous essayons les algorithmes. Je pense que vous savez ce que je veux dire.

Il fut un temps où l'EURGBP overnight était très cool (rentable). Votre SN ne l'aurait pas reconnu. Les bénéfices ont été réalisés par ceux qui ont compris les raisons de l'inclinaison de la nuit. Ils ont ensuite appliqué des algorithmes à ces éléments de l'historique de l'EURGBP pour trouver la date à laquelle il est devenu soudainement abrupt. Pour ne pas gâcher l'état avec les données qui étaient là avant la raideur. Ils ont commencé à enquêter. Et beaucoup ont gagné beaucoup d'argent avec ça - il suffit de lire les forums.

Maintenant, imaginez que l'OR/ARGENT est cool maintenant. Cette paire n'existe pas, mais vous pouvez la négocier. Mais vous vous êtes limité à une seule BP. Et il est logique de rechercher des interconnexions entre les différentes BP. Dans ce cas, des paires telles que GOLD/SILVER peuvent apparaître. Et les intervalles de la semaine, du jour ou de la nuit, etc. jouent également un rôle important. Le comportement des gens dépend de l'heure de la journée et du jour de la semaine. Ce sont des données conscientes, donc c'est là que vous devez creuser, IMHO.

 
Anton Zverev:

Vous voulez trouver des corrélations dans un seul BP. Et vous voulez trouver les interrelations qui doivent être présentes à tout moment dans cette BP.

...

D'abord nous le réalisons nous-mêmes, puis nous essayons des algorithmes. Je pense que vous savez ce que je veux dire.

...

Mais vous vous êtes limité à une seule BP. Et il est logique de rechercher des interconnexions entre les différentes BP. Dans ce cas, vous pouvez obtenir ces "OR/ARGENT". Les intervalles de la semaine, du jour ou de la nuit, etc. jouent également un rôle important. Le comportement des gens dépend de l'heure de la journée et du jour de la semaine. Ce sont des données conscientes, donc il faut creuser là, IMHO.

Jusqu'à présent, nous essayons de trouver la dépendance du "futur" conditionnel par rapport au "passé" sur la même ligne de temps. Mais cela ne signifie pas que nous n'essaierons pas de le faire pour une combinaison de séries.

A propos de la reconnaissance. Pour les oranges, votre raisonnement est applicable. Même un expert pourra distinguer plusieurs variétés d'orange.

Pour la PB financière, vous devez distinguer un modèle, c'est-à-dire le comportement monotone de la PB sur l'ensemble de l'intervalle de temps disponible. Oui, parfois il semble y avoir quelque chose en vue. Mais cette connaissance est très vague, et les paramètres de dépendance ne sont pas du tout définis avec précision. On ne peut pas se passer de l'aide de l'ordinateur ici. Bien que je ne prétende pas qu'il n'y ait personne qui puisse trouver la dépendance à l'œil et la coder.

Je suis d'accord avec le Dr. Trader pour essayer de rassembler beaucoup d'ordures et d'en extraire des données précieuses. La valeur de ces entrées est vérifiée en formant le modèle et en le validant. Si ce n'est pas du bruit, il y aura un plus sur la validation. C'est tout le cours de l'apprentissage automatique. )

J'ai essayé de telles entrées brutes :

> names(sampleA)

  [1] "lag_diff_2"        "lag_diff_3"        "lag_diff_4"        "lag_diff_6"        "lag_diff_8"        "lag_diff_11"       "lag_diff_16"     

  [8] "lag_diff_23"       "lag_diff_32"       "lag_diff_45"       "lag_diff_64"       "lag_diff_91"       "lag_diff_128"      "lag_diff_181"    

 [15] "lag_diff_256"      "lag_diff_362"      "lag_diff_512"      "lag_diff_724"      "lag_mean_diff_2"   "lag_mean_diff_3"   "lag_mean_diff_4" 

 [22] "lag_mean_diff_6"   "lag_mean_diff_8"   "lag_mean_diff_11"  "lag_mean_diff_16"  "lag_mean_diff_23"  "lag_mean_diff_32"  "lag_mean_diff_45"

 [29] "lag_mean_diff_64"  "lag_mean_diff_91"  "lag_mean_diff_128" "lag_mean_diff_181" "lag_mean_diff_256" "lag_mean_diff_362" "lag_mean_diff_512"

[36] "lag_mean_diff_724" "lag_max_diff_2"    "lag_max_diff_3"    "lag_max_diff_4"    "lag_max_diff_6"    "lag_max_diff_8"    "lag_max_diff_11" 

 [43] "lag_max_diff_16"   "lag_max_diff_23"   "lag_max_diff_32"   "lag_max_diff_45"   "lag_max_diff_64"   "lag_max_diff_91"   "lag_max_diff_128"

 [50] "lag_max_diff_181"  "lag_max_diff_256"  "lag_max_diff_362"  "lag_max_diff_512"  "lag_max_diff_724"  "lag_min_diff_2"    "lag_min_diff_3"  

 [57] "lag_min_diff_4"    "lag_min_diff_6"    "lag_min_diff_8"    "lag_min_diff_11"   "lag_min_diff_16"   "lag_min_diff_23"   "lag_min_diff_32" 

 [64] "lag_min_diff_45"   "lag_min_diff_64"   "lag_min_diff_91"   "lag_min_diff_128"  "lag_min_diff_181"  "lag_min_diff_256"  "lag_min_diff_362"

 [71] "lag_min_diff_512"  "lag_min_diff_724"  "lag_sd_2"          "lag_sd_3"          "lag_sd_4"          "lag_sd_6"          "lag_sd_8"        

 [78] "lag_sd_11"         "lag_sd_16"         "lag_sd_23"         "lag_sd_32"         "lag_sd_45"         "lag_sd_64"         "lag_sd_91"       

 [85] "lag_sd_128"        "lag_sd_181"        "lag_sd_256"        "lag_sd_362"        "lag_sd_512"        "lag_sd_724"        "lag_range_2"     

 [92] "lag_range_3"       "lag_range_4"       "lag_range_6"       "lag_range_8"       "lag_range_11"      "lag_range_16"      "lag_range_23"    

 [99] "lag_range_32"      "lag_range_45"      "lag_range_64"      "lag_range_91"      "lag_range_128"     "lag_range_181"     "lag_range_256"   

[106] "lag_range_362"     "lag_range_512"     "lag_range_724"     "symbol"            "month"             "day"               "week_day"        

[113] "hour"              "minute"            "future_lag_2"      "future_lag_3"      "future_lag_4"      "future_lag_6"      "future_lag_8"    

[120] "future_lag_11"     "future_lag_16"     "future_lag_23"     "future_lag_32"     "future_lag_45"     "future_lag_64"     "future_lag_91"   

[127] "future_lag_128"    "future_lag_181"    "future_lag_256"    "future_lag_362"    "future_lag_512"    "future_lag_724"

Il y a du temps et toutes sortes de mesures pour le mouvement des prix. Ensuite, je les ai aussi passés au crible. Tiens, regarde ce que j'ai.

C'est la partie de l'Expert Advisor qui prend les signaux de la machine entraînée dans R. Les entrées sélectionnées y sont affichées. Et en premier lieu, d'ailleurs, l'heure d'ouverture d'une transaction. C'est-à-dire que le temps est important !

Il s'agit d'un test de l'Expert Advisor sur l'ensemble de l'historique de 1999.02 à 2016.06 :

C'est un peu tordu, mais la machine apprend toujours NON pas le bruit, mais les dépendances des entrées indiquées.

Nous sommes donc du côté positif. Au moins, nous améliorons les résultats des expériences.

Dossiers :