Aşağıda her nokta için Bollinger Bantlarını hesaplamak için C# yöntemimi görebilirsiniz (hareketli ortalama, yukarı bant, aşağı bant).Hareketli Standart Sapma Nasıl Hesaplanır
Gördüğünüz gibi, bu yöntem hareketli ortalama kullanarak hareketli standart sapmayı hesaplamak için döngüleri 2 kullanır. Son n periyotları boyunca hareketli ortalamayı hesaplamak için ek bir döngü içermekteydi. Bu, döngünün başlangıcında total_average için yeni nokta değerini ekleyerek ve i-n noktası değerini döngü sonunda kaldırarak kaldırabilirim.
Sorum şu: Temel olarak kalan iç döngü, hareketli ortalama ile yönetilen şekilde giderebilir miyim?
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"];
}
}
}
Çok teşekkürler! Bu konuda kör bakıyordum. - = Math.pow (veri TOTAL_SQUARES: Yalnızca sonunda TOTAL_SQUARES azaltmak unuttum.Değerler [i - periyot + 1] ["yakın"], 2); – ChrisW
http://www.johndcook.com/blog/standard_deviation/ – odyth
@odyth Güzel referans! Bunun Knuth’ta olduğunu fark etmemiştim. Bunu 80'lerde yazmamdan birkaç yıl önce TAoCP okumuştum ve şimdi bilinçaltında intihal ettiğimi merak ediyorum. – RBarryYoung