Files
2025-02-07 19:08:31 +03:30

201 lines
10 KiB
Plaintext

#include "String.mqh"
//+------------------------------------------------------------------+
//| Структура для статистики торговли |
//+------------------------------------------------------------------+
struct ExpTradeSummarySingle
{
public:
int Offset1[10];
int bars;
int ticks;
STRING32 symbol;
double initial_deposit; // начальный депозит
double withdrawal; // снято средств
double profit; // общая прибыль (+)
double grossprofit; // общий плюс
double grossloss; // общий минус
double maxprofit; // максимально прибыльная сделка
double minprofit; // максимально убыточная сделка
double conprofitmax; // прибыль максимальной последовательности прибыльных сделок
double maxconprofit; // максимальная прибыль среди последовательностей
double conlossmax; // убыток максимальной последовательности убыточных сделок
double maxconloss; // максимальный убыток среди последовательностей
double balance_min; // минимальное значение баланса (для расчёта абсолютной просадки)
double maxdrawdown; // максимальная просадка по балансу
double drawdownpercent; // отношение максимальной просадки по балансу к её пику
double reldrawdown; // максимальная относительная просадка по балансу в деньгах
double reldrawdownpercent; // максимальная относительная просадка по балансу в процентах
double equity_min; // минимальное значение equity (для расчёта абсолютной просадки по equity)
double maxdrawdown_e; // максимальная просадка по equity
double drawdownpercent_e; // отношение максимальной просадки по equity к её пику (+)
double reldrawdown_e; // максимальная относительная просадка по equity в деньгах
double reldrawdownpercnt_e; // максимальная относительная просадка по equity в процентах
double expected_payoff; // матожидание выигрыша (+)
double profit_factor; // показатель прибыльности (+)
double recovery_factor; // фактор восстановления (+)
double sharpe_ratio; // коэффициент Шарпа (+)
double margin_level; // минимальный уровень маржи
double custom_fitness; // пользовательский фитнесс - результат OnTester (+)
int deals; // общее количество сделок
int trades; // количество сделок out/inout
int profittrades; // количество прибыльных
int losstrades; // количество убыточных
int shorttrades; // количество шортов
int longtrades; // количество лонгов
int winshorttrades; // количество прибыльных шортов
int winlongtrades; // количество прибыльных лонгов
int conprofitmax_trades; // максимальная последовательность прибыльных сделок
int maxconprofit_trades; // последовательность максимальной прибыли
int conlossmax_trades; // максимальная последовательность убыточных сделок
int maxconloss_trades; // последовательность максимального убытка
int avgconwinners; // среднее количество последовательных прибыльных сделок
int avgconloosers; // среднее количество последовательных убыточных сделок
#define TOSTRING(A) #A + " = " + (string)(A) + "\n"
#define TOSTRING3(A) #A + " = " + this.A[] + "\n"
string ToString( void ) const
{
return(
TOSTRING(bars) +
TOSTRING(ticks) +
TOSTRING3(symbol) +
TOSTRING(initial_deposit) + // начальный депозит
TOSTRING(withdrawal) + // снято средств
TOSTRING(profit) + // общая прибыль (+)
TOSTRING(grossprofit) + // общий плюс
TOSTRING(grossloss) + // общий минус
TOSTRING(maxprofit) + // максимально прибыльная сделка
TOSTRING(minprofit) + // максимально убыточная сделка
TOSTRING(conprofitmax) + // прибыль максимальной последовательности прибыльных сделок
TOSTRING(maxconprofit) + // максимальная прибыль среди последовательностей
TOSTRING(conlossmax) + // убыток максимальной последовательности убыточных сделок
TOSTRING(maxconloss) + // максимальный убыток среди последовательностей
TOSTRING(balance_min) + // минимальное значение баланса (для расчёта абсолютной просадки)
TOSTRING(maxdrawdown) + // максимальная просадка по балансу
TOSTRING(drawdownpercent) + // отношение максимальной просадки по балансу к её пику
TOSTRING(reldrawdown) + // максимальная относительная просадка по балансу в деньгах
TOSTRING(reldrawdownpercent) + // максимальная относительная просадка по балансу в процентах
TOSTRING(equity_min) + // минимальное значение equity (для расчёта абсолютной просадки по equity)
TOSTRING(maxdrawdown_e) + // максимальная просадка по equity
TOSTRING(drawdownpercent_e) + // отношение максимальной просадки по equity к её пику (+)
TOSTRING(reldrawdown_e) + // максимальная относительная просадка по equity в деньгах
TOSTRING(reldrawdownpercnt_e) + // максимальная относительная просадка по equity в процентах
TOSTRING(expected_payoff) + // матожидание выигрыша (+)
TOSTRING(profit_factor) + // показатель прибыльности (+)
TOSTRING(recovery_factor) + // фактор восстановления (+)
TOSTRING(sharpe_ratio) + // коэффициент Шарпа (+)
TOSTRING(margin_level) + // минимальный уровень маржи
TOSTRING(custom_fitness) + // пользовательский фитнесс - результат OnTester (+)
TOSTRING(deals) + // общее количество сделок
TOSTRING(trades) + // количество сделок out/inout
TOSTRING(profittrades) + // количество прибыльных
TOSTRING(losstrades) + // количество убыточных
TOSTRING(shorttrades) + // количество шортов
TOSTRING(longtrades) + // количество лонгов
TOSTRING(winshorttrades) + // количество прибыльных шортов
TOSTRING(winlongtrades) + // количество прибыльных лонгов
TOSTRING(conprofitmax_trades) + // максимальная последовательность прибыльных сделок
TOSTRING(maxconprofit_trades) + // последовательность максимальной прибыли
TOSTRING(conlossmax_trades) + // максимальная последовательность убыточных сделок
TOSTRING(maxconloss_trades) + // последовательность максимального убытка
TOSTRING(avgconwinners) + // среднее количество последовательных прибыльных сделок
TOSTRING(avgconloosers) // среднее количество последовательных убыточных сделок
);
}
#undef TOSTRING3
#undef TOSTRING
double TesterStatistics( const ENUM_STATISTICS Statistic_ID ) const
{
switch (Statistic_ID)
{
case STAT_INITIAL_DEPOSIT:
return(this.initial_deposit);
case STAT_WITHDRAWAL:
return(this.withdrawal);
case STAT_PROFIT:
return(this.profit);
case STAT_GROSS_PROFIT:
return(this.grossprofit);
case STAT_GROSS_LOSS:
return(-this.grossloss);
case STAT_MAX_PROFITTRADE:
return(this.maxprofit);
case STAT_MAX_LOSSTRADE:
return(-this.minprofit);
case STAT_CONPROFITMAX:
return(this.maxconprofit);
case STAT_CONPROFITMAX_TRADES:
return(this.maxconprofit_trades);
case STAT_MAX_CONWINS:
return(this.conprofitmax);
case STAT_MAX_CONPROFIT_TRADES:
return(this.conprofitmax_trades);
case STAT_CONLOSSMAX:
return(-this.conlossmax);
case STAT_CONLOSSMAX_TRADES:
return(this.conlossmax_trades);
case STAT_MAX_CONLOSSES:
return(-this.maxconloss);
case STAT_MAX_CONLOSS_TRADES:
return(this.maxconloss_trades);
case STAT_BALANCEMIN:
return(this.balance_min);
case STAT_BALANCE_DD:
return(this.maxdrawdown);
case STAT_BALANCEDD_PERCENT:
return(this.drawdownpercent);
case STAT_BALANCE_DDREL_PERCENT:
return(this.reldrawdownpercent);
case STAT_BALANCE_DD_RELATIVE:
return(this.reldrawdown);
case STAT_EQUITYMIN:
return(this.equity_min);
case STAT_EQUITY_DD:
return(this.maxdrawdown_e);
case STAT_EQUITYDD_PERCENT:
return(this.drawdownpercent_e);
case STAT_EQUITY_DDREL_PERCENT:
return(this.reldrawdownpercnt_e);
case STAT_EQUITY_DD_RELATIVE:
return(this.reldrawdown_e);
case STAT_EXPECTED_PAYOFF:
return(this.expected_payoff);
case STAT_PROFIT_FACTOR:
return(this.profit_factor);
case STAT_RECOVERY_FACTOR:
return(this.recovery_factor);
case STAT_SHARPE_RATIO:
return(this.sharpe_ratio);
case STAT_MIN_MARGINLEVEL:
return(this.margin_level);
case STAT_CUSTOM_ONTESTER:
return(this.custom_fitness);
case STAT_DEALS:
return(this.deals);
case STAT_TRADES:
return(this.trades);
case STAT_PROFIT_TRADES:
return(this.profittrades);
case STAT_LOSS_TRADES:
return(this.losstrades);
case STAT_SHORT_TRADES:
return(this.shorttrades);
case STAT_LONG_TRADES:
return(this.longtrades);
case STAT_PROFIT_SHORTTRADES:
return(this.winshorttrades);
case STAT_PROFIT_LONGTRADES:
return(this.winlongtrades);
case STAT_PROFITTRADES_AVGCON:
return(this.avgconwinners);
case STAT_LOSSTRADES_AVGCON:
return(this.avgconloosers);
}
return(0);
}
};