///<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); }
///<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); }
///<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); }