예제 #1
0
        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);
             
        }
예제 #2
0
파일: QSPolyMA.cs 프로젝트: ifzz/QuantSys
        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;
        }