public override string ToString() { base.ToString(); winners.Name = Name + " Winners"; losers.Name = Name + " Losers"; return(base.ToString() + winners.Count.ToString("N0") + " winners. " + losers.Count.ToString("N0") + " losers. " + WinRate.ToString("P2") + " win ratio. " + ProfitFactor.ToString("N2") + " profit factor.\n" + Expectancy.ToString("N2") + " expectancy.\n" + winners.ToString() + losers.ToString()); }
/// <summary> /// Sets the additional stats in Money. /// </summary> private static void SetAdditionalMoneyStats() { string unit = " " + Configs.AccountCurrency; AdditionalStatsParamName = new[] { Language.T("Initial account"), Language.T("Account balance"), Language.T("Net profit"), Language.T("Net profit") + " %", Language.T("Gross profit"), Language.T("Gross loss"), Language.T("Profit factor"), Language.T("Annualized profit"), Language.T("Annualized profit") + " %", Language.T("Minimum account"), Language.T("Minimum account date"), Language.T("Maximum account"), Language.T("Maximum account date"), Language.T("Absolute drawdown"), Language.T("Maximum drawdown"), Language.T("Maximum drawdown") + " %", Language.T("Maximum drawdown date"), Language.T("Historical bars"), Language.T("Tested bars"), Language.T("Bars with trades"), Language.T("Bars with trades") + " %", Language.T("Number of trades"), Language.T("Winning trades"), Language.T("Losing trades"), Language.T("Win/loss ratio"), Language.T("Maximum profit"), Language.T("Average profit"), Language.T("Maximum loss"), Language.T("Average loss"), Language.T("Expected payoff"), Language.T("Average holding period returns"), Language.T("Geometric holding period returns"), Language.T("Sharpe ratio") }; int totalWinTrades = winningLongTrades + winningShortTrades; int totalLossTrades = losingLongTrades + losingShortTrades; int trades = totalWinTrades + totalLossTrades; AdditionalStatsValueTotal = new[] { Configs.InitialAccount.ToString("F2") + unit, NetMoneyBalance.ToString("F2") + unit, (NetMoneyBalance - Configs.InitialAccount).ToString("F2") + unit, (100 * ((NetMoneyBalance - Configs.InitialAccount) / Configs.InitialAccount)).ToString("F2") + "%", GrossMoneyProfit.ToString("F2") + unit, GrossMoneyLoss.ToString("F2") + unit, ProfitFactor.ToString("F2"), AnnualizedProfit.ToString("F2") + unit, AnnualizedProfitPercent.ToString("F2") + "%", MinMoneyBalance.ToString("F2") + unit, minMoneyBalanceDate.ToShortDateString(), MaxMoneyBalance.ToString("F2") + unit, maxMoneyBalanceDate.ToShortDateString(), (Configs.InitialAccount - MinMoneyBalance).ToString("F2") + unit, MaxMoneyDrawdown.ToString("F2") + unit, maxMoneyDrawdownPercent.ToString("F2") + "%", maxMoneyDrawdownDate.ToShortDateString(), Bars.ToString(CultureInfo.InvariantCulture), (Bars - FirstBar).ToString(CultureInfo.InvariantCulture), barsWithPos.ToString(CultureInfo.InvariantCulture), (100f * barsWithPos / (Bars - FirstBar)).ToString("F2") + "%", trades.ToString(CultureInfo.InvariantCulture), totalWinTrades.ToString(CultureInfo.InvariantCulture), totalLossTrades.ToString(CultureInfo.InvariantCulture), (1f * totalWinTrades / (totalWinTrades + totalLossTrades)).ToString("F2"), Math.Max(maxLongMoneyWin, maxShortMoneyWin).ToString("F2") + unit, (GrossMoneyProfit / totalWinTrades).ToString("F2") + unit, Math.Min(maxLongMoneyLoss, maxShortMoneyLoss).ToString("F2") + unit, (GrossMoneyLoss / totalLossTrades).ToString("F2") + unit, (1f * (NetMoneyBalance - Configs.InitialAccount) / trades).ToString("F2") + unit, AvrgHoldingPeriodRet.ToString("F2") + "%", GeomHoldingPeriodRet.ToString("F2") + "%", SharpeRatio.ToString("F2") }; AdditionalStatsValueLong = new[] { Configs.InitialAccount.ToString("F2") + unit, NetLongMoneyBalance.ToString("F2") + unit, (NetLongMoneyBalance - Configs.InitialAccount).ToString("F2") + unit, (100 * ((NetLongMoneyBalance - Configs.InitialAccount) / Configs.InitialAccount)).ToString("F2") + "%", grossLongMoneyProfit.ToString("F2") + unit, grossLongMoneyLoss.ToString("F2") + unit, (Math.Abs(grossLongMoneyLoss - 0) < sigma ? grossLongMoneyProfit : Math.Abs(grossLongMoneyProfit / grossLongMoneyLoss)).ToString("F2"), ((365f / Time[Bars - 1].Subtract(Time[0]).Days) * (NetLongMoneyBalance - Configs.InitialAccount)).ToString("F2") + unit, (100 * (365f / Time[Bars - 1].Subtract(Time[0]).Days) * (NetLongMoneyBalance - Configs.InitialAccount) / Configs.InitialAccount).ToString("F2") + "%", MinLongMoneyBalance.ToString("F2") + unit, minLongMoneyBalanceDate.ToShortDateString(), MaxLongMoneyBalance.ToString("F2") + unit, maxLongMoneyBalanceDate.ToShortDateString(), (Configs.InitialAccount - MinLongMoneyBalance).ToString("F2") + unit, maxLongMoneyDrawdown.ToString("F2") + unit, maxLongMoneyDrawdownPercent.ToString("F2") + "%", maxLongMoneyDrawdownDate.ToShortDateString(), Bars.ToString(CultureInfo.InvariantCulture), (Bars - FirstBar).ToString(CultureInfo.InvariantCulture), barsWithLongPos.ToString(CultureInfo.InvariantCulture), (100f * barsWithLongPos / (Bars - FirstBar)).ToString("F2") + "%", totalLongTrades.ToString(CultureInfo.InvariantCulture), winningLongTrades.ToString(CultureInfo.InvariantCulture), losingLongTrades.ToString(CultureInfo.InvariantCulture), (1f * winningLongTrades / (winningLongTrades + losingLongTrades)).ToString("F2"), maxLongMoneyWin.ToString("F2") + unit, (grossLongMoneyProfit / winningLongTrades).ToString("F2") + unit, maxLongMoneyLoss.ToString("F2") + unit, (grossLongMoneyLoss / losingLongTrades).ToString("F2") + unit, (1f * (NetLongMoneyBalance - Configs.InitialAccount) / (winningLongTrades + losingLongTrades)).ToString("F2") + unit, ahprLong.ToString("F2") + "%", ghprLong.ToString("F2") + "%", sharpeRatioLong.ToString("F2") }; AdditionalStatsValueShort = new[] { Configs.InitialAccount.ToString("F2") + unit, NetShortMoneyBalance.ToString("F2") + unit, (NetShortMoneyBalance - Configs.InitialAccount).ToString("F2") + unit, (100 * ((NetShortMoneyBalance - Configs.InitialAccount) / Configs.InitialAccount)).ToString("F2") + "%", grossShortMoneyProfit.ToString("F2") + unit, grossShortMoneyLoss.ToString("F2") + unit, (Math.Abs(grossShortMoneyLoss - 0) < sigma ? grossShortMoneyProfit : Math.Abs(grossShortMoneyProfit / grossShortMoneyLoss)).ToString("F2"), ((365f / Time[Bars - 1].Subtract(Time[0]).Days) * (NetShortMoneyBalance - Configs.InitialAccount)).ToString("F2") + unit, (100 * (365f / Time[Bars - 1].Subtract(Time[0]).Days) * (NetShortMoneyBalance - Configs.InitialAccount) / Configs.InitialAccount).ToString("F2") + "%", MinShortMoneyBalance.ToString("F2") + unit, minShortMoneyBalanceDate.ToShortDateString(), MaxShortMoneyBalance.ToString("F2") + unit, maxShortMoneyBalanceDate.ToShortDateString(), (Configs.InitialAccount - MinShortMoneyBalance).ToString("F2") + unit, maxShortMoneyDrawdown.ToString("F2") + unit, maxShortMoneyDrawdownPercent.ToString("F2") + "%", maxShortMoneyDrawdownDate.ToShortDateString(), Bars.ToString(CultureInfo.InvariantCulture), (Bars - FirstBar).ToString(CultureInfo.InvariantCulture), barsWithShortPos.ToString(CultureInfo.InvariantCulture), (100f * barsWithShortPos / (Bars - FirstBar)).ToString("F2") + "%", totalShortTrades.ToString(CultureInfo.InvariantCulture), winningShortTrades.ToString(CultureInfo.InvariantCulture), losingShortTrades.ToString(CultureInfo.InvariantCulture), (1f * winningShortTrades / (winningShortTrades + losingShortTrades)).ToString("F2"), maxShortMoneyWin.ToString("F2") + unit, (grossShortMoneyProfit / winningShortTrades).ToString("F2") + unit, maxShortMoneyLoss.ToString("F2") + unit, (grossShortMoneyLoss / losingShortTrades).ToString("F2") + unit, (1f * (NetShortMoneyBalance - Configs.InitialAccount) / (winningShortTrades + losingShortTrades)) .ToString("F2") + unit, ahprShort.ToString("F2") + "%", ghprShort.ToString("F2") + "%", sharpeRatioShort.ToString("F2") }; }
public string DisplayLine() { return(Description.PadRight(nameColumnWidth) + "|" + TradeCount.ToString().PadRight(columnWidth) + "|" + ProfitFactor.ToString("0.00").PadRight(columnWidth) + "|$" + TotalProfit.ToString("0.00").PadRight(columnWidth) + "|$" + SpreadCost.ToString("0.00").PadRight(columnWidth) + "|" + WinPercent.ToString("0.00").PadRight(columnWidth) + "%"); }