コード例 #1
0
        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));
        }
コード例 #2
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)));

        }
コード例 #3
0
        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));

        }
コード例 #4
0
        public void Cumulative_Differential()
        {
            var startTime = DateTime.Parse("1-1-2016");
            TimePriceSeries series = new TimePriceSeries(new Dictionary<DateTime, decimal>
            {
                {startTime.AddDays(1),1},
                {startTime.AddDays(2),2},
                {startTime.AddDays(3),-3},
                {startTime.AddDays(4),1},
                {startTime.AddDays(5),-2},
            });

            var cumSeries = TimePriceSeries.FromPnLSeries(series);
            Assert.That(cumSeries[0].Value, Is.EqualTo(1));
            Assert.That(cumSeries[1].Value, Is.EqualTo(3));
            Assert.That(cumSeries[2].Value, Is.EqualTo(0));
            Assert.That(cumSeries[3].Value, Is.EqualTo(1));
            Assert.That(cumSeries[4].Value, Is.EqualTo(-1));

            var diffSeries = cumSeries.ToPnLSeries();
            Assert.That(diffSeries[0].Value, Is.EqualTo(0)); // first is always 0
            for(int i = 1 ; i < series.Count; i++)
                Assert.That(series[i].Value, Is.EqualTo(diffSeries[i].Value));
        }
コード例 #5
0
        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
        }