ускоритель очень простой, чтобы не гонять постоянно вложенный цикл мы вычитаем выбывающее значение.
Code:
                double close = candles[i];
                double prevClose = candles[i - period];
                double prevSMA = SMA[i - 1];
                SMA[i] = prevSMA + (close - prevClose)/period;

В итоге имеем лишнее деление, которое дает накпливающуюся погрешность. В зависимости от длинны историии она доходит до 10го знака после запятой, что, в целом, не должно ни на что влиять. Для CCI оказалось критично, что меня самого удивило.

На самом деле удивительного ничего нет, т.к. в CCI используется формула расчета коэф. "Typical price - sma От Typical price". Если короткий интервал и короткий период SMA. То этот коэф. сдвигается как раз на значение порядка 10e-8, поэтому такие погрешности уже влияют на расчет.


Отредактировано Nektodron (Mon Apr 25 2011 10:04 PM)