以下は、各点(移動平均、アップバンド、ダウンバンド)のボリンジャーバンドを計算する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"];
}
}
}
ありがとう!私はこの盲目を見つめていた。 最後にtotal_squaresを減らすことを忘れただけです。 total_squares - = Math.Pow(data。値[i-period + 1] ["close"]、2); – ChrisW
http://www.johndcook.com/blog/standard_deviation/ – odyth
@odythいいね!私はこれがクヌスにあることに気がつかなかった。私は80年代にこれを書き上げる数年前に実際にTAoCPを読んでいましたが、今私は無意識にそれを盗んでしまったのだろうかと思います。 – RBarryYoung