Индикаторы: Didi Index - страница 3

 
collisr350 #:
Этот индикатор замечательный, за исключением того, что он не работает правильно в реальном времени. Он не реагирует правильно для подачи сигнала в реальном времени.
У меня он работает нормально в реальном времени. С какой проблемой вы столкнулись?
 

Некоторые вещи плохие.

Если я использую оригинальный SMA03 + SMA20, то кроссы отличаются от этого индикатора.
Есть ли какой-то секретный алгоритм???
Не используются расчетные буферы. Я не знаю ...

 
Petr Michalica #:

Некоторые вещи плохие.

Если я использую оригинальный SMA03 + SMA20, то кроссы отличаются от этого индикатора.
Есть ли какой-то секретный алгоритм???
Не используются расчетные буферы. Я не знаю ...

Это опубликованный исходный код - не секрет.

Вот расчеты:

   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);

// и тогда...

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

Да, я прочитал источник,

Но проблема в разнице.
Кроссы оригинальных sma03+sma20 находятся не на одном месте.

 
Petr Michalica #:
sma03+sma20

Вы опускаете параметр average_handle, который управляется входом:

input int                MeanPeriod   =8;               // Средний период MA
 

АХА.
Хорошо. Да, все правильно.
Мне очень жаль.
Измерять качество проще. Мило.
Я думаю, что среднее значение равно 20. Я знаю, что 3 месяца.

 
Matheus de Oliveira #:
Как вы думаете, будет ли проблемой удалить линии и сделать ремонт?

Проблем быть не должно. Иногда люди пишут код для своего конкретного символа/инструмента, вот и все.

Этот цифровой код довольно стандартен для индикаторов и не более того:

IndicatorSetInteger(INDICATOR_DIGITS, _Digits);

Вы можете вообще удалить эту функцию, и индикатор все равно будет работать, но по умолчанию он всегда будет отображать 6 цифр.

 
trade_addicted #:
[W]где я могу прочитать значения SlowBuffer

См. объявления буферов:

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

Вы уже нашли быстрый буфер #0. Аналогично, медленный буфер - это буфер #2.

Лично у меня вызывает недоумение средний буфер #1, которому присваивается статическое значение 1. Было бы проще и чище просто использовать целое число... 1.🤔
 
Ryan L Johnson # Лично у меня вызывает недоумение средний буфер #1, которому присваивается статическое значение 1. Было бы проще и чище просто использовать целое число... 1.🤔

Вы правы, что вас озадачивает средний буфер. В данной реализации ему всегда присваивается статическое значение 1(MeanBuffer[shift] = 1), поэтому он никогда не меняется на разных барах.

Это означает, что сам буфер избыточен: вам не нужно хранить или выставлять его через SetIndexBuffer.

Индикатор мог бы просто использовать литеральную константу 1 непосредственно при расчете двух других серий, и это сделало бы код короче, понятнее и использовало бы меньше памяти. Буферы Fast и Slow - единственные, в которых хранятся реальные данные.

 
Да. Хорошо иметь высокую точность.