public IPriceSeries Apply(IPriceSeries series) { double groupInterval = (double)series.Count / (double)myMaxPoints; if (groupInterval <= 1) { return(series); } var descriptor = new ObjectDescriptor("ThinOut", ObjectDescriptor.Param("MaxCount", myMaxPoints)); var seriesId = series.Identifier.Modify(descriptor); return(PriceSeries.FromSortedSet(seriesId, GroupPointsByAverage(series, (int)Math.Ceiling(groupInterval)))); }
public IPriceSeries Calculate(IPriceSeries prices) { var points = new List <SimplePrice>(); for (int i = NumDays; i < prices.Count; ++i) { var pricesRange = new PriceSeriesRange(prices, ClosedInterval.FromOffsetLength(i - NumDays, NumDays)); double value = pricesRange.Average(p => p.Value); var point = new SimplePrice(prices[i].Time, value); points.Add(point); } var descriptor = new ObjectDescriptor("SMA", ObjectDescriptor.Param("NumDays", NumDays)); var seriesId = prices.Identifier.Derive(descriptor); return(new PriceSeries(seriesId, points)); }