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

 
Anaxagor:

Ça ressemble à un compliment venant du fabricant de ce malentendu.

Eh bien, utilisez-le pendant que je suis gentil :-) Je ne suis pas désolé..... Et le fait que vous n'ayez pas pu comprendre l'article, j'en suis même content. Moins nous sommes, plus nous sommes :-)

 

Salut Maxim,

Si je veux ajouter les prix haut et bas, il me suffit de modifier UNIQUEMENT la fonction calcsignal () . Ai-je raison ?

Le code ci-dessous est-il correct ? Ou dois-je apporter d'autres modifications au code de l'EA ou au code de la bibliothèque ?

Aussi, pouvez-vous donner un code indicateur dans ce code ?

void calcSignal ()

{

sig1 = 0 ;

for (int i = 0 ; i <ArraySize (ag1.agent) ; i ++)

{

CopyClose (_Symbol, 0.0, 100, ag1.agent [i] .inpVector) ;

normalizeArrays (ag1.agent [i] .inpVector) ;

}

for (int i = 0 ; i <ArraySize (ag1.agent) ; i ++)

{

CopyHigh (_Symbol, 0.0, 100, ag1.agent [i] .inpVector) ;

normalizeArrays (ag1.agent [i] .inpVector) ;

}

for (int i = 0 ; i <ArraySize (ag1.agent) ; i ++)

{

CopyLow (_Symbol, 0.0, 100, ag1.agent [i] .inpVector) ;

normalizeArrays (ag1.agent [i] .inpVector) ;

}

sig1 = ag1.getTradeSignal () ;

}

 
Mmmm... triste programmation
 
Maxim Dmitrievsky:
mde ... triste programme

Vous voulez dire que le code ci-dessus n'est pas correct ou vous faites référence à l'implémentation du code GMDH ? Le code GMGH n'était qu'une implémentation grossière que j'ai trouvée rapidement. Mais je ne peux pas l'améliorer pour le moment. Je pense qu'il peut y avoir de meilleures façons de le coder, que je vais essayer aussi.

Dans votre code source actuel, il y a beaucoup d'agents ou de variables avec des noms similaires et des opérateurs point multiples comme " ag1.agent [i] .inpVector " ce qui est une confusion pour moi jusqu'à ce que je passe en revue le code entier...

 
FxTrader562:

Vous voulez dire que le code ci-dessus n'est pas correct ou vous faites référence à l'implémentation du code GMDH ? Le code GMGH n'était qu'une implémentation grossière que j'ai trouvée rapidement... Mais je pense qu'il peut y avoir de meilleures façons de le faire... mais je ne le fais pas pour l'instant...

Dans votre code source actuel, il y a beaucoup d'agents ou de variables avec des noms similaires et des opérateurs point multiples comme " ag1.agent [i] .inpVector " ce qui est une confusion pour moi jusqu'à ce que je passe en revue le code entier...

Je l'ai déjà expliqué. Vous avez 100 prédicteurs, vous devez donc copier dans ce tableau 25 prix de clôture différents, 25 ouvertures différentes, 25 hauts, 25 bas. Total 100

ou faites 4 tableaux de prédicteurs, et copiez 1 close, 1 open, ..... ou toute autre valeur d'indicateurs différents.

Ou attendre un article, car les communications sur le forum prennent trop de temps (pour moi).

A propos de gdmh - il y a beaucoup d'implémentations différentes, aucun problème avec elle. Mais pour ma tâche, j'ai besoin de recherches supplémentaires

 
Maxim Dmitrievsky:

Je l'ai déjà expliqué. Vous avez 100 prédicteurs, vous devez donc copier dans ce tableau 25 prix de clôture différents, 25 ouvertures différentes, 25 hauts, 25 bas. Total 100

ou faites 4 tableaux de prédicteurs, et copiez 1 close, 1 open, ..... ou toute autre valeur d'indicateurs différents.

Ou attendre un article, car les communications sur le forum prennent trop de temps (pour moi).

A propos de gdmh - il y a beaucoup d'implémentations différentes, aucun problème avec elle. Mais pour ma tâche, j'ai besoin de recherches supplémentaires

Oui, je comprends.

De plus, j'ai votre code source et donc, il me faudra un certain temps pour le comprendre et le modifier car il n'y a pas beaucoup de commentaires. De plus, je ne suis pas un programmeur de niveau expert. Donc j'essayais juste d'accélérer le processus avec votre aide :))

Quoi qu'il en soit, j'attendrai votre article avec une explication détaillée.

Oui, en ce qui concerne le GMDH, comme je l'ai déjà mentionné, il existe de multiples approches et de multiples formules et, par conséquent, vous devez choisir celle qui est applicable à la mise en œuvre du RDF. J'ai simplement traduit ou converti la formule générale du GMDH à partir du lien wikipedia vers le code MQL5 que vous m'avez fourni précédemment.

De plus, j'ai donné suffisamment d'explications à l'intérieur du code pour le rendre compréhensible. J'ai essayé d'examiner plusieurs codes python avant d'écrire le code MQL5, mais rien ne répondait à mon besoin. C'est pourquoi j'ai écrit la manière la plus simple de GMDH en utilisant une fonction et une instruction switch case.

 
FxTrader562:

Oui, je comprends.

De plus, j'ai votre code source et donc, il me faudra un certain temps pour le comprendre et le modifier car il n'y a pas beaucoup de commentaires. De plus, je ne suis pas un programmeur de niveau expert. Donc j'essayais juste d'accélérer le processus avec votre aide :))

Quoi qu'il en soit, j'attendrai votre article avec une explication détaillée.

Oui, en ce qui concerne le GMDH, comme je l'ai déjà mentionné, il existe de multiples approches et de multiples formules et, par conséquent, vous devez choisir celle qui est applicable à la mise en œuvre du RDF. J'ai simplement traduit ou converti la formule générale du GMDH à partir du lien wikipedia vers le code MQL5 que vous m'avez fourni précédemment.

De plus, j'ai donné suffisamment d'explications à l'intérieur du code pour le rendre compréhensible. J'ai essayé d'examiner plusieurs codes python avant d'écrire le code MQL5, mais rien ne répondait à mon besoin. C'est pourquoi j'ai écrit la manière la plus simple de GMDH en utilisant une fonction et une instruction switch case.

On décrit un cas linéaire. Par exemple, nous recherchons les meilleurs membres pour la 1ère ligne, la 2ème ligne, etc. Et ensuite, ajoutez les meilleurs membres à une (nouvelle) variable de la formule. Dans le cas de RDF, nous ne pouvons pas le faire, parce que c'est un modèle non linéaire, donc nous devons simplement ajouter toutes les lignes comme variables indépendantes aux entrées, à chaque tour de sélection.

 
Maxim Dmitrievsky:

On décrit un cas linéaire. Par exemple, nous recherchons les meilleurs membres pour la 1ère ligne, la 2ème ligne, etc. Et ensuite, ajoutez les meilleurs membres à une (nouvelle) variable de la formule. Dans le cas de RDF, nous ne pouvons pas le faire, parce que c'est un modèle non linéaire, donc nous devons simplement ajouter toutes les lignes comme variables indépendantes aux entrées, à chaque tour de sélection.

Pouvez-vous s'il vous plaît me donner un exemple de code exactement où vous essayez de mettre en œuvre afin que je puisse mieux vous aider ?

Parlez-vous de poids comme w1, w2, w3.... ? Ce sont les choses qui doivent être calculées et stockées dans RDF pendant la formation lorsque nous alimentons x1.w1,x2.w2,x3.w3..... comme des entrées individuelles.

Notez qu'en réalité, lorsque l'on considère les fonctions, il n'existe pas de fonctions linéaires et non linéaires, car on peut toujours décomposer une fonction non linéaire en une infinité de fonctions linéaires.Je n'envisage donc pas de compliquer les choses sans raison. C'est pourquoi nous utilisons de petits morceaux de fonctions linéaires en entrée et nous pouvons les étendre à n'importe quel nombre si nécessaire. Mais je ne peux pas dire grand chose sur la partie codage pour le moment.

Veuillez me fournir le code du RDF où vous êtes bloqué afin que je puisse mieux comprendre.

Ou bien, en vous référant à mon code, vous pouvez m'expliquer ce que vous cherchez d'autre, car, si je comprends bien, j'ai converti la formule GMDH en code. Ainsi, si cela est nécessaire, nous pouvons y apporter un caractère aléatoire ou simplement étendre les composants de la fonction de base à un nombre quelconque et choisir au hasard.

 
FxTrader562:

Pouvez-vous s'il vous plaît me donner un exemple de code où vous essayez exactement de mettre en œuvre afin que je puisse mieux vous aider ?

Parlez-vous de poids comme w1, w2, w3.... ? Ce sont les choses qui doivent être calculées et stockées dans RDF pendant la formation lorsque nous alimentons x1.w1,x2.w2,x3.w3..... comme des entrées individuelles.

Notez qu'en réalité, lorsque l'on considère les fonctions, il n'existe pas de fonctions linéaires et non linéaires, car on peut toujours décomposer une fonction non linéaire en une infinité de fonctions linéaires.Je n'envisage donc pas de compliquer les choses sans raison. C'est pourquoi nous utilisons de petits morceaux de fonctions linéaires en entrée et nous pouvons les étendre à n'importe quel nombre si nécessaire. Mais je ne peux pas dire grand chose sur la partie codage pour le moment.

Veuillez me fournir le code du RDF où vous êtes bloqué afin que je puisse mieux comprendre.

Ou bien, en vous référant à mon code, vous pouvez m'expliquer ce que vous cherchez d'autre, car, si je comprends bien, j'ai converti la formule GMDH en code. Ainsi, si cela est nécessaire, nous pouvons y apporter un caractère aléatoire ou simplement étendre les composants de la fonction de base à un nombre quelconque et choisir au hasard.

Pour trouver des coefficients linéaires, nous devons utiliser la régression linéaire, mais nous pouvons aussi le faire directement avec la RF. Je suis en train de lire un livre intéressant à ce sujet.

Ce livre développe différents polynômes sous forme de réseaux arborescents, notamment les polynômes de réseaux algébriques, les polynômes de réseaux à noyau, les polynômes de réseaux orthogonaux, les polynômes de réseaux trigonométriques, les polynômes de réseaux rationnels et les polynômes de réseaux dynamiques.
 
Maxim Dmitrievsky:

Pour trouver des coefficients linéaires, nous devons utiliser la régression linéaire, mais nous pouvons aussi le faire directement avec la RF. Je suis en train de lire un livre intéressant à ce sujet.

Ok, si vous voulez une implémentation exacte de GMDH et que nous devons étendre mon code avec une valeur plus élevée de m, alors je peux le faire. Mais ce que je veux que vous fassiez est de l'implémenter d'abord avec la valeur m de 3 et de le tester dans le cadre M1, parce que les prix de clôture des bougies dans le cadre M1 sont très petits et donc, la rupture en 3 parties est suffisante pour atteindre notre objectif.

Ainsi, si vous pouvez mettre en œuvre le GMDH et qu'il fonctionne en quelque sorte dans le cadre temporel M1, alors pour les cadres temporels plus élevés, nous pouvons étendre la boucle for à de plus grandes valeurs de m comme 10 ou 15, etc.

Au fait, dans votre implémentation actuelle du code, avez-vous utilisé l'astuce du noyau lorsque vous avez utilisé le code suivant ?

#define _kernel(ker,degree) (cos(MathPow(ker,degree))

J'ai fait des recherches approfondies, mais je n'ai pas pu trouver quelle fonction de noyau vous avez utilisée dans votre code, car je voulais tester différents noyaux avant de mettre en œuvre mon algo :

http://crsouza.com/2010/03/17/kernel-functions-for-machine-learning-applications/

Pouvez-vous me fournir des références sur la fonction noyau ou s'agit-il simplement de votre formule ?

De plus, j'ai implémenté avec succès l'algorithme de simulation de bougies dans votre code actuel. Mais cela peut ne fonctionner qu'après une semaine de simulations. Je voulais donc juste confirmer certaines choses avant de commencer les simulations.

Y a-t-il une limite au nombre de modèles que je peux utiliser ? Puis-je utiliser 1 million de modèles ?

Y a-t-il une limite au nombre d'agents que je peux utiliser ? Puis-je utiliser 1000 agents ?

Si les données entraînées sont trop volumineuses, cela ralentira-t-il la prise de décisions commerciales ? Je veux dire que si le fichier ".rl" est trop volumineux, quel est le délai approximatif d'exécution de la transaction auquel nous pouvons nous attendre ? Avez-vous fait des calculs à ce sujet en termes de nombre d'itérations par seconde ou de boucle for, etc ?

En fait, j'utilise vos modèles et vos agents pour créer des bougies aléatoires pendant la formation, qui seront stockées dans des fichiers ".rl" pour le trading en direct. Les fichiers ".rl" de cette version sont similaires aux fichiers "Mtrees" de votre version précédente, n'est-ce pas ?

J'envisage de réaliser une simulation d'environ 10 à 100 millions de bougies au total, ce qui équivaut à environ 280 à 2800 ans d'optimisation. Mais avant de lancer la formation, je voulais vérifier plusieurs choses sur le code et la rapidité d'exécution, etc.

Lorsque vous aurez du temps libre, veuillez lire mes questions ci-dessus et me fournir des réponses qui m'aideront à calculer plus loin.....

Raison: