El EOP para escolares. - página 9

 
Dmitry Fedoseev:

Si el indicador se calcula de izquierda a derecha, entonces si ha ocurrido algún evento, por ejemplo, se ha formado un fractal, debemos memorizar el índice de la barra con este evento (para usarlo para otra cosa). Si la indexación es de derecha a izquierda, debemos calcular n=Barras-i y recordar n, y luego hacer lo contrario: i=Barras-n. Pero si haces el índice de izquierda a derecha, sólo debes guardar el índice y usarlo, no cambiará. Dado que en los indicadores más o menos complicados esto es siempre necesario, la indexación de izquierda a derecha es una gran ayuda para los desarrolladores de indicadores.

Sí, una vez empecé a escribir un indicador en mql4, escribí 1/3 del mismo, otra 1/3 parte se basaba en los resultados del primero y la tercera parte en los valores del segundo tercio. Me encontré con un gran problema al calcular la barra con el valor necesario. Pero resulta que el cliente ha desaparecido y no he terminado de escribirlo. Y al indexar por la derecha el número de compás no cambia, basta con escribir el número de compás en el array auxiliar y sólo hay que ejecutar este array para construir la segunda y la tercera parte...

 
Dmitry Fedoseev:

Si el indicador se calcula de izquierda a derecha, entonces si ocurre algo, por ejemplo, que se forme un fractal, debe almacenar el índice de la barra con este evento (para usarlo para otra cosa). Si la indexación es de derecha a izquierda, debemos calcular n=Barras-i y recordar n, y luego hacer lo contrario: i=Barras-n. Pero si haces el índice de izquierda a derecha, sólo debes guardar el índice y usarlo, no cambiará. Dado que en los indicadores más o menos complicados esto es siempre necesario, la indexación de izquierda a derecha es una gran ayuda para los desarrolladores de indicadores.

Que tal. Y entonces el terminal descarga el historial y ¿qué?
 
Ihor Herasko:

He aquí un ejemplo.

Gracias, pero

  1. Desgraciadamente, es todo a cuatro patas.
  2. Me gustaría un ejemplo claro de conexión de un indicador de este tipo sin iCustom )))
 
Vladimir Simakov:
Oh, vaya. Y entonces el terminal descarga el historial y ¿qué?

No es gran cosa. Sólo tienes que olvidarte del enfoque de cuatro vías

   int counted_bars=IndicatorCounted();
   int i,r,limit;

   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
         limit = Bars-counted_bars;
         if (ArrayRange(working,0) != Bars) ArrayResize(working,Bars);

   //
   //
   //
   //
   //
        
   for(i=limit, r=Bars-i-1; i >= 0; i--,r++)

Y hazlo así.

if(rates_total-prev_calculated > 1)
 {
  // Если это первый запуск или подгрузилась история пересчитаем весь индикатор.
 }
if(rates_total-prev_calculated >= 0)
 {
  // Пересчитаем только последнее изменение.
 }
 
#include <Indicators/Indicators.mqh>

CiADX adx;

int OnInit()
  {

   if(!adx.Create(Symbol(),Period(),14)){
      return(INIT_FAILED);
   }

   OnTick(); // это только для этого примера, чтобы на выходных сработало

   return(INIT_SUCCEEDED);
  }

void OnTick()
  {
   double buf[];
   
   if(adx.GetData(0,1,0,buf)==-1){
      return;
   }

   Comment(buf[0]);
   
  }
 
Vladimir Simakov:
Ah, sí. Y entonces el terminal descargó el historial y ¿qué?

¿De dónde es usted y por qué está aquí? ¿Ha escrito un solo indicador para MT4 o MT5? Al menos deberías conocer los fundamentos de la escritura de indicadores para MetaTrader.

 
Dmitry Fedoseev:

Porque nunca escribieron indicadores complejos pero rápidos, de lo contrario la indexación de izquierda a derecha habría sido una solución muy importante.

Si necesita un indicador rápido para un EA, es mejor poner la parte de cálculo directamente en el EA.

 
Alexey Volchanskiy:

Si necesita un indicador rápido para el EA, es más rentable insertar la parte de cálculo directamente en el EA.

De ninguna manera... Cuéntaselo a tus amigas, por la brutalidad.

 
Dmitry Fedoseev:

¿De dónde es usted y por qué está aquí? ¿Ha escrito un solo indicador para MT4 o MT5? Deberías conocer al menos los fundamentos de la escritura de indicadores para MetaTrader.

Dimitri está enfadado, aún no ha tenido resaca))

 
Lo he arreglado un poco. GetData() debe comprobar la desigualdad -1.