public void OneStrategyUsedTest() { var strategy = new Mock<AbstractTradingStrategy>(); StrategyApplicabilitySetup(strategy, DateTime.Today, DateTime.Today.AddDays(4), true); StrategySignalSetup(strategy, SignalType.Buy, DateTime.Today); StrategySignalSetup(strategy, SignalType.TakeProfits, DateTime.Today.AddDays(4)); var signalGenerator = new SignalGenerator(this.SetupDatapoints(), new[] { strategy.Object }); var signals = signalGenerator.Generate(); Assert.AreEqual(new[] { SignalType.Buy, SignalType.TakeProfits, }, signals.Select(s => s.SignalType).ToArray()); }
public void StrategyUsedUntilPositionIsClosedTest() { var strategy = new Mock<AbstractTradingStrategy>(); StrategyApplicabilitySetup(strategy, DateTime.Today, DateTime.Today.AddDays(1), true); StrategyApplicabilitySetup(strategy, DateTime.Today.AddDays(2), DateTime.Today.AddDays(7), false); StrategySignalSetup(strategy, SignalType.Buy, DateTime.Today); StrategySignalSetup(strategy, SignalType.TakeProfits, DateTime.Today.AddDays(4)); // The below signal should not be returned as the stategy should no longer be applicable StrategySignalSetup(strategy, SignalType.Sell, DateTime.Today.AddDays(6)); var signalGenerator = new SignalGenerator(this.SetupDatapoints(), new[] { strategy.Object }); var signals = signalGenerator.Generate(); Assert.AreEqual(new[] { SignalType.Buy, SignalType.TakeProfits, }, signals.Select(s => s.SignalType).ToArray()); }
public void TwoStrategiesUsedTest() { var strategy1 = new Mock<AbstractTradingStrategy>(); var strategy2 = new Mock<AbstractTradingStrategy>(); StrategyApplicabilitySetup(strategy1, DateTime.Today, DateTime.Today.AddDays(4), true); StrategyApplicabilitySetup(strategy1, DateTime.Today.AddDays(5), DateTime.Today.AddDays(7), false); StrategyApplicabilitySetup(strategy2, DateTime.Today, DateTime.Today.AddDays(4), false); StrategyApplicabilitySetup(strategy2, DateTime.Today.AddDays(5), DateTime.Today.AddDays(7), true); StrategySignalSetup(strategy1, SignalType.Buy, DateTime.Today); StrategySignalSetup(strategy1, SignalType.TakeProfits, DateTime.Today.AddDays(4)); StrategySignalSetup(strategy2, SignalType.Sell, DateTime.Today.AddDays(6)); var signalGenerator = new SignalGenerator(this.SetupDatapoints(), new[] { strategy1.Object, strategy2.Object }); var signals = signalGenerator.Generate(); Assert.AreEqual(new[] { SignalType.Buy, SignalType.TakeProfits, SignalType.Sell }, signals.Select(s => s.SignalType).ToArray()); }
private IEnumerable<Signal> GenerateSignals(string symbol, IEnumerable<DataPoints> dataPoints) { var newSignals = new List<Signal>(); var company = this.companyRepository.FindBySymbol(symbol); if (company.ExcludeYn == 0) { var generator = new SignalGenerator(dataPoints, this.CreateStrategies(dataPoints)); var generatedSignals = generator.Generate().ToList(); if (generatedSignals.Any()) { var totaller = new SignalEquityPositionTotaller(generatedSignals, 100); var totals = totaller.Calculate(); var signalsToInsert = generatedSignals.Where(s => totals.ContainsKey(s.Date)).Select(s => { s.CurrentEquity = totals[s.Date]; return s; }); newSignals.AddRange(signalsToInsert); } } return newSignals; }