public static List <double?> Ema(this List <Candle> source, int period = 30, CandleVariable type = CandleVariable.Close) { int outBegIdx, outNbElement; double[] emaValues = new double[source.Count]; double[] valuesToCheck; switch (type) { case CandleVariable.Open: valuesToCheck = source.Select(x => x.Open).ToArray(); break; case CandleVariable.Low: valuesToCheck = source.Select(x => x.Low).ToArray(); break; case CandleVariable.High: valuesToCheck = source.Select(x => x.High).ToArray(); break; default: valuesToCheck = source.Select(x => x.Close).ToArray(); break; } var ema = TicTacTec.TA.Library.Core.Ema(0, source.Count - 1, valuesToCheck, period, out outBegIdx, out outNbElement, emaValues); if (ema == TicTacTec.TA.Library.Core.RetCode.Success) { return(FixIndicatorOrdering(emaValues.ToList(), outBegIdx, outNbElement)); } throw new Exception("Could not calculate EMA!"); }
public static Stoch StochRsi(this List <Candle> source, int optInTimePeriod = 14, CandleVariable type = CandleVariable.Close, int fastKPeriod = 5, int fastDPeriod = 3, TicTacTec.TA.Library.Core.MAType fastDmaType = TicTacTec.TA.Library.Core.MAType.Sma) { int outBegIdx, outNbElement; double[] kValues = new double[source.Count]; double[] dValues = new double[source.Count]; double[] valuesToCheck; switch (type) { case CandleVariable.Open: valuesToCheck = source.Select(x => x.Open).ToArray(); break; case CandleVariable.Low: valuesToCheck = source.Select(x => x.Low).ToArray(); break; case CandleVariable.High: valuesToCheck = source.Select(x => x.High).ToArray(); break; default: valuesToCheck = source.Select(x => x.Close).ToArray(); break; } var tema = TicTacTec.TA.Library.Core.StochRsi(0, source.Count - 1, valuesToCheck, optInTimePeriod, fastKPeriod, fastDPeriod, fastDmaType, out outBegIdx, out outNbElement, kValues, dValues); if (tema == TicTacTec.TA.Library.Core.RetCode.Success) { return(new Stoch() { D = FixIndicatorOrdering(dValues.ToList(), outBegIdx, outNbElement), K = FixIndicatorOrdering(kValues.ToList(), outBegIdx, outNbElement) }); } throw new Exception("Could not calculate STOCH!"); }
public static List <decimal?> LinReg(this List <Candle> source, int period = 18, CandleVariable type = CandleVariable.Close) { int outBegIdx, outNbElement; double[] linregValues = new double[source.Count]; double[] valuesToCheck; switch (type) { case CandleVariable.Open: valuesToCheck = source.Select(x => Convert.ToDouble(x.Open)).ToArray(); break; case CandleVariable.Low: valuesToCheck = source.Select(x => Convert.ToDouble(x.Low)).ToArray(); break; case CandleVariable.High: valuesToCheck = source.Select(x => Convert.ToDouble(x.High)).ToArray(); break; default: valuesToCheck = source.Select(x => Convert.ToDouble(x.Close)).ToArray(); break; } var lr = TicTacTec.TA.Library.Core.LinearReg(0, source.Count - 1, valuesToCheck, period, out outBegIdx, out outNbElement, linregValues); if (lr == TicTacTec.TA.Library.Core.RetCode.Success) { return(FixIndicatorOrdering(linregValues.ToList(), outBegIdx, outNbElement)); } throw new Exception("Could not calculate Linear Regression!"); }
public static List <decimal?> Wma(this List <Candle> source, int period = 30, CandleVariable type = CandleVariable.Close) { // int outBegIdx, outNbElement; double[] wmaValues = new double[source.Count]; List <double?> outValues = new List <double?>(); double[] valuesToCheck; switch (type) { case CandleVariable.Open: valuesToCheck = source.Select(x => Convert.ToDouble(x.Open)).ToArray(); break; case CandleVariable.Low: valuesToCheck = source.Select(x => Convert.ToDouble(x.Low)).ToArray(); break; case CandleVariable.High: valuesToCheck = source.Select(x => Convert.ToDouble(x.High)).ToArray(); break; default: valuesToCheck = source.Select(x => Convert.ToDouble(x.Close)).ToArray(); break; } var sma = TicTacTec.TA.Library.Core.Wma(0, source.Count - 1, valuesToCheck, period, out int outBegIdx, out int outNbElement, wmaValues); if (sma == TicTacTec.TA.Library.Core.RetCode.Success) { return(FixIndicatorOrdering(wmaValues.ToList(), outBegIdx, outNbElement)); } throw new Exception("Could not calculate WMA!"); }