Ejemplo n.º 1
0
        public void subSeriesCreation()
        {
            ITimeSeries subSeries = defaultSeries.GetSubSeries(2, 5);

            Assert.AreEqual(defaultSeries.Name, subSeries.Name);
            Assert.AreEqual(0, subSeries.GetBeginIndex());
            Assert.AreEqual(defaultSeries.GetBeginIndex(), subSeries.GetBeginIndex());
            Assert.AreEqual(2, subSeries.GetEndIndex());
            Assert.AreNotEqual(defaultSeries.GetEndIndex(), subSeries.GetEndIndex());
            Assert.AreEqual(3, subSeries.GetBarCount());

            subSeries = defaultSeries.GetSubSeries(-1000, 1000);
            Assert.AreEqual(0, subSeries.GetBeginIndex());
            Assert.AreEqual(defaultSeries.GetEndIndex(), subSeries.GetEndIndex());
        }
Ejemplo n.º 2
0
        public void test()
        {
            AroonOscillatorIndicator aroonOscillator = new AroonOscillatorIndicator(data, 25);

            Assert.AreEqual(aroonOscillator.GetValue(data.GetBeginIndex()), 0);
            Assert.AreEqual(aroonOscillator.GetValue(data.GetBeginIndex() + 25), 84M);
            Assert.AreEqual(aroonOscillator.GetValue(data.GetBeginIndex() + 26), 80M);
            Assert.AreEqual(aroonOscillator.GetValue(data.GetBeginIndex() + 27), 76M);

            Assert.AreEqual(aroonOscillator.GetValue(data.GetEndIndex() - 5), 56M);
            Assert.AreEqual(aroonOscillator.GetValue(data.GetEndIndex() - 4), 52M);
            Assert.AreEqual(aroonOscillator.GetValue(data.GetEndIndex() - 3), 48M);
            Assert.AreEqual(aroonOscillator.GetValue(data.GetEndIndex() - 2), 44M);
            Assert.AreEqual(aroonOscillator.GetValue(data.GetEndIndex() - 1), 40M);
            Assert.AreEqual(aroonOscillator.GetValue(data.GetEndIndex()), 32M);
        }
Ejemplo n.º 3
0
        /**
         * Calculates the Maximum drawdown from a cash flow over a series.
         * @param series the time series
         * @param cashFlow the cash flow
         * @return the Maximum drawdown from a cash flow over a series
         */
        private decimal CalculateMaximumDrawdown(ITimeSeries series, CashFlow cashFlow)
        {
            decimal MaximumDrawdown = Decimals.Zero;
            decimal MaxPeak         = Decimals.Zero;

            if (!series.IsEmpty())
            {
                // The series is not empty
                for (int i = series.GetBeginIndex(); i <= series.GetEndIndex(); i++)
                {
                    decimal value = cashFlow.GetValue(i);
                    if (value.IsGreaterThan(MaxPeak))
                    {
                        MaxPeak = value;
                    }

                    decimal drawdown = MaxPeak.Minus(value).DividedBy(MaxPeak);
                    if (drawdown.IsGreaterThan(MaximumDrawdown))
                    {
                        MaximumDrawdown = drawdown;
                    }
                }
            }
            return(MaximumDrawdown);
        }
Ejemplo n.º 4
0
 public void getEndGetBeginGetBarCountIsEmpty()
 {
     //  series
     Assert.AreEqual(0, defaultSeries.GetBeginIndex());
     Assert.AreEqual(bars.Count - 1, defaultSeries.GetEndIndex());
     Assert.AreEqual(bars.Count, defaultSeries.GetBarCount());
     Assert.IsFalse(defaultSeries.IsEmpty());
     // Constrained series
     Assert.AreEqual(2, constrainedSeries.GetBeginIndex());
     Assert.AreEqual(4, constrainedSeries.GetEndIndex());
     Assert.AreEqual(3, constrainedSeries.GetBarCount());
     Assert.IsFalse(constrainedSeries.IsEmpty());
     // Empty series
     Assert.AreEqual(-1, emptySeries.GetBeginIndex());
     Assert.AreEqual(-1, emptySeries.GetEndIndex());
     Assert.AreEqual(0, emptySeries.GetBarCount());
     Assert.IsTrue(emptySeries.IsEmpty());
 }
Ejemplo n.º 5
0
        public override decimal Calculate(ITimeSeries series, Trade trade)
        {
            ITradingRecord fakeRecord = new BaseTradingRecord();

            fakeRecord.Enter(series.GetBeginIndex());
            fakeRecord.Exit(series.GetEndIndex());

            return(_criterion.Calculate(series, trade) / _criterion.Calculate(series, fakeRecord));
        }
Ejemplo n.º 6
0
        public void addBar()
        {
            defaultSeries = new BaseTimeSeries();
            IBar firstBar  = new MockBar(new DateTime(2014, 6, 13, 0, 0, 0, 0), 1M);
            IBar secondBar = new MockBar(new DateTime(2014, 6, 14, 0, 0, 0, 0), 2M);

            Assert.AreEqual(0, defaultSeries.GetBarCount());
            Assert.AreEqual(-1, defaultSeries.GetBeginIndex());
            Assert.AreEqual(-1, defaultSeries.GetEndIndex());

            defaultSeries.AddBar(firstBar);
            Assert.AreEqual(1, defaultSeries.GetBarCount());
            Assert.AreEqual(0, defaultSeries.GetBeginIndex());
            Assert.AreEqual(0, defaultSeries.GetEndIndex());

            defaultSeries.AddBar(secondBar);
            Assert.AreEqual(2, defaultSeries.GetBarCount());
            Assert.AreEqual(0, defaultSeries.GetBeginIndex());
            Assert.AreEqual(1, defaultSeries.GetEndIndex());
        }
Ejemplo n.º 7
0
        public void dpo()
        {
            DPOIndicator        dpo = new DPOIndicator(series, 9);
            ClosePriceIndicator cp  = new ClosePriceIndicator(series);
            SMAIndicator        sma = new SMAIndicator(cp, 9);
            int timeShift           = 9 / 2 + 1;

            for (int i = series.GetBeginIndex(); i <= series.GetEndIndex(); i++)
            {
                Assert.AreEqual(dpo.GetValue(i), cp.GetValue(i).Minus(sma.GetValue(i - timeShift)));
            }

            Assert.AreEqual(dpo.GetValue(9), 0.112M);
            Assert.AreEqual(dpo.GetValue(10), -0.02M);
            Assert.AreEqual(dpo.GetValue(11), 0.211428571428571428571428571M);
            Assert.AreEqual(dpo.GetValue(12), 0.17M);
        }
Ejemplo n.º 8
0
        protected override decimal Calculate(int index)
        {
            decimal sar = Decimals.NaN;

            if (index == _series.GetBeginIndex())
            {
                return(sar); // no trend detection possible for the first value
            }
            else if (index == _series.GetBeginIndex() + 1)
            {// start trend detection
                _currentTrend = _series.GetBar(_series.GetBeginIndex()).ClosePrice.IsLessThan(_series.GetBar(index).ClosePrice);
                if (!_currentTrend)
                {                                             // down trend
                    sar = _maxPriceIndicator.GetValue(index); // put sar on Max price of candlestick
                    _currentExtremePoint = sar;
                    _minMaxExtremePoint  = _currentExtremePoint;
                }
                else
                {                                             // up trend
                    sar = _minPriceIndicator.GetValue(index); // put sar on Min price of candlestick
                    _currentExtremePoint = sar;
                    _minMaxExtremePoint  = _currentExtremePoint;
                }
                return(sar);
            }

            decimal priorSar = GetValue(index - 1);

            if (_currentTrend)
            { // if up trend
                sar           = priorSar.Plus(_accelerationFactor.MultipliedBy((_currentExtremePoint.Minus(priorSar))));
                _currentTrend = _minPriceIndicator.GetValue(index).IsGreaterThan(sar);
                if (!_currentTrend)
                {                                               // check if sar touches the Min price
                    sar                  = _minMaxExtremePoint; // sar starts at the highest extreme point of previous up trend
                    _currentTrend        = false;               // switch to down trend and reset values
                    _startTrendIndex     = index;
                    _accelerationFactor  = _accelarationStart;
                    _currentExtremePoint = _series.GetBar(index).MinPrice; // put point on Max
                    _minMaxExtremePoint  = _currentExtremePoint;
                }
                else
                { // up trend is going on
                    _currentExtremePoint = new HighestValueIndicator(_maxPriceIndicator, index - _startTrendIndex).GetValue(index);
                    if (_currentExtremePoint.IsGreaterThan(_minMaxExtremePoint))
                    {
                        IncrementAcceleration();
                        _minMaxExtremePoint = _currentExtremePoint;
                    }
                }
            }
            else
            { // downtrend
                sar           = priorSar.Minus(_accelerationFactor.MultipliedBy(((priorSar.Minus(_currentExtremePoint)))));
                _currentTrend = _maxPriceIndicator.GetValue(index).IsGreaterThanOrEqual(sar);
                if (_currentTrend)
                {                              // check if switch to up trend
                    sar = _minMaxExtremePoint; // sar starts at the lowest extreme point of previous down trend
                    _accelerationFactor  = _accelarationStart;
                    _startTrendIndex     = index;
                    _currentExtremePoint = _series.GetBar(index).MaxPrice;
                    _minMaxExtremePoint  = _currentExtremePoint;
                }
                else
                { // down trend io going on
                    _currentExtremePoint = new LowestValueIndicator(_minPriceIndicator, index - _startTrendIndex).GetValue(index);
                    if (_currentExtremePoint.IsLessThan(_minMaxExtremePoint))
                    {
                        IncrementAcceleration();
                        _minMaxExtremePoint = _currentExtremePoint;
                    }
                }
            }
            return(sar);
        }
Ejemplo n.º 9
0
 /**
  * Runs the provided strategy over the managed series.
  * <p>
  * @param strategy the trading strategy
  * @param orderType the {@link OrderType} used to open the trades
  * @param amount the amount used to open/close the trades
  * @return the trading record coMing from the run
  */
 public ITradingRecord Run(IStrategy strategy, OrderType orderType, decimal amount)
 {
     return(Run(strategy, orderType, amount, _timeSeries.GetBeginIndex(), _timeSeries.GetEndIndex()));
 }
Ejemplo n.º 10
0
 public override decimal Calculate(ITimeSeries series, ITradingRecord tradingRecord)
 {
     return(series.GetBar(series.GetEndIndex()).ClosePrice.DividedBy(series.GetBar(series.GetBeginIndex()).ClosePrice));
 }