Di seguito è possibile vedere il metodo C# per calcolare le bande di Bollinger per ciascun punto (media mobile, banda in su, banda in giù).Come calcolare in modo efficiente una deviazione standard in movimento
Come si può vedere questo metodo usa 2 cicli per calcolare la deviazione standard mobile utilizzando la media mobile. Utilizzato per contenere un ciclo aggiuntivo per calcolare la media mobile negli ultimi n periodi. Questo potrei rimuovere aggiungendo il nuovo valore punto a total_average all'inizio del ciclo e rimuovendo il valore del punto i-n alla fine del ciclo.
La mia domanda ora è fondamentalmente: Posso rimuovere il circuito interno rimanente in modo simile a me gestito con la media mobile?
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"];
}
}
}
Grazie mille! Stavo fissando cieco su questo. Alla fine si è solo dimenticato di ridurre total_squares: total_squares - = Math.Pow (dati.Valori [i - periodo + 1] ["chiudi"], 2); – ChrisW
http://www.johndcook.com/blog/standard_deviation/ – odyth
@odyth Bella referenza! Non avevo capito che era a Knuth. In realtà avevo letto TAoCP diversi anni prima di averlo scritto negli anni '80, e ora mi chiedo se l'ho inconsciamente plagiato. – RBarryYoung