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

 
Yousufkhodja Sultonov:

Les MA sont conçus par nature pour vous tromper - ceux qui ne comprennent pas les lois du marché. Et tout le monde est tombé dans le panneau. Étonnamment, c'est un fait. Regardez autour de vous et vous vous rendrez compte que le MA est une propriété de toutes les séries numériques, qu'elles soient marchandes ou aléatoires. Réveillez les traders, ne vous laissez pas berner.

J'appellerais ça de la paranoïa.))

Les MA sont le filtre le plus courant qui n'est coupable de rien. Toute méthode de matage est bonne là où et pour où elle est applicable.

 
Maxim Dmitrievsky:

alors quelle est la question réelle sur la recherche de fonctionnalités ?

il n'y a que le prix dans notre cas. Toute transformation de prix est une régularité a priori, sous la forme d'une sorte de "mémoire" du processus (indicateurs construits sur n-périodes). C'est-à-dire que si nous ne connaissons pas les régularités, nous ne pouvons qu'entrer le prix, les incréments avec différentes périodes pour tenir compte des processus de mémoire.

qu'est-ce qui peut être autre que des augmentations de prix ? ou non, qu'est-ce que vous choisissez si scrupuleusement, y en a-t-il ? :)

Il y a un processus d'atvoregression avec l'ordre, vous pouvez faire la même chose par NS. Il me semble que c'est la seule chose qui puisse être enseignée. Je veux dire prendre des modèles économétriques et les étendre

IMHO... c'est pourquoi je n'essaie même pas de ramasser des chips :) et les nerfs, ça va (mais pas vraiment).

en d'autres termes, que pouvons-nous trouver dans le prix : tendance, saisonnalité, cyclicité, bruit

Vous avez vous-même posté un exemple il y a quelques pages avec un neurone qui apprend à reconnaître une spirale. Les deux fonctions standard nécessitent 3 couches cachées de neurones. Et si vous ajoutez d'autres fonctionnalités, une seule couche suffit.
Ici aussi, vous pouvez alimenter un neurone avec une centaine d'incréments passés et traiter le tout dans une douzaine de couches cachées, ou vous pouvez obtenir de bonnes caractéristiques maison qu'une grille à une seule couche des années 90 peut traiter.

 

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 pour éliminer les prédicteurs, dont l'entropie.

J'ai obtenu le fichier avec les prédicteurs et la cible surhttps://www.mql5.com/ru/forum/86386/page6#comment_2534058.


library(FSelector)
library(corrplot)

load("ALL_cod.RData")
trainTable <- Rat_DF1

PREDICTOR_COLUMNS_SEQ <- 1:27
TARGET_COLUMN_ID     <- 28

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

impMatrix <- matrix(NA, nrow = 0, ncol = length(PREDICTOR_COLUMNS_SEQ))

impMatrix <- rbind(impMatrix, colnames(trainTable)[PREDICTOR_COLUMNS_SEQ] %in% cfs(targetFormula, trainTable))
rownames(impMatrix)[nrow(impMatrix)] <- "cfs"
impMatrix <- rbind(impMatrix, chi.squared(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "chi.squared"
impMatrix <- rbind(impMatrix, colnames(trainTable)[PREDICTOR_COLUMNS_SEQ] %in% consistency(targetFormula, trainTable))
rownames(impMatrix)[nrow(impMatrix)] <- "consistency"
if(class(trainTable[,TARGET_COLUMN_ID]) != "factor"){
  impMatrix <- rbind(impMatrix, linear.correlation(targetFormula, trainTable)[[1]])
  rownames(impMatrix)[nrow(impMatrix)] <- "linear.correlation"
  impMatrix <- rbind(impMatrix, rank.correlation(targetFormula, trainTable)[[1]])
  rownames(impMatrix)[nrow(impMatrix)] <- "rank.correlation"
}
impMatrix <- rbind(impMatrix, information.gain(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "information.gain"
impMatrix <- rbind(impMatrix, gain.ratio(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "gain.ratio"
impMatrix <- rbind(impMatrix, symmetrical.uncertainty(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "symmetrical.uncertainty"
impMatrix <- rbind(impMatrix, oneR(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "oneR"
impMatrix <- rbind(impMatrix, random.forest.importance(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "random.forest.importance"
impMatrix <- rbind(impMatrix, relief(targetFormula, trainTable)[[1]])
rownames(impMatrix)[nrow(impMatrix)] <- "relief"

impMatrix

for(i in 1:nrow(impMatrix)){
  if(length(unique(impMatrix[i,]))==1){
    impMatrix[i,] <- 0
  }else{
    impMatrix[i,] <- -1 + (impMatrix[i,]-min(impMatrix[i,]))/(max(impMatrix[i,])-min(impMatrix[i,]))*2
  }
}

while(nrow(impMatrix) < ncol(impMatrix)){
  impMatrix <- rbind(impMatrix, 0)
}
while(ncol(impMatrix) < nrow(impMatrix)){
  impMatrix <- cbind(impMatrix, 0)
}

impMatrix <- as.matrix(impMatrix)
colnames(impMatrix) <- colnames(trainTable)[PREDICTOR_COLUMNS_SEQ]

corrplot(impMatrix)

L'évaluation du prédicteur par chaque méthode est présentée dans le graphique à la fin.

Le bleu est bon, le rouge est mauvais (pour le corrplot, les résultats ont été mis à l'échelle [-1:1], pour l'évaluation exacte, voir les résultats de cfs(targetFormula, trainTable), chi.squared(targetFormula, trainTable), etc.)
Vous pouvez voir que X3, X4, X5, X19, X20 sont bien évalués par presque toutes les méthodes, vous pouvez commencer avec eux, puis essayer d'en ajouter/supprimer d'autres.

Cependant, les modèles dans rattle ont échoué au test avec ces 5 prédicteurs sur Rat_DF2, là encore aucun miracle ne s'est produit. C'est-à-dire que même avec les prédicteurs restants, vous devez ajuster les paramètres du modèle, faire de la validation croisée, ajouter/supprimer des prédicteurs vous-même.

 
SanSanych Fomenko:

Pourriez-vous lancer une fenêtre sur le résultat de la fusion et donner des graphiques :

  • valeurs entropiques
  • Résultats de l'adfTest
  • Résultats de l'ArchTest

J'ai pris juste l'eurusd m1 pour environ janvier de cette année, et une fenêtre glissante d'un jour.

En toute logique, si l'entropie augmente, vous devez suspendre vos opérations et les poursuivre lorsque l'entropie est faible. Mais ici, nous avons une tendance à faible entropie pour une raison quelconque, bien qu'il soit plus facile de négocier à plat.

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

Dossiers :
 
Dr. Trader:

Il y a quelques pages, vous avez publié un exemple de réseau neuronal apprenant à détecter une spirale. Les deux fonctions standard nécessitent 3 couches cachées de neurones. Et si vous ajoutez d'autres fonctionnalités, une seule couche suffit.
Ici aussi, vous pouvez alimenter un neurone avec une centaine d'incréments passés et traiter le tout dans une douzaine de couches cachées, ou obtenir de bonnes fonctionnalités maison qu'une grille à une couche des années 90 peut traiter.

Je comprends cela, mais la spirale ne change pas dans le temps... pensez au faux problème que vous résolvez, lorsque la spirale dans le temps est maintenant un carré et maintenant une ellipse

et la validation croisée n'aidera pas car les transitions d'état sont aléatoires.

 
Dr. Trader:

Logiquement, si l'entropie augmente, il faut arrêter de négocier, et continuer à négocier lorsque l'entropie est faible. Mais ici, lorsque l'entropie est faible, pour une raison quelconque, il y a une tendance, bien qu'il soit plus facile de négocier dans un plat, ce qui est inhabituel.


C'est pourquoi je dis de prendre son temps.

À une entropie élevée, nous obtenons la distribution normale avec un trading à contre-tendance.

À faible entropie - distribution de Pareto, tendance, "mémoire" - quel que soit le nom qu'on lui donne.

Il s'avère que vous avez des choses toutes faites dans R, c'est plus facile pour vous. Pour ma part, j'ai beaucoup de travail à faire maintenant pour tenir compte de la non-entropie, et j'ai donc abandonné les discussions du forum.

Je maintiens mon opinion - la comptabilité de l'entropie est la clé de tout.

 
Maxim Dmitrievsky:

et la validation croisée n'aidera pas car les transitions d'état sont aléatoires.

Si les transitions d'état sont aléatoires, alors le processus est markovien et tout ce fil de forum peut être supprimé pour cause d'inutilité :)

Mais moi, par exemple, je crois que le processus est non-markovien. Alexander semble d'accord, il est bien meilleur en statistiques que moi, je lui fais confiance.

 
Dr. Trader:

Si les transitions d'état sont aléatoires, alors le processus est markovien et tout ce fil de discussion peut être supprimé pour inutilité :)

Mais moi, par exemple, je crois que le processus est non-markovien. Alexander semble d'accord, il connaît les statistiques bien mieux que moi, je lui ferais confiance.

J'ai déjà écrit : aléatoire au niveau local, on ne peut pas tous les prendre en compte sans passer à l'échelle du grand décalage ou autre, et là le processus redevient prévisible. Un MAIS, la population générale est inconnue et le nombre de transferts vers une autre échelle est limité. C'est pourquoi Alexander utilise des tics. Il en est ainsi, mais même cela ne fonctionnera pas toujours lorsque nous nous heurtons à l'insuffisance de l'histoire en raison de son absence et, par conséquent, à l'absence d'une idée claire des modèles de la BP étudiée.

En un mot, certaines transitions aux niveaux locaux ne peuvent pas du tout être prédites, elles nécessitent un autre niveau de représentation.

 
Dr. Trader:

Si les transitions d'état sont aléatoires, alors le processus est markovien et tout ce fil de discussion peut être supprimé pour inutilité :)

Mais moi, par exemple, je crois que le processus est non-markovien. Alexander semble d'accord, il connaît les statistiques bien mieux que moi, je lui ferais confiance.

Bien que je n'utilise pas de réseaux neuronaux, j'ai lu le fil de discussion, car Feynman était convaincu qu'il est possible de prédire le mouvement ultérieur de la particule de l'état A à l'état B (exactement d'un état à l'autre, et pas seulement en extrapolant à l'infini).

Pour cela, il a utilisé comme entrée les incréments habituels entre les états actuels et précédents, et a pris en compte de nombreux paramètres supplémentaires. Shelepin L.A. a été le premier à commencer à utiliser la non-entropie et est mort pour une raison quelconque... n'a pas mis fin aux travaux. C'est donc à nous de terminer ce sujet.

 

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, veuillez me contacter et j'essaierai de vous aider.