public virtual void WaitForSinceLastBuyRuleIsSatisfied() { // Waits for 3 ticks since last buy order _rule = new WaitForRule(OrderType.Buy, 3); Assert.IsFalse(_rule.IsSatisfied(0, null)); Assert.IsFalse(_rule.IsSatisfied(1, _tradingRecord)); _tradingRecord.Enter(10); Assert.IsFalse(_rule.IsSatisfied(10, _tradingRecord)); Assert.IsFalse(_rule.IsSatisfied(11, _tradingRecord)); Assert.IsFalse(_rule.IsSatisfied(12, _tradingRecord)); Assert.IsTrue(_rule.IsSatisfied(13, _tradingRecord)); Assert.IsTrue(_rule.IsSatisfied(14, _tradingRecord)); _tradingRecord.Exit(15); Assert.IsTrue(_rule.IsSatisfied(15, _tradingRecord)); Assert.IsTrue(_rule.IsSatisfied(16, _tradingRecord)); _tradingRecord.Enter(17); Assert.IsFalse(_rule.IsSatisfied(17, _tradingRecord)); Assert.IsFalse(_rule.IsSatisfied(18, _tradingRecord)); Assert.IsFalse(_rule.IsSatisfied(19, _tradingRecord)); Assert.IsTrue(_rule.IsSatisfied(20, _tradingRecord)); }
public override double Calculate(TimeSeries series, Trade trade) { var fakeRecord = new TradingRecord(); fakeRecord.Enter(series.Begin); fakeRecord.Exit(series.End); return(_criterion.Calculate(series, trade) / _criterion.Calculate(series, fakeRecord)); }
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 virtual void IsSatisfied() { Decimal tradedAmount = Decimal.One; // 30% stop-gain _rule = new StopGainRule(_closePrice, Decimal.ValueOf("30")); Assert.IsFalse(_rule.IsSatisfied(0, null)); Assert.IsFalse(_rule.IsSatisfied(1, _tradingRecord)); // Enter at 108 _tradingRecord.Enter(2, Decimal.ValueOf("108"), tradedAmount); Assert.IsFalse(_rule.IsSatisfied(2, _tradingRecord)); Assert.IsFalse(_rule.IsSatisfied(3, _tradingRecord)); Assert.IsTrue(_rule.IsSatisfied(4, _tradingRecord)); // Exit _tradingRecord.Exit(5); // Enter at 118 _tradingRecord.Enter(5, Decimal.ValueOf("118"), tradedAmount); Assert.IsFalse(_rule.IsSatisfied(5, _tradingRecord)); Assert.IsTrue(_rule.IsSatisfied(6, _tradingRecord)); Assert.IsTrue(_rule.IsSatisfied(7, _tradingRecord)); }
public virtual void IsSatisfied() { Decimal tradedAmount = Decimal.One; // 5% stop-loss _rule = new StopLossRule(_closePrice, Decimal.ValueOf("5")); Assert.IsFalse(_rule.IsSatisfied(0, null)); Assert.IsFalse(_rule.IsSatisfied(1, _tradingRecord)); // Enter at 114 _tradingRecord.Enter(2, Decimal.ValueOf("114"), tradedAmount); Assert.IsFalse(_rule.IsSatisfied(2, _tradingRecord)); Assert.IsFalse(_rule.IsSatisfied(3, _tradingRecord)); Assert.IsTrue(_rule.IsSatisfied(4, _tradingRecord)); // Exit _tradingRecord.Exit(5); // Enter at 128 _tradingRecord.Enter(5, Decimal.ValueOf("128"), tradedAmount); Assert.IsFalse(_rule.IsSatisfied(5, _tradingRecord)); Assert.IsTrue(_rule.IsSatisfied(6, _tradingRecord)); Assert.IsTrue(_rule.IsSatisfied(7, _tradingRecord)); }