Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 278

 
mila.com:

No puedo distinguirlo con mi cíclope e introducir correctamente su indicador.

Su script devuelve cero en todas las configuraciones. Se supone que devuelve un tres, porque ahora la diferencia entre la primera y la tercera barra es de 0,005.

Tal vez no fui claro. Quiero poner esto en el bucle.


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:

Gracias, pero algo no está bien.


¿0,005 se mide en qué? (debe multiplicarse por _Punto)
 

Gracias a todos por vuestra ayuda, ha funcionado )

 
mila.com:

Gracias a todos por vuestra ayuda, ha funcionado )

Sólo me preguntaba, ¿necesitabas uno de estos?

 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:

Sólo me preguntaba si era necesario algo así.

Sí, ¿y cómo encaja este diseño en el bucle principal del indicador?

 
Vladimir Pastushak:

Te dije claramente que en el trailing ponías 0 en vez de tomar

Marque esta opción.


¡¡¡Funciona!!! :)))).... Muchas gracias por aguantar a los perdedores)))))) Muchas gracias).

 

Buenas tardes.

¿Puede indicar cómo se puede utilizar iCustom para obtener el valor de un indicador en otro marco temporal con un desplazamiento?

Por ejemplo, estoy trabajando en M5, quiero obtener el valor del indicador de M15, y quiero obtener el valor de la vela anterior en 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:

Buenas tardes.

¿Puede indicar cómo se puede utilizar iCustom para obtener un valor de indicador en otro marco temporal con un desplazamiento?

Estoy trabajando en M5, quiero obtener el valor del indicador de M15, y quiero obtener el valor de la vela anterior en M15.

Basta con leer detenidamente la documentación

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

Sólo hay que leer la documentación con atención

He editado mi pregunta y he añadido el código. Hay un bucle en marcha. No está claro lo que consigo cuando ocurre en un bucle.
 
LSM:
He editado mi pregunta y he añadido el código. Hay un bucle en marcha. No está claro lo que obtendré cuando pase en un bucle.

Voy a responder a mi propia pregunta, por si alguien lo necesita).

   
   !!!!
   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);
Razón de la queja: