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

 
traveller00:
Bild 2280,但在以前的版本中也是如此。如果我运行一个脚本或EA进行调试,在时间框架1H上打开一个市场概览中第一个符号的新窗口。如果我不需要在第一个符号上或在另一个时间框架上进行调试怎么办?有什么办法可以不删除所有的符号,让正确的符号先出现?
转到终端设置。在那里你可以选择要调试的符号。
 
Artyom Trishkin:
转到终端设置。那里有一个用于调试的符号选择。

Artyom,你搞错了。这些是ME设置,不是终端设置。


你需要减少工作)))。

 
Artyom Trishkin:
转到终端设置。在那里你可以选择一个符号进行调试。

明白了,谢谢你。我是MT5的新手,还不了解一切。

 
Alexey Viktorov:

Artyom,你搞错了。这些是ME设置,不是终端设置


你应该减少工作)))。

是的,我的错误...有时当你用手机写作时,你甚至不能看...
 

建2280。计算机上有4个处理器。有2个MT5在运行。第一个正在运行一个长的脚本,terminal64.exe占用了1个CPU的100%,导致总负载为25%。第二台MT5正在运行遗传优化。按处理器的数量有4个代理作为标准。第一批工作得到所有127个。剩余的任务由2个代理接收和执行,剩下的2个挂在完成,甚至没有接收。如果我强迫他们禁用-enable,他们就会加入工作。直到优化再次开始。如果你先杀了MT5,情况就会保持不变。如果你在这之后重新启动第二个MT5,就会好起来。这是一个如此棘手的负载均衡器,还是某个地方的一个错误?如果是前者,那么就不是很好,因为它最终是以75%的速度加载(第一个MT5+2代理),仍然应该宁可由风的优先级来处理。

P.S. 似乎与CPU负载没有必然联系。重启后才开始遗传,根本没有其他东西在运行,还有2个代理也很懒散,直到我把它们关掉/打开。如果我只保留3个代理,并完全禁用1个,仍然有2个滞后,只有一个在工作。

P.P.S. 如果有6个处理器,那么就有3个。
 

建2280。调试了指标,在调试器中一步一步地执行。上线

StartTime = iTime(Symbols[0], _Period, Pos + PosAddon);

调试崩溃了。类似于关键错误,调试停止。在日志中,它说

           crash -->  000000 B7250C38B1 038424 B8000000    add        eax, [rsp+0xb8]
                      000000 B7250C38B8 89442460          mov        [rsp+0x60], eax
                      000000 B7250C38BC 448 B4C2460        mov        r9d, [rsp+0x60]
                      000000 B7250C38C1 49 B8010000000000  mov        r8, 0x1
                                       0000
                      000000 B7250C38CB 488 B542468        mov        rdx, [rsp+0x68]
                      000000 B7250C38D0 48 B9E8DD4220B700  mov        rcx, 0xb72042dde8
                                       0000
                      000000 B7250C38DA 49 FF96580F0000    call       qword near [r14+0xf58]  ; #11037 (terminal64.exe)
        
        00: 0x000000B7250C38B1

这种情况再次发生,但很少。我不知道,在调试之间没有什么变化。

 

建2280。交易所、期货市场。所有的历史记录都被加载,但测试是离线进行的。iBarShift 在指标中的工作很奇怪。而同样的代码在脚本中运行良好。这是一个错误还是我错过了什么?

#property indicator_separate_window

void OnInit()
{
  datetime Time[];
  ArraySetAsSeries(Time, true);
  CopyTime(_Symbol,_Period,0,1,Time);

  int Shift=iBarShift(_Symbol,_Period,Time[0]);
  Print("Symbol="+_Symbol+", Shift="+(string)Shift);

  for(int i=0;i!=SymbolsTotal(true);++i)
  {
    const string SymbName=SymbolName(i,true);
    Shift=iBarShift(SymbName,_Period,Time[0]);
    Print("Symbol="+SymbName+", Shift="+(string)Shift);
  }
}

int OnCalculate(const int rates_total,const int prev_calculated,const datetime& time[],const double& open[],const double& high[],
  const double& low[],const double& close[],const long& tick_volume[],const long& volume[],const int& spread[])
{
  return 0;
}

有这样一个代码。它基本上贯穿了市场回顾中的所有符号,并拉出了iBarShift。同样的代码在脚本中运行良好。该指标对所有的符号都产生-1,除了当前的符号(在它运行的图表上),错误是没有历史记录。在第二次运行的同时,它显然加载了历史记录,并且已经正常显示。

 
traveller00:

同样的代码在脚本中运行良好。这是一个错误还是我错过了什么?

与脚本不同,指标是异步工作的--它不等待故事的准备。

 
fxsaber:

与脚本不同,该指标是异步工作的--它不等待历史记录的准备。

嗯,所有的历史都在那里。正如我所说,它在离线状态下工作,所有的历史记录都已经从服务器上下载。还是需要其他东西?

 
traveller00:

嗯,所有的历史都在那里。就像我说的,他在离线工作,所有的历史都已经从服务器上下载。还是需要其他东西?

当然,从理论上讲,你需要把所有的东西都从冷启动中提出来。然而,在实践中,我没有进入指标,所以我不能确定。