程序库: 多功能测试仪 - 页 56

 

有时有必要以表格形式查看某些价格历史。可以通过 CTRL+U,选择 "Bars/Ticks(条形图/点数)"选项卡来实现。手工输入必要的时间间隔。这很繁琐。


因此,我创建了一个附加功能,下面的智能交易系统就演示了这一功能。

#include <fxsaber\MultiTester\MTTester.mqh> //https://www.mql5.com/zh/code/26132
#include <fxsaber\Keyboard\Keyboard.mqh> //https://www.mql5.com/zh/code/48393

input bool inTicks = true; // true - Ticks,false - Bars
input int inBefore = -60; // 以秒为单位
input int inAfter = 60;   // 秒后
input ENUM_TIMEFRAMES inPeriod = PERIOD_CURRENT; // 周期(条形模式)

datetime GetTime( const int X )
{
  int Window;
  datetime Res;
  double Price;
    
  return(ChartXYToTimePrice(0, X, 0, Window, Res, Price) ? Res : 0);
}

void OnChartEvent( const int32_t id, const long &lparam, const double&, const string& )
{
  if ((id == CHARTEVENT_CLICK) && KEYBOARD::IsControl())
  {
    const datetime Time = GetTime((int)lparam);

    if (Time)
    {
      if (inTicks)
        MTTESTER::CopyTicks(_Symbol, Time + inBefore, Time + inAfter);
      else
        MTTESTER::CopyRates(_Symbol, inPeriod, Time + inBefore, Time + inAfter);      
    }    
  }
}


点击(按住 CTRL 键)图表的必要位置,就能立即自动获取相应的表格数据。

所选功能只需填写特定数据字段并进行查询。然后通过图形用户界面查看您感兴趣的内容。总的来说就是自动化。

 
也许,编写一个结合各种便捷功能的 EA 工具会是一个不错的想法。
 

5430 在准备任务时,窗口仍会闪烁。

如何解决这个问题?

 
Aleksei Skrypnev #:

5430 准备作业时,Windows 仍会闪烁。

如何解决这个问题?

用这种方法。
Попробуйте загрузить все файлы в архиве.
Попробуйте загрузить все файлы в архиве.
  • 2025.12.22
  • www.mql5.com
если бы время файлов в архиве совпадало со временем модификации в кодобазе. Не соответствует времени изменения конкретного файла. Я вижу корректную структуру после разархивирования а ведь сам редактор позволяет загрузить все эти файлы именно так
 
fxsaber #:
因此。

这是一个很棒的主题。但我下载之前分别下载的一切仍然闪烁。

我看到在MultiTester_Example.mq5 文件中

添加行的 MultiTester_Example.mq5 文件。

#define  FAKE // 删除 - 绕过 KB 中的代码。

#ifdef  FAKE
  void OnStart() {}
#else // #ifdef FAKE
#endif // #ifdef FAKE #else

我是这样注释的,还是应该换一种方式?或者我可以删除所有这 4 行吗?

//#define FAKE // 移除 - 旁路将代码放入 KB。

#ifdef FAKE// void OnStart() {}

#else // #ifdef FAKE

#endif // #ifdef FAKE #else


附注:我看到在没有这些行的情况下,我使用旧的任务列表时,它闪烁了一下。有了新的一行,它就不会闪烁了。

但我只注释掉了一行,这正确吗?

 
Aleksei Skrypnev #:

这是一个很棒的主题。但我在下载之前分别下载的所有内容仍然闪烁。

我在MultiTester_Example.mq5 文件中看到了这一点

添加了几行

我是这样注释的,还是应该换一种注释方式?或者我可以删除所有这 4 行吗?


附注:我看到我拿的旧任务列表没有这几行,它在闪烁。有了新行后就不闪了。

但我是否只正确注释了一行?

您的理解是正确的:删除注释或完全删除这 4 行。
 
日安,亲爱的 fxsaber!请帮我解决一个问题。我的脚本有一个存档函数,是在伟大的 MTTESTER 库的帮助下开发的。它将 Settin 写入 Tester 文件夹,行文如下:if(!kernel32::CopyFileW(SrcPath,DstPath,false)) // Overwrite Settin from the Files sandbox to the Tester folder。我们会得到一个名为 "归档后 "的集合。但显然由于编码的原因,它不适合进一步修改。不过,如果在策略测试器中 手动将其写入机器人,然后以 "手动写入机器人并保存后 "的名称保存,那么这组数据就已经合适了。而且,这不仅仅是改头换面的问题,而是另有隐情。我向铁人们(Qwen、Deep Seek)求助,他们生成了一个脚本 "ReloadSetsFromCommonFixed"。它有很多很棒的功能,而且能正常工作,除了这一行:if(!FileCopy(source_path, FILE_COMMON, dest_path, FILE_COMMON))文件集被复制了,但在验证打印输出时,输出却是 abracadabra,这显然是编码造成的。Iron 提供了 4 种解决方案,但没有一种奏效(文本中有所有的解决方案)。我最后的希望是皮革的。有没有办法修改存档函数中的这一行:if(!kernel32::CopyFileW(SrcPath,DstPath,false)),以模拟手动写入机器人,然后以 "手动写入机器人并保存后 "的格式保存?亚历山大
 
klycko #:
是否有办法更改存档功能中的这一行?

在这里(在打开的窗口中按地址栏中的 ENTER 键)查看了设置记录。很可能需要这些标志。

FileOpen(FileName, FILE_WRITE | FILE_UNICODE | FILE_TXT);
 

这些标记帮了大忙,归档问题也迎刃而解。现在结果格式正确了。

非常感谢你们!

但在我的脚本 Nocturne 中,该命令不能正常工作

prWrite0 = MTTESTER::SetSettings2(Settings); // 将设置写入机器人

虽然命令执行后,prWrite0 = true。

从文件夹中读取设置时,可能又是标志的问题。

这可以通过 GetKthFileContent 函数来实现,该函数中包含以下内容

int handle = FileOpen(full_path, FILE_READ | FILE_WRITE |FILE_UNICODE| FILE_TXT | FILE_COMMON);

下面一行的变体也不起作用:

// int handle = FileOpen(full_path, FILE_READ | FILE_TXT | FILE_COMMON); // 变体

// int handle = FileOpen(full_path, FILE_READ | FILE_UNICODE | FILE_TXT | FILE_COMMON);

下一条命令:

prRead0 = MTTESTER::GetSettings(Control); // 读取刚刚安装的机器人设置。

这条命令运行正常,执行后 prRead0 = true。

但在控制网络中,prMFI=true,因为它最初是手动加载到机器人中的。这意味着,尽管写入符号 prWrite0 = true,但写入机器人的操作实际上并没有发生。

在原始网络中,prHEX=true

在机器人的原始网络中,prMFI=true

MTTESTER::SetSettings2(设置)命令正常运行,但这些设置并没有出现在机器人中。

问题出在哪里?

亚历山大

 
klycko #:

那么问题出在哪里呢?

我懒得研究标志,决定写一段代码来保存和加载测试仪的设置文件。

// 加载/保存测试仪的设置文件。
#property script_show_inputs

input bool inLoad = true; // 载入/保存设置 - 真/假

#include <fxsaber\MultiTester\MTTester.mqh> //https://www.mql5.com/zh/code/26132

void OnStart()
{
  const string FileName = __FILE__ + ".set";
  
  string Settings;
  ushort Words[];  
      
  if (inLoad) // 载入设置。
  {
    Print("Load: " + (string)FileLoad(FileName, Words));
    Settings = ShortArrayToString(Words, 1); // 1 - 统一码
    
    Print(MTTESTER::SetSettings(Settings));
  
  }
  else if (MTTESTER::GetSettings(Settings)) // 保存设置。
  {
    Words[ArrayResize(Words, 1) - 1] = 0xFEFF; // 1 - 统一码
    
    StringToShortArray(Settings, Words, ArraySize(Words));    
    Print("Save: " + (FileSave(FileName, Words) ? (string)ArraySize(Words) : "error"));
  }
}


你可以通过脚本保存(inLoad = false)一个集合文件,然后手工修改其中的某些内容,并通过脚本将其加载(inLoad = true)到测试器中

如果成功了,就可以自己获取相应的源文件。