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

 
mila.com:

Je ne peux pas le distinguer avec mes cyclopes et entrer correctement dans son indicateur.

Votre script renvoie zéro à tous les paramètres. Il est censé renvoyer un trois, car maintenant la différence entre la première et la troisième barre est de 0,005.

Peut-être que je n'ai pas été clair. Je veux mettre ça dans la boucle.


double ma_etalon=iMA(NULL,0,...,i+1);

double ma_curr;

int shift;

for(shift=2;shift<5;shift++) {

    ma_curr=iMA(NULL,0,...,i+shift);

    if (ma_etalon-ma_curr<0.005) break; // ах ты чёрт, значение близко

}

if (shift==5) {

   // цикл досчитал до конца, то есть все значение довольно далеко
   // ... развернись плечо ...

}

 
mila.com:

Merci, mais quelque chose ne va pas.


0,005 est mesuré en quoi ? (doit être multiplié par _Point)
 

Merci à tous pour votre aide, ça a marché !)

 
mila.com:

Merci à tous pour votre aide, ça a marché !)

Je me demandais juste si vous aviez besoin d'un de ces appareils.

 double prevMA=0,currMA=0;
 for(int i=1;i<=5;i++) {
  if(i==1) currMA=iMA(Symbol(),0,14,0,MODE_EMA,PRICE_CLOSE,i);
  prevMA=iMA(Symbol(),0,14,0,MODE_EMA,PRICE_CLOSE,i);
  if(MathAbs(prevMA-currMA)>0.0005) {
   // сюда пишем в буфер
   break;
  }
 }
 
Vitaly Muzichenko:

Je me demandais juste si une telle chose était nécessaire.

Oui, et comment intégrez-vous cette conception dans la boucle principale de l'indicateur ?

 
Vladimir Pastushak:

Je t'ai dit clairement que dans le suivi tu as mis 0 au lieu de prendre.

Cochez cette option.


Ça marche ! !! :)))).... Merci beaucoup de nous supporter, nous les perdants. )))))) Merci beaucoup !)

 

Bon après-midi.

Pouvez-vous nous dire comment iCustom peut être utilisé pour obtenir la valeur d'un indicateur sur une autre période avec un décalage ?

Par exemple, je travaille sur M5, je veux obtenir la valeur de l'indicateur de M15, et je veux obtenir la valeur de la bougie précédente sur M15.

int start() 
{ 
  HistBar = History;
  int i,counted_bars = IndicatorCounted();
  if (counted_bars < 0) return (-1);
  if (counted_bars > 0) counted_bars--;
  int limit = MathMin(Bars-counted_bars,HistBar+100);

  for(i=limit; i>=0; i--)
   {  
   int HT1,HT2; 
        if (_Period == PERIOD_M1)  
            {HT1 = PERIOD_M5;
            HT2 = PERIOD_M15;}
        else
           {
           if (_Period == PERIOD_M5)  
            {HT1 = PERIOD_M15;
            HT2 = PERIOD_M30;}
           else
              {
              if (_Period == PERIOD_M15)  
               {HT1 = PERIOD_M30;
               HT2 = PERIOD_H1;}
               }
            }
   //MFI
   long Volume_0_0 = iVolume(NULL,0,i);
   long Volume_0_1 = iVolume(NULL,0,i+1);
   double BWMFI_0_0 = iBWMFI(NULL,0,i);
   double BWMFI_0_1 = iBWMFI(NULL,0,i+1);

   ///////// вопрос как тут указать правильно
   long Volume_1_0 = iVolume(NULL,HT1,i);
   long Volume_1_1 = iVolume(NULL,HT1,i+1);
   double BWMFI_1_0 = iBWMFI(NULL,HT1,i);
   double BWMFI_1_1 = iBWMFI(NULL,HT1,i+1);
   ....
}
 
LSM:

Bon après-midi.

Pouvez-vous indiquer comment iCustom peut être utilisé pour obtenir la valeur d'un indicateur sur une autre période avec un décalage ?

Je travaille sur M5, je veux obtenir la valeur de l'indicateur de M15, et je veux obtenir la valeur de la bougie précédente sur M15.

Il suffit de lire attentivement la documentation

double  iCustom(
   string       symbol,           // имя символа
   int          timeframe,        // таймфрейм
   string       name,             // папка/имя_пользовательского индикатора
   ...                            // список входных параметров индикатора
   int          mode,             // источник данных
   int          shift             // сдвиг
   );
 
Alexey Viktorov:

Il suffit de lire attentivement la documentation

J'ai modifié ma question et ajouté le code. Il y a une boucle en cours. Ce que j'obtiens quand ça se passe en boucle n'est pas clair.
 
LSM:
J'ai modifié ma question et ajouté le code. Il y a une boucle en cours. Ce n'est pas clair ce que j'obtiendrai quand ça se passera en boucle.

Je vais répondre à ma propre question, au cas où quelqu'un en aurait besoin).

   
   !!!!
   int y = iBarShift(NULL,HT1,Time[i]);
   
   long Volume_1_0 = iVolume(NULL,HT1,y);
   long Volume_1_1 = iVolume(NULL,HT1,y+1);
   double BWMFI_1_0 = iBWMFI(NULL,HT1,y);
   double BWMFI_1_1 = iBWMFI(NULL,HT1,y+1);