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

 
Dr. Trader:

Ça a l'air compliqué et je ne suis pas sûr du résultat, je vais passer mon tour.
R possède un paquet GMDH ("MGUA" en anglais).

C'est difficile car il existe toutes sortes d'algorithmes et il est facile de s'y perdre.

Il y a un paquet, mais il est "terne".

Je vais essayer d'expliquer en termes plus simples et plus courts...

Un modèle combinatoire auto-organisateur non-physique est

une recherche simple de toutes les combinaisons possibles d'éléments de l'échantillon (prédicteurs) et vérification de chaque itération de cette recherche à l'OOS puisque les prédicteurs sont des polynômes ou des harmoniques, de telles combinaisons peuvent devenir plus compliquées, donc aller comme si à un nouveau niveau et faire des combinaisons avec des combinaisons et de nouveau vérifier à l'OOS et de nouveau à un nouveau niveau et ainsi de suite jusqu'à ce que l'erreur minimale à l'OOS soit trouvée, c'est une essence de l'auto-organisation (si j'ai tout compris correctement là)

Ce que je propose....

Nous savons tous que toute fonction peut être décomposée en une série de Fourier, comme dans la Fig.

ч

L'inverse est également vrai : avec les bonnes combinaisons d'harmoniques, nous pouvons obtenir n'importe quelle fonction dont nous avons besoin.

Imaginez maintenant qu'il existe une fonction (une courbe) ou un vecteur, appelez-le comme vous voulez ... qui décrit complètement un instrument de marché et le surpasse ... Il peut s'agir d'une saisonnalité intelligente exprimée dans une fonction ou une dépendance à d'autres instruments, ou des cycles lunaires ; c'est absolument sans importance et nous, mortels, ne le savons pas MAIS nous pouvons trouver cette dépendance sans même savoir où la chercher .... Appelons cette dépendance - qui anime le marché - super dépendance plus loin NW

Tout ce dont nous avons besoin, c'est de

1) prendre une gamme adéquate d'harmoniques

2) créer une cible

3) commencez à passer en revue toutes les combinaisons possibles entre les harmoniques et observez les OOS.

Comprenez-vous combien c'est simple et profond, nous ne savons pas où chercher le PS, mais nous pouvons le générer synthétiquement par nous-mêmes !

Il semble donc s'agir d'un simple algorithme de suréchantillonnage, mais lorsque je l'ai compris, j'ai été stupéfait...

Mais il y a un gros MAIS ! Il y aura des trillions de combinaisons, il faut trouver un moyen de les contourner, et j'ai besoin de votre aide.

La génétique est peut-être un moyen de rechercher de bonnes combinaisons ?

Que pensez-vous de cette idée et de sa mise en œuvre ?

BLEEP ! !! ......

 

Ce que vous décrivez correspond au résultat de "bon sur OOS". Tout d'abord, vous sélectionnez les paramètres du modèle (combinaisons harmoniques) de manière à obtenir un bon résultat sur l'échantillon. Ensuite, vous sélectionnez parmi eux les paramètres qui sont bons sur l'oos. Il s'agit d'un double ajustement des bons résultats et le modèle sera très probablement inutile sur les nouvelles données de négociation.

Avec des combinaisons d'harmoniques, vous pouvez décrire le mouvement des prix, mais la même chose peut être réalisée avec des neurones ou des forêts. Je pense que vous avez déjà fait cela des centaines de fois avec la neuronique et que cela n'a pas marché, pourquoi pensez-vous que le résultat du MGUA sera positif ? L'apprentissage automatique dans le domaine du forex ne peut pas être utilisé aussi facilement que dans les problèmes classiques, le comportement des prix change au fil du temps, et la plupart des dépendances que vous trouvez et utilisez - cesseront d'exister très rapidement. Et tous ces modèles sont conçus pour des dépendances constantes qui ne changent pas avec le temps, et pour cette raison, ils ne sont pas rentables dans un tel problème.

 
mytarmailS:

C'est difficile car il existe toutes sortes d'algorithmes et il est facile de s'y perdre.

Il y a un paquet, mais il est "terne".

Je vais essayer d'expliquer en termes plus simples et plus courts...

Un modèle combinatoire auto-organisateur non-physique est

Simplement une recherche simple de toutes les combinaisons possibles d'éléments de l'échantillon (prédicteurs) et la vérification de chaque itération de cette recherche à l'OOS, comme les prédicteurs sont des polynômes ou des harmoniques, de telles combinaisons peuvent devenir plus compliquées, donc aller comme si à un nouveau niveau et faire des combinaisons avec des combinaisons et vérifier à nouveau à l'OOS et ainsi de suite, jusqu'à ce que l'erreur minimale à l'OOS soit trouvée, c'est une essence de l'auto-organisation (si j'ai bien compris).

Ce que je propose....

Nous savons tous que toute fonction peut être décomposée en une série de Fourier, comme dans la Fig.

L'inverse est également vrai : avec les bonnes combinaisons d'harmoniques, nous pouvons obtenir n'importe quelle fonction dont nous avons besoin.

Imaginez maintenant qu'il existe une fonction (une courbe) ou un vecteur, appelez-le comme vous voulez ... qui décrit complètement un instrument de marché et le surpasse ... Il peut s'agir d'une saisonnalité intelligente exprimée dans une fonction ou une dépendance à d'autres instruments, ou des cycles lunaires ; c'est absolument sans importance et nous, mortels, ne le savons pas MAIS nous pouvons trouver cette dépendance sans même savoir où la chercher .... Appelons cette dépendance - qui anime le marché - super dépendance plus loin NW

Tout ce dont nous avons besoin, c'est de

1) prendre une gamme adéquate d'harmoniques

2) créer une cible

3) commencez à passer en revue toutes les combinaisons possibles entre les harmoniques et observez les OOS.

Comprenez-vous combien c'est simple et profond, nous ne savons pas où chercher le PS, mais nous pouvons le générer synthétiquement par nous-mêmes !

Voilà, ça ressemble à un simple algorithme de suréchantillonnage, mais quand je l'ai compris, j'ai été étonné...

Mais il y a un gros MAIS ! Il y aura des trillions de combinaisons, il faut trouver un moyen de contourner le problème, et j'ai besoin de votre aide.

La génétique est peut-être un moyen de rechercher de bonnes combinaisons ?

Toute réflexion sur l'idée et sa mise en œuvre

J'ai mis en œuvre une telle idée dans mon indicateur. C'est très consommateur de ressources. Je peux l'ajuster sur un historique de 1000 barres, ou je peux l'ajuster sur un historique de 10000 barres. Le résultat est le suivant : parfois, il fonctionne parfaitement et prédit un point du prix. Mais à d'autres moments, il n'en est même pas question. La raison en est que toutes ces périodes commencent à flotter sur le marché après le point de calcul. Il est probablement possible d'entrer des corrections -+ à partir des valeurs actuelles, mais cela n'a pas fonctionné pour moi.
 
Dr. Trader:

Ce que vous décrivez correspond au résultat de "bon sur OOS". Tout d'abord, vous sélectionnez les paramètres du modèle (combinaisons harmoniques) de manière à obtenir un bon résultat sur l'échantillon. Ensuite, à partir de ceux-ci, vous sélectionnez les paramètres qui sont bons sur l'oos. Il s'agit d'un double ajustement à un bon résultat, et sur de nouvelles données commerciales, le modèle sera très probablement inutile...

J'ai dormi avec l'idée et je l'ai comprise moi-même, c'est une connerie, c'est juste un ajustement...

Mais voici la question : pourquoi n'est-il pas adapté à tout le reste ? Vous savez, tout entraînement avec OOS est un entraînement pour OOS, non ?

Dr. Trader:

Pourquoi pensez-vous que le résultat des MGUA sera positif ?

Moi-même, je ne comprends pas encore tout cela, peut-être ne le comprendrai-je jamais...

C'est juste que dans une correspondance privée, Nikolaï m'a recommandé d'étudier l'analyse spectrale et de me familiariser avec le MSUA si vous voulez commencer à faire quelque chose d'utile.

Il a dit qu'il avait lui-même commencé par cela, et que lorsqu'il a construit son premier robot fonctionnel, il n'a utilisé que deux livres, l'un d'Ivakhnenk "MSIA" et l'autre de Marple "Spectrum Anal".

la traduction des titres des livres n'est pas correcte, je l'ai juste résumée pour que ce dont nous parlons en général soit clair.

Qui est Nicholas ? En plus d'être un homme humble et très intelligent.

Il a un doctorat en intelligence artificielle, il construit des robots depuis environ 20 ans, ses derniers robots ressemblent à ça :

я

Il a donc créé ces réseaux il y a environ 30 ans, à une époque où nous ne connaissions pas encore de mots tels que "réseau neuronal". ......

Et maintenant cet homme ne recommande que deux choses : Fourier et Magua, le bon sens dit que ça vaut la peine de l'écouter... Voici quelques-unes de mes raisons pour lesquelles cela devrait fonctionner :))

 
Maxim Romanov:
C'est à peu près ce que je disais dans l'indicateur. C'est très consommateur de ressources. Je peux l'ajuster à l'historique de 1000 barres, ou à l'historique de 10000. Le résultat est le suivant : parfois, il fonctionne parfaitement et prédit un point du prix. Mais à d'autres moments, il n'en est même pas question. La raison en est que toutes ces périodes commencent à flotter sur le marché après le point de calcul. Il est probablement possible d'introduire des corrections -+ à partir des valeurs actuelles, mais je ne l'ai pas compris.
Je vois, ça va comme ça)) Je suis d'accord avec le fait que j'ai eu tort...
 

question

il existe un vecteur "x" et une matrice "y".

nous devons calculer rapidement la distance euclidienne entre "x" et chaque ligne de la matrice "y".

J'ai dépassé la fonction standard "dist()" et écrit ma propre fonction

штатная

system.time(for(i in 1:nrow(m)) {dist.ve[i] <- dist(rbind(x,m[i,]))})

   user  system elapsed
   4.38    0.00    4.39

самописная

system.time(for(i in 1:nrow(m)) {dist.ve[i] <- euc.dist(x,m[i,])})
   user  system elapsed
   0.65    0.00    0.67

mais cela ne suffit pas, je voudrais accélérer jusqu'au deuxième zéro 0.0....

que peut-on faire d'autre ?

code :

x <- rnorm(10)
m <- matrix(data = rnorm(1000000),ncol = 10)

euc.dist <- function(x1, x2) sqrt(sum((x1 - x2) ^ 2))

dist.ve <- rep(0,nrow(m)) # distance vector
system.time(for(i in 1:nrow(m)) {dist.ve[i] <- dist(rbind(x,m[i,]))})
system.time(for(i in 1:nrow(m)) {dist.ve[i] <- euc.dist(x,m[i,])})
 
mytarmailS:

Mais voici la question, alors pourquoi ne s'adapte-t-il pas à tout le reste ? Parce qu'alors, il s'avère que toute formation avec test de l'OOS est adaptée à l'OOS, n'est-ce pas ? Si non, pourquoi pas ?

La validation croisée et le test oos sur les données stationnaires (ayant des dépendances constantes non changeantes) sont utiles. Sur des données non stationnaires, elle est inutile.

Vous pouvez, par exemple, entraîner un ensemble de modèles utilisant le même algorithme, mais sur des données provenant de différentes périodes ; pour chaque modèle, trouvez les profits sur l'échantillon et les oos et trouvez la corrélation pour ces deux profits. Pour les modèles communément connus dans le domaine du forex, il n'existe généralement pas de telle corrélation, c'est-à-dire que le profit sur l'échantillon ne garantit rien, auquel cas il est inutile de faire de la validation croisée pour essayer d'améliorer les résultats sur de nouvelles données.
D'autre part, si la corrélation est élevée et positive, alors le modèle a un certain potentiel et vous pouvez sans risque faire une validation croisée pour ajuster les paramètres du modèle et améliorer les résultats.

 

Voici un exemple pour le poste précédent. Nous prenons les cours ouverts de l'eurusd pour quelques mois, entraînons un modèle (randomForest) sur ces cours, et les utilisons pour prédire sur une petite période de temps de nouvelles données. La valeur cible est l'incrément de prix pour la prochaine barre (deux classes 0 et 1). Tout ceci est répété 1000 fois pour différents intervalles de temps, puis la corrélation est trouvée.

À la fin, nous voyons la corrélation des résultats sur les données de formation et les nouvelles données, dans ce cas, nous avons obtenu environ 0,1, c'est-à-dire que quelque chose doit être changé dans la formation, cette approche ne sera pas rentable. Un bon résultat sur les données de formation ne garantit pas un bon résultat à l'avenir.

La fonction TrainModel peut être utilisée pour former vos modèles, effectuer une validation croisée, une correspondance génétique, etc.

Dossiers :
 
Dr. Trader:

Voici un exemple pour le poste précédent. Nous prenons les cours d'ouverture de l'eurusd pour quelques mois, entraînons un modèle (randomForest) sur ces cours, et les utilisons pour prédire sur une petite période de temps de nouvelles données. La valeur cible est l'incrément de prix pour la prochaine barre (deux classes 0 et 1). Tout ceci est répété 1000 fois pour différents intervalles de temps, puis la corrélation est trouvée.

À la fin, nous voyons la corrélation des résultats sur les données de formation et les nouvelles données, dans ce cas, nous avons obtenu environ 0,1, c'est-à-dire que quelque chose doit être changé dans la formation, cette approche ne sera pas rentable. Un bon résultat sur les données de formation ne garantit pas un bon résultat à l'avenir.

Vous pouvez utiliser la fonction TrainModel pour former vos modèles, effectuer une validation croisée, une correspondance génétique, etc.

1. pourquoi normaliser manuellement ?

2. pourquoi la corrélation -1 et 1 est-elle bonne ? seulement si 1 est bon -1 est très mauvais, si je comprends bien l'idée, -1 est une corrélation inverse

3. avez-vous essayé de surveiller l'erreur d'un modèle entraîné dans une fenêtre glissante, et si cela ne vous convient pas, entraînez à nouveau le modèle et voyez ce qui se passe ?

4. et l'idée globale de pourquoi tout fonctionne si mal, le marché n'est pas stationnaire, vous devez élaborer un autre concept de formation des caractéristiques, peut-être passer complètement au paradigme des règles logiques, je pense que vous devez vous éloigner presque complètement des chiffres, ou étudier l'analyse spectrale))))).

 

Hier, j'ai fouillé dans les sacs à la recherche du bon pour terminer une idée, je n'ai pas trouvé le bon, mais j'en ai trouvé un intéressant...

Cela s'appelle "tendance".

https://cran.r-project.org/web/packages/trend/trend.pdf

Le paquet met en œuvre divers tests de tendance et d'autres choses.

par exemple, la fonction

mk.test() - donne les caractéristiques d'une tendance, par exemple à la hausse ou à la baisse, etc...

pettitt.test() - si j'ai bien compris, il trouve le point du vecteur où la tendance a commencé.

Sens.slope() - avec cette fonction, les angles de pente de la tendance peuvent être calculés

et beaucoup d'autres caractéristiques spéciales

Je pense que, tant que l'on peut observer scientifiquement la tendance, on devrait la vérifier) J'ai calculé mk.test()$Zg dans une fenêtre glissante de 200 valeurs, selon clowes, et il s'est avéré être quelque chose comme un indicateur

Au-dessus de zéro, c'est une tendance à la hausse, en dessous de zéro, c'est une tendance à la baisse.

й

Et quoi ? Il capte les tendances et ne confond pas la direction des prix comme macd-ki et stochastc-ki..... En général, j'aime le fait qu'ils ouvrent toujours des positions dans le sens de la tendance...

Pendant certaines périodes, il rapporte même de l'argent,

с

Si je prends le chrono, pas le M5, alors peut-être que ce sera quelque chose d'utile.

Karoch ce que je propose, quelqu'un qui a un ordinateur puissant et le temps de compter tous ces tests pour la tendance, les pentes, les angles, etc et d'alimenter le MO, peut-être que cela va fonctionner, juste j'ai maintenant un ordinateur fonctionnant à pleine vitesse, en cours d'exécution pour traiter, finir le compte en quatre jours et l'ordinateur portable sur lequel je suis assis maintenant, il peut seulement regarder les sites)

Raison: