public void ShouldGroupGeneratedTimeSeriesByDate() { var userEvents = new[] { new UserEvent {At = new DateTime(2013, 07, 17), Feature = "Moose", Type = "tick"}, new UserEvent {At = new DateTime(2013, 07, 17), Feature = "Moose", Type = "tick"}, new UserEvent {At = new DateTime(2013, 07, 18), Feature = "Moose", Type = "tick"} }; var results = new GenerateTimeSeries().Generate(userEvents); Assert.Equal(2, results.Count()); }
public void CalculateWithOneTrade() { TimeSeries series = GenerateTimeSeries.From(100d, 95d, 102d, 105d, 97d, 113d); var trade = new Trade(Order.BuyAt(0), Order.SellAt(1)); var average = new AverageProfitableTradesCriterion(); Assert.AreEqual(0d, average.Calculate(series, trade), TaTestsUtils.TaOffset); trade = new Trade(Order.BuyAt(1), Order.SellAt(2)); Assert.AreEqual(1d, average.Calculate(series, trade), TaTestsUtils.TaOffset); }
public void SetUp() { IList <Tick> ticks = new List <Tick>(); // open, close, high, low ticks.Add(GenerateTick.From(10, 18, 20, 10)); ticks.Add(GenerateTick.From(17, 20, 21, 17)); ticks.Add(GenerateTick.From(15, 15, 16, 14)); ticks.Add(GenerateTick.From(15, 11, 15, 8)); ticks.Add(GenerateTick.From(11, 12, 12, 10)); _series = GenerateTimeSeries.From(ticks); }
public void SetUp() { IList <Tick> ticks = new List <Tick>(); ticks.Add(GenerateTick.From(0, 0, 16, 8)); ticks.Add(GenerateTick.From(0, 0, 12, 6)); ticks.Add(GenerateTick.From(0, 0, 18, 14)); ticks.Add(GenerateTick.From(0, 0, 10, 6)); ticks.Add(GenerateTick.From(0, 0, 8, 4)); this._series = GenerateTimeSeries.From(ticks); }
public void WmaWithTimeFrameGreaterThanSeriesSize() { var series = GenerateTimeSeries.From(1d, 2d, 3d, 4d, 5d, 6d); IIndicator <Decimal> close = new ClosePriceIndicator(series); IIndicator <Decimal> wmaIndicator = new WmaIndicator(close, 55); TaTestsUtils.AssertDecimalEquals(wmaIndicator.GetValue(0), 1); TaTestsUtils.AssertDecimalEquals(wmaIndicator.GetValue(1), 1.6667); TaTestsUtils.AssertDecimalEquals(wmaIndicator.GetValue(2), 2.3333); TaTestsUtils.AssertDecimalEquals(wmaIndicator.GetValue(3), 3); TaTestsUtils.AssertDecimalEquals(wmaIndicator.GetValue(4), 3.6666); TaTestsUtils.AssertDecimalEquals(wmaIndicator.GetValue(5), 4.3333); }
public void RunOnWholeSeriesWithAmount() { TimeSeries series = GenerateTimeSeries.From(20d, 40d, 60d, 10d, 30d, 50d, 0d, 20d, 40d); var allTrades = series.Run(_strategy, OrderType.Buy, Decimal.Hundred).Trades; Assert.Multiple(() => { Assert.AreEqual(2, allTrades.Count); Assert.AreEqual(Decimal.Hundred, allTrades[0].Entry.Amount); Assert.AreEqual(Decimal.Hundred, allTrades[1].Entry.Amount); }); }
public void GetValueWithOldResultsRemoval() { var data = new double[20]; TaTestsUtils.ArraysFill(data, 1); TimeSeries timeSeries = GenerateTimeSeries.From(data); var sma = new SmaIndicator(new ClosePriceIndicator(timeSeries), 10); TaTestsUtils.AssertDecimalEquals(sma.GetValue(5), 1); TaTestsUtils.AssertDecimalEquals(sma.GetValue(10), 1); timeSeries.MaximumTickCount = 12; TaTestsUtils.AssertDecimalEquals(sma.GetValue(19), 1); }
public void ZeroDirectionalMovement3() { var yesterdayTick = GenerateTick.From(0, 0, 6, 6); var todayTick = GenerateTick.From(0, 0, 12, 4); IList <Tick> ticks = new List <Tick>(); ticks.Add(yesterdayTick); ticks.Add(todayTick); var series = GenerateTimeSeries.From(ticks); var down = new DirectionalMovementDownIndicator(series); TaTestsUtils.AssertDecimalEquals(down.GetValue(1), 0); }
[Test] // calculate() public void Calculate() { var series = GenerateTimeSeries.From(1d, 2d, 3d, 4d, 5d, 6d); IIndicator <Decimal> close = new ClosePriceIndicator(series); IIndicator <Decimal> wmaIndicator = new WmaIndicator(close, 3); TaTestsUtils.AssertDecimalEquals(wmaIndicator.GetValue(0), 1); TaTestsUtils.AssertDecimalEquals(wmaIndicator.GetValue(1), 1.6667); TaTestsUtils.AssertDecimalEquals(wmaIndicator.GetValue(2), 2.3333); TaTestsUtils.AssertDecimalEquals(wmaIndicator.GetValue(3), 3.3333); TaTestsUtils.AssertDecimalEquals(wmaIndicator.GetValue(4), 4.3333); TaTestsUtils.AssertDecimalEquals(wmaIndicator.GetValue(5), 5.3333); }
public void PositiveDirectionalMovement() { var yesterdayTick = GenerateTick.From(0, 0, 6, 6); var todayTick = GenerateTick.From(0, 0, 12, 4); IList <Tick> ticks = new List <Tick>(); ticks.Add(yesterdayTick); ticks.Add(todayTick); var series = GenerateTimeSeries.From(ticks); var dup = new DirectionalMovementUpIndicator(series); TaTestsUtils.AssertDecimalEquals(dup.GetValue(1), 6); }
public void CashFlowValueWithTwoTradesAndLongTimeWithoutOrders() { TimeSeries sampleTimeSeries = GenerateTimeSeries.From(1d, 2d, 4d, 8d, 16d, 32d); var tradingRecord = new TradingRecord(Order.BuyAt(1), Order.SellAt(2), Order.BuyAt(4), Order.SellAt(5)); var cashFlow = new CashFlow(sampleTimeSeries, tradingRecord); TaTestsUtils.AssertDecimalEquals(cashFlow.GetValue(0), 1); TaTestsUtils.AssertDecimalEquals(cashFlow.GetValue(1), 1); TaTestsUtils.AssertDecimalEquals(cashFlow.GetValue(2), 2); TaTestsUtils.AssertDecimalEquals(cashFlow.GetValue(3), 2); TaTestsUtils.AssertDecimalEquals(cashFlow.GetValue(4), 2); TaTestsUtils.AssertDecimalEquals(cashFlow.GetValue(5), 4); }
public void GetValueOnResultsCalculatedFromRemovedTicksShouldReturnFirstRemainingResult() { TimeSeries timeSeries = GenerateTimeSeries.From(1, 1, 1, 1, 1); timeSeries.MaximumTickCount = 3; Assert.AreEqual(2, timeSeries.RemovedTicksCount); var sma = new SmaIndicator(new ClosePriceIndicator(timeSeries), 2); for (var i = 0; i < 5; i++) { TaTestsUtils.AssertDecimalEquals(sma.GetValue(i), 1); } }
public void CashFlowShortSell() { TimeSeries sampleTimeSeries = GenerateTimeSeries.From(1, 2, 4, 8, 16, 32); var tradingRecord = new TradingRecord(Order.BuyAt(0), Order.SellAt(2), Order.SellAt(2), Order.BuyAt(4), Order.BuyAt(4), Order.SellAt(5)); var cashFlow = new CashFlow(sampleTimeSeries, tradingRecord); TaTestsUtils.AssertDecimalEquals(cashFlow.GetValue(0), 1); TaTestsUtils.AssertDecimalEquals(cashFlow.GetValue(1), 2); TaTestsUtils.AssertDecimalEquals(cashFlow.GetValue(2), 4); TaTestsUtils.AssertDecimalEquals(cashFlow.GetValue(3), 2); TaTestsUtils.AssertDecimalEquals(cashFlow.GetValue(4), 1); TaTestsUtils.AssertDecimalEquals(cashFlow.GetValue(5), 2); }
public void DynamicAddTrade() { var data = new double[] { 2, 1, 3, 5, 6, 3, 20, 20, 3 }; // We will rely on this being correct as it duplicates tests above... TimeSeries confirmedSeries = GenerateTimeSeries.From(data); var confirmedTradingRecord = new TradingRecord(Order.BuyAt(0), Order.SellAt(2), Order.BuyAt(3), Order.SellAt(4), Order.BuyAt(5), Order.SellAt(6), Order.BuyAt(7), Order.SellAt(8)); // use these results to check against the dynamically added Trades var confirmedCashFlow = new CashFlow(confirmedSeries, confirmedTradingRecord); TimeSeries sampleTimeSeries = new TimeSeries(); var tradingRecord = new TradingRecord(); var cashFlow = new CashFlow(sampleTimeSeries, tradingRecord); for (var i = 0; i < data.Length; i++) { sampleTimeSeries.AddTick(GenerateTick.From((new LocalDateTime()).WithMillisOfSecond(i), data[i])); switch (i) { case 0: // buy case 3: // buy case 5: // buy case 7: // buy tradingRecord.Enter(i); break; case 2: // sell case 4: // sell case 6: // sell case 8: // sell tradingRecord.Exit(i); cashFlow.AddTrade(tradingRecord.LastTrade); break; default: // don't do anything break; } } // Check all the data off... Assert.Multiple(() => { for (var i = 0; i < data.Length; i++) { TaTestsUtils.AssertDecimalEquals(cashFlow.GetValue(i), confirmedCashFlow.GetValue(i).ToDouble()); } }); }
public void CashFlowWithSellAndBuyOrders() { TimeSeries sampleTimeSeries = GenerateTimeSeries.From(2, 1, 3, 5, 6, 3, 20); var tradingRecord = new TradingRecord(Order.BuyAt(0), Order.SellAt(1), Order.BuyAt(3), Order.SellAt(4), Order.SellAt(5), Order.BuyAt(6)); var cashFlow = new CashFlow(sampleTimeSeries, tradingRecord); TaTestsUtils.AssertDecimalEquals(cashFlow.GetValue(0), 1); TaTestsUtils.AssertDecimalEquals(cashFlow.GetValue(1), "0.5"); TaTestsUtils.AssertDecimalEquals(cashFlow.GetValue(2), "0.5"); TaTestsUtils.AssertDecimalEquals(cashFlow.GetValue(3), "0.5"); TaTestsUtils.AssertDecimalEquals(cashFlow.GetValue(4), "0.6"); TaTestsUtils.AssertDecimalEquals(cashFlow.GetValue(5), "0.6"); TaTestsUtils.AssertDecimalEquals(cashFlow.GetValue(6), "0.09"); }
public void SetUp() { IList <Tick> ticks = new List <Tick>(); // open, close, high, low ticks.Add(GenerateTick.From(19, 19, 22, 15)); ticks.Add(GenerateTick.From(10, 18, 20, 8)); ticks.Add(GenerateTick.From(17, 20, 21, 17)); ticks.Add(GenerateTick.From(19, 17, 20, 16.9)); ticks.Add(GenerateTick.From(17.5, 14, 18, 13.9)); ticks.Add(GenerateTick.From(15, 11, 15, 11)); ticks.Add(GenerateTick.From(12, 14, 15, 8)); ticks.Add(GenerateTick.From(13, 16, 16, 11)); _series = GenerateTimeSeries.From(ticks); }
public void SetUp() { IList <Tick> ticks = new List <Tick>(); // open, close, high, low ticks.Add(GenerateTick.From(19, 19, 22, 15)); ticks.Add(GenerateTick.From(10, 18, 20, 8)); ticks.Add(GenerateTick.From(17, 16, 21, 15)); ticks.Add(GenerateTick.From(15.6, 18, 18.1, 14)); ticks.Add(GenerateTick.From(16, 19.9, 20, 15)); ticks.Add(GenerateTick.From(16.8, 23, 23, 16.7)); ticks.Add(GenerateTick.From(17, 25, 25, 17)); ticks.Add(GenerateTick.From(23, 16.8, 24, 15)); _series = GenerateTimeSeries.From(ticks); }
public void StackOverflowError() { IList <Tick> bigListOfTicks = new List <Tick>(); for (var i = 0; i < 10000; i++) { bigListOfTicks.Add(GenerateTick.From(i)); } var bigSeries = GenerateTimeSeries.From(bigListOfTicks); var obv = new OnBalanceVolumeIndicator(bigSeries); // If a StackOverflowError is thrown here, then the RecursiveCachedIndicator // does not work as intended. TaTestsUtils.AssertDecimalEquals(obv.GetValue(9999), 0); }
public void StackOverflowError() { IList <Tick> bigListOfTicks = new List <Tick>(); for (var i = 0; i < 10000; i++) { bigListOfTicks.Add(GenerateTick.From(i)); } var bigSeries = GenerateTimeSeries.From(bigListOfTicks); var closePrice = new ClosePriceIndicator(bigSeries); var ema = new EmaIndicator(closePrice, 10); // If a StackOverflowError is thrown here, then the RecursiveCachedIndicator // does not work as intended. TaTestsUtils.AssertDecimalEquals(ema.GetValue(9999), 9994.5); }
public void CalculateLinearCost() { var series = GenerateTimeSeries.From(100, 150, 200, 100, 50, 100); IAnalysisCriterion transactionCost = new LinearTransactionCostCriterion(1000, 0.005, 0.2); var tradingRecord = new TradingRecord(Order.BuyAt(0), Order.SellAt(1)); Assert.AreEqual(12.861, transactionCost.Calculate(series, tradingRecord), TaTestsUtils.TaOffset); tradingRecord.Operate(2); tradingRecord.Operate(3); Assert.AreEqual(24.3473, transactionCost.Calculate(series, tradingRecord), TaTestsUtils.TaOffset); tradingRecord.Operate(5); Assert.AreEqual(28.2204, transactionCost.Calculate(series, tradingRecord), TaTestsUtils.TaOffset); }
public void CalculateFixedCost() { var series = GenerateTimeSeries.From(100, 105, 110, 100, 95, 105); IAnalysisCriterion transactionCost = new LinearTransactionCostCriterion(1000, 0, 1.3d); var tradingRecord = new TradingRecord(Order.BuyAt(0), Order.SellAt(1)); Assert.AreEqual(2.6d, transactionCost.Calculate(series, tradingRecord), TaTestsUtils.TaOffset); tradingRecord.Operate(2); tradingRecord.Operate(3); Assert.AreEqual(5.2d, transactionCost.Calculate(series, tradingRecord), TaTestsUtils.TaOffset); tradingRecord.Operate(0); Assert.AreEqual(6.5d, transactionCost.Calculate(series, tradingRecord), TaTestsUtils.TaOffset); }
public void GetValue() { IList <Tick> ticks = new List <Tick>(); ticks.Add(GenerateTick.From(0, 12, 15, 8)); ticks.Add(GenerateTick.From(0, 8, 11, 6)); ticks.Add(GenerateTick.From(0, 15, 17, 14)); ticks.Add(GenerateTick.From(0, 15, 17, 14)); ticks.Add(GenerateTick.From(0, 0, 0, 2)); var atr = new AverageTrueRangeIndicator(GenerateTimeSeries.From(ticks), 3); TaTestsUtils.AssertDecimalEquals(atr.GetValue(0), 1); TaTestsUtils.AssertDecimalEquals(atr.GetValue(1), 8d / 3); TaTestsUtils.AssertDecimalEquals(atr.GetValue(2), 8d / 3 * 2d / 3 + 3); TaTestsUtils.AssertDecimalEquals(atr.GetValue(3), (8d / 3 * 2d / 3 + 3) * 2d / 3 + 1); TaTestsUtils.AssertDecimalEquals(atr.GetValue(4), ((8d / 3 * 2d / 3 + 3) * 2d / 3 + 1) * 2d / 3 + 15d / 3); }
public void TrendSwitchTest() { IList <Tick> ticks = new List <Tick>(); ticks.Add(GenerateTick.From(0, 10, 13, 8)); ticks.Add(GenerateTick.From(0, 8, 11, 6)); ticks.Add(GenerateTick.From(0, 6, 9, 4)); ticks.Add(GenerateTick.From(0, 11, 15, 9)); ticks.Add(GenerateTick.From(0, 13, 15, 9)); var sar = new ParabolicSarIndicator(GenerateTimeSeries.From(ticks), 1); TaTestsUtils.AssertDecimalEquals(sar.GetValue(0), 10); TaTestsUtils.AssertDecimalEquals(sar.GetValue(1), 8); TaTestsUtils.AssertDecimalEquals(sar.GetValue(2), 11); TaTestsUtils.AssertDecimalEquals(sar.GetValue(3), 4); TaTestsUtils.AssertDecimalEquals(sar.GetValue(4), 4); }
public void GetValue() { IList <Tick> ticks = new List <Tick>(); ticks.Add(GenerateTick.From(0, 12, 15, 8)); ticks.Add(GenerateTick.From(0, 8, 11, 6)); ticks.Add(GenerateTick.From(0, 15, 17, 14)); ticks.Add(GenerateTick.From(0, 15, 17, 14)); ticks.Add(GenerateTick.From(0, 0, 0, 2)); var tr = new TrueRangeIndicator(GenerateTimeSeries.From(ticks)); TaTestsUtils.AssertDecimalEquals(tr.GetValue(0), 7); TaTestsUtils.AssertDecimalEquals(tr.GetValue(1), 6); TaTestsUtils.AssertDecimalEquals(tr.GetValue(2), 9); TaTestsUtils.AssertDecimalEquals(tr.GetValue(3), 3); TaTestsUtils.AssertDecimalEquals(tr.GetValue(4), 15); }
public void CoppockCurveWithRoc14Roc11Wma10() { // Example from http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:coppock_curve TimeSeries data = GenerateTimeSeries.From(872.81, 919.14, 919.32, 987.48, 1020.62, 1057.08, 1036.19, 1095.63, 1115.1, 1073.87, 1104.49, 1169.43, 1186.69, 1089.41, 1030.71, 1101.6, 1049.33, 1141.2, 1183.26, 1180.55, 1257.64, 1286.12, 1327.22, 1325.83, 1363.61, 1345.2, 1320.64, 1292.28, 1218.89, 1131.42, 1253.3, 1246.96, 1257.6, 1312.41, 1365.68, 1408.47, 1397.91, 1310.33, 1362.16, 1379.32); var cc = new CoppockCurveIndicator(new ClosePriceIndicator(data), 14, 11, 10); TaTestsUtils.AssertDecimalEquals(cc.GetValue(31), 23.8929); TaTestsUtils.AssertDecimalEquals(cc.GetValue(32), 19.3187); TaTestsUtils.AssertDecimalEquals(cc.GetValue(33), 16.3505); TaTestsUtils.AssertDecimalEquals(cc.GetValue(34), 14.12); TaTestsUtils.AssertDecimalEquals(cc.GetValue(35), 12.782); TaTestsUtils.AssertDecimalEquals(cc.GetValue(36), 11.3924); TaTestsUtils.AssertDecimalEquals(cc.GetValue(37), 8.3662); TaTestsUtils.AssertDecimalEquals(cc.GetValue(38), 7.4532); TaTestsUtils.AssertDecimalEquals(cc.GetValue(39), 8.79); }
public void CalculateFixedCostWithOneTrade() { var series = GenerateTimeSeries.From(100, 95, 100, 80, 85, 70); var trade = new Trade(); IAnalysisCriterion transactionCost = new LinearTransactionCostCriterion(1000, 0, 0.75d); Assert.AreEqual(0, (int)transactionCost.Calculate(series, trade)); trade.Operate(1); Assert.AreEqual(0.75d, transactionCost.Calculate(series, trade), TaTestsUtils.TaOffset); trade.Operate(3); Assert.AreEqual(1.5d, transactionCost.Calculate(series, trade), TaTestsUtils.TaOffset); trade.Operate(4); Assert.AreEqual(1.5d, transactionCost.Calculate(series, trade), TaTestsUtils.TaOffset); }
public void TrendSwitchTest2() { IList <Tick> ticks = new List <Tick>(); ticks.Add(GenerateTick.From(0, 10, 13, 11)); ticks.Add(GenerateTick.From(0, 10, 15, 13)); ticks.Add(GenerateTick.From(0, 12, 18, 11)); ticks.Add(GenerateTick.From(0, 10, 15, 9)); ticks.Add(GenerateTick.From(0, 9, 15, 9)); var sar = new ParabolicSarIndicator(GenerateTimeSeries.From(ticks), 1); TaTestsUtils.AssertDecimalEquals(sar.GetValue(0), 10); TaTestsUtils.AssertDecimalEquals(sar.GetValue(1), 10); TaTestsUtils.AssertDecimalEquals(sar.GetValue(2), 0.04 * (18 - 10) + 10); TaTestsUtils.AssertDecimalEquals(sar.GetValue(3), 18); TaTestsUtils.AssertDecimalEquals(sar.GetValue(4), 18); }
public void SetUp() { IList <Tick> ticks = new List <Tick>(); ticks.Add(GenerateTick.From(0, 0, 16, 8)); ticks.Add(GenerateTick.From(0, 0, 12, 6)); ticks.Add(GenerateTick.From(0, 0, 18, 14)); ticks.Add(GenerateTick.From(0, 0, 10, 6)); ticks.Add(GenerateTick.From(0, 0, 32, 6)); ticks.Add(GenerateTick.From(0, 0, 2, 2)); ticks.Add(GenerateTick.From(0, 0, 0, 0)); ticks.Add(GenerateTick.From(0, 0, 8, 1)); ticks.Add(GenerateTick.From(0, 0, 83, 32)); ticks.Add(GenerateTick.From(0, 0, 9, 3)); _timeSeries = GenerateTimeSeries.From(ticks); _average = new MedianPriceIndicator(_timeSeries); }
public void CashFlowWithConstrainedSeries() { var series = GenerateTimeSeries.From(5d, 6d, 3d, 7d, 8d, 6d, 10d, 15d, 6d); var constrained = series.Subseries(4, 8); var tradingRecord = new TradingRecord(Order.BuyAt(4), Order.SellAt(5), Order.BuyAt(6), Order.SellAt(8)); var flow = new CashFlow(constrained, tradingRecord); TaTestsUtils.AssertDecimalEquals(flow.GetValue(0), 1); TaTestsUtils.AssertDecimalEquals(flow.GetValue(1), 1); TaTestsUtils.AssertDecimalEquals(flow.GetValue(2), 1); TaTestsUtils.AssertDecimalEquals(flow.GetValue(3), 1); TaTestsUtils.AssertDecimalEquals(flow.GetValue(4), 1); TaTestsUtils.AssertDecimalEquals(flow.GetValue(5), "0.75"); TaTestsUtils.AssertDecimalEquals(flow.GetValue(6), "0.75"); TaTestsUtils.AssertDecimalEquals(flow.GetValue(7), "1.125"); TaTestsUtils.AssertDecimalEquals(flow.GetValue(8), "0.45"); }
public void UpTrendTest() { IList <Tick> ticks = new List <Tick>(); ticks.Add(GenerateTick.From(0, 10, 13, 11)); ticks.Add(GenerateTick.From(0, 17, 15, 11.38)); ticks.Add(GenerateTick.From(0, 18, 16, 14)); ticks.Add(GenerateTick.From(0, 19, 17, 12)); ticks.Add(GenerateTick.From(0, 20, 18, 9)); var sar = new ParabolicSarIndicator(GenerateTimeSeries.From(ticks), 1); TaTestsUtils.AssertDecimalEquals(sar.GetValue(0), 10); TaTestsUtils.AssertDecimalEquals(sar.GetValue(1), 17); TaTestsUtils.AssertDecimalEquals(sar.GetValue(2), 11.38); TaTestsUtils.AssertDecimalEquals(sar.GetValue(3), 11.38); TaTestsUtils.AssertDecimalEquals(sar.GetValue(4), 18); }
public void GetValue() { IList <Tick> ticks = new List <Tick>(); ticks.Add(GenerateTick.From(0, 0, 10, 2)); ticks.Add(GenerateTick.From(0, 0, 12, 2)); ticks.Add(GenerateTick.From(0, 0, 15, 2)); ticks.Add(GenerateTick.From(0, 0, 11, 2)); ticks.Add(GenerateTick.From(0, 0, 13, 7)); var series = GenerateTimeSeries.From(ticks); var dup = new DirectionalUpIndicator(series, 3); TaTestsUtils.AssertDecimalEquals(dup.GetValue(0), 1); TaTestsUtils.AssertDecimalEquals(dup.GetValue(1), (4d / 3) / (14d / 3)); TaTestsUtils.AssertDecimalEquals(dup.GetValue(2), (4d / 3 * 2d / 3 + 1) / (14d / 3 * 2d / 3 + 15d / 3)); TaTestsUtils.AssertDecimalEquals(dup.GetValue(3), ((4d / 3 * 2d / 3 + 1) * 2d / 3) / (((14d / 3 * 2d / 3 + 15d / 3) * 2d / 3) + 11d / 3)); TaTestsUtils.AssertDecimalEquals(dup.GetValue(4), ((4d / 3 * 2d / 3 + 1) * 2d / 3 * 2d / 3 + 2d / 3) / (((((14d / 3 * 2d / 3 + 15d / 3) * 2d / 3) + 11d / 3) * 2d / 3) + 13d / 3)); }