Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 278

 
mila.com:

Non riesco a scorgerlo con il mio ciclope e a inserire correttamente il suo indicatore.

Il tuo script restituisce zero a tutte le impostazioni. Dovrebbe restituire un tre, perché ora la differenza tra la prima e la terza barra è 0,005.

Forse non sono stato chiaro, voglio metterlo in circolo.


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:

Grazie, ma c'è qualcosa che non va.


0,005 si misura in cosa? (deve essere moltiplicato per _Point)
 

Grazie a tutti per il vostro aiuto, ha funzionato)

 
mila.com:

Grazie a tutti per il vostro aiuto, ha funzionato)

Mi chiedo solo se hai bisogno di uno di questi?

 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:

Mi chiedevo solo se c'era bisogno di una cosa del genere.

Sì, e come si inserisce questo disegno nel ciclo principale dell'indicatore?

 
Vladimir Pastushak:

Ti ho detto chiaramente che nel trailing hai messo 0 invece di prendere

Seleziona questa opzione.


Funziona!!! :)))).... Grazie mille per aver sopportato noi perdenti)))))) Grazie mille!)

 

Buon pomeriggio.

Potete per favore consigliare come iCustom può essere usato per ottenere il valore di un indicatore su un altro timeframe con uno spostamento?

Cioè sto lavorando su M5, voglio ottenere il valore dell'indicatore da M15, e dalla candela precedente su 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:

Buon pomeriggio.

Potete consigliare come iCustom può essere utilizzato per ottenere il valore di un indicatore in un altro timeframe con uno spostamento?

Sto lavorando su M5, voglio ottenere il valore dell'indicatore da M15, e voglio ottenere il valore della candela precedente su M15.

È sufficiente leggere attentamente la documentazione

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

Basta leggere attentamente la documentazione

Modificato la mia domanda, aggiunto il codice. C'è un ciclo in corso. Non è chiaro cosa ottengo quando succede in un ciclo.
 
LSM:
Ho modificato la mia domanda e aggiunto il codice. C'è un ciclo in corso. Non è chiaro cosa otterrò quando succede in un ciclo.

Risponderò alla mia stessa domanda, nel caso in cui qualcuno ne abbia bisogno).

   
   !!!!
   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);
Motivazione: