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

 
Aleksey Vyazmikin:

J'ai 3 classes, c'est-à-dire que l'arbre a le signal d'acheter, de vendre et d'attendre, maintenant j'expérimente le catbust et j'ai simplifié les cibles pour qu'elles soient compressées en une seule classe...

Je ne connais rien aux classes ctree et cnode, ainsi qu'à la POO en général - je ne suis pas très doué en programmation, donc on peut difficilement comprendre le code des classes sans un programmeur...

Il s'agit plutôt de savoir comment les construire et pourquoi. Vous pouvez aussi les brancher par la génétique dans l'optimiseur, mais cela ne ressemblera pas au vôtre. Il s'agira plutôt d'un arbre d'algorithmes qui est optimisé et qui se complexifie de lui-même, comme par couches... lorsque l'optimum est atteint, nous passerons au crible les algorithmes inutiles dans l'optimiseur. C'est juste un moyen, pas sûr qu'il fonctionne.

 
Maxim Dmitrievsky:

Oui, il s'agit plutôt de savoir comment les construire et pourquoi. Il est possible de les ramifier par la génétique dans l'optimiseur, mais ce ne sera pas comme le vôtre. Il s'agira plutôt d'un arbre d'algorithmes, qui est optimisé, et qui, couche par couche, devient plus complexe de lui-même... lorsque l'optimum est atteint, l'optimiseur élimine les algorithmes inutiles. C'est juste une option, mais je ne sais pas si ça va marcher.

C'est difficile de discuter quand on ne comprend pas l'essence du code...

J'ai fait une expérience sur la rotation des groupes de prédicteurs - c'est exactement ce que je disais - certains prédicteurs sont bons pour diviser un échantillon et aller à la racine mais gâchent l'ensemble de l'image.

En tout, j'ai obtenu 9 groupes - je les ai décomposés par logique prédictive, encore plus généralisée que la simple logique. J'ai obtenu 512 combinaisons de groupes, le graphique ci-dessous montre la dispersion des résultats en fonction des combinaisons de groupes - pour la sélection, j'ai utilisé la métrique "Précision", je l'ai définie l'autre jour - pas de changement, la cible colonnes_100, arbre à 4 niveaux, j'ai itéré seulement 1000 fois.

Le tableau montre le résultat de l'ensemble avec tous les prédicteurs - 1710 unités, ainsi que les résultats maximum 3511 et minimum 607.


Ensuite, j'ai fait un calcul avec une pénalité, c'est-à-dire que j'ai multiplié le groupe du drapeau de blocage pour le résultat financier de la combinaison, si la valeur est zéro (le groupe a été utilisé), alors nous fixons un résultat positif pour le groupe, mais si la valeur n'est pas zéro, alors le groupe est bloqué - multipliez le résultat par -1, puis additionnez les valeurs pour chaque groupe. L'idée est que le groupe qui a le plus de pénalités en cas de blocage est le pire groupe dans l'ensemble, et qu'il peut bien sûr être classé pour des recherches ultérieures.

Voici à quoi ressemble l'accumulation d'indicateurs sur le graphique

Bien sûr, la forme des courbes dépend de l'algorithme de combinaison, mais comme toutes ont le même nombre de zéros et de uns, le résultat final est toujours équitable. Et c'est comme suit - dans le tableau ci-dessous.



Le tableau montre que l'invalidation des groupes 1, 8 et 9 a un bon effet sur l'amélioration du résultat financier.

Examinons la combinaison du meilleur résultat financier



Et maintenant, la combinaison du pire résultat



Dans l'ensemble, la méthode d'estimation a fonctionné - dans le meilleur résultat, les groupes 3, 4, 5 et 7 sont débloqués et les plus mauvais sont bloqués, tandis que la situation est presque identique dans le pire des cas.

Conclusion - cette approche a droit de cité et peut identifier de manière agressive les groupes de prédicteurs influencés négativement.

Il y a deux façons de procéder : soit trouver la raison de ces mauvais résultats en divisant les groupes négatifs, soit diviser les groupes positifs et essayer de trouver où se trouvent les prédicteurs magiques qui donnent de bons résultats. D'autre part, vous pouvez emprunter deux voies...

Les dix meilleures et les pires combinaisons :

Et nous devons voir ce qui se passe avec l'autre cible...

Et voici un autre graphique - il montre clairement que plus il y a de bonnes décisions (Proc_All - delta des bonnes/mauvaises décisions par rapport à toutes les décisions (zéros et uns au total)), plus le bénéfice est important, surtout s'il s'agit d'une entrée correcte dans une transaction (Proc_1_V02) par rapport à toutes les entrées.


 
Aleksey Vyazmikin:

Alors comment traiter ces prédicteurs en production pour obtenir des signaux ?

 
Maxim Dmitrievsky:

Alors, comment traiter ces prédicteurs dans le processus de production pour obtenir des signaux ?

Je n'ai pas encore beaucoup de temps pour la production (commerce réel), mais je prévois d'apparier des modèles et de construire des échafaudages à partir de ceux-ci - l'étape suivante, mais je n'arrive pas encore à trouver comment automatiser ce processus...

Les prédicteurs sous leur forme finale sont obtenus dans Expert Advisor, il est donc facile de les choisir pour les utiliser.
 
Maxim Dmitrievsky:

ok. bonne chance ) si vous installez le mt et katbust, écrivez un article :)

Aujourd'hui, j'étais en train de faire un travail intellectuel... Modifications de l'algo, montagnes de plus en plus hautes, montagnes de plus en plus abruptes... tout cela vaut la peine d'utiliser un langage de bas niveau.

Les 3 derniers mois de trien, le reste a fonctionné jusqu'à début 2018, 15 mins.

Je me demande si je ne devrais pas surveiller et me détendre... bien que j'aie encore beaucoup de travail à faire. Et je faisais des erreurs enfantines, un des... tableaux était tourné dans le mauvais sens à l'origine (comme une série) et je m'entraînais tout le temps sur des fiches inversées, inquiet que je n'apprenne mal.

Bien sûr, la question de l'implémentation du modèle CatBoost dans EA reste ouverte, d'une part il est possible de décharger le code en C++, que je ne comprends pas du tout, d'autre part je veux obtenir les données de la feuille pour corriger le modèle, et pour cela j'ai besoin d'un interprète, que je ne peux pas écrire moi-même...

Oui, vous avez votre propre approche - les modèles fonctionnent pour des distances relativement courtes, mais pourquoi ne pas essayer les conditions réelles sur l'histoire, c'est-à-dire étudier le passé pendant 3 mois et échanger 1 pour l'avenir, puis assembler les résultats - vous pourriez obtenir un résultat intéressant adapté à l'application.

J'ai fait une erreur amusante - j'ai oublié de marquer une cible à ne pas former dans l'échantillon de formation comme "à ne pas utiliser" et j'ai été heureux pendant quelques minutes en évaluant les résultats :)

 
Aleksey Vyazmikin:

C'est difficile de discuter si vous ne comprenez pas le code...

J'ai fait une expérience sur la rotation des groupes de prédicteurs - exactement ce que j'ai dit - certains prédicteurs sont bons pour diviser l'échantillon et aller à la racine, mais gâchent l'ensemble du tableau.

En tout, j'ai obtenu 9 groupes - je les ai décomposés par logique prédictive, encore plus généralisée que la simple logique. J'ai obtenu 512 combinaisons de groupes, le graphique ci-dessous montre la dispersion du résultat financier en fonction des combinaisons de groupes - pour la sélection, j'ai utilisé la métrique "Précision", je l'ai définie l'autre jour - pas de changement, la cible colonnes_100, arbre à 4 niveaux, j'ai itéré seulement 1000 fois.

Le tableau montre le résultat de l'ensemble avec tous les prédicteurs - 1710 unités, ainsi que les résultats maximum 3511 et minimum 607.


Ensuite, j'ai fait un calcul avec une pénalité, c'est-à-dire que j'ai multiplié le groupe du drapeau de blocage pour le résultat financier de la combinaison, si la valeur est zéro (le groupe a été utilisé), alors nous fixons un résultat positif pour le groupe, mais si la valeur n'est pas zéro, alors le groupe est bloqué - multipliez le résultat par -1, puis additionnez les valeurs pour chaque groupe. L'idée est que le groupe qui a le plus de pénalités en cas de blocage est le pire groupe dans l'ensemble, et qu'il peut bien sûr être classé pour des recherches ultérieures.

Voici à quoi ressemble l'accumulation d'indicateurs sur le graphique

Bien sûr, la forme des courbes dépend de l'algorithme de combinaison, mais comme toutes ont le même nombre de zéros et de uns, le résultat final est toujours équitable. Et c'est comme suit - dans le tableau ci-dessous.



Le tableau montre que l'invalidation des groupes 1, 8 et 9 a un bon effet sur l'amélioration du résultat financier.

Examinons la combinaison du meilleur résultat financier



Et maintenant, la combinaison du pire résultat



Dans l'ensemble, la méthode d'estimation a fonctionné - dans le meilleur résultat, les groupes 3, 4, 5 et 7 sont débloqués et les plus mauvais sont bloqués, tandis que la situation est presque identique dans le pire des cas.

Conclusion - cette approche a droit de cité et peut identifier de manière agressive les groupes de prédicteurs influencés négativement.

Il y a deux façons de procéder : soit trouver la raison de ces mauvais résultats en divisant les groupes négatifs, soit diviser les groupes positifs et essayer de trouver où se trouvent les prédicteurs magiques des bons résultats. D'autre part, vous pouvez emprunter deux voies...

Les dix meilleures et les pires combinaisons :

Et nous devons voir ce qui se passe avec l'autre cible...

Et voici un autre graphique - il montre clairement que plus il y a de bonnes décisions (Proc_All - delta des bonnes/mauvaises décisions par rapport à toutes les décisions (zéros et uns au total)), plus le bénéfice est important, surtout s'il s'agit d'entrées correctes (Proc_1_V02) par rapport à toutes les entrées.


C'est un enfer, c'est facile à lire, mais le sens est impossible à comprendre - un jeu de mots ou une figure de style dépasse mon entendement... j'ajoute la suggestion de Maksim pour un article :)

Pour ce qui est de relier les EAs à la console Python, j'ai déjà proposé mon propre moteur qui permet d'envoyer et d'exécuter des blocs de code Python en temps réel depuis MQL, cela fonctionne même dans le testeur.

 
Ivan Negreshniy:

C'est juste étriqué, c'est facile à lire, mais impossible d'en saisir le sens - jeu de mots ou figure de style qui me dépasse.... J'ajoute la suggestion de Maksim à propos de l'article :)

Quant à la liaison des EAs à la console Python, j'ai déjà proposé mon propre moteur, qui permet d'envoyer et d'exécuter des blocs de code Python en temps réel depuis MQL, même en testeur.

Et disons, un article - si je ne peux pas exprimer une simple pensée, alors quel genre d'article est-ce...

Le fait est que lors de la construction d'un arbre, le principe de cupidité est utilisé, ce qui empêche les relations logiques des prédicteurs, initialement divisés en deux grands groupes (vous comprenez comment un arbre de décision est construit, n'est-ce pas ?), de sorte que le modèle peut s'avérer meilleur sur moins de prédicteurs, à la fois pour cette raison et parce que l'on vérifie plus de combinaisons de prédicteurs pour le même intervalle de temps, mais ceci dans une moindre mesure.

Posez une question précise si mon verbiage ne révèle pas le sens des mots que vous avez sous les yeux.

 
Aleksey Vyazmikin:

Et vous dites article - si je ne peux pas exprimer une simple pensée, quel genre d'article est-ce...

Le fait est que le principe d'avidité est utilisé dans la construction de l'arbre, ce qui empêche l'apparition de liens logiques entre les prédicteurs, initialement divisés en deux grands groupes (vous comprenez comment un arbre de décision est construit, n'est-ce pas ?), de sorte que le modèle peut s'avérer meilleur sur un plus petit nombre de prédicteurs, à la fois pour cette raison, et parce que l'on vérifie plus de combinaisons de prédicteurs dans le même intervalle de temps, mais ceci dans une moindre mesure.

Posez une question précise si mon verbiage ne révèle pas le sens des mots que vous avez sous les yeux.

L'expression superficielle de pensées dans un forum et la publication d'un article sont des genres différents.

Dans ce fil, combien de choses ont déjà été discutées, mais il n'y a aucune utilité et aucun résultat pratique.

Et il n'y a aucun sens à discuter de telles questions, surtout celles qui sont fondamentales comme la structure des arbres.

Il est préférable d'écrire des articles et/ou du code - pour comparer l'efficacité des modèles MI, des bibliothèques utilisées, tester et contrôler les Expert Advisors...

 
Ivan Negreshniy:

Exprimer brièvement ses pensées dans un forum et publier un article sont des genres différents.

Il suffit de regarder cette branche, combien de choses ont déjà été discutées, mais il n'y a aucun effet et aucun résultat pratique.

Et il n'y a aucun sens à discuter de telles questions, surtout celles qui sont fondamentales comme la structure des arbres.

Il est préférable d'écrire des articles et/ou du code - pour comparer l'efficacité des modèles MI, les bibliothèques utilisées, pour tester et surveiller les Expert Advisors...

Il existe des articles sur le MDE, où tout est scientifiquement étayé, mais ici, les plus susceptibles ou les débutants peuvent poser des questions, ou discuter de quelques idées à essayer. En général, l'article doit être rédigé lorsque vous êtes déjà confiant dans les résultats de vos actions, j'en suis très loin.

 

Hier, j'ai écrit sur les différents indicateurs financiers lorsque l'on utilise différents groupes de prédicteurs, en disant que parfois il n'est pas rationnel de tout mettre dans le même tas. Dans ce post, j'ai utilisé un indicateur tel que le profit pour sélectionner l'importance des groupes. Aujourd'hui, en pensant à la question de Maxim, j'ai décidé de regarder les résultats du modèle avec un échantillon test (auparavant je ne regardais que l'échantillon test), j'ai effectué les mêmes manipulations et j'ai été déçu - la signification des groupes avait changé à l'envers - comment cela se fait-il, j'ai pensé... Lorsque j'ai comparé les résultats des deux échantillons, il est apparu clairement que le critère du profit pur n'était pas adapté - j'ai dû chercher d'autres moyens de résoudre le problème.

J'ai donc eu une idée : et si je ne devenais pas trop gourmand et que je considérais comme un bon résultat la sélection des modèles qui donnent un profit plus élevé dans l'ensemble que le profit moyen de tous les 512 modèles ? J'ai décidé de chercher le meilleur indicateur qui puisse le faire. La méthodologie est simple, nous utilisons un échantillon test pour déterminer la valeur moyenne de l'indice, puis nous vérifions la variante de chaque modèle - si elle est supérieure à la moyenne, elle sera égale à 1 et si elle est inférieure, elle sera égale à 0 (je l'ai fait en Excel et les calculs intermédiaires peuvent être utiles pour la compréhension), puis nous faisons la même chose avec l'échantillon test et nous comparons les résultats des deux échantillons, obtenant ainsi des statistiques qui montrent si l'indice appartient à un groupe (au-dessus de la moyenne ou en dessous). Après cela, j'ai également regardé combien de profit chaque indicateur fait sur l'échantillon de test, en divisant l'échantillon de test selon qu'il est supérieur à la valeur moyenne ou inférieur à la valeur moyenne, en gardant le profit moyen.

Nous avons obtenu un résultat intéressant



Le tableau montre que la sélection par le profit (FinRez) a donné le plus mauvais pourcentage de correspondance entre les deux échantillons. De plus, lors du filtrage "inférieur à la moyenne" (la colonne avec le chiffre "0"), ce groupe a inclus plus de modèles rentables dans l'échantillon test que le groupe qui a donné des résultats dans le test supérieur à la moyenne. Si vous y réfléchissez, c'est logique, car la formation est basée sur la classification, et non sur la régression, et si j'ai un take profit défini dans la stratégie, alors le stop loss est flottant, ce qui faussera les résultats même avec le même nombre de signaux correctement classés. Si vous regardez les autres indicateurs, leur pouvoir prédictif est beaucoup plus élevé, c'est-à-dire que la tendance se maintient en moyenne pour le modèle, que ce soit sur l'échantillon de test ou sur l'échantillon d'examen. Jusqu'à présent, j'ai décidé de m'arrêter à l'indicateur Proc_1_V01 - c'est le pourcentage d'unités correctement classées de la cible de toutes les unités dans l'échantillon, cet indicateur montre un taux très élevé de préservation de sa relation dans, disons, l'espace bidimensionnel (au-dessus / au-dessous de la moyenne) - 87,3%, ce qui est très bon à mon avis, plus la partition de l'échantillon selon sa méthode donne approximativement le même bénéfice moyen, et même légèrement au-dessus de la valeur moyenne - 1488. Il s'avère donc que nous avons plus de chances d'obtenir un bon résultat financier lorsque nous sélectionnons des modèles en fonction de cet indicateur, ou est-ce que je rate quelque chose ?

Jusqu'à présent, j'ai décidé de revoir les groupes en tenant compte non pas de FinRez(profit) mais de Proc_1_V01, la méthodologie reste la même et le résultat est assez séduisant


La significativité des groupes a conservé sa cohérence sur l'échantillon test, ainsi que sur l'échantillon témoin, à l'exception du groupe 7, contrairement à la situation avec la définition du groupe par l'indicateur - le résultat financier, présenté ci-dessous dans le tableau.



La conclusion que je tire ici est que la stabilité des valeurs absolues les plus importantes du profit, qui peut être plus probablement aléatoire.

Je vais également ajouter un graphique où vous pouvez voir comment le bénéfice est distribué par échantillons (réduits à 100% par rapport au test et à l'examen respectivement) - sur le côté gauche sont filtrés les indicateurs, et sur le côté droit sont pris, c'est si vous augmentez la valeur moyenne de Proc_1_V01 par le coefficient de 1,25.

Et à titre de comparaison, si nous effectuons une sélection en fonction des revenus, la densité a augmenté, mais nous avons obtenu une grosse queue de 20 % à -15 %, ce qui n'est pas bon.

En somme, nous devons penser à un indicateur qui définira au mieux la tendance.

Mais en combinant les deux indicateurs et en ajoutant un filtrage par pourcentage de profit à Proc_1_V01 - >20% - car il y a trop de pertes à la baisse, et <80% car les valeurs extrêmes sont souvent accidentelles, on peut obtenir une image plus satisfaisante.