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

 
Maxim Dmitrievsky:

Oui, c'est juste ma fonction de transformation avec cos et degré aléatoire, pas un noyau.

RDF enregistre sa propre structure dans le fichier, donc s'il y a trop d'échantillons ou de fonctionnalités, les fichiers peuvent être trop volumineux, je ne suis pas sûr pour les millions d'agents :) Mais vous pouvez réduire l'erreur de classification et augmenter la stabilité du modèle en augmentant le nombre d'agents avec différentes caractéristiques.

Moment suivant - d'après mon expérience, plus de données != meilleure précision sur les nouvelles données. Si les prédicteurs sont mauvais, le résultat sera tout aussi mauvais.

De plus, gdmh peut travailler avec des ensembles de données extrêmement petits, ce qui est une bonne approximation pour les données futures.

Mais... nous pouvons appliquer un modèle simple comme la régression logistique + gdmh (au lieu de RDF), ainsi le processus d'apprentissage sera très rapide, mais je ne connais pas la précision.

En ce qui concerne le GMDH, c'est exactement ce que je vous ai dit lorsque vous avez mentionné le GMDH pour la première fois. Parce que GMDH lui-même agit comme un réseau neuronal et donc, il n'y a pas d'utilisation de RDF ici.

 
Maxim Dmitrievsky:

Oui, il y a des différences. Pour prendre une décision avec RDF, il faut passer par tous les nœuds et toutes les feuilles. Donc, si la structure RDF est grande, il faudra plus de temps pour chaque décision.

Pour cela, il est préférable d'utiliser des modèles extrêmement rapides (NN à apprentissage rapide) avec une réponse rapide. Ou un meilleur matériel, y compris le GPU

Un autre problème - RDF est sensible au bruit dans les données, donc presque toujours surajusté. Pour réduire cet effet de bruit, il est bon d'intégrer une couche LDA ou PCA à l'algorithme.

Ce n'est donc pas une tâche aussi triviale qu'il n'y paraît à première vue.

Vous voulez dire que votre implémentation actuelle de RDF et votre version précédente de RDF sont complètement différentes ? Cette version RDF utilise-t-elle la politique ou autre chose ? Je ne suis pas sûr des fichiers ".rl". Je pensais que ces fichiers étaient similaires aux fichiers "Mtrees" de votre version précédente.

Laissez-moi voir ce qui se passe avec la formation et les tests. J'ai remarqué que les modèles et les agents ne semblent pas fonctionner correctement jusqu'à une valeur très élevée. Par exemple, je viens de fixer les agents à 100 et les modèles à 100. Les agents ont fonctionné, mais les modèles ont cessé de fonctionner à 50 pour chaque agent. Je ne sais pas pour quelle raison.

D'ailleurs, je ne fais que tester mon algo avec RDF puisque vous avez déjà implémenté le code de base, parce que j'ai fait des milliers et des milliers de combinaisons différentes d'optimisation et de tests dans votre version précédente et donc, j'ai une bonne compréhension de votre version précédente de RDF. Sinon, je dois écrire le code complet de l'algo "Monte carlo" utilisé dans "ALPHA ZERO" pour l'intégrer à mon algo, ce qui peut me prendre pas mal de temps car je ne suis pas un programmeur expert.

 
Maxim Dmitrievsky:

Bonjour, essayez de comprendre ce code, pour commencer :

Ici, nous apprenons RDF avec chaque caractéristique (1 entrée) et enregistrons les meilleurs numéros de caractéristiques dans un tableau trié (modèles). Ensuite, nous pouvons choisir les quelques meilleurs

Prochaine étape - nous devons combiner tous les meilleurs prédicteurs avec les autres et vérifier à nouveau les erreurs, je pense, et sauvegarder le résultat. Sur cette étape, nous pouvons appliquer quelques équations polynomiales

Ok, voyons maintenant comment implémenter GMDH avec ce code.

Plus vous pouvez expliquer le code, plus vite je peux trouver un pont. En fait, mon problème est que je suis un peu faible dans la syntaxe de certains concepts de base du C++ comme les classes, les objets, les tableaux, etc. et donc, je prends plus de temps pour comprendre la mise en œuvre de ces concepts, sinon, j'aurais directement écrit le fichier de classe de GMDH et vous l'aurais donné.

Bref, laisse-moi voir.

Veuillez m'expliquer correctement ces 3 lignes. Je pense que c'est ici que nous devons appliquer le GMDH :

        m[i].Set(0,RDFpolicyMatrix[i][bf]); 
        m[i].Set(1,RDFpolicyMatrix[i][bf+1]);
        m[i].Set(2,RDFpolicyMatrix[i][bf+2]);

Je veux dire, s'il vous plaît, commentez ces 3 lignes

Je pense que dans mon code précédent, j'ai fait une petite erreur dans la boucle. Je pense donc que voici la passerelle fournie si vous savez exactement ce que vous avez écrit sur RDF :))... car je ne sais pas grand chose de l'implémentation de la matrice...

 ///---Remaining values of Y starting from Y_1
  for(int i=1;i<3;i++)
  m[i]=CalculateNeuron(a);///---Calculate individual value of Y_1,Y_2,Y_3,...to feed to RDF inputs
 
 
Maxim Dmitrievsky:

c'est un tableau 2d (matrice), format de la bibliothèque "alglib", nous le remplissons simplement avec le nombre de prédicteurs (bf) (index 0 de la matrice), les valeurs suivantes (1,2) sont les valeurs de sortie... erreur ici :) nous devons définir des valeurs avec les index "features" et "features-1".

m - notre matrice actuelle contient 1 caractéristique et 2 sorties, maisRDFpolicyMatrix contient toutes les caractéristiques et les sorties.

Correction de

que vous pouvez lire ici http://www.alglib.net/dataanalysis/generalprinciples.php#header0

Ok, il y a donc un malentendu... Laissez-moi vérifier à nouveau le code pour savoir comment le lier à GMDH...

Si vous avez une idée, mettez-moi au courant pour que je ne perde pas mon temps à réfléchir :))

Je pense que RDF et GMDH sont similaires et donc, il devient difficile de s'intégrer l'un à l'autre...

Laissez-moi réfléchir à nouveau....

 
Maxim Dmitrievsky:

non, il est facile à intégrer ... nous ne changeons que les vecteurs d'entrée avec gdmh, juste quelques transformations

à l'étape suivante, nous allons vérifier les groupes de prédicteurs, les combiner à d'autres (seulement quelques-uns de la sélection précédente).

Ensuite, cette boucle peut tout faire pour la transformation de la caractéristique à laquelle vous faites référence :

Ensuite, il s'agit de la fonction permettant de calculer le Neuron :

Ensuite, Y_Final=Y_All+Y_0 ;

Nous avons maintenant divisé les entrées en 3 parties et nous pouvons les étendre à n'importe quel nombre si nécessaire...

Ici, les entrées sont les caractéristiques ou les prédicteurs et les poids sont des poids aléatoires ... nous pouvons prendre ceux de la fonction aléatoire initialement et plus tard, ils seront stockés dans RDF après la formation.

 
Maxim Dmitrievsky:

essayer de le refaire pour la matrice maintenant ;))

mais... nous n'avons pas besoin d'une somme ici, nous avons besoin de prédicteurs séparés à chaque étape, il suffit d'étendre notre matrice pour des caractéristiques supplémentaires et les ajouter, et vérifier les erreurs à nouveau

Ok, donnez-moi un peu de temps et je serai bientôt prêt.

Ok, pas de problème ici alors, il suffit d'enlever le signe "+" pour les prédicteurs séparés et vous obtiendrez des prédicteurs individuels :

/// --- Remaining values ​​of Y starting from Y_1 
  for ( int a = 1 ; a < 3 ; a ++) 
  Y_All [a]=CalculateNeuron (a); /// --- Calculate the individual value of Y_1, Y_2, Y_3, ... to feed to RDF inputs...Here feature transformation done

Mais si vous avez de meilleurs moyens, c'est aussi très bien :)) Parce que cela sera très lent en raison des multiples boucles for... Donc une mise en œuvre très grossière :)))

J'ai écrit ce code juste en une heure et donc je n'aime même pas ce code :))

Matrix n'entre pas dans mon cerveau :)))))))))))))))))))))))))))))))))
 
Maxim Dmitrievsky:

hehe... comment trier une matrice 2d ? :)

De plus, je vous demanderai d'implémenter au moins quelques variétés supplémentaires de prédicteurs dans la version finale de l'EA :

1. quelques indicateurs d'oscillateurs

2. quelques indicateurs de tendance

3.Quelques indicateurs de volume

4. certains indicateurs de périodes plus élevées (bon filtre pour les signaux bruyants).

5.Quelques prix de fermeture directe

Sinon, je dois continuer à vous demander quand je dois ajouter quelque chose :)))....

S'il peut passer instantanément d'un système à l'autre à chaque bougie en fonction de l'évolution du marché, alors ce sera vraiment génial ! ... En fait, c'était l'objectif initial que j'attendais de cette version lorsque vous avez parlé de spline, de transformations de caractéristiques et de l'astuce du noyau, etc... L'astuce du noyau aurait permis de rendre le calcul beaucoup plus rapide, même dans un serveur ordinaire pour les grandes données également... Donc, maintenant, nous devons compter uniquement sur des modèles parfaitement formés et une transformation rapide...

D'ailleurs, d'après les deux derniers jours de tests prospectifs, je dois dire que cette version de RDF semble un peu plus stable et fiable que la version précédente de RDF... Je veux dire que les tests prospectifs correspondent un peu aux backtests... mais la version précédente était surtout surajustée avec les données d'optimisation...

 
Maxim Dmitrievsky:

La version précédente n'était qu'un concept avec des idées de base.

vous pouvez ajouter un (des) indicateur(s) lui-même, au lieu des prix de clôture

Non, pas un seul indicateur... Je veux dire que je suis confus lorsque j'applique plusieurs indicateurs simultanément dans la boucle du tableau de "ag1.agent".

Que dois-je utiliser à la place de"ArraySize(ag1.agent)" lorsque j'utilise un total de 100 Features, mais 50 pour la clôture et 50 pour le sommet.

for(int i=0;i<ArraySize(ag1.agent);i++)///---here
     {   
      CopyClose(_Symbol,0,0,50,ag1.agent[i].inpVector);
      normalizeArrays(ag1.agent[i].inpVector);
     }
for(int i=0;i<ArraySize(ag1.agent);i++)///---here
     {   
      CopyHigh(_Symbol,0,0,50,ag1.agent[i].inpVector);
      normalizeArrays(ag1.agent[i].inpVector);
     }

Le code ci-dessus est-il correct pour la déclaration d'un agent comme celui ci-dessous ?

CRLAgents *ag1=new CRLAgents("RlExp1iter",5,100,50,regularize,learn);///----Here

Eh bien, j'ai été la première personne à commenter sur votre forum anglais :)))....depuis ce jour, j'ai effectué au moins plus de 20 000 tests et optimisations différents sur tous mes serveurs et tous les types de combinaisons de paramètres et, par conséquent, j'ai une meilleure compréhension du concept global... mais mon principal problème est que parfois je reste bloqué avec du code simple....

Et je peux vous promettre que même si cet algo peut commencer à converger quelque peu au fil du temps, alors je peux optimiser le code pour qu'il soit au moins 2 à 3 fois plus performant que ce que vous publierez :))...tout cela juste à partir de mon expérience et de mes observations :)).

Ou le code ci-dessous est correct ?

Or

for(int i=0;i<50;i++)///---here
     {   
      CopyClose(_Symbol,0,0,50,ag1.agent[i].inpVector);
      normalizeArrays(ag1.agent[i].inpVector);
     }
for(int i=50;i<100;i++)///---here
     {   
      CopyHigh(_Symbol,0,0,50,ag1.agent[i].inpVector);
      normalizeArrays(ag1.agent[i].inpVector);
     }
 
Maxim Dmitrievsky:

Merci beaucoup... Maintenant, je pense que je peux faire plus d'indicateurs :))))))))

 
Maxim Dmitrievsky:

Ou comme ici, plus simple

Oui, j'aime ça... C'est mon genre :))

L'exemple précédent est très conditionnel et ne peut pas augmenter le nombre de prédicteurs. ....

A propos, j'ai utilisé cette méthode pour des simulations de bougies aléatoires... mais je dois aussi changer les prix d'entrée et de sortie du trade pour l'entraînement et donc, je suis confus....

Pour l'instant, je vais essayer ces méthodes d'indicateurs... et les tester, et plus tard, j'essaierai la méthode de simulation de bougies... car si elle réussit, ce sera la dernière version de tout EA d'apprentissage automatique jamais créé sur le marché des changes : )))).