Beispiel #1
0
            ///<summary>
            /// Time Series Forecast
            ///</summary>
            ///<param name="pNav">Navigator</param>
            ///<param name="pSource">Field Source</param>
            ///<param name="periods">Periods</param>
            ///<param name="Alias">Alias</param>
            ///<returns>Recordset</returns>
            public Recordset TimeSeriesForecast(Navigator pNav, Field pSource, int periods, string Alias)
            {
                Recordset Results = Regression(pNav, pSource, periods);

                Results.RenameField("Forecast", Alias);
                Results.RemoveField("Slope");
                Results.RemoveField("Intercept");
                Results.RemoveField("RSquared");

                pNav.MoveFirst();
                return(Results);
            }
Beispiel #2
0
            ///<summary>
            /// High Low Bands
            ///</summary>
            ///<param name="pNav">Navigator</param>
            ///<param name="HighPrice">Field High Price</param>
            ///<param name="LowPrice">Field Low Price</param>
            ///<param name="ClosePrice">Field ClosePrice</param>
            ///<param name="periods">Periods</param>
            ///<returns>Recordset</returns>
            public Recordset HighLowBands(Navigator pNav, Field HighPrice, Field LowPrice, Field ClosePrice, int periods)
            {
                MovingAverage MA      = new MovingAverage();
                Recordset     Results = new Recordset();

                if (periods < 6 || periods > pNav.RecordCount)
                {
                    return(null);
                }

                Recordset RS1 = MA.VIDYA(pNav, HighPrice, periods, 0.8, "High Low Bands Top");
                Recordset RS2 = MA.VIDYA(pNav, ClosePrice, periods / 2, 0.8, "High Low Bands Median");
                Recordset RS3 = MA.VIDYA(pNav, LowPrice, periods, 0.8, "High Low Bands Bottom");

                Results.AddField(RS1.GetField("High Low Bands Top"));
                Results.AddField(RS2.GetField("High Low Bands Median"));
                Results.AddField(RS3.GetField("High Low Bands Bottom"));

                // Remove fields so recordset can be deleted
                RS1.RemoveField("High Low Bands Top");
                RS2.RemoveField("High Low Bands Median");
                RS3.RemoveField("High Low Bands Bottom");

                pNav.MoveFirst();
                return(Results);
            }
Beispiel #3
0
            ///<summary>
            /// Fractal Chaos bands
            ///</summary>
            ///<param name="pNav">Navigator</param>
            ///<param name="pOHLCV">OHLCV Recordset</param>
            ///<param name="periods">Periods</param>
            ///<returns>Records</returns>
            public Recordset FractalChaosBands(Navigator pNav, Recordset pOHLCV, int periods)
            {
                MovingAverage MA      = new MovingAverage();
                Recordset     Results = new Recordset();

                int RecordCount = pNav.RecordCount;
                int Record;

                if (periods < 1)
                {
                    periods = 100;
                }

                Field fHiFractal = new Field(RecordCount, "Fractal High");
                Field fLoFractal = new Field(RecordCount, "Low High");
                Field fH         = pOHLCV.GetField("High");
                Field fL         = pOHLCV.GetField("Low");
                Field fFR        = new Field(RecordCount, "FR");

                Field fH1 = new Field(RecordCount, "High 1");
                Field fH2 = new Field(RecordCount, "High 2");
                Field fH3 = new Field(RecordCount, "High 3");
                Field fH4 = new Field(RecordCount, "High 4");

                Field fL1 = new Field(RecordCount, "Low 1");
                Field fL2 = new Field(RecordCount, "Low 2");
                Field fL3 = new Field(RecordCount, "Low 3");
                Field fL4 = new Field(RecordCount, "Low 4");

                for (Record = 5; Record < RecordCount + 1; ++Record)
                {
                    fH1.Value(Record, fH.ValueEx(Record - 4));
                    fL1.Value(Record, fL.ValueEx(Record - 4));

                    fH2.Value(Record, fH.ValueEx(Record - 3));
                    fL2.Value(Record, fL.ValueEx(Record - 3));

                    fH3.Value(Record, fH.ValueEx(Record - 2));
                    fL3.Value(Record, fL.ValueEx(Record - 2));

                    fH4.Value(Record, fH.ValueEx(Record - 1));
                    fL4.Value(Record, fL.ValueEx(Record - 1));
                }

                for (Record = 1; Record < RecordCount + 1; ++Record)
                {
                    fHiFractal.Value(Record, (fH.ValueEx(Record) + fL.ValueEx(Record)) / 3);
                }

                Recordset rsFractals = MA.SimpleMovingAverage(pNav, fHiFractal, periods, "Fractal High");

                fHiFractal = rsFractals.GetField("Fractal High");
                rsFractals.RemoveField("Fractal High");

                rsFractals = MA.SimpleMovingAverage(pNav, fLoFractal, periods, "Fractal Low");
                fLoFractal = rsFractals.GetField("Fractal Low");
                rsFractals.RemoveField("Fractal Low");

                for (Record = 1; Record < RecordCount + 1; ++Record)
                {
                    fHiFractal.Value(Record, fH3.ValueEx(Record) + fHiFractal.ValueEx(Record));
                    fLoFractal.Value(Record, fL3.ValueEx(Record) - fLoFractal.ValueEx(Record));
                }

                for (Record = 2; Record < RecordCount + 1; ++Record)
                {
                    if ((fH3.Value(Record) > fH1.Value(Record)) &&
                        (fH3.Value(Record) > fH2.Value(Record)) &&
                        (fH3.Value(Record) >= fH4.Value(Record)) &&
                        (fH3.Value(Record) >= fH.Value(Record)))
                    {
                        fFR.Value(Record, fHiFractal.Value(Record).Value);
                    }
                    else
                    {
                        fFR.Value(Record, 0);
                    }

                    if (fFR.Value(Record) == 0)
                    {
                        if ((fL3.Value(Record) < fL1.Value(Record)) &&
                            (fL3.Value(Record) < fL2.Value(Record)) &&
                            (fL3.Value(Record) <= fL4.Value(Record)) &&
                            (fL3.Value(Record) <= fL.Value(Record)))
                        {
                            fFR.Value(Record, fLoFractal.Value(Record));
                        }
                        else
                        {
                            fFR.Value(Record, 0);
                        }
                    }

                    if (fHiFractal.Value(Record) == fFR.Value(Record))
                    {
                        fHiFractal.Value(Record, fH3.Value(Record));
                    }
                    else
                    {
                        fHiFractal.Value(Record, fHiFractal.Value(Record - 1));
                    }

                    if (fLoFractal.Value(Record) == fFR.Value(Record))
                    {
                        fLoFractal.Value(Record, fL3.Value(Record));
                    }
                    else
                    {
                        fLoFractal.Value(Record, fLoFractal.Value(Record - 1));
                    }
                }

                // Added 12/19/2005 TW
                for (Record = 2; Record < RecordCount + 1; ++Record)
                {
                    if (fLoFractal.Value(Record) == 0)
                    {
                        fLoFractal.Value(Record, null);
                    }
                    if (fHiFractal.Value(Record) == 0)
                    {
                        fHiFractal.Value(Record, null);
                    }
                }

                Results.AddField(fHiFractal);
                Results.AddField(fLoFractal);

                return(Results);
            }