Как эффективно рассчитать стандартное отклонение
Ниже вы можете увидеть мой метод C # для расчета полос Боллинджера для каждой точки (скользящая средняя, верхняя полоса, нижняя полоса).
Как видите, этот метод использует 2 для циклов, чтобы вычислить скользящее стандартное отклонение, используя скользящее среднее. Раньше содержал дополнительный цикл для расчета скользящего среднего за последние n периодов. Это я мог бы удалить, добавив новое значение точки к total_average в начале цикла и удалив значение i-n точки в конце цикла.
Мой вопрос сейчас в основном: могу ли я удалить оставшийся внутренний цикл аналогично тому, как я справился с помощью скользящей средней?
public static void AddBollingerBands(SortedList data, int period, int factor)
{
double total_average = 0;
for (int i = 0; i < data.Count(); i++)
{
total_average += data.Values[i]["close"];
if (i >= period - 1)
{
double total_bollinger = 0;
double average = total_average / period;
for (int x = i; x > (i - period); x--)
{
total_bollinger += Math.Pow(data.Values[x]["close"] - average, 2);
}
double stdev = Math.Sqrt(total_bollinger / period);
data.Values[i]["bollinger_average"] = average;
data.Values[i]["bollinger_top"] = average + factor * stdev;
data.Values[i]["bollinger_bottom"] = average - factor * stdev;
total_average -= data.Values[i - period + 1]["close"];
}
}
}