/// <summary> /// Generate the Account Statistics in points. /// </summary> private static void GenerateAccountStats() { AccountStatsParam = new[] { Language.T("Intrabar scanning"), Language.T("Interpolation method"), Language.T("Ambiguous bars"), Language.T("Profit per day"), Language.T("Sharpe ratio"), Language.T("Max consecutive losses"), Language.T("Tested bars"), Language.T("Account balance"), Language.T("Minimum account"), Language.T("Maximum account"), Language.T("Maximum drawdown"), Language.T("Max equity drawdown"), Language.T("Max equity drawdown"), Language.T("Gross profit"), Language.T("Gross loss"), Language.T("Sent orders"), Language.T("Executed orders"), Language.T("Traded lots"), Language.T("Winning trades"), Language.T("Losing trades"), Language.T("Win/loss ratio"), Language.T("Time in position"), Language.T("Charged spread"), Language.T("Charged rollover"), Language.T("Charged commission"), Language.T("Charged slippage"), Language.T("Total charges"), Language.T("Balance without charges") }; string unit = " " + Language.T("points"); AccountStatsValue = new string[AccountStatsParam.Length]; int i = 0; AccountStatsValue[i++] = IsScanPerformed ? Language.T("Accomplished") : Language.T("Not accomplished"); AccountStatsValue[i++] = InterpolationMethodShortToString(); AccountStatsValue[i++] = AmbiguousBars.ToString(CultureInfo.InvariantCulture); AccountStatsValue[i++] = ProfitPerDay + unit; AccountStatsValue[i++] = SharpeRatio.ToString("F2"); AccountStatsValue[i++] = MaxConsecutiveLosses.ToString(CultureInfo.InvariantCulture); AccountStatsValue[i++] = (Bars - FirstBar).ToString(CultureInfo.InvariantCulture); AccountStatsValue[i++] = NetBalance + unit; AccountStatsValue[i++] = MinBalance + unit; AccountStatsValue[i++] = MaxBalance + unit; AccountStatsValue[i++] = MaxDrawdown + unit; AccountStatsValue[i++] = MaxEquityDrawdown + unit; AccountStatsValue[i++] = EquityPercentDrawdown.ToString("F2") + " %"; AccountStatsValue[i++] = GrossProfit + unit; AccountStatsValue[i++] = GrossLoss + unit; AccountStatsValue[i++] = SentOrders.ToString(CultureInfo.InvariantCulture); AccountStatsValue[i++] = ExecutedOrders.ToString(CultureInfo.InvariantCulture); AccountStatsValue[i++] = TradedLots.ToString("F2"); AccountStatsValue[i++] = WinningTrades.ToString(CultureInfo.InvariantCulture); AccountStatsValue[i++] = LosingTrades.ToString(CultureInfo.InvariantCulture); AccountStatsValue[i++] = ((float)WinningTrades / (WinningTrades + LosingTrades)).ToString("F2"); AccountStatsValue[i++] = TimeInPosition + " %"; AccountStatsValue[i++] = Math.Round(TotalChargedSpread) + unit; AccountStatsValue[i++] = Math.Round(TotalChargedRollOver) + unit; AccountStatsValue[i++] = Math.Round(TotalChargedCommission) + unit; AccountStatsValue[i++] = TotalChargedSlippage.ToString("F2") + unit; AccountStatsValue[i++] = Math.Round(TotalChargedSpread + TotalChargedRollOver + TotalChargedSlippage) + unit; AccountStatsValue[i++] = Math.Round(NetBalance + TotalChargedSpread + TotalChargedRollOver + TotalChargedSlippage) + unit; AccountStatsFlags = new bool[AccountStatsParam.Length]; AccountStatsFlags[0] = AmbiguousBars > 0 && !IsScanPerformed; AccountStatsFlags[1] = InterpolationMethod != InterpolationMethod.Pessimistic; AccountStatsFlags[2] = AmbiguousBars > 0; AccountStatsFlags[5] = MaxConsecutiveLosses > 6; AccountStatsFlags[7] = NetBalance < 0; AccountStatsFlags[10] = MaxDrawdown > 500; }
/// <summary> /// Generate the Account Statistics in currency. /// </summary> private static void GenerateAccountStatsInMoney() { AccountStatsParam = new[] { Language.T("Intrabar scanning"), Language.T("Interpolation method"), Language.T("Ambiguous bars"), Language.T("Profit per day"), Language.T("Sharpe ratio"), Language.T("Max consecutive losses"), Language.T("Tested bars"), Language.T("Initial account"), Language.T("Account balance"), Language.T("Minimum account"), Language.T("Maximum account"), Language.T("Maximum drawdown"), Language.T("Max equity drawdown"), Language.T("Max equity drawdown"), Language.T("Gross profit"), Language.T("Gross loss"), Language.T("Sent orders"), Language.T("Executed orders"), Language.T("Traded lots"), Language.T("Winning trades"), Language.T("Losing trades"), Language.T("Win/loss ratio"), Language.T("Time in position"), Language.T("Charged spread"), Language.T("Charged rollover"), Language.T("Charged commission"), Language.T("Charged slippage"), Language.T("Total charges"), Language.T("Balance without charges"), Language.T("Account exchange rate") }; string unit = " " + Configs.AccountCurrency; AccountStatsValue = new string[AccountStatsParam.Length]; int i = 0; AccountStatsValue[i++] = IsScanPerformed ? Language.T("Accomplished") : Language.T("Not accomplished"); AccountStatsValue[i++] = InterpolationMethodShortToString(); AccountStatsValue[i++] = AmbiguousBars.ToString(CultureInfo.InvariantCulture); AccountStatsValue[i++] = MoneyProfitPerDay.ToString("F2") + unit; AccountStatsValue[i++] = SharpeRatio.ToString("F2"); AccountStatsValue[i++] = MaxConsecutiveLosses.ToString(CultureInfo.InvariantCulture); AccountStatsValue[i++] = (Bars - FirstBar).ToString(CultureInfo.InvariantCulture); AccountStatsValue[i++] = Configs.InitialAccount.ToString("F2") + unit; AccountStatsValue[i++] = NetMoneyBalance.ToString("F2") + unit; AccountStatsValue[i++] = MinMoneyBalance.ToString("F2") + unit; AccountStatsValue[i++] = MaxMoneyBalance.ToString("F2") + unit; AccountStatsValue[i++] = MaxMoneyDrawdown.ToString("F2") + unit; AccountStatsValue[i++] = MaxMoneyEquityDrawdown.ToString("F2") + unit; AccountStatsValue[i++] = MoneyEquityPercentDrawdown.ToString("F2") + " %"; AccountStatsValue[i++] = GrossMoneyProfit.ToString("F2") + unit; AccountStatsValue[i++] = GrossMoneyLoss.ToString("F2") + unit; AccountStatsValue[i++] = SentOrders.ToString(CultureInfo.InvariantCulture); AccountStatsValue[i++] = ExecutedOrders.ToString(CultureInfo.InvariantCulture); AccountStatsValue[i++] = TradedLots.ToString("F2"); AccountStatsValue[i++] = WinningTrades.ToString(CultureInfo.InvariantCulture); AccountStatsValue[i++] = LosingTrades.ToString(CultureInfo.InvariantCulture); AccountStatsValue[i++] = WinLossRatio.ToString("F2"); AccountStatsValue[i++] = TimeInPosition + " %"; AccountStatsValue[i++] = TotalChargedMoneySpread.ToString("F2") + unit; AccountStatsValue[i++] = TotalChargedMoneyRollOver.ToString("F2") + unit; AccountStatsValue[i++] = TotalChargedMoneyCommission.ToString("F2") + unit; AccountStatsValue[i++] = TotalChargedMoneySlippage.ToString("F2") + unit; AccountStatsValue[i++] = (TotalChargedMoneySpread + TotalChargedMoneyRollOver + TotalChargedMoneyCommission + TotalChargedMoneySlippage).ToString("F2") + unit; AccountStatsValue[i++] = (NetMoneyBalance + TotalChargedMoneySpread + TotalChargedMoneyRollOver + TotalChargedMoneyCommission + TotalChargedMoneySlippage).ToString("F2") + unit; if (InstrProperties.PriceIn == Configs.AccountCurrency) { AccountStatsValue[i++] = Language.T("Not used"); } else if (InstrProperties.InstrType == InstrumetType.Forex && Symbol.StartsWith(Configs.AccountCurrency)) { AccountStatsValue[i++] = Language.T("Deal price"); } else if (Configs.AccountCurrency == "USD") { AccountStatsValue[i++] = InstrProperties.RateToUSD.ToString("F4"); } else if (Configs.AccountCurrency == "EUR") { AccountStatsValue[i++] = InstrProperties.RateToEUR.ToString("F4"); } AccountStatsFlags = new bool[AccountStatsParam.Length]; AccountStatsFlags[0] = AmbiguousBars > 0 && !IsScanPerformed; AccountStatsFlags[1] = InterpolationMethod != InterpolationMethod.Pessimistic; AccountStatsFlags[2] = AmbiguousBars > 0; AccountStatsFlags[5] = MaxConsecutiveLosses > 6; AccountStatsFlags[8] = NetMoneyBalance < Configs.InitialAccount; AccountStatsFlags[11] = MaxDrawdown > Configs.InitialAccount / 2; }