public override void HandleNextTick(Tick t) { double emaVal = EMA.HandleNextTick(t); LRValues.Enqueue(emaVal); double[] Y = LRValues.ToArray(); double stdErr = 0; if (Y.Count() == X.Length) { Vector x_data = new Vector(X); Vector y_data = new Vector(LRValues.ToArray()); var poly = new PolynomialRegression(x_data, y_data, 2); for (int i = 0; i < Period; i++) { double x = (i); double y = poly.Fit(x); stdErr += Math.Pow(LRValues.ToArray()[i] - y, 2); } stdErr = Math.Sqrt(stdErr); } HighData.Enqueue(EMA[0]+STDEV * stdErr); MiddleData.Enqueue(EMA[0]); LowData.Enqueue(EMA[0] - STDEV * stdErr); }
public double HandleNextTick(double currentTick) { if (!currentTick.Equals(double.NaN)) { double value = double.NaN; tickdata.Enqueue(currentTick); if (tickdata.Capacity.Equals(tickdata.Count)) { Vector x_data = new Vector(X); Vector y_data = new Vector(tickdata.ToArray()); var poly = new PolynomialRegression(x_data, y_data, 2); value = poly.Fit(Period); } indicatorData.Enqueue(value); return value; } return double.NaN; }