Indicadores: Índice Didi - página 3

 
collisr350 #:
este indicador es grande, excepto que no funciona correctamente en tiempo real. No reacciona bien para dar señal en tiempo real.
Está trabajando bien en tiempo real conmigo. ¿Qué problema se enfrentan?
 

Algunas cosas son malas.

Si utilizo original SMA03 + SMA20 el crossess son diferent de este indicador.
¿Hay algo secreto???
No se utilizan los búferes de cálculo. No sé ..

 
Petr Michalica #:

Algunas cosas son malas.

Si utilizo original SMA03 + SMA20 el crossess son diferent de este indicador.
¿Hay algo secreto???
No se utilizan los búferes de cálculo. No sé ..

Se publica el código fuente - no es un secreto.

Aquí está el cálculo:

   short_handle   = iMA(Symbol(), Timeframe, FastPeriod, Shift, Method, AppliedPrice);
   average_handle = iMA(Symbol(), Timeframe, MeanPeriod, Shift, Method, AppliedPrice);
   long_handle    = iMA(Symbol(), Timeframe, SlowPeriod, Shift, Method, AppliedPrice);

// y entonces...

   void CalculateDidiIndex(const int shift=0)
  {
//---
   double fast[1],mean[1],slow[1];

   if(CopyBuffer(short_handle, 0, shift, 1, fast)<=0) return;
   if(CopyBuffer(average_handle, 0, shift, 1, mean)<=0) return;
   if(CopyBuffer(long_handle, 0, shift, 1, slow)<=0) return;

   FastBuffer[shift] = fast[0]/mean[0];
   MeanBuffer[shift] = 1;
   SlowBuffer[shift] = slow[0]/mean[0];
//---
  }
 

Sí, he leído la fuente,

Pero el problema es la diferncy.
Las cruces de sma03+sma20 original no están en el mismo lugar.

 
Petr Michalica #:
sma03+sma20

Estás omitiendo el average_handle que es controlado por la entrada:

input int                MeanPeriod   =8;               // Periodo medio MA
 

AHA.
OK. Sí, todo está bien.
Lo siento por esto.
Medir la calidad es más fácil. Bien.
Creo que la media es 20. Lo sé, son 3smas.

 
Matheus de Oliveira #:
¿Cree que habría algún problema en quitar las líneas y hacer el arreglo?

No debería haber ningún problema. Ocasionalmente la gente escribe código para su símbolo/instrumento específico es todo.

Este código de dígitos es bastante estándar en los indicadores sin nada más:

IndicatorSetInteger(INDICATOR_DIGITS, _Digits);

Usted podría eliminar la función por completo y el indicador seguiría funcionando, pero siempre por defecto para mostrar 6 dígitos.

 
trade_addicted #:
[¿Dónde puedo leer los valores de SlowBuffer?

Consulte las declaraciones de los búferes:

   SetIndexBuffer(0,FastBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,MeanBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,SlowBuffer,INDICATOR_DATA);

Ya has encontrado el buffer rápido #0. Del mismo modo, el buffer lento es el buffer #2.

Personalmente, el buffer medio #1 al que se le asigna un valor estático de 1 me deja rascándome la cabeza. Sería más fácil y limpio simplemente utilizar el número entero.... 1.🤔
 
Ryan L Johnson # Personalmente, el búfer medio #1 al que se le asigna un valor estático de 1 me deja rascándome la cabeza. Sería más fácil y más limpio simplemente utilizar el entero.... 1.🤔

Tienes razón en estar desconcertado por el búfer medio. En esta implementación siempre se le asigna un valor estático de 1(MeanBuffer[shift] = 1), por lo que nunca cambia a través de las barras.

Eso significa que el búfer en sí es redundante: en realidad no es necesario almacenarlo o exponerlo a través de SetIndexBuffer.

El indicador podría simplemente utilizar la constante literal 1 directamente en el cálculo de las otras dos series, y eso haría el código más corto, más claro, y utilizaría menos memoria. Los buffers Rápido y Lento son los únicos que llevan datos reales.

 
Sí, es bueno tener una gran precisión.