public void Metrics_Flat() { var startTime = DateTime.Parse("1-1-2016"); TimePriceSeries priceSeries = new TimePriceSeries(new Dictionary<DateTime, decimal> { {startTime.AddDays(1),10}, {startTime.AddDays(2),10}, {startTime.AddDays(3),10}, {startTime.AddDays(4),10}, {startTime.AddDays(5),10}, {startTime.AddDays(6),10}, {startTime.AddDays(7),10}, {startTime.AddDays(8),10}, {startTime.AddDays(9),10}, {startTime.AddDays(10),10}, }); var sut = priceSeries.CalculatePerformanceMetrics(); Assert.That(sut.MaxDrawdown, Is.EqualTo(0)); Assert.That(sut.MaxDrawdownPc, Is.EqualTo(0)); Assert.That(sut.MaxDrawdownRecoveryTime, Is.EqualTo(TimeSpan.Zero)); Assert.That(sut.Count, Is.EqualTo(10)); Assert.That(sut.TotalPnL, Is.EqualTo(0)); Assert.That(sut.LoosingTrades, Is.EqualTo(0)); Assert.That(sut.WinningTrades, Is.EqualTo(0)); }
public void Metrics_DD1_1Peak() { var startTime = DateTime.Parse("1-1-2016"); TimePriceSeries priceSeries = new TimePriceSeries(new Dictionary<DateTime, decimal> { {startTime.AddDays(1),1}, {startTime.AddDays(2),2}, {startTime.AddDays(3),3}, {startTime.AddDays(4),4},//P {startTime.AddDays(5),3}, {startTime.AddDays(6),2},//T {startTime.AddDays(7),3}, {startTime.AddDays(8),3.5m}, {startTime.AddDays(9),4}, {startTime.AddDays(10),6}, }); var perfPrice = priceSeries.CalculatePerformanceMetrics(); Assert.That(perfPrice.MaxDrawdown, Is.EqualTo(2)); Assert.That(perfPrice.MaxDrawdownPc, Is.EqualTo(0.50)); Assert.That(perfPrice.MaxDrawdownRecoveryTime, Is.EqualTo(TimeSpan.FromDays(4))); }
public void Metrics_Sharpe() { var startTime = DateTime.Parse("1-1-2016"); TimePriceSeries priceSeries = new TimePriceSeries(new Dictionary<DateTime, decimal> { {startTime.AddDays(1),5}, {startTime.AddDays(2),6}, {startTime.AddDays(3),7}, {startTime.AddDays(4),8}, {startTime.AddDays(5),9}, {startTime.AddDays(6),10}, {startTime.AddDays(7),9}, {startTime.AddDays(8),12}, }); var sut = priceSeries.CalculatePerformanceMetrics(); Assert.That(sut.SharpeRatio.AlmostEquals(0.830747161m)); }
public void Metrics_DD4() { var startTime = DateTime.Parse("1-1-2016"); TimePriceSeries priceSeries = new TimePriceSeries(new Dictionary<DateTime, decimal> { {startTime.AddDays(1),5}, {startTime.AddDays(2),6}, {startTime.AddDays(3),8},//P {startTime.AddDays(4),6}, {startTime.AddDays(5),5}, {startTime.AddDays(6),6}, {startTime.AddDays(7),7}, {startTime.AddDays(8),6}, {startTime.AddDays(9),4}, //T {startTime.AddDays(10),6}, }); var perfPrice = priceSeries.CalculatePerformanceMetrics(); Assert.That(perfPrice.MaxDrawdown, Is.EqualTo(4)); Assert.That(perfPrice.MaxDrawdownPc, Is.EqualTo(4 / 8m)); Assert.That(perfPrice.MaxDrawdownRecoveryTime, Is.EqualTo(TimeSpan.FromDays(1)));// actually, never recovered }