Exemple #1
0
        public ITaLibOutput <double[]> ChaikinADOscillator(Frequency unitType, int historiesLength, int fastPeriod = 3, int slowPeriod = 10)
        {
            var inputs = new IndicatorsInputs(database, historiesLength);

            database.FillMarketHistory(unitType, inputs.OutputArrayLength);

            double[] highs = database.CurrentHistory
                             .Select(bar => bar.PriceHigh)
                             .ToArray();

            double[] lows = database.CurrentHistory
                            .Select(bar => bar.PriceLow)
                            .ToArray();

            double[] closes = database.CurrentHistory
                              .Select(bar => bar.ClosingPrice)
                              .ToArray();

            double[] volumes = database.CurrentHistory
                               .Select(bar => bar.Volume)
                               .ToArray();

            var output = new TaLibOutput <double[]> {
                Series           = new double[inputs.OutputArrayLength],
                HistoryWasCustom = database.HistoryIsCustom
            };
            int outBeginningIndex = 0;
            int outNBElement      = 0;

            output.Outcome = Core.AdOsc(startIdx: inputs.StartingIndex,
                                        endIdx: inputs.EndIndex,
                                        inHigh: highs,
                                        inLow: lows,
                                        inClose: closes,
                                        inVolume: volumes,
                                        optInFastPeriod: fastPeriod,
                                        optInSlowPeriod: slowPeriod,
                                        outBegIdx: out outBeginningIndex,
                                        outNBElement: out outNBElement,
                                        outReal: output.Series);
            output.AlgorithmsBeginningIndex = outBeginningIndex;
            output.NBElement = outNBElement;
            return(output);
        }
Exemple #2
0
        /// <summary>
        /// Calculation of Chaikin A/D Oscillator indicators
        /// </summary>
        /// <param name="db">data to calculate AD</param>
        /// <param name="name"></param>
        public ADOSC(DataBars db, double fastPeriod, double slowPeriod, string name)
            : base(db, name)
        {
            int begin = 0, length = 0;

            Core.RetCode retCode = Core.RetCode.UnknownErr;

            double[] output = new double[db.Count];

            retCode = Core.AdOsc(0, db.Count - 1, db.High.Values, db.Low.Values, db.Close.Values, db.Volume.Values, (int)fastPeriod, (int)slowPeriod, out begin, out length, output);

            if (retCode != Core.RetCode.Success)
            {
                return;
            }
            //Assign first bar that contains indicator data
            FirstValidValue = begin;
            this.Name       = name;
            for (int i = begin, j = 0; j < length; i++, j++)
            {
                this[i] = output[j];
            }
        }
Exemple #3
0
        public void ChaikinADOscillator()
        {
            var goodOutputsLine1  = new double[HistoriesLength];
            int outBeginningIndex = 0;
            int outNBElement      = 0;
            int fastPeriod        = 3;
            int slowPeriod        = 10;

            var GoodOutputsRetCode1 = Core.AdOsc(
                FakeDataBase.ManualStartingIndex,
                EndingIndex,
                PriceHighs,
                PriceLows,
                ClosingPrices,
                Volumes,
                fastPeriod,
                slowPeriod,
                out outBeginningIndex,
                out outNBElement,
                goodOutputsLine1);

            var possiblyBadOutput1 = objectToTest.ChaikinADOscillator(
                TestDataFrequency,
                HistoriesLength
                );

            Assert.Equal(GoodOutputsRetCode1, possiblyBadOutput1.Outcome);
            Assert.Equal(outBeginningIndex, possiblyBadOutput1.AlgorithmsBeginningIndex);
            Assert.Equal(outNBElement, possiblyBadOutput1.NBElement);

            for (int i = 0; i < goodOutputsLine1.Length; i++)
            {
                Assert.Equal(goodOutputsLine1[i], possiblyBadOutput1.Series[i]);
            }

            //CustomHistory test
            FakeDataBase.HistoryIsCustom     = true;
            FakeDataBase.ManualStartingIndex = 5;
            goodOutputsLine1 = new double[HistoriesLength];

            var GoodOutputsRetCode2 = Core.AdOsc(
                FakeDataBase.ManualStartingIndex,
                EndingIndex,
                PriceHighs,
                PriceLows,
                ClosingPrices,
                Volumes,
                fastPeriod,
                slowPeriod,
                out outBeginningIndex,
                out outNBElement,
                goodOutputsLine1);

            var possiblyBadOutput2 = objectToTest.ChaikinADOscillator(
                TestDataFrequency,
                HistoriesLength
                );

            Assert.Equal(GoodOutputsRetCode2, possiblyBadOutput2.Outcome);
            Assert.Equal(outBeginningIndex, possiblyBadOutput2.AlgorithmsBeginningIndex);
            Assert.Equal(outNBElement, possiblyBadOutput2.NBElement);

            for (int i = 0; i < goodOutputsLine1.Length; i++)
            {
                Assert.Equal(goodOutputsLine1[i], possiblyBadOutput2.Series[i]);
            }
        }