Убедитесь, что расчёт идёт слева направо. Если массив имеет атрибут AsSeries, то возрастающая индексация обеспечивает обратный проход, то есть, справа налево.
Смотрите наш пользовательский индикатор стандартного отклонения 'Standard Deviation, StdDev'
Спасибо, разобрался. Ошибка была в вычислении центра (нужно было брать один и тот же для всех элементов, а не для каждого свой).
Исправленный код:
// Calculation StdDev -----------------------------------------------| // StdDev = SQRT (SUM [(S(i) - SMA(i))^2, N] / N) | double MyStdDev(double &array[], int BandsPeriod, int Index) { double ds, sum, center; sum = 0; if (UseMTSMA) center = iMAOnArray(array,0,BandsPeriod,0,MODE_SMA,Index); else center = MySMA(array,BandsPeriod,Index); for(int i = 0; i < BandsPeriod; i++) { ds = array[Index+i] - center; sum += ds * ds; } sum = MathSqrt (sum / BandsPeriod); return (sum); }
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Не получается сделать вычисление StdDev, чтобы совпало с iStdDev. В коде что-то неправильно?
ArraySetAsSeries(FilterBuffer,true);