以下に、各ポイント (移動平均、アップ バンド、ダウン バンド) のボリンジャー バンドを計算する 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"];
}
}
}