Questions des débutants MQL4 MT4 MetaTrader 4 - page 212

 
Aleksei Stepanenko:

Il est encore mieux de faire une structure

n'oubliez pas de mettre à zéro les éléments avant de commencer à les utiliser

et ensuite augmenter le nombre d'unités si nécessaire

puis comparer

Vous avez maintenant fait une boucle autour des 10 bougies précédentes sur chaque nouvelle bougie. Ce n'est pas rationnel. Vous devez toujours vous débarrasser des cycles inutiles en vous souvenant des résultats des calculs des valeurs précédentes. Dans votre cas, quand une nouvelle bougie arrive, il suffit d'augmenter le compte quand la condition est remplie, et si la condition n'est pas remplie, alors soustrayez-le. Et vérifiez s'il n'y a pas d'excès. Votre cycle pour 10 éléments n'est pas nécessaire, seulement le principal.

Aleksei, j'ai essayé de le faire, mais ça ne fonctionne toujours pas correctement :

n'ajoute pas une personne au compte.up

 for(int i=1;i<=10;i++)              
     {    
     count.up=0;
     count.dn=0;
     double hig10 = iMA (NULL,CP,WPER, 0, MODE_SMA, PRICE_CLOSE, i);                                     
     if (hig10>iClose(Symbol(),CP,i))
     {
     count.up++;
     }
    else
    {
    count.dn++;
    }
    }
    
    
    if (count.up>=8)
    {
    Comment("dsdsD");
    }
 

Vous devez retirer de la boucle

count.up=0;
count.dn=0;

car à chaque itération, on remet à zéro les valeurs précédentes. Écrivez-le avant la boucle.

 
Aleksei Stepanenko:

Vous devez retirer de la boucle

car à chaque itération, on remet à zéro les valeurs précédentes. Écrivez-le avant la boucle

Merci beaucoup, maintenant ça marche !

Cependant, c'est bizarre, je faisais la même chose sans la structure, mais juste avec des valeurs normales comme

  for(int i=1;i<=10;i++)              
     {    
     double hig10 = iMA (NULL,CP,WPER, 0, MODE_SMA, PRICE_CLOSE, i);                                     
     if (hig10>iClose(Symbol(),CP,i))
     {
     J=J+1;
    else
    {
    J=0;
    }
    }
    
    
    if (J>=8)
    {
    Comment("dfdf");

et il commencerait à additionner chaque tic))

 

La structure fera également tic-tac. Pour ne travailler qu'au début d'une nouvelle bougie, il faut suivre le temps de cette bougie

datetime LastTime;

if(LastTime!=Time[0])
   {
   LastTime=Time[0];
   //Здесь ваш код
   }
 
Pouvez-vous me conseiller ? J'ai des fonctions personnalisées dans des fichiers .mqh distincts prescrits par #include, je les appelle dans le démarrage par séquence, lorsque le démarrage va à une fonction, alors selon les actions le programme doit accéder à un autre fichier .mqh (par exemple pour obtenir la valeur du volume de l'ordre) et cela ne se produit pas. Si j'écris tout dans une feuille, cela fonctionne ou si j'écris la formule pour calculer le lot directement dans les paramètres d'ouverture de l'ordre. J'ai parcouru les leçons de MQL4 et lu la documentation du programme mais je n'ai rien trouvé. Je ne comprends pas vraiment pourquoi une fonction .mqh ne peut pas interagir avec une autre fonction .mqh dans les calculs. Ou bien, devrions-nous faire en sorte que le programme revienne au début si nous étions confrontés à une telle nécessité - il renverrait le résultat au début et ensuite, avec ce calcul, reviendrait à la fonction ouvrant un ordre .mqh ? C'est n'importe quoi... Ou peut-être devrions-nous déclarer toutes les fonctions existantes d'une manière différente afin qu'elles interagissent ensemble ? Merci
 
Bonjour !
Quel est le moyen le plus simple de faire disparaître l'année (2020) et les minutes dans la ligne ? TimeToStr n'a pas encore d'autres formats de sortie ?
TimeToStr(TimeCurrent(),TIME_DATE|TIME_MINUTES);
 
Nauris Zukas:
Bonjour !
Quel est le moyen le plus simple de faire disparaître l'année (2020) et les minutes dans la ligne ? TimeToStr n'a pas encore d'autres formats de sortie ?
tm=(string)Hour();
 
Vitaly Muzichenko:

Merci !

 
Denis Diakonov:
Pouvez-vous me donner un indice ? J'ai des fonctions définies par l'utilisateur dans des fichiers .mqh séparés et je les ai écrites via #include. Je les appelle au démarrage et lorsque le démarrage passe à une fonction, le programme doit appeler un autre fichier .mqh (par exemple, pour obtenir une valeur de volume d'ordre) et cela ne se produit pas. Si j'écris tout dans une feuille, cela fonctionne ou si j'écris la formule pour calculer le lot directement dans les paramètres d'ouverture de l'ordre. J'ai parcouru les leçons de MQL4 et lu la documentation du programme mais je n'ai rien trouvé. Je ne comprends pas vraiment pourquoi une fonction .mqh ne peut pas interagir avec une autre fonction .mqh dans les calculs. Ou bien, devrions-nous faire en sorte que le programme revienne au début si nous étions confrontés à une telle nécessité - il renverrait le résultat au début et ensuite, avec ce calcul, reviendrait à la fonction ouvrant un ordre .mqh ? C'est n'importe quoi... Ou peut-être devrions-nous déclarer toutes les fonctions existantes d'une manière différente afin qu'elles interagissent ensemble ? Merci

Faites référence aux fonctions, et non aux fichiers, à partir des fonctions, si vous vous êtes connecté via un inline. Si je vous comprends bien, bien sûr.

 
J'ai essayé de réécrire "olyakish_fractals_01" selon mon idée, la mienne est basée sur les barres vertes de Williams. J'ai une mauvaise idée, j'ai un mauvais MQL4, il ne regarde pas sur le graphique. Si quelqu'un a un indice, aidez-moi, si cela ne vous coûte rien).
Dossiers :
18wbguVOL.mq4  13 kb