Questions des débutants MQL5 MT5 MetaTrader 5 - page 1245

 
Artyom Trishkin:

Toutes les matrices n'ont pas la même orientation.

Je comprends, mais j'ai également défini ArraySetAsSeries(barsBuffer1 ,true) ; !

Eh bien, c'est la moitié du problème. Mais je n'arrive pas à trouver comment ajouter une nouvelle bougie.

J'ai essayé de cette façon :

.........
   else
   {
      Print("tick_count = ",++tick_count);
      if(tick_count >= 5)
      {
         Print("Добавляем свечу.");
         
         double   O[1], H[1], L[1], C[1];
         O[0]  = newCandles_Open[3];
         H[0]  = newCandles_High[3];
         L[0]  = newCandles_Low[3];
         C[0]  = newCandles_Close[3];
         
         ArrayResize(barsBuffer1,ArraySize(barsBuffer1)+1);
         ArrayResize(barsBuffer2,ArraySize(barsBuffer2)+1);
         ArrayResize(barsBuffer3,ArraySize(barsBuffer3)+1);
         ArrayResize(barsBuffer4,ArraySize(barsBuffer4)+1);
         
         ArrayInsert(barsBuffer1,O,0);
         ArrayInsert(barsBuffer2,H,0);
         ArrayInsert(barsBuffer3,L,0);
         ArrayInsert(barsBuffer4,C,0);
         
         tick_count = 0;
      }
   }
//--- return value of prev_calculated for next call
   return(rates_total);
}

Ça ne marche pas... (((

 
Сергей Таболин:

Je comprends, mais j'ai également défini ArraySetAsSeries(barsBuffer1 ,true) ; !

Eh bien, c'est la moitié du problème. Mais comment ajouter une nouvelle bougie, je n'arrive pas à comprendre.

J'ai essayé de cette façon :

Ça ne marche pas... (((

Je suis désolé, mais les tableaux affectés aux tampons indicateurs ne peuvent pas être redimensionnés - le sous-système du terminal s'en charge.

   SetIndexBuffer(0, barsBuffer1, INDICATOR_DATA);
   SetIndexBuffer(1, barsBuffer2, INDICATOR_DATA);
   SetIndexBuffer(2, barsBuffer3, INDICATOR_DATA);
   SetIndexBuffer(3, barsBuffer4, INDICATOR_DATA);
         ArrayResize(barsBuffer1,ArraySize(barsBuffer1)+1);
         ArrayResize(barsBuffer2,ArraySize(barsBuffer2)+1);
         ArrayResize(barsBuffer3,ArraySize(barsBuffer3)+1);
         ArrayResize(barsBuffer4,ArraySize(barsBuffer4)+1);

Reconsidérez votre logique. Je ne le connais pas du tout, et je ne peux que montrer ce qui est manifestement faux.

 
Artyom Trishkin:

Je m'excuse bien sûr, mais les tableaux affectés aux tampons indicateurs ne peuvent pas être redimensionnés - le sous-système terminal s'en charge.

Reconsidérez votre logique. Je ne le connais pas du tout, et je ne peux que montrer ce qui est manifestement faux.

C'est comme ça que je le comprends aussi, mais...

Artem, si le tampon de l'indicateur est contrôlé par le sous-système, cela signifie que ce sous-système augmente aussi sa taille ? En d'autres termes, un nouveau chandelier indicateur ne peut pas être dessiné dans le graphique tant qu'un nouveau chandelier n'apparaît pas ?

 
Сергей Таболин:

C'est comme ça que je le comprends aussi, mais...

Artem, si le tampon de l'indicateur est géré par un sous-système, cela signifie qu'il augmente également sa taille ? En d'autres termes, tant qu'un nouveau chandelier n'apparaît pas sur le graphique, un nouveau chandelier indicateur ne peut pas être dessiné sur le graphique également ?

Que signifie "dessiner un nouveau chandelier" ?

Vous pouvez les dessiner, mais les barres ne peuvent pas être ajoutées - elles ne sont pas encore présentes.

Oui, le terminal s'occupe de la taille des tableaux d'indicateurs. Il fournit également des données sur le nombre de ces personnes lors de l'appel précédent.

 
Artyom Trishkin:

Que voulez-vous dire par "dessiner une nouvelle bougie" ?

Vous pouvez dessiner toutes sortes de choses, mais vous ne pouvez pas ajouter de barres - elles n'existent pas encore.

Oui, le terminal lui-même se charge de la taille des tableaux d'indicateurs. Il fournit également des données sur le nombre de ces personnes lors de l'appel précédent.

Merci, maintenant je comprends pourquoi cela échoue.

Alors une dernière question. Je sais que nous pouvons afficher des chandeliers d'un autre cadre temporel dans l'indicateur. Si l'indicateur montre des bougies de H2 et des bougies de H1, cela signifie que nous devons tirer 2 bougies pendant la durée de vie d'une bougie. Comment cela se passe-t-il si le tampon n'est augmenté que par le système ? Ou donnez-moi un lien vers l'exemple, si cela ne vous dérange pas trop. Je vais peut-être trouver une solution ))))

 
Сергей Таболин:

Merci, maintenant je comprends pourquoi ça ne marche pas pour moi.

Alors une dernière question. Je sais que vous pouvez afficher des bougies d'un autre cadre temporel dans l'indicateur. Si l'indicateur montre des bougies de H2 et affiche des bougies de H1, cela signifie que nous devons dessiner 2 bougies pendant la durée de vie d'une bougie. Comment cela se passe-t-il si le tampon n'est augmenté que par le système ? Ou donnez-moi un lien vers l'exemple, si cela ne vous dérange pas trop. Peut-être que je vais trouver une solution)))

J'ai donné des exemples dans mes derniers articles sur les indicateurs, mais ils sont basés sur la bibliothèque.

Et pour comprendre comment dessiner deux chandeliers au lieu d'un seul, jetez un coup d'œil au graphique. Regardez l'heure à laquelle la bougie était ouverte sur H2 et où se trouve la bougie ayant la même heure sur H1. Tout deviendra clair.

 
Artyom Trishkin:

J'ai donné des exemples dans mes derniers articles sur les indicateurs, mais ils sont tous basés sur les bibliothèques.

Et pour comprendre comment dessiner deux chandeliers au lieu d'un seul, regardez le graphique. Regardez l'heure à laquelle la bougie a été ouverte sur H2 et où se trouve la bougie ayant la même heure sur H1. Tout deviendra clair.

Artem, le truc c'est que je ne comprends pas !

Par exemple, le chandelier sur H2 est ouvert à 12:00. Le prochain aura lieu à 14 heures. Mais le H1, la prochaine sera à 13h00. Selon la logique, tant que la bougie ne s'ouvre pas sur le TF supérieur, le tableau de l'indicateur ne sera pas augmenté ! Cela signifie que je ne pourrai pas dessiner la deuxième bougie dans l'indicateur ? Ou quoi ?

Explique-moi ça, pas clair takomu..... Pourquoi et comment puis-je dessiner deux (ou en fait n) chandeliers sur un graphique ? Pourquoi, si je remplis le 0ème index du tampon de l'indicateur avec une nouvelle valeur (affectation simple), l'indicateur ne change pas ?

Peut-être devrais-je demander aux développeurs une telle possibilité ? J'ai ajouté un nouvel élément à ce tampon - il est dessiné avec un décalage de tous les éléments précédents vers la gauche. C'est mon indicateur, après tout ! Je l'écris comme je veux ! Je ne veux pas le lier à l'ouverture d'une nouvelle barre sur le graphique ! Comment cela peut-il être difficile ?

 

Merci à Artem et Vladimir ! Vos réponses et explications m'ont donné l'idée et l'indicateur est sorti. Merci encore.


 

Pouvez-vous me dire ce qui ne va pas ?

Il y a une simple déclaration de variable :

input double   StopLoss=150.0;

Lors du débogage sur des données réelles, la variable StopLoss a une valeur définie de "150". Mais si j'active le débogage sur les données historiques, la même variable dans le même code a une valeur différente. Quelle peut en être la raison ? Et comment faire face à ce problème ?

 
Sayberix:

Pouvez-vous me dire ce qui ne va pas ?

Il y a une simple déclaration de variable :

Lors du débogage sur des données réelles, la variable StopLoss a une valeur définie de "150". Mais si j'active le débogage sur les données historiques, la même variable dans le même code a une valeur différente. Quelle peut en être la raison ? Et comment faire face à ce problème ?

Vérifiez les valeurs dans l'onglet "Paramètres" du testeur de stratégie. Lorsque vous activez le débogage sur les données réelles, le conseiller expert prend les valeurs des variables d'entrée, et si vous l'activez sur l'historique, les valeurs sont prises dans les paramètres du testeur.

Raison: