/// <summary> /// Returns a summary of the algorithm performance as a dictionary /// </summary> private static Dictionary <string, string> GetSummary(AlgorithmPerformance totalPerformance, decimal totalFees, int totalTransactions) { return(new Dictionary <string, string> { { "Total Trades", totalTransactions.ToString(CultureInfo.InvariantCulture) }, { "Average Win", Math.Round(totalPerformance.PortfolioStatistics.AverageWinRate.SafeMultiply100(), 2) + "%" }, { "Average Loss", Math.Round(totalPerformance.PortfolioStatistics.AverageLossRate.SafeMultiply100(), 2) + "%" }, { "Compounding Annual Return", Math.Round(totalPerformance.PortfolioStatistics.CompoundingAnnualReturn.SafeMultiply100(), 3) + "%" }, { "Drawdown", (Math.Round(totalPerformance.PortfolioStatistics.Drawdown.SafeMultiply100(), 3)) + "%" }, { "Expectancy", Math.Round(totalPerformance.PortfolioStatistics.Expectancy, 3).ToString(CultureInfo.InvariantCulture) }, { "Net Profit", Math.Round(totalPerformance.PortfolioStatistics.TotalNetProfit.SafeMultiply100(), 3) + "%" }, { "Sharpe Ratio", Math.Round((double)totalPerformance.PortfolioStatistics.SharpeRatio, 3).ToString(CultureInfo.InvariantCulture) }, { "Loss Rate", Math.Round(totalPerformance.PortfolioStatistics.LossRate.SafeMultiply100()) + "%" }, { "Win Rate", Math.Round(totalPerformance.PortfolioStatistics.WinRate.SafeMultiply100()) + "%" }, { "Profit-Loss Ratio", Math.Round(totalPerformance.PortfolioStatistics.ProfitLossRatio, 2).ToString(CultureInfo.InvariantCulture) }, { "Alpha", Math.Round((double)totalPerformance.PortfolioStatistics.Alpha, 3).ToString(CultureInfo.InvariantCulture) }, { "Beta", Math.Round((double)totalPerformance.PortfolioStatistics.Beta, 3).ToString(CultureInfo.InvariantCulture) }, { "Annual Standard Deviation", Math.Round((double)totalPerformance.PortfolioStatistics.AnnualStandardDeviation, 3).ToString(CultureInfo.InvariantCulture) }, { "Annual Variance", Math.Round((double)totalPerformance.PortfolioStatistics.AnnualVariance, 3).ToString(CultureInfo.InvariantCulture) }, { "Information Ratio", Math.Round((double)totalPerformance.PortfolioStatistics.InformationRatio, 3).ToString(CultureInfo.InvariantCulture) }, { "Tracking Error", Math.Round((double)totalPerformance.PortfolioStatistics.TrackingError, 3).ToString(CultureInfo.InvariantCulture) }, { "Treynor Ratio", Math.Round((double)totalPerformance.PortfolioStatistics.TreynorRatio, 3).ToString(CultureInfo.InvariantCulture) }, { "Total Fees", "$" + totalFees.ToString("0.00") } }); }
/// <summary> /// Initializes a new instance of the <see cref="StatisticsResults"/> class /// </summary> public StatisticsResults() { TotalPerformance = new AlgorithmPerformance(); RollingPerformances = new Dictionary <string, AlgorithmPerformance>(); Summary = new Dictionary <string, string>(); }
/// <summary> /// Initializes a new instance of the <see cref="StatisticsResults"/> class /// </summary> /// <param name="totalPerformance">The algorithm total performance</param> /// <param name="rollingPerformances">The algorithm rolling performances</param> /// <param name="summary">The summary performance dictionary</param> public StatisticsResults(AlgorithmPerformance totalPerformance, Dictionary <string, AlgorithmPerformance> rollingPerformances, Dictionary <string, string> summary) { TotalPerformance = totalPerformance; RollingPerformances = rollingPerformances; Summary = summary; }