MetaTrader 5策略测试器:缺陷,缺陷,改进建议 - 页 27

 
fxsaber:
可能是错过了。

他们并没有错过。

目前opt文件的格式不允许这样做。你必须考虑到这一点。

 
Slava:

他们并没有错过。

目前opt-file的格式不允许。你必须考虑到这一点。

似乎不需要改变什么。

关于交易、自动交易系统和策略测试的论坛

虫子、虫子、问题

斯拉瓦, 2019.04.19 15:11

//+------------------------------------------------------------------+
//| входные параметры тестирования                                   |
//+------------------------------------------------------------------+
struct TestCacheInput
  {
   wchar_t           name[64];
   int               flag;                    // оптимизируемый параметр
   int               type;                    // тип TYPE_XXX
   int               digits;                  // количество знаков после запятой
   int               offset;                  // смещение в буфере параметров
   int               size;                    // размер значения параметра в буфере
   //--- 0-start,1-step,2-stop
   union { INT64 integers[3]; double numbers[3]; };
  };
   m_header.header_size=sizeof(TestCacheHeader)+m_inputs.Total()*sizeof(TestCacheInput)+m_header.parameters_size;
//--- кешируемая запись содержит номер прохода (при генетике - номер по порядку), структуру результатов тестирования (если математика, то 1 double), буфер оптимизируемых параметров и генетический проход

每个输入是由一个带有所需字段的结构来定义的。

 

现在很容易发现

  • 所有测试仪设置和EA输入参数。
  • 每一次优化的所有统计数据。


但我们无法找出,例如,单次通行的统计数据。很明显,有一个tst-format。但如果在策略测试器中使用CTRL+C,在回测选项卡中形成一个带有统计数据的集合文件,那就很方便了。

关于交易、自动交易系统和策略测试的论坛

图书馆:TesterCache

fxsaber, 2019.11.11 04:45

; saved on 2019.11.13 19:40:01
; Experts\Examples\MACD\MACD Sample LImitTP.ex5
; EURUSD
; 2019.09.01 - 2019.11.13
;
InpLots=0.1
InpTakeProfit=200||10||5||500||Y
InpTrailingStop=290||30||10||300||Y
InpMACDOpenLevel=5||5||5||200||Y
InpMACDCloseLevel=180||5||5||200||Y
InpMATrendPeriod=8||1||1||200||Y
;
; initial_deposit = 10000.0
; withdrawal = 0.0
; profit = 479.15
; grossprofit = 479.15
; grossloss = 0.0
; maxprofit = 99.8
; minprofit = 0.0
; conprofitmax = 479.15
; maxconprofit = 479.15
; conlossmax = 0.0
; maxconloss = 0.0
; balance_min = 10000.0
; maxdrawdown = 0.0
; drawdownpercent = 0.0
; reldrawdown = 0.0
; reldrawdownpercent = 0.0
; equity_min = 9997.700000000001
; maxdrawdown_e = 253.6000000000004
; drawdownpercent_e = 2.457388152985982
; reldrawdown_e = 253.6000000000004
; reldrawdownpercnt_e = 2.457388152985982
; expected_payoff = 47.91500000000001
; profit_factor = 1.797693134862316 e+308
; recovery_factor = 1.889392744479493
; sharpe_ratio = 1.069726339729858
; margin_level = 1.797693134862316 e+308
; custom_fitness = 0.0
; deals = 15
; trades = 10
; profittrades = 10
; losstrades = 0
; shorttrades = 6
; longtrades = 4
; winshorttrades = 6
; winlongtrades = 4
; conprofitmax_trades = 10
; maxconprofit_trades = 10
; conlossmax_trades = 0
; maxconloss_trades = 0
; avgconwinners = 10
; avgconloosers = 0

我不知道其他人的情况,但我发现当集合文件包含所有的信息时很方便。要弄清楚它是什么,它来自哪里,有多少,非常快。


这是ExpTradeSummary结构字段的输出。

关于交易、自动交易系统和交易策略测试的论坛

虫子、虫子、问题

斯拉瓦, 2019.04.19 15:11

//+------------------------------------------------------------------+
//| Структура для статистики торговли                                |
//+------------------------------------------------------------------+
struct ExpTradeSummary;

#define  TOSTRING(A) #A + " = " + (string)(A) + "\n"

  string ToString( void ) const
  {
    return(
      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)          // среднее количество последовательных убыточных сделок
    );
 

既然出现了强大的缓存,就值得对其进行一定程度的改进。

现在只有一个用户参数,OnTester,进入了缓存。


如果ExpTradeSummary变得大三倍或五倍,那就非常方便了。这可以通过以下方式填写

double OnTester( double &CustomDoubles[] );


现在你分析缓存,显然缺乏可能性,不能看到一个用户的价值,而是几个。

 

这是对Metaquotes的请求,我希望至少有一个团队的开发人员可以回答(如果他已经被问过了,很抱歉,但由于语言问题,我在俄罗斯论坛上找不到答案)。

要求改进策略测试器,增加测试在模拟账户上从未发生的交易情况,而只在真实账户上发生,这是否合理?因为如果不能够完全测试,真的很难创建健壮的代码。

这主要是因为集中的市场(相对于外汇/差价合约)。例如,部分 订单填充,在模拟账户上,这种情况从未发生(据我所知),但在期货或股票的真实账户上,这是一种常见的情况。如果有一个工具来模拟这种情况,将是非常有用的。

部分填充只是一个例子,如果Metaquotes认为与这样的功能合作是一个好主意,我愿意把这些想法集中起来,并对这样的功能提供详细的描述。(没有针对我自己的需求的具体内容)。

谢谢你的时间和回答。

 
Alain Verleyen:

如果不能对其进行全面测试,就很难创建可靠的代码。

为了做到这一点,每个严肃的EA开发者都会在真实账户上 对其交易库进行多年的调试。

没有它,就没有办法创建可靠的代码。

 
fxsaber:

为了做到这一点,每个严肃的EA开发者都会在真实账户上 对其交易库进行多年的调试。

没有它,就没有办法创建可靠的代码。

这是真的,但这将有助于避免在真实账户上进行大量耗时的测试。

 
Artyom Trishkin:

所以这是真的,但这个功能将有助于避免在真实账户上进行许多耗时的测试。

有两个目标。

  1. 一个足够的交易生物体,只知道如何显示当前的交易状态、交易历史和发送订单。在这里,测试仪几乎没有任何帮助。如果我们进行压力测试,演示会有很大帮助。我们不能在真实账户上做这些事情--这很昂贵。因此,在数量庞大的符号/服务器上只有一个演示。这样的图书馆在一只手的手指上。
  2. 练习部分执行、重定向等的交易逻辑。这一点要比第一点容易得多。并且在没有任何测试者的情况下,在同一个MT4上反复解决。这真的很简单。

测试员只能帮助解决第二点,即简单的问题。你可以通过测量TS的所谓 "流动性上限 "来实施部分执行。但这将是一个极其粗略的估计。


应该理解的是,测试仪中的任何增强功能都是额外的刹车,即使这些增强功能没有被使用。

 
fxsaber :

为了做到这一点,每个严肃的EA开发者都会在真实账户上 对其交易库进行多年的调试。

没有它,就没有办法创建可靠的代码。

我建议你用你的无用和傲慢的帖子一劳永逸地忘记我。

不幸的是,我没有办法把它们过滤掉。

千万不要回复我的帖子,拜托,你是在浪费我的时间,因为通知的问题。

 
Alain Verleyen:

我建议你用你的无用和傲慢的帖子一劳永逸地忘记我。

我建议你开始质疑你使用的自动俄语翻译器是否足够。


不幸的是,我没有办法将它们过滤掉。

千万不要回复我的帖子,拜托,你是在浪费我的时间,因为通知的问题。

好的。