Poniżej możesz zobaczyć moją metodę C# do obliczania pasm Bollingera dla każdego punktu (średnia ruchoma, zakres górny, pasmo dolne).Jak skutecznie obliczyć ruchome odchylenie standardowe
Jak widać, ta metoda wykorzystuje 2 pętle do obliczenia ruchomego odchylenia standardowego przy użyciu średniej ruchomej. Zwykle zawierał dodatkową pętlę do obliczania średniej ruchomej w ciągu ostatnich n okresów. Ten mógłbym usunąć dodając nową wartość punktu do total_average na początku pętli i usuwając wartość punktu i - n na końcu pętli.
Moje pytanie brzmi: Czy mogę usunąć pozostałą pętlę wewnętrzną w podobny sposób, jak udało mi się z ruchomą średnią?
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"];
}
}
}
Wielkie dzięki! Patrzyłem na to niewidomym. Tylko zapomniałeś zmniejszyć liczbę całkowitą na końcu: total_squares - = Math.Pow (dane.Wartości [i - kropka + 1] ["zamknij"], 2); – ChrisW
http://www.johndcook.com/blog/standard_deviation/ – odyth
@odyth Ładny odnośnik! Nie zdawałem sobie sprawy, że to było w Knuth. Właściwie to czytałem TAoCP na kilka lat przed napisaniem tego w latach 80., a teraz zastanawiam się, czy podświadomie go zszargałem. – RBarryYoung