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

 
fxsaber #:

感谢您在测试中提供的帮助!已发布更新的 MTTester.mqh。

感谢您提供的程序库

 
MTTester.mqh 已再次更新。这一次,我将告诉大家其中的艰辛。
#include <fxsaber\Benchmark\Benchmark.mqh>  //https://www.mql5.com/zh/code/31279
#include <fxsaber\MultiTester\MTTester.mqh> //https://www.mql5.com/zh/code/26132

const bool Init = EventSetTimer(3);

void OnTimer()
{
  if (MTTESTER::IsReady()) // 如果已准备好按下启动按钮
    Print(_B(MTTESTER::ClickStart(), 1)); // 是否按下 "开始 "按钮以及按下按钮的时间。
}

该智能交易系统每三秒钟按一次 "开始 "按钮,如果没有按 "停止 "按钮的话。我成功地按下了它 - true,否则 - false。


标准情况。

按 "开始 "键 - 计算开始。

Alert: Bench_Stack = 0, 1 <= Time[Test.mq5 9 in OnTimer: MTTESTER::ClickStart()] = 125248 mcs.
true
Alert: Bench_Stack = 0, 1 <= Time[Test.mq5 9 in OnTimer: MTTESTER::ClickStart()] = 123327 mcs.
true

此操作耗时约 125 毫秒。



按 "开始 "键 - 开始瞬时计算,或者测试仪报告无法执行计算(例如,FromDate >= ToDate)。

Alert: MTTester.mqh: Start->Stop - is not detected!
Alert: Bench_Stack = 0, 1 <= Time[Test.mq5 9 in OnTimer: MTTESTER::ClickStart()] = 1001401 mcs.
true
Alert: MTTester.mqh: Start->Stop - is not detected!
Alert: Bench_Stack = 0, 1 <= Time[Test.mq5 9 in OnTimer: MTTESTER::ClickStart()] = 1004102 mcs.
true

这一操作大约需要一秒钟。程序库会发出警报,但会返回 true(按钮已按下)。



启动未按下。只有重启终端才能解决这一问题。

我没有这种情况的日志。识别这种情况需要 <10 秒。会有这样的提示

problem with Start-button!

返回 false - 未按下按钮。

 
更新了 MTTester.mqh。
 
fxsaber #:


未按 "开始 "键。只有重启终端才能解决这一问题。

一台远程 WinServer 机器连续进行了数百次单次通过,没有出现任何故障。


我一登录(RDP)这台机器,"开始 "按钮就不按了。解决方法一如既往,就是重启终端。

这种行为似乎与类似的机器登录有关。你可以通过 RDP 登录数十次,一切正常。但有些登录对测试者来说是致命的。


遇到 "开始 "错误的用户请注意登录机器与 "开始 "按钮之间的关系。


无论是否巧合,WinServer 都会在登录机器时检查更新。

 

很好的库。
是否可以指定哪个 *.set 文件包含参数设置,以编程方式传递给测试?

默认情况下只使用相同的设置,这不是很方便。

 
sergego18 #:

是否有可能以编程方式为测试指定要传递的带有参数设置的 *.set 文件?

例如
 

谢谢。
以单行传递设置,行与行之间用 \n 字符隔开,这样更好吗?

还是像示例中那样以数组形式传递?

是否可以在

MTTester 类静态方法 Run

static bool Run( const string ExpertName = NULL、

const string Symb = NULL、

const ENUM_TIMEFRAMES period = PERIOD_CURRENT、

const datetime iBeginTime = 0、

const datetime iEndTime = 0 )

添加一个指定 *.set EA 设置的参数字符串(或字符串数组)?

 
sergego18 #:

谢谢。
以单行方式传递设置,行与行之间用 \n 字符隔开是否更好?

还是像示例中那样以数组形式传递?

在 Tester 中,GetSettings 是 CTRL+C。

SetSettings 在 Tester 中是 CTRL+V。

看看 CTRL+C/V 对哪些数据有效。


以及是否可以在

MTTester 类静态方法 Run

我不使用此方法。它仍然是历史方法。


示例显示了所有需要的 MTTESTER 方法。

 
sergego18 #:

是否有可能以编程方式为测试指定要传递的带有参数设置的 *.set 文件?

Validate 可以使用测试仪的完整版 ini 文件和精简版 - 测试仪的 set 文件。

如果您需要运行大量的 ini/set 文件,Validate 会自动完成。使用方法

 
fxsaber #:

Validate 可使用完整的 Tester ini 文件和精简版本--Tester 的 set-files。

如果你需要运行大量的 ini/set-files,Validate 可以做到这一点。使用方法


我从这条评论中找到了一种解决方案,即以所需格式加载字符串数组中的set 文件。

https://www.mql5.com/ru/forum/318305/page34#comment_51842356

我还替换了

typedef bool (*INITDEINIT)( void );

在每次运行初始化和去初始化时调用回调的指针

改为接口

接口 InitDeInit {

bool RunInit();

bool RunDeInit();

};

的继承者中实现。

类的继承者中实现。

结构的类的继承者中实现,因此在 RunInit() 方法中也是如此。

我加载了所需工具的设置文件。

typedef bool (*INITDEINIT)( void ); - 这个指针不能让你知道哪个工具正在初始化/去初始化,所以最好使用指向接口的指针,因为 MQL 还不支持指向方法的指针。

使用这种方法无需修改 MTTester::Run 方法。



Библиотеки: MultiTester - Обновил платформу MetaTrader 5 build 3550 улучшения и исправления Fxsaber.
Библиотеки: MultiTester - Обновил платформу MetaTrader 5 build 3550 улучшения и исправления Fxsaber.
  • 2024.01.21
  • Yuriy Bykov
  • www.mql5.com
You can add this draft function for reading settings from file to string array. автоматическим торговым системам и тестированию торговых стратегий. Validate умеет запускать последовательно много ini-задайний