[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 661

 
artmedia70:

Ça ne marche pas encore... et exactement AC

dans le journal, le recalcul est peut-être incorrect et la condition ne fonctionnera jamais, comme AC1 = 0 et AC2 = 0 et il n'y aura jamais 0 > 0

print(AC1,AC2) ;
if (BB>0 && OsMA>0 && AC1>AC2) return(1) ;

 
IgorM:

dans le journal, peut-être que le recalcul est faux et que la condition ne sera jamais remplie, comme AC1 = 0 et AC2 = 0 et jamais 0 > 0.

print(AC1,AC2) ;
si (BB>0 && OsMA>0 && AC1>AC2) retourner(1) ;

ci-dessous :

sinon retour(0) ;

 

Merci, Igor. Je pense que c'est là que le chien est enterré... :)

J'ai Comment() qui sort les mêmes AC1 et AC2 = 0.01, bien que dans la fenêtre de données ils aient AC1=0.001008, AC2=0.001020.
Comment augmenter la capacité des chiffres ? Eh bien, à part une triviale multiplication par 1000, ou juste comme ça ?

 
IgorM:

Ouais, je suppose que je vais devoir essayer pendant - c'est à dire jusqu'au premier pic et ensuite ......... - Je n'arrive pas à comprendre.


C'est fait. Voici le résultat de son travail.

Le code n'est pas trop compliqué, vous n'aurez donc aucun mal à le réorganiser en fonction de vos besoins.

Le script est joint à l'article.

Dossiers :
0.mq4  4 kb
 

Est-ce qu'une telle entrée est correcte :

double AC1=NormalizeDouble(iAC(sy,tf,1),8);
 
artmedia70:

Pour l'instant, ça ne marche pas... et c'est la climatisation.

La seule façon de s'en sortir est de trouver les valeurs exactes des variables - cela nous montrera pourquoi la condition programmée ne fonctionne pas.

Si l'arrondi est automatique jusqu'à 0,01, alors il est fort probable que le test réussisse sur un instrument comme UsdJpy. Il existe ensuite une option permettant de travailler avec des variables de type chaîne (si vous avez vraiment besoin d'une décimale aussi éloignée).

 
drknn:
La seule façon de s'en sortir est de trouver les valeurs exactes des variables - cela nous montrera pourquoi la condition programmée ne fonctionne pas.
Merci Vladimir, j'ai trouvé la raison. La question ci-dessus deux postes...
 
drknn:


C'est fait. Voici le résultat de son travail.


Merci, c'est bon - ça marche, je n'arrivais pas à trouver comment entrer le drapeau de tendance - je pensais que c'était comme trier un tableau.
 
artmedia70:

Est-ce qu'une telle entrée est correcte :


Correct, car le premier paramètre renvoie un nombre et le second paramètre est une valeur entière dans des limites acceptables. Toute la question est de savoir ce qui entrera exactement dans la variable. Essayez d'imprimer tel quel et essayez cette construction :

double AC1=NormalizeDouble(iAC(sy,tf,1),8);
string str=AC1;
Print("str = ",str);
 
IgorM:

Merci, c'est bon - ça marche, je n'ai juste pas réussi à trouver comment entrer le drapeau de tendance - je pensais que je devais trier le tableau.


Le problème quand on travaille avec des tableaux, c'est que dès que la fonction rencontre une valeur qui lui est donnée, elle renvoie le numéro de la cellule où cette valeur est stockée. Et le fait que cette valeur puisse être trouvée dans d'autres cellules du tableau est précisément la partie délicate. Nous devons donc continuer à itérer, à parcourir les valeurs jusqu'à ce que nous ayons parcouru tout le tableau. Et dès que nous trouvons la bonne valeur, nous plaçons l'indice de la cellule dans un tableau précédemment créé, ou nous assemblons les rangées.

La complexité de votre problème réside dans le fait que vous devez rechercher les pics et les creux. Pour le trouver, il faut dépasser l'extremum et ce n'est qu'alors que le code se rendra compte qu'il l'a effectivement dépassé. C'est pourquoi nous devons revenir en arrière pour nous souvenir du point d'extrémité et de la cellule dans laquelle il se trouve.