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

 
fxsaber:

单一通道需要知道其输入参数。不太可能引入这样的功能,所以有什么想法可以做到这一点吗?WinAPI就可以了。

获取最新的MT5测试仪设置。

#include <WinAPI\fileapi.mqh>
#include <WinAPI\handleapi.mqh>

// Получает имя файла настроек последнего запуска MT5-Тестера.
string GetTesterINIFileName( ulong &Size )
{
  string Str = NULL;
  const string Path = ::TerminalInfoString(TERMINAL_PATH)+ "\\MQL5\\Profiles\\Tester\\";
  
  FIND_DATAW FindData;
  const HANDLE handle = kernel32::FindFirstFileW(Path + "*.ini", FindData);
  
  if (handle != INVALID_HANDLE)
  {     
    ulong MaxTime = 0;
    Size = 0;
    
    do
    {
      const ulong TempTime = ((ulong)FindData.ftLastWriteTime.dwHighDateTime << 32) + FindData.ftLastWriteTime.dwLowDateTime;
      
      if (TempTime > MaxTime)
      {
        MaxTime = TempTime;
        
        Str = ::ShortArrayToString(FindData.cFileName);
        Size = ((ulong)FindData.nFileSizeHigh << 32) + FindData.nFileSizeLow;;
      }      
    }
    while (kernel32::FindNextFileW(handle, FindData));    
    
    kernel32::FindClose(handle);
  }
  
  return((Str == NULL) ? NULL : Path + Str);   
}

#define  GENERIC_READ  0x80000000
#define  SHARE_READ    1
#define  OPEN_EXISTING 3

// Получает настройки последнего запуска MT5-Тестера.
string GetTesterINI( void )
{
  string Str = NULL;
  
  ulong Size;
  const string FileName = GetTesterINIFileName(Size);
  
  if (FileName != NULL)
  {
    const HANDLE handle = kernel32::CreateFileW(FileName, GENERIC_READ, SHARE_READ, 0, OPEN_EXISTING, 0, 0);
    
    if (handle != INVALID_HANDLE)
    {
      uint Read;
      ushort Buffer[];
      
      ::ArrayResize(Buffer, (int)Size / sizeof(ushort));
            
      if (kernel32::ReadFile(handle, Buffer, (int)Size, Read, 0))      
        Str = ::ShortArrayToString(Buffer);
      
      kernel32::CloseHandle(handle);        
    }
  }
  
  return(Str);
}


应用

// Советник при запуске одиночного прогона возвращает свои настройки.
input int inInput1 = 1;
input int inInput2 = 2;

int OnInit()
{
  if (MQLInfoInteger(MQL_TESTER) && !MQLInfoInteger(MQL_OPTIMIZATION))
    Print(GetTesterINI());
  
  return(INIT_FAILED);
}


结果

2019.04.01 00:00:00   ;Одиночный тест советника: Test9, EURUSD M1, цены открытия, 2019.04.01 - 2019.09.18
2019.04.01 00:00:00   [Tester]
2019.04.01 00:00:00   Expert=Test9.ex5
2019.04.01 00:00:00   Symbol=EURUSD
2019.04.01 00:00:00   Period=M1
2019.04.01 00:00:00   Optimization=0
2019.04.01 00:00:00   Model=2
2019.04.01 00:00:00   FromDate=2019.04.01
2019.04.01 00:00:00   ToDate=2019.09.18
2019.04.01 00:00:00   ForwardMode=0
2019.04.01 00:00:00   Deposit=10000
2019.04.01 00:00:00   Currency=EUR
2019.04.01 00:00:00   ProfitInPips=1
2019.04.01 00:00:00   Leverage=100
2019.04.01 00:00:00   ExecutionMode=0
2019.04.01 00:00:00   OptimizationCriterion=6
2019.04.01 00:00:00   Visual=0
2019.04.01 00:00:00   [TesterInputs]
2019.04.01 00:00:00   inInput1=123||1||1||10||N
2019.04.01 00:00:00   inInput2=2||2||1||20||N
 

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

新版MetaTrader 5 build 1640平台:创建和测试自己的金融工具

fxsaber, 2017.08.04 19:55

在优化过程中,是否有可能对计算机进入睡眠状态进行某种保护(至少以声音信号警告的形式)?

完全忘记了 "优化 "正在进行中,并关上了笔记本电脑的盖子......。连接中断了,醒来后恢复了连接,优化工作继续进行。但如果有人提醒我,优化正在进行,我就不会关上盖子。使用云计算时应该说什么...

另外,在优化过程中,当测试器被隐藏时,终端中唯一显示优化正在进行的是图标上的一个绿色条(就像在浏览器中下载文件一样)。关闭终端时,没有警告说正在进行优化。

 

在测试器中显示bool输入参数的重放问题。

这个专家顾问

input int i = 0;
input bool b = false;

double OnTester() { return(i); }


如截图所示,对其进行优化。


我们选择运行其中一个通道。


在参数中,我们看到的是零而不是假。


 

不知道如何重现。有时,当从优化结果 中运行一次时,日志会正确显示(和替换)输入参数值(如在缓存中,包括非优化的输入)。但与此同时,在参数选项卡中,一些输入参数没有更新。


事实证明,你从Optimize运行Single - 很好(与Optimize的结果相匹配)。

然后进入单一模式,通过 "开始 "按钮运行相同的运行--你会得到不同的值(因为一些输入的值与上一步不同)。

 

关于原木的野生尺寸,已经说过了。当你看日志时,99%的时间你都对日志的开头和结尾感兴趣。因此,由于野性的大小,根本无法看到开头。

复制日志的开头和结尾如何?特别是,要看在什么输入参数下开始。

 
陷入了无法看到以前优化结果的境地。唯一有帮助的是重启。
 

这些是测试仪现在发出的信息。

 
fxsaber:

这就是测试员现在发出的信息。

测试人员以前也曾给出过这些信息。由于现在可以下载opt文件。这是一个警告,如果运行优化,这个opt-file将被覆盖,优化将重新开始。

 
Slava:

优化运行 的情况下,这个opt-file将被覆盖。

名字是否匹配?

原因: