/// <summary> /// Generate the Account Statistics in currency. /// </summary> static void GenerateAccountStatsInMoney() { accountStatsParam = new string[28] { Language.T("Intrabar scanning"), Language.T("Interpolation method"), Language.T("Ambiguous bars"), Language.T("Profit per day"), 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[28]; accountStatsValue[0] = isScanned ? Language.T("Accomplished") : Language.T("Not accomplished"); accountStatsValue[1] = InterpolationMethodShortToString(); accountStatsValue[2] = ambiguousBars.ToString(); accountStatsValue[3] = MoneyProfitPerDay.ToString("F2") + unit; accountStatsValue[4] = (Bars - FirstBar).ToString(); accountStatsValue[5] = Configs.InitialAccount.ToString("F2") + unit; accountStatsValue[6] = NetMoneyBalance.ToString("F2") + unit; accountStatsValue[7] = MinMoneyBalance.ToString("F2") + unit; accountStatsValue[8] = MaxMoneyBalance.ToString("F2") + unit; accountStatsValue[9] = MaxMoneyDrawdown.ToString("F2") + unit; accountStatsValue[10] = MaxMoneyEquityDrawdown.ToString("F2") + unit; accountStatsValue[11] = MoneyEquityPercentDrawdown.ToString("F2") + " %"; accountStatsValue[12] = GrossMoneyProfit.ToString("F2") + unit; accountStatsValue[13] = GrossMoneyLoss.ToString("F2") + unit; accountStatsValue[14] = SentOrders.ToString(); accountStatsValue[15] = ExecutedOrders.ToString(); accountStatsValue[16] = TradedLots.ToString("F2"); accountStatsValue[17] = WinningTrades.ToString(); accountStatsValue[18] = LosingTrades.ToString(); accountStatsValue[19] = WinLossRatio.ToString("F2"); accountStatsValue[20] = TimeInPosition.ToString() + " %"; accountStatsValue[21] = TotalChargedMoneySpread.ToString("F2") + unit; accountStatsValue[22] = TotalChargedMoneyRollOver.ToString("F2") + unit; accountStatsValue[23] = TotalChargedMoneyCommission.ToString("F2") + unit; accountStatsValue[24] = TotalChargedMoneySlippage.ToString("F2") + unit; accountStatsValue[25] = (TotalChargedMoneySpread + TotalChargedMoneyRollOver + TotalChargedMoneyCommission + TotalChargedMoneySlippage).ToString("F2") + unit; accountStatsValue[26] = (NetMoneyBalance + TotalChargedMoneySpread + TotalChargedMoneyRollOver + TotalChargedMoneyCommission + TotalChargedMoneySlippage).ToString("F2") + unit; if (InstrProperties.PriceIn == Configs.AccountCurrency) { accountStatsValue[27] = Language.T("Not used"); } else if (InstrProperties.InstrType == Instrumet_Type.Forex && Symbol.StartsWith(Configs.AccountCurrency)) { accountStatsValue[27] = Language.T("Deal price"); } else if (Configs.AccountCurrency == "USD") { accountStatsValue[27] = InstrProperties.RateToUSD.ToString("F4"); } else if (Configs.AccountCurrency == "EUR") { accountStatsValue[27] = InstrProperties.RateToEUR.ToString("F4"); } accountStatsFlag = new bool[28]; accountStatsFlag[0] = ambiguousBars > 0 && !isScanned; accountStatsFlag[1] = interpolationMethod != InterpolationMethod.Pessimistic; accountStatsFlag[2] = ambiguousBars > 0; accountStatsFlag[6] = NetMoneyBalance < Configs.InitialAccount; accountStatsFlag[9] = MaxDrawdown > Configs.InitialAccount / 2; return; }
/// <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") }; }
/// <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; }