private IEnumerable<Signal> AddEquityTotalling(IEnumerable<Signal> signals) { var equityTotaller = new SignalEquityPositionTotaller(signals, 100m); var totals = equityTotaller.Calculate(); return signals.Select(s => { var total = totals.First(t => t.Key == s.Date); s.CurrentEquity = total.Value; return s; }); }
public void ShortIsSucessfulTest() { var signals = new[]{ Signal.Create("SGP.L", DateTime.Today, SignalType.Sell, 1000), Signal.Create("SGP.L", DateTime.Today.AddDays(1), SignalType.Buy, 900) }; var totaller = new SignalEquityPositionTotaller(signals, 2000); var result = totaller.Calculate(); var expectedResult = new Dictionary<DateTime, decimal>{ {DateTime.Today.AddDays(0), 2000}, {DateTime.Today.AddDays(1), 2200} }; Assert.AreEqual(expectedResult, result); }
public void TakeProfitsTest() { var signals = new[]{ Signal.Create("SGP.L", DateTime.Today, SignalType.Buy, 1000), Signal.Create("SGP.L", DateTime.Today.AddDays(1), SignalType.TakeProfits, 1100), Signal.Create("SGP.L", DateTime.Today.AddDays(2), SignalType.Sell, 1000), Signal.Create("SGP.L", DateTime.Today.AddDays(3), SignalType.Buy, 800), Signal.Create("SGP.L", DateTime.Today.AddDays(4), SignalType.TakeProfits, 880), }; var totaller = new SignalEquityPositionTotaller(signals, 2000); var result = totaller.Calculate(); var expectedResult = new Dictionary<DateTime, decimal>{ {DateTime.Today.AddDays(0), 2000}, {DateTime.Today.AddDays(1), 2200}, {DateTime.Today.AddDays(2), 2200}, {DateTime.Today.AddDays(3), 2640}, {DateTime.Today.AddDays(4), 2904} }; Assert.AreEqual(expectedResult, result); }
public void NoSignalsTest() { var totaller = new SignalEquityPositionTotaller(new List<Signal>(), 1000); var result = totaller.Calculate(); Assert.AreEqual(0, result.Count); }
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; }