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()); }
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); }
/** * 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); }
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()); }
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)); }
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()); }
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); }
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); }
/** * 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())); }
public override decimal Calculate(ITimeSeries series, ITradingRecord tradingRecord) { return(series.GetBar(series.GetEndIndex()).ClosePrice.DividedBy(series.GetBar(series.GetBeginIndex()).ClosePrice)); }