/// <summary> /// Calculate the simple moving average /// </summary> /// <param name="startTime">The time to start the calculation from</param> protected void CalculateSMA(DateTime startTime) { foreach (var key in Open.Keys.Where(i => i >= startTime)) { switch (AppliesTo) { case AppliesToEnum.Open: { var val = Open.GetPreviousDataValues(key, Period).Sum() / Period; Data["Buffer"][key] = val; break; } case AppliesToEnum.High: { var val = High.GetPreviousDataValues(key, Period).Sum() / Period; Data["Buffer"][key] = val; break; } case AppliesToEnum.Low: { var val = Low.GetPreviousDataValues(key, Period).Sum() / Period; Data["Buffer"][key] = val; break; } case AppliesToEnum.Close: { var val = Close.GetPreviousDataValues(key, Period).Sum() / Period; Data["Buffer"][key] = val; break; } case AppliesToEnum.MedianPrice: { var val = High.GetPreviousDataValues(key, Period).Sum(); val += Low.GetPreviousDataValues(key, Period).Sum(); val = val / 2; val = val / Period; Data["Buffer"][key] = val; break; } case AppliesToEnum.TypicalPrice: { var val = High.GetPreviousDataValues(key, Period).Sum(); val += Low.GetPreviousDataValues(key, Period).Sum(); val += Close.GetPreviousDataValues(key, Period).Sum(); val = val / 3; val = val / Period; Data["Buffer"][key] = val; break; } case AppliesToEnum.WeightedClosePrice: { Data["Buffer"][key] = 0; break; } } } }