201 lines
10 KiB
Plaintext
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);
|
|
}
|
|
}; |