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

 

Merci, j'ai regardé les colonnes, en principe j'ai fait ça aussi - deltas, min, max, temps, etc.

La façon de créer un modèle de trading forex pour moi ne fait que se compliquer, les méthodes simples ne donnent pas de résultats stables. La façon dont je vois les choses maintenant est la suivante :

1) décharger les données de MT5 : ohlc, temps, indicateurs. À ce stade, je n'ajouterai pas de deltas.

2) charger des données dans R, y ajouter un grand nombre de nouvelles colonnes par ajout, soustraction, min, max, etc. des données initiales. Il est plus facile de le faire en R qu'en mt5.

3) sélectionner d'une manière ou d'une autre des sous-ensembles de données d'entrée (par colonnes). Je peux suivre l'exemple d'Alexey en utilisant GenSA ou simplement l'optimisation génétique en utilisant le paquet GA. Puisque j'ai juste besoin d'un résultat binaire par entrée (on/off), GA a un avantage à mon avis, il a un mode de fonctionnement binaire. Mais je dois essayer de comparer les deux paquets.

4) Analyse de sous-ensembles d'entrées. C'est également le cas dans l'exemple d'Alexei. Mais je risque d'entraîner le modèle sur un sous-ensemble d'entrées tout de suite, et d'utiliser l'erreur de données de validation en conséquence. Pour autant que le temps d'apprentissage du modèle ne dépasse pas quelques secondes.

5) Revenir à l'étape 2, ajouter de nouvelles entrées comptées, effectuer d'autres étapes, passer par ces cycles jusqu'à ce que le résultat cesse de s'améliorer.

J'ai également expérimenté un peu avec l'article sur la méthode des composants principaux. Il y a une nuance dans l'exemple de l'article selon laquelle le résultat peut être calculé exactement à partir des données d'entrée. Dans mon cas, lorsque les données d'entrée sont manifestement insuffisantes, cette méthode commence à utiliser le bruit pour l'apprentissage. Il s'avère que si cette méthode permet d'obtenir un résultat (r-carré) de 0,95 avec seulement quelques composants - alors les prédicteurs utilisés dans le modèle sont très probablement corrects. Si, même en utilisant toutes les composantes, le r-carré est toujours inférieur à 0,95, le modèle inclut du bruit dans ses calculs. Toutefois, il convient de noter qu'à mesure que l'on ajoute des prédicteurs de bruit supplémentaires, le r-carré diminue peu à peu. Je pense que de cette manière, vous pouvez comparer des sous-ensembles de prédicteurs entre eux - si le r-squared est plus grand, alors le sous-ensemble est meilleur.

 
Dr. Trader:


J'ai également expérimenté un peu plus l'article sur la méthode des composantes principales. Dans l'exemple de l'article, la nuance est que le résultat peut être calculé avec précision à partir des données d'entrée. Dans mon cas, lorsque les données d'entrée sont manifestement insuffisantes, cette méthode commence à utiliser le bruit pour l'apprentissage. Il s'avère que si cette méthode permet d'obtenir un résultat (r-carré) de 0,95 avec seulement quelques composants - alors les prédicteurs utilisés dans le modèle sont très probablement corrects. Si, même en utilisant toutes les composantes, le r-carré est toujours inférieur à 0,95, le modèle inclut du bruit dans ses calculs. Toutefois, il convient de noter qu'à mesure que l'on ajoute des prédicteurs de bruit supplémentaires, le r-carré diminue peu à peu. Je pense qu'il s'agit d'un moyen de comparer des sous-ensembles de prédicteurs entre eux - si r-squared est plus grand, alors le sous-ensemble est meilleur.

Jusqu'à présent, ce que nous semblons avoir en termes de présélection des prédicteurs qui sont "pertinents" pour la variable cible : Alexey a un certain ensemble de techniques et moi aussi. Ce ne serait pas une mauvaise idée d'en avoir un autre. L'ACP est très attrayante car elle est largement connue, la littérature est abondante..... Notez toutefois qu'il existe un grand nombre d'algorithmes qui calculent l'"importance" des prédicteurs, mais je n'ai pas réussi à les utiliser. Mais en combinaison avec mon algorithme, presque tous ces algorithmes standard donnent de bons résultats - l'erreur est réduite de 5 à 7 %.

Et le nombre de prédicteurs initiaux, je pense, devrait être de quelques dizaines avec plusieurs milliers d'observations. En statistiques, si quelque chose n'est pas suffisant, alors il n'y a pas de statistiques.

 
Dr. Trader:

Merci, j'ai regardé les colonnes, en principe j'ai déjà fait cela aussi - deltas, min, max, temps, etc.



Vous êtes les bienvenus. Vous pouvez aussi vous entraîner sur mon kit. La conception de l'expérience est de qualité. Les données sont bonnes. Et obtenir un résultat positif à la validation n'est pas du tout facile.

1) Décharger les données de MT5 : ohlc, temps, indicateurs. Je n'ajouterai pas de deltas à ce stade.

2) charger des données dans R, leur ajouter un grand nombre de nouvelles colonnes en ajoutant, soustrayant, min, max, etc. les colonnes originales. Il est plus facile de le faire en R qu'en mt5.

3) sélectionner d'une manière ou d'une autre des sous-ensembles de données d'entrée (par colonnes). Je peux suivre l'exemple d'Alexey en utilisant GenSA ou simplement l'optimisation génétique en utilisant le paquet GA. Puisque j'ai juste besoin d'un résultat binaire par entrée (on/off), GA a un avantage à mon avis, il a un mode de fonctionnement binaire. Mais vous devez essayer de comparer les deux paquets.

Ici, je conseille de respecter deux points : premièrement, les entrées doivent être toutesvdostationnaires par rapport à leur moyenne. Deuxièmement - à propos du mécanisme d'énumération des colonnes ; oui, GA a un mode binaire. GenSA ne le fait pas, mais j'ai simulé une sélection binaire.

4) Analyse de sous-ensembles d'entrées. C'est également le cas dans l'exemple d'Alexei. Mais je vais prendre le risque d'entraîner le modèle sur un sous-échantillon d'entrées tout de suite, et d'utiliser l'erreur de données de validation comme résultat. Tant que le temps d'apprentissage du modèle ne dépasse pas quelques secondes.

Bonne idée ! Mais sachez que l'ensemble du processus peut encore prendre beaucoup de temps, car vous avez généralement besoin de milliers d'itérations. Cette fonction de fitness est la plus complexe, car elle calcule l'ensemble du modèle. Pour ma part, j'applique une fonction de fitness dite de filtrage, dans laquelle il n'y a pas d'apprentissage à proprement parler, mais une heuristique qui détermine dans quelle mesure les entrées affectent la sortie au sens large. Le calcul peut être plus rapide que deux secondes. Mais pas d'un ordre de grandeur.

La façon de créer un modèle de trading forex pour moi ne fait que se compliquer, les méthodes simples ne produisent pas de résultats cohérents. Pour l'instant, je vois les choses ainsi :

Jusqu'à présent, j'ai renoncé à ajouter de nouveaux prédicteurs et à apporter toutes sortes de petites améliorations à la conception de l'expérience.

J'ai une idée en tête que je n'ai pas encore mise en œuvre. Le fait est que nous, vous et tout le monde, prédisons généralement une certaine condition de conclusion de la transaction, par exemple 3 heures à l'avance ou lorsque le prix atteint un niveau de prise ou d'arrêt.

Et vous obtenez des résultats médiocres. Et lorsque je saisis plusieurs conditions simultanées dans MT4 pour clôturer une transaction, qui sont traitées par l'opérateur OR, je parviens à obtenir un OM positif même en dehors de l'échantillon.

Je me demandais donc comment je pouvais simuler dans R la prédiction du résultat d'une transaction en fonction de plusieurs conditions à la fois. Par exemple, si le prix atteint le TP dans les 3 heures, alors fermez-le. Mais le paramètre de 3 heures ne doit pas être fixé de manière rigide, car il doit être choisi de manière optimale. Et si nous ajoutons également une condition selon laquelle si le prix est positif dans les 3 heures, mais n'a pas atteint le TP, nous devons tirer le STOP vers le Breakeven.

Dans ce cas, l'entrée dans une position est également prédite par la machine.

C'est la tâche qui nous attend.

 
Alexey Burnakov:

Je me demandais donc comment je pouvais simuler dans R la prédiction du résultat d'une transaction en fonction de plusieurs conditions à la fois. Par exemple, si le prix atteint le TP dans les 3 heures, alors fermez-le. Mais le paramètre de 3 heures ne doit pas être fixé de manière rigide, car il doit être choisi de manière optimale. Et si nous ajoutons également une condition selon laquelle si le prix est gagnant dans les 3 heures, mais n'a pas atteint le TP, nous devons tirer le STOP vers le Breakeven.

D'après mon expérience du trading d'EAs, je n'aime pas les TP et SL. Si le système de trading est correctement construit, alors ses propres sorties de trades seront plus efficaces que les sorties basées sur le TP et le SL.

Les valeurs optimales de SL et TP changent avec le temps, il n'y a pas de valeur constante stable. Nous pouvons trouver certaines valeurs qui amélioreront l'efficacité du système de trading à une certaine période, mais dans ce cas, l'efficacité de la stratégie diminuera au-delà de cette période. Il est préférable de ne pas déplacer le SL, mais de le maintenir à la distance de "quelque chose a mal tourné" et d'arrêter complètement le trading si le prix atteint le SL, pour l'analyse des erreurs et l'optimisation de la stratégie de trading.

Mais il existe des EA auto-optimisants intelligents qui utilisent le TP. Je comprends que nous devrions déjà introduire une constante TP dans l'ensemble d'entraînement. Par exemple, dans mon cas, le résultat de la formation TP est 0/1 - le prix a augmenté/diminué dans la prochaine barre. Mais si le prix a augmenté et a atteint le niveau du TP, puis à la fin de la barre, il est tombé en dessous du niveau initial - dans le jeu d'entraînement, le résultat est "1", et non "0" (parce que la transaction sera fermée avec un profit sur le TP, et il n'y aura plus de transactions jusqu'à la fin de la barre). Le TP est généralement petit, moins de 50 points (5 pips sur les quatre chiffres). SL est des dizaines de fois plus grande, juste au cas où "tout va mal". Le TP pour fronttest ou trade ne peut pas être optimisé, seulement celui utilisé lors de la création d'un échantillon d'entraînement. J'ai vu des stratégies si fructueuses, je pense que cette direction mérite d'être creusée.

 
Dr. Trader:

D'après mon expérience d'expert en trading, je n'aime pas les TP et les SL. Si le système de trading est construit correctement, ses propres sorties de trades seront plus efficaces que les sorties basées sur les TPs et SLs.


Et comment sont formulées ses propres sorties ? En temps seulement ?

Si vous dites de clôturer dans une heure, mais que dans l'heure qui suit le dépassement du TP, ce sera le résultat 1, alors des conditions de clôture complexes sont déjà utilisées.

A propos du TP de 5 pts et du SL de dizaines de fois plus - comme une option, mais un tel TP mangera le profit.

 

Je suis avec vous cette semaine et la semaine dernière, séparées par les fuseaux horaires, donc je n'ai pas de dialgo en direct. Je suis en Californie pour le travail, donc...

Quoi qu'il en soit, je pense que je peux (peut-être vous aussi) déjà bien planifier l'expérience, m'entraîner et valider les résultats. Vous pouvez également recruter des prédicteurs de manière redondante.

Je pense que le piège est que la prévision d'une transaction basée sur un objectif fixe, comme la clôture dans une heure, n'est pas optimale, et les résultats sont faibles.

Dans le testeur MT, j'optimise en fonction de l'équilibre et du facteur de récupération. En R, j'optimise la précision de l'estimation des directions ou de la prédiction des différences de prix. Ce sont des choses différentes, quelle que soit la façon dont on les regarde.

Essayez peut-être d'écrire votre propre fonction de perte en R pour la méthode d'apprentissage, où le profit est maximisé, par exemple. Cette fonction peut être substituée dans certaines méthodes d'apprentissage.

 
Alexey Burnakov:

Je suis avec vous cette semaine et la semaine dernière, séparées par les fuseaux horaires, donc je n'ai pas de dialgo en direct. Je suis en Californie pour le travail, donc...

Quoi qu'il en soit, je pense que je peux (peut-être vous aussi) déjà bien planifier l'expérience, m'entraîner et valider les résultats. Vous pouvez également recruter des prédicteurs de manière redondante.

Je pense que le piège est que la prévision d'une transaction basée sur un objectif fixe, comme la clôture dans une heure, n'est pas optimale, et les résultats sont faibles.

Dans le testeur MT, j'optimise en fonction de l'équilibre et du facteur de récupération. En R, j'optimise la précision de l'estimation des directions ou de la prédiction des différences de prix. Ce sont des choses différentes, quelle que soit la façon dont on les regarde.

Essayez peut-être d'écrire votre propre fonction de perte en R pour la méthode d'apprentissage, où le profit est maximisé, par exemple. Cette fonction peut être substituée dans certaines méthodes d'apprentissage.

Dernièrement, j'ai mis en place le plan suivant.

J'ai implémenté mon ancien EA basé sur un indicateur de tendance. Il s'agit d'un conseiller expert solide qui fonctionne sur un compte réel.

Suivant.

Je recherche ses inconvénients et j'essaie de les améliorer en utilisant R.

Par exemple.

Je prends la direction générale de la barre fixe. Cependant, si je regarde de près l'heure, il y a un décalage énorme en termes de barres inférieures, surtout en termes de barres. Donc, si c'est D1, et que je négocie sur M5, il s'avère que je prends presque les données d'avant-hier pour direction. Même en prédisant un pas en avant pour D1 avec 30% d'erreur, cela a radicalement amélioré la rentabilité d'EA, et plus important encore, cela a augmenté la confiance dans le fait qu'il ne sera pas épuisé.

Que diriez-vous de cette façon : prévoir dans R certains éléments d'une EA toute faite, même mauvaise, afin de l'améliorer ?

Comment trouver une telle idée ?

 

J'ai récemment écrit un article pour smart-lab. Une communauté faible, mais qui a obtenu quelque chose d'utile :

http://smart-lab.ru/search/topics/?q=%D0%B4%D0%BB%D1%8F+%D0%BB%D1%8E%D0%B1%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%B9+fx

 
SanSanych Fomenko:

Ces derniers temps, j'ai mis en œuvre le plan suivant.

J'ai pris mon vieux conseiller de tendance sur les indicateurs. Il s'agit d'un conseiller expert à part entière qui effectue des transactions sur un compte réel.

Maintenant, je cherche ses inconvénients et j'essaie de les réduire en utilisant R.

Je recherche ses inconvénients et j'essaie de les améliorer en utilisant R.

Par exemple.

Je prends la direction générale de la barre fixe. Cependant, si je regarde de près l'heure, il y a un grand décalage en termes de barres, surtout pour les basses. Donc, si c'est D1, et que je négocie sur M5, il s'avère que je prends presque les données d'avant-hier pour direction. Même en prédisant un pas en avant pour D1 avec 30% d'erreur, cela a radicalement amélioré la rentabilité d'EA, et plus important encore, cela a augmenté la confiance dans le fait qu'il ne sera pas épuisé.

Que diriez-vous de cette façon : prévoir dans R certains éléments d'une EA toute faite, même mauvaise, afin de l'améliorer ?

Comment trouver une telle idée ?

L'idée est intéressante. J'ai aussi quelques EAs qui fonctionnent. Je vais peut-être réfléchir à la façon de les améliorer. Mais je ne comprends pas ce qu'il faut améliorer exactement ? Que doit apprendre la machine ?

Le conseiller expert a une logique rigide pour l'ouverture et la fermeture des positions. Dans l'apprentissage automatique, la décision est prise d'une manière légèrement différente.

Donc, ce n'est pas très clair ce que vous allez faire exactement.

 
Alexey Burnakov:

C'est une idée intéressante. J'ai des EAs qui fonctionnent aussi. Je vais peut-être réfléchir à la façon de les améliorer. Mais je ne vois pas très bien ce qui doit être amélioré. Que devez-vous apprendre à la machine ?

Le conseiller expert a une logique rigide pour l'ouverture et la fermeture des positions. Dans l'apprentissage automatique, la décision est prise d'une manière légèrement différente.

Donc, ce n'est pas très clair ce que vous allez faire exactement.

Ce que vous allez faire est clair. Ce qui n'est pas clair, c'est pourquoi nous en avons besoin. Tout d'abord, s'il existe un système qui analyse l'exactitude de l'autre système et/ou contrôle les paramètres, alors le système contrôlé devient inutile, car si vous les utilisez ensemble, l'efficacité totale des deux diminuera en même temps et sera plus faible que si vous les utilisez séparément. Par exemple, s'il existe un système qui prend des décisions correctes à 70 % et un système capable de contrôler un ou plusieurs paramètres avec une précision de 99 %, l'efficacité finale sera égale :

0,7*0,99=0,693

ce qui est inférieur aux systèmes seuls.

Amen. Il est préférable d'essayer d'améliorer le système original sans "contrôleurs".