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

 
Alexey Viktorov:

所以你没有设法在测试版上注册一个账户?

没有。
 

MT4-Tester有这样一个GA的助手。


这对减少优化的时间有很大帮助。例如,如果平衡是在地板上,为什么还要进一步?MT5没有这个功能。这就是为什么我们必须在我们的EA中建立这样合理的东西。我认为很多作者都没有这样做。因此,将这种功能转移到MT5-Tester可能也是合理的。


另外,GA的助手们也是相关的。这里是最简单的一个。

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

专家顾问:验证

fxsaber, 2020.01.29 15:55

我建议在我的EA中使用类似的GA辅助工具。

sinput int inMinTrades = 500; // Минимальное количество трейдов (позиций).
sinput int inMaxTrades = 90000; // Максимальное количество трейдов (позиций).

double OnTester()
{
  return(((TesterStatistics(STAT_TRADES) >= inMinTrades) && (TesterStatistics(STAT_TRADES) <= inMaxTrades)) ? TesterStatistics(STAT_PROFIT) : 0);
}

它不允许GA走到薄弱的统计结果的一边。它提高了结果的质量和速度。而对于Validate来说,它还可以过滤掉统计值较弱的段落。


例如,在根据三个月的计算结果重新调整时,我将最小的交易数量设定为>100。否则,由于成功(随机)交易的数量较少,在GA中遇到获得最大利润的通道的概率较大。 显然,这样的通行证应该与选择它进行进一步交易没有关系。

我认为测试者拥有这样的助手是合理的。更重要的是,它不需要任何计算成本。

 

大家好。

我有一个多市场机器人。它进行统计套利、价差交易。机器人的设计是这样的:它从市场概况中获取工具,或者从价差文件中获取工具(该文件位于程序根目录下的文件文件夹中)。该机器人分析数据,选择最有希望的工具对,并进行交易。

问题,mt5策略测试器能测试吗? 如果交易工具没有在机器人的输入参数中列出,就像通常那样,但交易工具是从市场概览或文件夹中提取的,测试器是否打算发挥作用?

 
Peresvet Timonkin:

大家好。

我有一个多市场机器人。它进行统计套利、价差交易。机器人的设计是这样的:它从市场概况中获取工具,或者从价差文件中获取工具(该文件位于程序根目录下的文件文件夹中)。该机器人分析数据,选择最有希望的工具对,并进行交易。

问题,mt5策略测试器能测试吗? 如果交易工具没有在机器人的输入参数中列出,就像通常那样,但交易工具是从市场概览或文件夹中提取的,测试器是否打算发挥作用?

市场概况是由代码对符号的调用产生的。对于一个测试人员来说,在任何变体中都必然会有一个货币清单。而在现实世界中是没有问题的。

截图上的内容是用于优化的。
 
Alexey Viktorov:

市场审查是由代码的符号调用形成的。对于一个测试人员来说,必须有一个任何变体的货币列表。而在现实世界中是没有问题的。

截图上的内容是用于优化的。

我的理解是否正确,你不能像我这样用这种设置进行测试?

测试人员不能从市场审查中获取历史数据?

至于规定交易工具的文件,测试人员也不能用它工作?

我刚刚读了手册,但我没有发现任何关于它的内容,它说我可以测试和优化多策略,但我对它不太了解。

 
Peresvet Timonkin:

我的理解是否正确,你不能像我这样用这种设置进行测试?

测试人员不能从市场审查中获取历史数据?

至于规定交易工具的文件,测试人员也不能用它工作?

我刚刚读了整个测试器的手册,我找不到关于它的一个字,它说我可以测试和优化多国战略,但我对它不太了解。

如果你努力尝试,你可以做任何事情。例如,在OnInit()中请求所需货币的点位,从而将其添加到市场概览中,然后与市场概览一起工作。但在这种情况下,无论你怎么看,都应该有一个货币清单。我们可以有两个选择:与名单合作,与市场报告中的人合作。因此,我们必须在OnInit()中设置一个条件,如果在测试器中工作,那么只在列表中工作。市场上有这样一个专家顾问。

至于文件:这当然是可能的,但我们必须考虑文件的位置。它必须位于测试器文件夹或所有终端共享的文件夹中。或者把它作为一种资源插入。
 

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

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

fxsaber, 2020.01.22 23:08

我的建筑2300。在Pips模式下,我已经开始考虑到交易量,谢谢你!


然而,在这种模式下,InOut交易的利润计算是不正确的。


如果我们在正常模式下运行,利润是正确的。



因此,点数模式现在在净值上不起作用(它显示高估的利润)。


2310是相关的。不可能在净价交易中使用点数模式。

 

在2310中,我注意到我的EA,它经常进行修改,不能被剖析。

画出了一个测试的草图。

input int inFakeRange = 0;
sinput int inOffset = 10000;

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  static long Ticket = -1;
  
  if (Ticket == -1)
    Ticket = OrderSend(_Symbol, OP_BUYLIMIT, 1, Ask - inOffset * _Point, 0, 0, 0);
  else
    OrderModify(Ticket, Ask - inOffset * _Point, 0, 0, 0);
}

它再现了在真正的勾选模式下不可能立即进行剖析,因为一切都非常缓慢。


然而,它也会导致终端在运行真正的ticks(即使是在pips模式下)时,单次HOLD住!这是不可能的。只是某种杀手。


如果你做它的优化(在第一个参数上),它就会顺利进行,但它会带来一些关于性能的坏想法......


HH 如果你在展示台中运行并在完成之前关闭它,终端会挂起。

 
fxsaber:

如果你对它进行优化(针对第一个参数),它是好的,但你会得到一些关于性能的坏想法...

我只能将其与虚拟变体进行比较。

input int inFakeRange = 0;
sinput int inOffset = 10000;

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define  VIRTUAL_TESTER // Запуск в виртуальном торговом окружении
#include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/ru/code/22577

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  static long Ticket = -1;
  
  if (Ticket == -1)
    Ticket = OrderSend(_Symbol, OP_BUYLIMIT, 1, Ask - inOffset * _Point, 0, 0, 0);
  else
    OrderModify(Ticket, Ask - inOffset * _Point, 0, 0, 0);
}


正常变体。

optimization finished, total passes 5
optimization done in 1 minutes 04 seconds
shortest pass 0:00:12.560, longest pass 0:00:13.608, average pass 0:00:12.808
local 5 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)


有了虚拟。

optimization finished, total passes 5
optimization done in 0 minutes 06 seconds
shortest pass 0:00:00.954, longest pass 0:00:02.060, average pass 0:00:01.231
local 5 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)


测试仪在一个基本的专家顾问上的速度是13倍,在Pips模式下,甚至没有任何检查!建2310。

 
fxsaber:

测试员在一个初级EA上的速度要慢13倍,在点子模式下,甚至没有任何检查!这是不可能的。建2310。

即使这个EA在Pips模式下也比Virtual慢了两倍多。

input int inFakeRange = 0;
sinput int inOffset = 10000;

#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  static long Ticket = -1;
  
  if (Ticket == -1)
    Ticket = OrderSend(_Symbol, OP_BUYLIMIT, 1, Ask - inOffset * _Point, 0, 0, 0);
}

为什么会发生这种情况?整个专家顾问是在第一个tick上设置BuyLimit。没有别的了!

原因: