Exemple #1
0
        internal static List <Drawdown> allDrawdowns(StatisticsCollector collector)
        {
            var      equities       = cumulativeSum(collector.pnl());
            var      highWaterMarks = cumulativeMax(equities);
            Drawdown current        = null;
            var      drawdowns      = new List <Drawdown>();

            each(equities, highWaterMarks, (equity, highWaterMark) => {
                if (equity == highWaterMark)
                {
                    if (current != null)
                    {
                        current.closed();
                    }
                    current = null;
                    return;
                }
                if (current == null)
                {
                    current = new Drawdown();
                    drawdowns.Add(current);
                }
                current.add(equity, highWaterMark);
            });
            return(drawdowns);
        }
        private void ParseResult(Result result)
        {
            var windows = result.RollingWindow.GroupBy(v => v.Key.Split('_')[1])
                          .Select(g => new
            {
                Date = DateTime.ParseExact(g.Key, "yyyyMMdd", CultureInfo.InvariantCulture),
                M1   = g.First(x => x.Key.StartsWith("M1")).Value,
                M3   = g.First(x => x.Key.StartsWith("M3")).Value,
                M6   = g.First(x => x.Key.StartsWith("M6")).Value,
                M12  = g.First(x => x.Key.StartsWith("M12")).Value
            });

            foreach (var window in windows)
            {
                if (!Drawdown.ContainsKey(window.Date))
                {
                    Drawdown[window.Date] = new RollingStatisticsItemViewModel();
                }
                var drawdown = Drawdown[window.Date];
                drawdown.M1  = window.M1.PortfolioStatistics.Drawdown;
                drawdown.M3  = window.M3.PortfolioStatistics.Drawdown;
                drawdown.M6  = window.M6.PortfolioStatistics.Drawdown;
                drawdown.M12 = window.M12.PortfolioStatistics.Drawdown;

                if (!AvgWinRate.ContainsKey(window.Date))
                {
                    AvgWinRate[window.Date] = new RollingStatisticsItemViewModel();
                }
                var avgWinRate = AvgWinRate[window.Date];
                avgWinRate.M1  = window.M1.PortfolioStatistics.AverageWinRate;
                avgWinRate.M3  = window.M3.PortfolioStatistics.AverageWinRate;
                avgWinRate.M6  = window.M6.PortfolioStatistics.AverageWinRate;
                avgWinRate.M12 = window.M12.PortfolioStatistics.AverageWinRate;
            }
        }