L'Apprentissage Automatique dans le trading : théorie, modèles, pratique et trading algo - page 88

 
Vizard_:
Yur, faites une version normale du programme (ou améliorée) pour les gens))))

1. qu'il lise les fichiers standards de ce type - en-tête (avec et sans guillemets), données, délimiteurs ; qu'il mange zpt, point.zpt, tabulation. Exemple -

"Date";"V1";"A77";"V23A";"Целевая"
01.01.2000;4.999995E-03;1.499891E-03;-2.000213E-03;-5.000234E-03;1

2. n'utiliser que 10 entrées pour le modèle, mais faire en sorte qu'il soit possible d'en charger un grand nombre.
dans un onglet séparé, ou définir des plafonds (vous sélectionnez les entrées), ou autre.

3. sans normalisation ! (ou désactivé), car si les données sont initialement centrées sur 0, après conversion
x-x.min/....(ou ce que vous avez) - s'envoler)))

4. éliminer le caractère aléatoire (ou commutable), laisser le système diviser les données en deux parties, compter dans l'ordre et sortir le % de prédictions réussies pour 1 (pour 0, ne pas le faire).

5.fait l'importance des intrants - bien !

6.Let en plus de la formule qui est sortie, sortir le plein !, c'est-à-dire maintenant

double x2 = 2,0 * (v5 + 1,0) / 2,0 - 1,0 ;
double décision = -0.2632437547312642 -0.2634178652535958 * x2
+ 0.05267978803936412

nous devons -

Nom cible = -0.2632437547312642 -0.2634178652535958 * insertion construction x2= (2.0 * (v5 + 1.0) / 2.0 - 1.0)
+ 0.05267978803936412

on obtient -

Nom cible = -0.2632437547312642 -0.2634178652535958 * (2.0 * (v5 + 1.0) / 2.0 - 1.0)
+ 0.05267978803936412

Vous obtiendrez un appareil quelque peu utilisable pour des tests rapides. Ensuite, vous pouvez toujours insérer etc, simple (pas gourmand)
des algorithmes, avec un choix... Sinon, l'outil est inutile. Pendant que le fichier est édité, ceci et cela... C'est plus facile d'utiliser autre chose...
Où est la version 7 ?
Nah... J'aime bien, c'est assez robuste. Donc 100 points, Yura.
 
SanSanych Fomenko:

Pas mal, mais pas assez de cervelle et de temps.

Il faut commencer par la variable cible, puis la faire correspondre à des prédicteurs, et enfin les vérifier avec les mathématiques, pour ainsi dire. Bref, le processus est fastidieux et je ne sais pas comment le formaliser.

Il l'a pris directement sur la langue. Je le sais. J'étais debout toute la nuit à réfléchir. Vous voyez, nous construisons des modèles basés sur des prédicats pour la sortie IDEAL. Nous obtenons une généralisation de 50-60% en de rares occasions. La sélection des entrées pour la sortie IDEAL est difficile, voire impossible. Qu'importe si la SORTIE est INDIRECTE. Et si nous y introduisions des erreurs qui conduiraient à une généralisation à 100 % ? En faisant cela, nous saurons de quoi l'entrée est capable et si cette sortie nécessaire rapporte (même avec des erreurs), alors elle a le droit de vivre dans le futur également. Au début, je pensais que nous avions besoin d'une double optimisation, du modèle lui-même et de la variable de sortie. CEPENDANT, c'est là que j'ai compris. Si le modèle est entraîné jusqu'à 60% de généralisation, alors en substituant les formules dans l'indicateur et en obtenant des signaux sur les échantillons d'entraînement et de test, nous obtenons le résultat qui permet au système d'atteindre 100%. Cela signifie que si nous recevons des signaux sur les échantillons d'entraînement et de test et que nous changeons la variable de sortie en fonction de ces signaux, nous obtenons le 100% d'apprentissage. D'où la conclusion. Après avoir obtenu plusieurs modèles avec une généralisation de 50-60%, nous sélectionnons le modèle qui a gagné (gagné) sur la zone de formation et de test. Cela suggère qu'en général les signaux de base qu'il a gagnés (ceux qui ont apporté un profit suffisant), tandis que les signaux où il a perdu n'étaient pas trop peu rentables (partagez votre sourire et il vous reviendra plus d'une fois), plus important encore, nous avons gagné à la fin de la période. C'est donc ainsi que ça se passe : ........
 
Vizard_:
4. éliminer le caractère aléatoire (ou le désactiver), laisser le système diviser les données en deux parties, compter dans l'ordre et sortir le % de prédictions réussies pour 1 (pas besoin de 0).

Si vous essayez d'utiliser jPrediction pour le forex, c'est probablement la principale chose à ajouter. Il existe de nombreux modèles capables de diviser les données de manière aléatoire en deux parties, de s'entraîner sur la première et d'obtenir de bons résultats sur la seconde. Mais la plupart de ces modèles seront inefficaces sur de nouvelles données. Il n'y a pas de dépendances constantes dans le Forex, de bons résultats sur un échantillon de test aléatoire ne garantissent pas de bons résultats sur de nouvelles données. La seule façon de s'assurer qu'un modèle est adapté au forex est de procéder à un test de roulage :

Le modèle doit montrer une bonne capacité de prédiction sur les données marquées en rouge. Maintenant, dans jPrediction, un tel test doit être fait manuellement en réintroduisant les données pour chaque cas de test, ce qui n'est pas bon pour un travail sérieux.
Et je suis d'accord pour dire qu'il est préférable d'afficher un score uniquement pour les données de test plutôt qu'un total pour la formation et le test.
Toutes les notes que jPrediction produit maintenant sont inadéquates pour le forex, et seulement trompeuses.

Voici d'ailleurs comment le roll forward est fait dans le paquet caret pour R :

http://topepo.github.io/caret/splitting.html(section Fractionnement des données pour les séries chronologiques)

library(caret)
caretObj <- train(x = trainData[,1:(ncol(trainData)-1)],
                  y = trainData[,ncol(trainData)],
                  trControl = trainControl(method = "timeslice", initialWindow=1000, horizon=300, fixedWindow=TRUE),
                  verbose = TRUE)

Le modèle sera entraîné sur les 1000 premiers échantillons, puis testé sur les échantillons 1001-1300. Ensuite, passez à 300, entraînez 301-1300, testez 1301-1600, etc. jusqu'à ce que vous soyez à court d'exemples d'entraînement.

 
Vizard_:
Yur, faire une version normale du prog (ou améliorée) pour les gens))))

1. qu'il lise les fichiers standards de ce type - en-tête (avec ou sans guillemets), données, délimiteurs ; qu'il hâte zpt, tchk.zpt, tabulation. Exemple -


2. ne peut utiliser que 10 entrées pour le modèle, mais permet d'en charger un grand nombre, alors
Dans un onglet séparé, vous pouvez mettre des marqueurs (vous sélectionnez les entrées) ou autre chose.

3. sans normalisation ! (ou désactivé), car si les données sont initialement centrées sur 0, après conversion
x-x.min/....(ou ce que vous avez) - s'envoler)))

4. éliminer le caractère aléatoire (ou commutable), laisser le système diviser les données en deux parties, compter dans l'ordre et sortir le % de prédictions réussies pour 1 (pour 0, ne pas le faire).

5.fait l'importance des intrants - bien !

6. qu'en plus de la formule qui est sortie, qu'il sorte le plein !, c'est-à-dire maintenant


7. Où est la version 7 ?
  1. Le fait est que la virgule dans Excel est utilisée pour séparer la partie entière d'un nombre de sa partie fractionnaire. Si j'ajoute plus de délimiteurs, ceux qui éditent des sélections dans différentes applications ne pourront pas les éditer sans avoir à se déplacer dans jPrediction. C'est-à-dire qu'à l'heure actuelle, tout est rendu plus ou moins compatible avec les feuilles de calcul. Pour le moment, l'analyseur syntaxique n'est implémenté que pour les fichiers CSV et il est adapté aux feuilles de calcul. Mais jPrediction est construit en OOP et il est possible d'étendre l'interface pour d'autres formats.
  2. Le deuxième point est que jPrediction n'a pas et n'aura jamais de paramètres supplémentaires. Le travail de l'utilisateur dans jPrediction est de prendre un échantillon prêt et d'appuyer sur F8 pour obtenir un modèle ou un message "Garbage in, Garbage out" dans un délai raisonnable. Si vous préférez vous occuper des algorithmes d'apprentissage, du réglage des programmes, de la conception de l'architecture du réseau plutôt que de rechercher des données de qualité, laissez-les utiliser d'autres logiciels de ML. Il existe aujourd'hui de nombreux paquets de ce type, et vous risquez de passer le reste de votre vie à y creuser. Le point essentiel de l'apprentissage automatique est que la généralisabilité du modèle ne dépend que de la qualité des données de l'échantillon, et non des algorithmes et de leurs paramètres. Vous devez donc chercher les problèmes dans l'échantillon, et non pas essayer de modifier quelque chose dans jPrediction.
  3. Voir le point 2. 2.
  4. Voir para. 2
  5. -
  6. Le résultat n'est pas une formule, mais un code permettant de porter le modèle vers d'autres applications. Actuellement, le code pour le portage vers les applications Java est implémenté. Plus tard, il est prévu de porter le code du modèle à MQL. Ce code doit être aussi concis que possible, et non pas un long méli-mélo. Par conséquent, toutes les choses inutiles ont été supprimées, et tout ce qui est souvent répété est placé séparément.
  7. Le site web du projet se trouve à l'adresse jprediction.com et il y a également un élément de menu "Télécharger" pour télécharger les dernières versions.

Si quelqu'un n'aime pas beaucoup quelque chose dans jPrediction, le projet est ouvert à l'Open Source sous la licence GNU GPL et faire des forks à partir de celui-ci, changer et modifier quelque chose là, n'est pas seulement interdit, mais dans une certaine mesure même bienvenu.

 
Dr. Trader:

Si vous essayez d'utiliser jPrediction pour le forex, c'est probablement la principale chose à ajouter. Il existe de nombreux modèles capables de diviser les données de manière aléatoire en deux parties, de s'entraîner sur la première et d'obtenir de bons résultats sur la seconde. Mais la plupart de ces modèles seront inefficaces sur de nouvelles données. Il n'y a pas de dépendances constantes dans le Forex, de bons résultats sur un échantillon de test aléatoire ne garantissent pas de bons résultats sur de nouvelles données. La seule façon de s'assurer qu'un modèle est adapté au forex est de procéder à un test de roulage :

Le modèle doit montrer une bonne capacité de prédiction sur les données marquées en rouge. Maintenant, dans jPrediction, un tel test doit être fait manuellement en réintroduisant les données pour chaque cas de test, ce qui n'est pas bon pour un travail sérieux.
Et je suis d'accord pour dire qu'il est préférable d'afficher un score uniquement pour les données de test plutôt qu'un total pour la formation et le test.
Toutes les notes que jPrediction donne maintenant sont inadéquates pour le forex, et seulement trompeuses.

Voici d'ailleurs comment le roll forward est fait dans le paquet caret pour R :

http://topepo.github.io/caret/splitting.html(section Fractionnement des données pour les séries chronologiques)

Le modèle sera entraîné sur les 1000 premiers échantillons, puis testé sur les échantillons 1001-1300. Puis on passe à 300, on s'entraîne à 301-1300, on teste à 1301-1600, etc. jusqu'à épuisement des exemples d'entraînement.

Super information. Merci !
 
Dr. Trader:

Toutes les estimations que jPrediction donne maintenant sont inadéquates pour le forex, et seulement trompeuses.

Ce sont des allégations non fondées, c'est-à-dire ce que l'on appelle communément des conneries. Pour démontrer l'efficacité de Walk Forward, veuillez fournir des résultats comparatifs de modèles dérivés dans jPrediction et de modèles dérivés après Walk Forward, de manière à ce qu'ils puissent être vérifiés par recoupement. Si ces résultats confirment vos dires, il serait alors judicieux de remplacer l'algorithme de test actuellement implémenté dans jPrediction par Walk Forward.

J'ai constaté à plusieurs reprises que des idées apparemment "évidentes", après avoir été mises en œuvre et testées par l'expérience, se révèlent "vides". Seule une très petite partie des idées est efficace, et souvent seulement après une édition supplémentaire avec un "fichier". C'est parce que les détails des idées manquent. Et le diable se cache dans ces détails.

Linus Torvald (créateur du noyau Linux) ne se lasse pas de répéter : "Tôt ou tard, la théorie rencontre la pratique. Et la pratique est toujours le critère de la vérité. Toujours !".

Un problème supplémentaire avec Walk Forward est que nous recevons beaucoup de modèles à chaque étape. Lequel de ces modèles doit être conservé comme modèle de travail et selon quels critères doit-il être sélectionné ?

 
Yury Reshetov:

Il s'agit d'affirmations non fondées, c'est-à-dire de ce que l'on appelle communément des conneries. Pour démontrer l'efficacité du Walk Forward, veuillez fournir des études comparatives des modèles jPrediction et des modèles post-Walk Forward afin qu'ils puissent être vérifiés par recoupement. Si ces résultats confirment vos dires, il serait alors judicieux de remplacer l'algorithme de test actuellement implémenté dans jPrediction par Walk Forward.

J'ai constaté à plusieurs reprises que des idées apparemment "évidentes", une fois mises en œuvre et testées par l'expérience, se révèlent "vides". Seule une très faible proportion d'idées sont efficaces, et souvent seulement après une nouvelle révision du "dossier". C'est parce que les détails des idées manquent. Et le diable se cache dans ces détails.

Linus Torvald (créateur du noyau Linux) ne se lasse pas de répéter : "La théorie rencontre la pratique tôt ou tard. Et la pratique s'avère toujours être le critère de la vérité. Toujours !".

Un problème supplémentaire avec Walk Forward est que nous recevons beaucoup de modèles à chaque étape. Lequel de ces modèles doit être conservé comme modèle de travail et selon quel critère doit-il être sélectionné ?

Il n'y a pas besoin de se disputer. Nous travaillons sur un sujet de recherche très complexe. Il y a beaucoup d'hypothèses. Et ces hypothèses conduisent à un sur-apprentissage et à un sous-échantillonnage.

Deux règles simples : trompez le marché, ne vous trompez pas vous-même.

La marche en avant est bien sûr une bonne méthode. Mais les principaux paramètres sont la profondeur d'apprentissage et la durée des tests. En même temps ( !!!) si ces paramètres sont ajustés de telle manière que le résultat sur la position avant devient meilleur, nous allons surentraîner la marche avant ! C'est-à-dire que sur un gros morceau, nous effectuons de manière répétée l'optimisation Walk Forward. Sur un autre morceau non chevauchant, nous essayons les meilleurs paramètres de marche en avant sur "formation" et nous exécutons un autre loup en avant complet, mais nous ne le faisons qu'une fois. Si le résultat est bon, alors le modèle capte les dépendances. Si le résultat est mauvais, alors nous avons simplement réentraîné Walk Forward sur un modèle moins bon.

Il y a le même problème avec les tests uniques sur un échantillon retardé. J'y travaille maintenant : libérer mes résultats du surentraînement. Les résultats de la validation croisée doivent être en corrélation avec l'échantillon différé pour le test final. Cela dit, la sélection du meilleur modèle par validation croisée donnera approximativement les meilleurs résultats hors échantillon. Sinon, s'il n'y a pas de corrélation ou une corrélation négative, nous avons un modèle inadéquat pour le forex qui doit être modifié.

 
Yury Reshetov:

Ce sont des allégations non fondées, c'est-à-dire ce que l'on appelle dans le langage courant des conneries. Afin de prouver l'efficacité de Walk Forward, veuillez présenter les résultats des études comparatives des modèles jPrediction et des modèles post-Walk Forward sous une forme qui puisse être vérifiée par recoupement. Si ces résultats confirment vos dires, il serait alors judicieux de remplacer l'algorithme de test actuellement implémenté dans jPrediction par Walk Forward.

J'ai constaté à plusieurs reprises que des idées apparemment "évidentes", une fois mises en œuvre et testées par l'expérience, se révèlent "vides". Seule une très faible proportion d'idées sont efficaces, et souvent seulement après une nouvelle révision du "dossier". C'est parce que les détails des idées manquent. Et le diable est dans ces détails.

Linus Torvald (créateur du noyau Linux) ne se lasse pas de répéter : "La théorie rencontre la pratique tôt ou tard. Et la pratique s'avère toujours être le critère de la vérité. Toujours !".

Un problème supplémentaire avec Walk Forward est que nous recevons beaucoup de modèles à chaque étape. Lequel de ces modèles doit être conservé comme modèle de travail et selon quel critère doit-il être sélectionné ?

Avec tout mon respect pour vous, Reshetov, c'est aux auteurs de bicyclettes de prouver leur place sous le soleil, y compris leur terminologie comme la "généralisabilité". La commodité de la positiondu Dr Trader réside précisément dans le fait que toutes les preuves nécessaires de la théorie et de la vérification pratique par des millions d'utilisateurs des idées qu'il exprime ont été faites avant lui, souvent il y a de nombreuses années. Lui, en revanche, se contente de donner des exemples concrets d'utilisation. Et la justesse du poste en question est évidente tant sur le plan intuitif que théorique.
 
Alexey Burnakov:

Ça ne vaut pas la peine de se battre pour ça.

Je suis d'accord. Mais cela nécessite de minimiser le nombre d'accusations non fondées dans le fil de discussion. La meilleure option est de donner les résultats d'études comparatives avec la possibilité d'une double vérification.

Alexey Burnakov:

Nous travaillons sur un projet de recherche très complexe.

Certains travaillent et d'autres se tournent les pouces sans preuve (ne montrons pas du doigt).

Alexey Burnakov:

Cela ne vaut pas la peine de se battre.

Je suis d'accord.

AlexeyBurnakov:

Il y a beaucoup d'hypothèses ici. Et ces hypothèses conduisent à une suréducation et à un effondrement hors échantillon.

Tu ne peux pas mettre des hypothèses sur ton pain et les mettre dans ta poche. Il faut donc tout vérifier de manière empirique, plutôt que de faire des hypothèses non prouvées, afin de ne pas marcher sur le râteau du surentraînement et de l'effondrement hors échantillon.


AlexeyBurnakov:

La marche en avant est bien sûr une bonne méthode. Mais les principaux paramètres sont la profondeur d'apprentissage et la durée des tests. En même temps ( !!!) si nous traitons ces paramètres de manière à ce que le résultat sur la voie avant devienne meilleur, nous allons surentraîner la marche avant ! C'est-à-dire que sur un gros morceau, nous effectuons de manière répétée l'optimisation Walk Forward. Sur un autre morceau non chevauchant, nous essayons les meilleurs paramètres de Walk Forward sur "training" et l'exécutons une fois de plus. Si le résultat est bon, alors le modèle reprend les dépendances. Si le résultat est mauvais, nous avons simplement réentraîné Walk Forward sur un modèle moins bon.

Le même problème se pose avec le test unique sur un échantillon retardé. J'y travaille maintenant : libérer mes résultats du surentraînement. Les résultats de la validation croisée doivent être en corrélation avec l'échantillon différé pour le test final. Cela dit, la sélection du meilleur modèle par validation croisée donnera approximativement les meilleurs résultats hors échantillon. Sinon - s'il n'y a pas de corrélation ou si elle est négative - nous avons un modèle inadéquat pour le forex qui doit être changé.

En fin de compte, toutes les méthodes présentent des avantages et des inconvénients. Les suppositions exagèrent les mérites et négligent les démérites.

Un point encore plus important est qu'aucune méthode ne permet de sélectionner les modèles selon le meilleur critère de qualité, et que toutes les méthodes sélectionnent selon le principe du rejet - en ne filtrant que les modèles sciemment inadaptés. Aucune méthode de ML ne peut calculer l'adéquation potentielle de ce qui reste après le rejet.

Surtout dans les environnements non stationnaires. Il est possible de sélectionner les modèles apparemment les plus appropriés en termes de généralisabilité, mais demain, lors d'une réunion, un responsable de la Banque centrale pète un plomb et tous les modèles s'envolent.

 
Yury Reshetov:


Le fait est que toutes les méthodes ont des avantages et des inconvénients. Les suppositions exagèrent les mérites et négligent les démérites.

Un point encore plus important est qu'aucune méthode ne sélectionne les modèles selon le meilleur critère de qualité, et que toutes les méthodes sélectionnent selon le principe du rejet - en ne filtrant que ce que l'on sait être inadapté. Aucune méthode de ML ne peut calculer la valeur potentielle de ce qui reste après le rejet.

D'autant plus dans les environnements non stationnaires. Il semblerait possible de sélectionner les modèles les plus adaptés en termes de généralisabilité, mais demain, un patron de banque centrale fera un pet et tous les modèles tomberont à l'eau.

C'est ainsi. Seulement de manière expérimentale. Vous pouvez comprendre si la sélection d'un modèle (en formation + test) était meilleure ou non en appliquant ce modèle hors échantillon. Vous pouvez le faire pour différents modèles. Lorsque la sélection d'un bon modèle dans l'échantillon donne un bon résultat hors échantillon - cela signifie que le modèle est adapté au problème choisi.