public void Calculate_NonEmptyState__CorrectCummary()
        {
            _state.PositionsClosed.AddRange(Enumerable.Range(1, 3).Select(_ => new Position()
            {
                Direction = PositionDir.Long,
                Open      = 10,
                Close     = 9,
                Volume    = 1,
            }));
            _state.PositionsClosed.Add(new Position()
            {
                Direction = PositionDir.Long,
                Open      = 10,
                Close     = 20,
                Volume    = 1,
            });
            _state.Equity.AddRange(Enumerable.Range(1, 10).Select(i => new SystemValue()
            {
                TS    = DateTime.Now.AddDays(i),
                Value = i
            }));

            WinsLossesCalculator.Calculate(_summary, _state);

            _summary.StartTS.ShouldBe(DateTime.MinValue);
            _summary.StopTS.ShouldBe(DateTime.MinValue);
            _summary.ProcessedTicks.ShouldBe(10);
            _summary.InitialValue.ShouldBe(0);
            _summary.FinalValueOnLastTick.ShouldBe(0);
            _summary.FinalValueOnClosedPositions.ShouldBe(0);
            _summary.ClosedPositionsCount.ShouldBe(4);
            _summary.Wins.ShouldBe(1);
            _summary.Losses.ShouldBe(3);
            _summary.WinProbability.ShouldBe(0.25f);
            _summary.LossProbability.ShouldBe(0.75f);
            _summary.SumWins.ShouldBe(10);
            _summary.SumLosses.ShouldBe(3);
            _summary.AvgWin.ShouldBe(10f);
            _summary.AvgPcntWin.ShouldBe(1f);
            _summary.AvgLoss.ShouldBe(1f);
            _summary.AvgPcntLoss.ShouldBe(-0.1f);
            _summary.AvgWinLossRatio.ShouldBe(10f);
            _summary.ExpectedPositionValue.ShouldBe(1.75f);
        }
        public void Calculate_EmptyState__EmptySummary()
        {
            WinsLossesCalculator.Calculate(_summary, _state);

            _summary.StartTS.ShouldBe(DateTime.MinValue);
            _summary.StopTS.ShouldBe(DateTime.MinValue);
            _summary.ProcessedTicks.ShouldBe(0);
            _summary.InitialValue.ShouldBe(0);
            _summary.FinalValueOnLastTick.ShouldBe(0);
            _summary.FinalValueOnClosedPositions.ShouldBe(0);
            _summary.ClosedPositionsCount.ShouldBe(0);
            _summary.Wins.ShouldBe(0);
            _summary.Losses.ShouldBe(0);
            _summary.WinProbability.ShouldBe(0);
            _summary.LossProbability.ShouldBe(0);
            _summary.SumWins.ShouldBe(0);
            _summary.SumLosses.ShouldBe(0);
            _summary.AvgWin.ShouldBe(0);
            _summary.AvgPcntWin.ShouldBe(0);
            _summary.AvgLoss.ShouldBe(0);
            _summary.AvgPcntLoss.ShouldBe(0);
            _summary.AvgWinLossRatio.ShouldBe(0);
            _summary.ExpectedPositionValue.ShouldBe(0);
        }