Example #1
0
        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!");
        }
Example #2
0
        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!");
        }
Example #3
0
        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!");
        }
Example #4
0
        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!");
        }