Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 614

 
yan720:
Merci d'avoir répondu. Si vous le voulez bien, envoyez-moi l'EA dont vous parlez (ou une partie de celle-ci, qui est avec le canal) - il serait intéressant de voir une autre implémentation.

Je n'arrive pas à donner un sens à quelque chose que j'ai fait il y a quelques années. Il ne fonctionne pas pour une raison quelconque, alors que je me souviens qu'il fonctionnait et qu'il était utilisé pour le commerce. Laissez-moi d'abord trier le code, le réparer et le poster ensuite. Peut-être demain. Je ne veux pas m'embarrasser s'il y a des erreurs enfantines.

 
yan720:

L'idée générale, bien sûr, est la suivante. Et comment déterminez-vous la largeur du canal (plage dans votre cas) ? Je le fais à travers la taille de la bougie moyenne et tout est lié à la longueur du canal, car la présence du canal n'est pas vérifiée sur un nombre rigide de barres, mais, par exemple, sur une longueur de 10 à 30 barres.

Ce qui m'intéresse, c'est la question de la sélection de la largeur à partir de la longueur...

Vous pouvez définir plusieurs paramètres externes pour la largeur du canal dans un seul indicateur. Et faites des calculs séparés pour chaque paramètre.

 

Pour la longueur, il en va de même.

 
Example2:
Bonjour. Le panier Expert Advisor devrait fermer tous les ordres lorsque la condition survient, mais il ferme d'abord l'ordre, puis essaie de le fermer à nouveau (le serveur nous donne une erreur disant "ticket invalide") et seulement ensuite il va plus loin. Voici un exemple de code et l'EA elle-même.

Dans votre fonction CloseOrders(), si l'ordre est fermé, le cycle while(cnt<=5 ) enverra à nouveau le code pour fermer l'ordre, et une erreur se produira, bien sûr, puis on sortira par if(). pause ;

                    int cnt=0;
                    while(cnt<=5){
                      Result[0]=OrderClose(OrderTicket(),OrderLots(),MarketInfo("USDCAD",MODE_BID),slip,Blue);
                      if(!Result[0]){
                        Answer=ERRORS(GetLastError());
                        if (Answer==1)continue; cnt++;
                        if (Answer==2)break;
                      }
                    }

Dans la fonction ProtectionClose(), vous avez déjà ajouté des lignes avec la sortie while correcte.

 if(Result[0])break;
 }continue;
Essayez de creuser ici.
 
pu6ka:

Dans votre fonction CloseOrders(), si l'ordre est fermé, le cycle while(cnt<=5) enverra à nouveau le code pour fermer l'ordre, et une erreur se produira, bien sûr, puis on sortira par if(). pause ;

Dans la fonction ProtectionClose(), vous avez déjà ajouté des lignes avec la sortiewhile correcte

Essayez de creuser un peu ici.


Mais dans le cas que j'ai décrit, c'est la fonction ProtectionClose() qui ferme l'ordre. Je vais corriger cette erreur.
 
Example2:

Cependant, c'est la fonction ProtectionClose() qui ferme les ordres dans le cas que j'ai décrit. Je vais corriger cette erreur.

Je n'ai pas creusé dans le code, je n'ai pas pu l'exécuter dans le testeur, il n'y a pas d'indicateur.

Mais, par exemple, vos fonctions OpenUsdbuy() ; OpenSellusd() sont consécutives.

OpenSellusd() ouvre GBPUSD, EURUSD, AUDUSD, NZDUSD, etc. Vous serez le premier à les fermer dans l'ordre inverse de NZDUSD, AUDUSD, etc.

Seules trois paires dans la fonction ProtectionClose() ont une sortie while dans deux variantes : USDCAD, USDCHF et USDJPY.

En d'autres devises, vous ne pouvez quitter while() que par une erreur if(!Result[...]).

 
FOReignEXchange:

Il est possible d'établir plusieurs paramètres externes pour la largeur du canal dans un seul indicateur. Et faites des calculs séparés pour chaque paramètre.

Le point est que je ne veux pas définir la largeur du canal de manière forcée - le conseiller expert/indicateur doit détecter la présence du canal indépendamment de la paire de devises et/ou de la volatilité actuelle. Par conséquent, je ne fixe que la longueur minimale et maximale du canal à partir de paramètres externes, et ce uniquement dans le processus de débogage de l'algorithme - par la suite, ces paramètres seront cousus dans celui-ci. A ce stade, il y a quelques plaintes. Bien que je puisse attraper les canaux en général (la photo a été prise à partir du code de travail), j'aimerais voir d'autres solutions à ce problème.

 
pu6ka:

Je n'ai pas creusé dans le code, je n'ai pas pu l'exécuter dans le testeur, il n'y a pas d'indicateur.

Mais, par exemple, vos fonctions OpenUsdbuy() ; OpenSellusd() sont consécutives.

OpenSellusd() ouvre GBPUSD, EURUSD, AUDUSD, NZDUSD, etc. Vous serez le premier à les fermer dans l'ordre inverse de NZDUSD, AUDUSD, etc.

Seules trois paires dans la fonction ProtectionClose() ont une sortie while dans deux variantes : USDCAD, USDCHF et USDJPY.

En d'autres devises, vous ne pouvez quitter while() que par une erreur if(!Result[...])


Merci pour le conseil, j'ai oublié de laisser la boucle dans ce cas, cela devrait fonctionner maintenant. Si vous voulez, je peux coller l'indicateur en guise de remerciement.
 
yan720:

L'idée générale, bien sûr, est la suivante. Et comment déterminez-vous la largeur du canal (plage dans votre cas) ? Je le fais à travers la taille de la bougie moyenne et tout est lié à la longueur du canal, car la présence du canal n'est pas vérifiée sur un nombre rigide de barres, mais, par exemple, sur une longueur de 10 à 30 barres.

Ce qui m'intéresse, c'est la question du choix de la largeur à partir de la longueur...

Cette longueur de 10 mesures est la figure fondamentale. Je veux dire pas moins de 10... et si c'est plus long, c'est le destin. Emmenez-le à l'extérieur pour pouvoir l'expérimenter. La gamme peut être une taille moyenne de la bougie, ce n'est pas important, mais vous feriez mieux de la mettre à l'extérieur aussi. Peut-être voudrez-vous définir les plages maximales et minimales, vous devrez donc définir deux variables Max_ et Min_. Ensuite, à chaque barre, vous vérifiez la taille moyenne d'une bougie dans ces 10 barres et si cela vous convient, vous dessinez des tendances sur le haut et le bas des 10 barres. Pour la barre suivante, vous pouvez déjà vérifier pour 11 barres et si la condition est remplie, ObjectSet(...) ; seul OBJPROP_PRICE1 change pour la première coordonnée , et OBJPROP_PRICE2 et OBJPROP_TIME2 changent pour la deuxième et ainsi de suite pour chaque barre. Ou bien, vous pouvez ne rien recalculer et considérer le canal déjà formé et attendre la rupture de ce canal. C'est à votre goût.

Eh bien, dans mon cas, j'ai suggéré une option plus légère de la lanterne pour attribuer la hauteur du canal et le nombre minimum de barres également.


yan720:

Le point est que je ne veux pas définir la largeur du canal de manière forcée - le conseiller expert/indicateur doit détecter la présence du canal indépendamment de la paire de devises et/ou de la volatilité actuelle. Par conséquent, je ne fixe que la longueur minimale et maximale du canal à partir de paramètres externes, et ce uniquement dans le processus de débogage de l'algorithme - par la suite, ces paramètres seront cousus dans celui-ci. A ce stade, il y a quelques plaintes. Bien que je puisse attraper les canaux en général (la photo a été prise à partir du code de travail), j'aimerais voir d'autres solutions à ce problème.

Tout d'abord, les paramètres ne feront pas de différence s'ils sont dans l'externe ou dans l'embarqué. Et deuxièmement, si vous ne définissez pas la largeur du canal, à quoi allez-vous le comparer lorsque vous calculerez les 10 barres que vous avez spécifiées ? Comment voulez-vous déterminer si c'est un canal ou non ? Et troisièmement, à mon avis, la taille moyenne des bougies ne fonctionnera pas de manière adéquate. Si les 10 barres sont haussières, mais que la taille moyenne des barres n'est pas supérieure à la vérification. Est-ce une chaîne ou non ? Il s'agit peut-être d'un canal, mais il n'est qu'en pente et nous considérons qu'il s'agit d'un canal horizontal selon votre dessin.
 
yan720:

Le point est que je ne veux pas définir la largeur du canal de manière forcée - le conseiller expert/indicateur doit déterminer la présence du canal, indépendamment de la paire de devises et/ou de la volatilité actuelle. Par conséquent, j'ai fixé la longueur minimale et maximale du canal à partir de paramètres externes, et ce uniquement dans le processus de débogage de l'algorithme - par la suite, ces paramètres seront cousus dans celui-ci. A ce stade, il y a quelques plaintes. Bien que je puisse capter les canaux en général (l'image provient du code de travail), j'aimerais voir d'autres solutions pour ce problème.

Eh bien, il existe une idée pour attraper 2 fractales supérieures consécutives ou 2 fractales iHighest constituées, disons, de 5-10 chandeliers. Nous attrapons cette affaire dans une certaine fourchette de longueur. Si les valeurs de ces pics sont proches l'une de l'autre, nous trouverons iLowest entre ces deux pics.

De la même manière, recherchez d'abord deux pics inférieurs, puis le pic supérieur entre les deux.

Puis nous danserons sur ces sommets retrouvés. D'abord, nous dessinons des niveaux par eux. Ensuite, nous apprenons au code à penser plus loin.

Cette option permet d'éliminer le paramètre externe tel que Channel_width.

Quelle que soit la façon dont vous voyez les choses, je pense que nous avons besoin d'au moins quelques paramètres pour la longueur.

Raison: