Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1529

 
Alexey Viktorov:

Oui et j'ai regardé pour te répondre aussi.

Je ne pouvais pas - j'écrivais depuis mon téléphone et c'est plus rapide d'écrire la question :)

 
Alexey Viktorov:

Elle n'est pas imposée par les développeurs, mais par un modérateur. En ce qui concerne les valeurs BB, si Artem vous a dit qu'il est plus facile d'obtenir tout directement... la séquence est la suivante...

  1. Déclarer des variables de manipulation et des tableaux pour obtenir des valeurs d'indicateur. Si nécessaire, 3 au maximum. Si nous n'avons pas besoin d'une moyenne, deux tableaux seront suffisants.
  2. Dans OnInit() nous avons reçu la poignée de l'indicateur...
  3. Dans OnTick() ou dans une autre fonction CopyBuffer() pour chaque ligne séparément, autant que nécessaire.
  4. A partir de ces tableaux, vous obtenez les valeurs des lignes indicatrices sur ces barres qui sont intéressantes...

C'EST TOUT. Pourquoi s'embêter avec OOP¿¿¿¿¿ ? Malheureusement, je ne peux pas répondre directement à votre question, car je ne l'utilise pas. C'est plus facile pour moi comme je l'ai décrit. Il n'y a que 4 actions.

Veuillez me dire pourquoi cela ne fonctionne pas dans Inite ? Et comment je fais pour que ça marche ?


#property strict

//--- индикаторные буферы
double         UpperBuffer[];
double         LowerBuffer[];
double         MiddleBuffer[];
//--- переменная для хранения хэндла индикатора iBands
int    bb_handle;

int OnInit(){//////////////***OnInit()****///*************OnInit()*******/////////***/////////////////////////OnInit()

bb_handle=iBands(NULL, 0, 20, 0, 2.0, PRICE_CLOSE);

Print("bb_handle ", bb_handle);

Print("OnInit()  ", BB_up(0), "  ", BB_mi(0), "  ", BB_lo(0));

return(INIT_SUCCEEDED);
}
void OnTick(){




Print("OnTick()  ", BB_up(0), "  ", BB_mi(0), "  ", BB_lo(0));

}
//-------------------------------------------------------1
double BB_up(int in_shift){
   CopyBuffer(bb_handle, 1, in_shift, 1, UpperBuffer);
   return UpperBuffer[0];
}
double BB_mi(int in_shift){
   CopyBuffer(bb_handle, 0, in_shift, 1, MiddleBuffer);
   return MiddleBuffer[0];
}
double BB_lo(int in_shift){
   CopyBuffer(bb_handle, 2, in_shift, 1, LowerBuffer);
   return LowerBuffer[0];
}
 
Andrey Sokolov:

Pouvez-vous me dire pourquoi ça ne fonctionne pas dans l'Inite ? Et comment je fais pour que ça marche ?


iBands - Indicateurs techniques - Référence MQL5 - Référence du langage de trading algorithmique/automatique pour MetaTrader 5
Документация по MQL5: Технические индикаторы / iBands
Документация по MQL5: Технические индикаторы / iBands
  • www.mql5.com
iBands - Технические индикаторы - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Andrey Sokolov:

alors pourquoi ça ne marche pas ?

Tu veux parler ? - Ou voulez-vous travailler sur vous-même ?

 
SanAlex:

Tu veux parler ? - Ou préférez-vous travailler sur vous-même ?

Je vois. Merci. Quelqu'un d'autre peut-il suggérer quelque chose ?

 
Andrey Sokolov:

Pouvez-vous me dire pourquoi ça ne fonctionne pas dans l'Inite ? Et comment je fais pour que ça marche ?


Parce que l'indicateur n'a pas encore été calculé.

https://www.mql5.com/ru/docs/series/barscalculated


la section OnInit() n'est pas le meilleur endroit pour obtenir l'environnement du terminal, je pense que cela fonctionne logiquement et correctement
 
Igor Makanu:

parce que l'indicateur n'est pas encore calculé

https://www.mql5.com/ru/docs/series/barscalculated

👍

 
Igor Makanu:


la section OnInit() n'est pas le meilleur endroit pour obtenir l'environnement du terminal, je pense que cela fonctionne logiquement et correctement

Inite parce que vous devez faire des calculs sur l'historique au démarrage, j'ai ajouté une attente comme dans l'exemple, tout va bien, merci.

 
Andrey Sokolov:

ajouté une attente, comme dans l'exemple, tout va bien.

Ne soyez pas surpris lorsqu'il cesse de fonctionnerou fonctionnepar intermittence.

Raison: