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

 
Alexander_K2:

Oui ! J'ai oublié de le dire.

Les états sont considérés comme un ensemble de données qui caractérisent presque complètement une particule. C'est-à-dire qu'il s'agit d'un ensemble de données, en termes simples - un volume d'échantillons, avec ses caractéristiques - aplatissement, asymétrie, non-entropie, etc.

C'est-à-dire, avec la confiance de R.Feynman, il est possible d'affirmer que, ayant correctement défini le volume de l'échantillon pour la paire de béton, ayant calculé sur l'histoire les valeurs moyennes caractéristiques de ces coefficients pour cet échantillon, il est possible de prédire, qu'ayant à ce moment-là le certain ensemble de paramètres, dans un certain intervalle de temps, le système passera à un état avec ses paramètres d'état d'équilibre.

C'est ce que j'attends de ce fil de discussion. Si vous avez besoin d'aide pour déterminer la bonne taille d'échantillon, écrivez-moi, j'essaierai de vous aider.

Supposons qu'il existe un processus autorégressif, c'est-à-dire que les états actuels dépendent des états passés.

comment sélectionner correctement une combinaison d'incréments avec différents décalages afin de prédire le système ? les décalages doivent-ils être constants ou varier dans le temps, et si oui, comment le déterminer (autrement que par une énumération banale) ?

parce que s'il existe une telle combinaison d'incréments qui prédit de manière robuste la cible, alors vous ne devriez avoir aucun problème à former NS sur cette combinaison.

 
Maxim Dmitrievsky:

alors cette question - disons qu'il y a un processus d'autorégression, c'est-à-dire une dépendance des états actuels sur les états passés

comment sélectionner correctement un ensemble d'incréments avec différents décalages afin de prédire le système ? les décalages doivent-ils être constants ou changer avec le temps, et s'ils doivent changer, comment le déterminer (sauf une énumération triviale) ?

Il y a ici un point qui pose évidemment des difficultés.

L'ensemble de données n'est pas local dans le temps.

C'est un point crucial !

Par exemple, si nous travaillons avec le temps, nous devons comprendre que dans un intervalle de temps strictement défini, nous avons affaire à un ensemble de données différent. C'est la pierre angulaire de la pierre d'achoppement. En essayant de travailler avec le même échantillon de valeurs spécifiques, nous nous retrouvons avec une fenêtre "flottante" d'observations dans le temps.

Je contourne ce problème de deux façons :

1. travailler exclusivement avec un ensemble particulier de ticks (volume d'échantillon) - il est le même pour une paire particulière une fois pour toutes. Mais cet ensemble est caractérisé par des moments différents de sa formation, et on ne peut pas faire de prévisions.

2. travailler exclusivement avec une fenêtre temporelle constante. Dans ce cas, au contraire, nous avons un volume flottant dans lequel sont échantillonnés des ticks. Comment éviter cette difficulté ? La réponse consiste à introduire des "pseudo-états", c'est-à-dire à remplir en quelque sorte la quantité de données dans la fenêtre d'observation pour obtenir la taille d'échantillon requise. Je le fais en forçant à travailler sur une échelle de temps exponentielle. C'est-à-dire que je lis les données dans une fenêtre de temps strictement définie à travers l'exposant et il n'est pas important de savoir si c'était un tick vraiment arrivé ou non. Dans ce cas, il est possible de faire des prévisions . La seule chose est que je doute que les intervalles exponentiels soient la bonne solution. Feynman a travaillé avec des intervalles uniformes.

Si vous choisissez une seule voie - le problème de la prédiction n'est pas soluble en principe.

La voie 2 est soluble, mais il n'existe pas de telles archives.

Sur ce point, je suis bloqué et jusqu'à présent, je tape stupidement mes propres archives. Je ne vois pas d'autre solution, hélas...

 
Alexander_K2:

2. travailler exclusivement avec une fenêtre temporelle permanente. Dans ce cas, en revanche, nous avons un volume d'échantillon flottant. Comment contourner cette difficulté ? La solution consiste à introduire des "pseudo-états", c'est-à-dire à augmenter le nombre de données dans la fenêtre d'observation pour atteindre la taille d'échantillon requise. Je le fais en forçant à travailler sur une échelle de temps exponentielle. C'est-à-dire que je lis les données dans une fenêtre de temps strictement définie à travers l'exposant et il n'est pas important de savoir si c'était un tick vraiment arrivé ou non. Dans ce cas, il est possible de faire des prévisions . La seule chose est que je doute que les intervalles exponentiels soient la bonne solution. Feynman travaillait avec des intervalles uniformes.

En fait, les intervalles exponentiels sont exactement la bonne solution au problème de la fenêtre constante, pour autant que je le comprenne (devrait être). Disons que l'échantillon d'entraînement est de 1000 barres (ticks), peu importe. Bien sûr, avec une fenêtre glissante, les modèles changent et le SN doit être réentraîné. Mais si notre échantillon contient une combinaison d'incréments dont le décalage augmente exponentiellement... Je me demande combien de décalages différents au total le système aurait besoin non seulement pour sortir de la fenêtre (disons, décalage 1500), mais aussi pour décrire tous les états possibles pour la même fenêtre, seulement maintenant glissante.

Peut-être que je suis stupide :D mais ce n'est pas difficile d'essayer. Mais la question est de savoir quand arrêter

 
Maxim Dmitrievsky:

Il s'agit en fait des intervalles exponentiels comme solution au problème de la fenêtre constante, d'après ce que je comprends, c'est la bonne solution (ça devrait l'être). Disons que l'échantillon d'entraînement est de 1000 barres (ticks), peu importe. Bien sûr, avec une fenêtre glissante, les modèles changent et le SN doit être réentraîné. Mais si notre échantillon contient une combinaison d'incréments dont le décalage augmente exponentiellement... Je me demande combien de décalages différents au total le système aurait besoin non seulement pour sortir de la fenêtre (disons, décalage 1500), mais aussi pour décrire tous les états possibles pour la même fenêtre, seulement maintenant glissante.

Peut-être que je suis stupide :D mais ce n'est pas difficile d'essayer. Mais la question est de savoir quand s'arrêter.

Et vous devez vous arrêter lorsque le système passe d'un état instable à un état stable.

Par exemple, si à un moment donné, nous constatons une augmentation de la nonentropie (une tendance s'est amorcée), dans un certain intervalle de temps, la nonentropie reviendra à sa valeur moyenne caractéristique calculée à partir de l'historique.

Comment déterminer cet intervalle de temps de transition ? C'est la vraie prédiction, on ne plaisante pas. C'est ce que j'attends des réseaux neuronaux et j'ai lu ce fil de discussion :)

 
Alexander_K2:

Et il est nécessaire de s'arrêter lorsque le système passe d'un état instable à un état stable.

C'est-à-dire que si, par exemple, à un moment donné, nous avons constaté une augmentation de la non-entropie (une tendance s'est amorcée), après un certain intervalle de temps, la non-entropie reviendra à sa valeur moyenne caractéristique calculée à partir de l'histoire.

Comment déterminer cet intervalle de temps de transition ? C'est la vraie prédiction, on ne plaisante pas. C'est ce que j'attends des réseaux neuronaux et de la lecture de ce fil :)

Ah, le problème était assez trivial - entraîner le modèle par incréments exponentiels, et construire un graphique de dispersion entre les prix prédits et les prix actuels, pour voir comment les écarts par rapport à la moyenne (résidus) sont distribués.

je le ferai la semaine prochaine :) il suffit de remplacer le mot inentropie par le mot variance

 
Maxim Dmitrievsky:

ah, bien, la tâche était assez triviale - entraîner le modèle sur des incréments exponentiels, et tracer l'écart entre les prix prédits et les prix actuels, voir comment les écarts par rapport à la moyenne (résidus) sont distribués.

Je le ferai la semaine prochaine :)

J'ai hâte d'y être, Maxim. Sérieusement - je suis sûr que c'est possible. N'oubliez pas d'ouvrir le signal - je serai le premier à m'inscrire.

Seules 2 choses peuvent vraiment fonctionner sur le marché - les réseaux neuronaux et les théoriciens. Tous les autres sont des ordures, des fraudeurs et des poches vides en conséquence.

 
Alexander_K2:

J'ai hâte d'y être, Maxim. Sérieusement - je suis sûr que c'est possible. N'oubliez pas d'ouvrir le signal - je serai le premier à m'inscrire.

Seules deux choses peuvent vraiment fonctionner sur le marché : les réseaux neuronaux et un théoricien. Tout le reste n'est que camelote, bricolage et poches vides en conséquence.

Je vais vous montrer un robot à titre d'exemple, vous pourrez le modifier plus tard :D Je vais d'abord en faire un indicateur pour plus de clarté.

 

Suivi de ce dossier -https://www.mql5.com/ru/forum/86386/page643#comment_6472393

Dr. Trader:

J'ai trouvé un autre paquet intéressant pour trier les prédicteurs. Il s'agit de FSelector. Il propose une douzaine de méthodes de tri des prédicteurs, dont l'entropie.


La fonction de tri des prédicteurs random.forest.importance() a montré d'assez bons résultats sur certains tests. Il est gênant que, selon lui, tous les prédicteurs soient au moins un peu importants. mais si vous calculez l'importance moyenne, par exemple, et ne prenez que les prédicteurs dont l'importance est supérieure à la moyenne, vous obtenez de très bons résultats.

library(FSelector)

load("ALL_cod.RData")
trainTable <- Rat_DF1
PREDICTOR_COLUMNS_SEQ <- 1:27
TARGET_COLUMN_ID      <- 29

targetFormula <- as.simple.formula(colnames(trainTable)[PREDICTOR_COLUMNS_SEQ], colnames(trainTable)[TARGET_COLUMN_ID])

rfImportance <- random.forest.importance(targetFormula, trainTable)
colnames(trainTable)[PREDICTOR_COLUMNS_SEQ][rfImportance[[1]] > mean(rfImportance[[1]])]
 
Dr. Trader:

J'ai pris juste eurusd m1 pour environ Janvier de cette année, et une fenêtre de glissement de 1 jour.

En toute logique, si l'entropie augmente, il faut suspendre les transactions et les poursuivre à faible entropie. Mais ici, nous avons une tendance à faible entropie pour une raison quelconque, bien qu'il soit plus facile de négocier à plat, c'est inhabituel.

(correction de cette coquille dans le code joint, téléchargez-le à nouveau si vous avez déjà eu le temps de télécharger l'ancien code)

Cela n'a aucun sens d'effectuer des tests yf la cotation initiale, car à l'œil, il est clair que la série n'est pas stationnaire.

Et intéressant (pas pour moi - je l'utilise toujours) sont les graphiques pour les séries temporelles log(p/p-1).

Qu'est-ce qu'il y a là-dedans ? Et bien sûr, une échelle sur l'axe des ordonnées est nécessaire.

 
Dr. Trader:

J'ai trouvé un autre paquet intéressant pour trier les prédicteurs. Il s'agit de FSelector. Il propose une douzaine de méthodes de tri des prédicteurs, dont l'entropie.


Il existe également un vaste ensemble très intéressant d'outils Relief dans le paquet CORElearn.

Dans mes longs exercices sur ce sujet, je n'ai rien trouvé de mieux que les fonctions de sélection des prédicteurs dans caret, en particulier saf.

Mais rien de tout cela ne fonctionnera si la présélection des prédicteurs n'est pas faite sur la base d'un "must" pour la variable cible.

Je répète encore une fois avec un exemple de deux classes :

  • une partie du prédicteur doit être liée à une classe et l'autre partie à une autre classe. L'intersection de ces deux parties des prédicteurs est ce qui donne l'erreur de classification, qui ne peut être surmontée.



PS.

Nous avons discuté des principaux composants et vous avez vu le défaut que l'algorithme est sans professeur.

Ici, c'est avec le professeur :

sgpls( x, y, K, eta, scale.x=TRUE,
        eps=1 e-5, denom.eps=1 e-20, zero.eps=1 e-5, maxstep=100,
        br=TRUE, ftype='iden' )
Arguments

x       Matrix of predictors.
y       Vector of class indices.
K       Number of hidden components.
eta     Thresholding parameter. eta should be between 0 and 1.
scale.x Scale predictors by dividing each predictor variable by its sample standard deviation?
eps     An effective zero for change in estimates. Default is 1 e-5.
denom.eps       An effective zero for denominators. Default is 1 e-20.
zero.eps        An effective zero for success probabilities. Default is 1 e-5.
maxstep Maximum number of Newton-Raphson iterations. Default is 100.
br      Apply Firth's bias reduction procedure?
ftype   Type of Firth's bias reduction procedure. Alternatives are "iden" (the approximated version) or "hat" (the original version). Default is "iden".

Le paquet spls

Raison: