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

 

速度控制热键在查看器中不起作用。



ZS 它正在工作。显然,这是某种棘手的错误。

 
我在MT5上用不同的经纪商对专家顾问的真实点位进行了测试,建模质量为99-100%,输入参数相同,我得到了完全不同的结果:从宇宙般的利润到损失。在此之前,我特意离开了MT4,因为那里更难达到同样的建模质量。那么结果是什么呢?专家顾问在实际交易中会有什么表现? 也许有人会给我一个好的提示?
 
ganri:
在使用MT5对不同经纪商的真实点数进行测试后,在相同的输入参数下,建模质量为99-100%,我获得了绝对不同的结果:从宇宙般的利润到亏损。在此之前,我特意离开了MT4,因为那里更难达到同样的建模质量。那么结果是什么呢?专家顾问在实际交易中会有什么表现?也许有人会给我一个好的提示

测试员+顾问是一个数学函数,为每个向量(数字系列-报价)分配一个数字(利润)。

相应地,(一般来说)不同的向量意味着不同的利润。而这些利润不需要遵守任何规则(例如,是积极的)。


不同的经纪人意味着不同的向量(报价)。不管它们是虱子、条子还是其他东西,都不重要。重要的是矢量是不同的。

 
fxsaber:

测试员+顾问是一个数学函数,为每个向量(数字系列-报价)分配一个数字(利润)。

相应地,(一般来说)不同的向量意味着不同的利润。而这些利润不需要遵守任何规则(例如,是积极的)。


不同的经纪人意味着不同的向量(报价)。不管它们是虱子、条子还是其他东西,都不重要。最主要的是矢量不同。

据我所知,在这种情况下,我们应该选择在测试 EA时效果 最好的经纪人,并与之合作。谢谢你。

 

在ME中,将这些调试设置分开是合乎逻辑的。

例如,你应该在终端调试EURUSD,在测试器中调试EURUSD_Custom。现在不可能以这种方式进行配置。

也许,为测试者创建一个设置的文本字段是有意义的,我们可以在那里输入这些设置。

[Tester]
Period=M1
Optimization=0
Model=0
FromDate=2019.07.22
ToDate=2019.07.24
ForwardMode=0
Deposit=10000
Currency=USD
ProfitInPips=0
Leverage=100
ExecutionMode=0
OptimizationCriterion=6
Visual=1

然后,我们将有充分的设置灵活性。GUI没有过载。

搜索字符串:Uluchshenie 001。

 
只有一个代理被启用。其一旦做成可视化窗口,就不会关闭。在测试器中,优化被选中并开始。
2020.02.15 11:23:01.818 Tester  complete optimization started
2020.02.15 11:23:01.855 Core 1  agent still started in visual mode

即使你关闭了查看器,红色的 "停止 "按钮仍然亮着。什么也没有发生,你必须用手按下停止键。之后,它就泄气了。

2020.02.15 11:25:52.278 Tester  optimization finished, total passes 0
2020.02.15 11:25:52.278 Statistics      optimization done in 2 minutes 51 seconds
2020.02.15 11:25:52.279 Tester  stopped by user

而且它甚至创建了一个零通过率的opt-file。


可能需要纠正这里的行为。

搜索字符串:Uluchshenie 002。
 

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

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

fxsaber, 2020.02.11 01:58

长久以来,我们一直在寻找测试器在真实蜱虫上的奇怪行为的原因。找到了。
const bool Init = EventSetTimer(1);

void Func()
{
  static datetime PrevTime = 0;
  
  const datetime time = TimeTradeServer();
  
  if (time < PrevTime)
    DebugBreak(); // Срабатывает
  
  PrevTime = time;
}

void OnTick()
{
  Func();
}

void OnTimer()
{
  Func();
}

服务器时间向前运行,然后再回来。它发生在真实的贸易服务器上,但我设法在自定义符号上创建回放。


运转

sinput datetime inDateFrom = D'2020.01.01';

void OnStart()
{
  const string Name = "TEMP12345";                                                           // Имя кастомного символа
  const string SymbOrig = "EURUSD";                                                          // Имя оригинального символа

  MqlTick Ticks[];
  
  const int Size = CopyTicksRange(SymbOrig, Ticks, COPY_TICKS_ALL, (long)inDateFrom * 1000); // Считали EURUSD-тики.
    
  if ((Size > 0) && CustomSymbolCreate(Name, NULL, SymbOrig) && SymbolSelect(Name, true))    // Создали символ на основе EURUSD.
  {
    CustomTicksReplace(Name, 0, LONG_MAX, Ticks);                                            // Поместили в него историю EURUSD.        
    
    CustomRatesDelete(Name, D'2020.01.03 23:00', D'2020.01.04 00:00');                       // Удалили несколько баров.
  }
}


一个有刻度历史的 符号将被创建,但有几个条形被删除。然后我们在这种模式下开始调试上面的EA。

[Tester]
Symbol=TEMP12345
Period=M1
Optimization=0
Model=4
FromDate=2020.01.01
ToDate=2020.01.08
ForwardMode=0
Deposit=100000
Currency=USD
ProfitInPips=1
Leverage=100
ExecutionMode=0
OptimizationCriterion=6


它停止了。

我们可以看到,时间已经走过了第二个时间循环。

搜索字符串:Oshibka 002。

 

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

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

fxsaber, 2020.02.01 13:43

即使是这个EA,在点数模式下也比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);
}

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

搜索字符串:Uluchshenie 003。
 
酷!
2020.02.18 13:24:06.618 Core 1  pass 0 returned result 0 in 0:00:05.288 + history synchronization 0:00:03.098
 

不可能将刻度线大小设置为小于或等于1。

如果你开了处方,然后再输入,数值就是零。对于大于1的值,一切正常。

搜索字符串:Uluchshenie 004。