Indicadores: Didi Index - página 3

 
collisr350 #:
Esse indicador é ótimo, EXCETO pelo fato de não funcionar corretamente em tempo real. Ele não reage corretamente para emitir sinais em tempo real.
Para mim, ele está funcionando bem em tempo real. Que problema você está enfrentando?
 

Algumas coisas são ruins.

Se eu usar o SMA03 + SMA20 original, os cruzamentos serão diferentes dos desse indicador.
Existe algum algoritmo secreto???
Os buffers de cálculo não são usados. Eu não sei...

 
Petr Michalica #:

Algumas coisas são ruins.

Se eu usar o SMA03 + SMA20 original, os cruzamentos serão diferentes dos desse indicador.
Existe algum algoritmo secreto???
Os buffers de cálculo não são usados. Eu não sei...

O código-fonte foi publicado, não é secreto.

Aqui está o 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);

// e depois...

   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];
//---
  }
 

Sim, eu li a fonte,

Mas o problema é a diferença.
Os cruzamentos do sma03+sma20 original não estão no mesmo lugar.

 
Petr Michalica #:
sma03+sma20

Você está omitindo o average_handle, que é controlado pela entrada:

input int                MeanPeriod   =8;               // Período médio de MA
 

AHA.
OK. Sim, está tudo certo.
Sinto muito por isso.
Medir a qualidade é mais fácil. Legal.
Acho que a média é 20. Eu sei, são três meses.

 
Matheus de Oliveira #:
Você acha que haveria algum problema em remover as linhas e fazer o reparo?

Não deve haver nenhum problema. Ocasionalmente, as pessoas escrevem códigos para seus símbolos/instrumentos específicos.

Esse código de dígitos é bastante padrão em indicadores, nada mais:

IndicatorSetInteger(INDICATOR_DIGITS, _Digits);

Você poderia excluir a função por completo e o indicador ainda funcionaria, mas sempre exibiria 6 dígitos por padrão.

 
trade_addicted #:
[Onde posso ler os valores do SlowBuffer?

Consulte as declarações do buffer:

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

Você já encontrou o buffer rápido nº 0. Da mesma forma, o buffer lento é o buffer nº 2.

Pessoalmente, o buffer médio nº 1, ao qual é atribuído um valor estático de 1, me deixa com a cabeça coçando. Seria mais fácil e mais limpo usar apenas o número inteiro... 1.🤔
 
Ryan L Johnson # Pessoalmente, o buffer médio nº 1, ao qual é atribuído um valor estático de 1, me deixa com a cabeça coçando. Seria mais fácil e mais limpo usar apenas o número inteiro... 1.🤔

Você tem razão em ficar intrigado com o buffer médio. Nessa implementação, sempre é atribuído a ele um valor estático de 1(MeanBuffer[shift] = 1), portanto, ele nunca muda entre as barras.

Isso significa que o buffer em si é redundante: você não precisa armazená-lo ou expô-lo por meio de SetIndexBuffer.

O indicador poderia simplesmente usar a constante literal 1 diretamente no cálculo das outras duas séries, o que tornaria o código mais curto, mais claro e usaria menos memória. Os buffers Fast e Slow são os únicos que carregam dados reais.

 
Sim, é bom ter alta precisão.