您可以在下面看到我的 C# 方法来计算每个点的布林带(移动平均线、上升带、下降带)。
如您所见,此方法使用 2 个 for 循环来使用移动平均值计算移动标准偏差。它曾经包含一个额外的循环来计算过去 n 个周期的移动平均值。我可以通过在循环开始时将新点值添加到 total_average 并在循环结束时删除 i - n 点值来删除这一点。
我现在的问题基本上是:我能否以与移动平均线类似的方式移除剩余的内部循环?
public static void AddBollingerBands(SortedList<DateTime, Dictionary<string, double>> 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"];
}
}
}