新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1461

 
在MT4的测试器中,如何追踪一个指标的停止按钮按下。尽管测试已经完成,但OnDeanit没有被调用。或者如何在测试器中按下停止按钮时关闭打开的文件
 
Valeriy Yastremskiy:
在MT4的测试器中,如何追踪一个指标的停止按钮按下。尽管测试已经完成,但OnDeinit没有被调用。或者如何在测试器中按下停止按钮时关闭打开的文件

反正打开的文件应该自动关闭

如果没有,试着用SB创建文件,有CFile、CFileTxt作为OOP--对象将在脱机时被销毁,析构器将关闭文件。

https://www.mql5.com/ru/docs/standardlibrary/fileoperations


HH:为什么你认为OnDeinit()没有被调用?- 尝试打开并写入一个文件

 
Igor Makanu:

反正打开的文件应该自动关闭

如果没有,试着用SB创建文件,有CFile、CFileTxt作为OOP--对象将在脱机时被销毁,析构器将关闭文件。

https://www.mql5.com/ru/docs/standardlibrary/fileoperations


HH:为什么你认为OnDeinit()没有被调用?- 试着在其中打开并写入一个文件。

凭经验。我自己也很惊讶。虽然在逻辑上是正确的,但它是一个指标,它不应该像专家顾问一样被卸载。我必须从测试图表中手动删除该指标或关闭窗口。然后我才看到关闭文件后的警报)))

测试很简单,我不想使用bibbles。是的,而且我认为在指标测试器中,除了停止按钮上的鼠标事件外,还有其他东西。遗憾的是,表面上的搜索切口并没有给出。

Zy,文件如果不关闭,就没有访问它们的权利,如果OnDeinit()突然不工作了,它们就会被关闭,只能通过关闭终端

有经验的方式,忘记记录文件的关闭))))。

 
Valeriy Yastremskiy:

有经验。我自己也很惊讶。虽然从逻辑上讲一切都正确,但它是一个指标,它不应该作为一个专家顾问卸载。我必须从测试图表中手动删除该指标或关闭窗口。然后我才看到关闭文件后的警报)))

测试很简单,我不想使用bibbles。是的,而且我认为在指标测试器中,除了停止按钮上的鼠标事件外,还有其他东西。遗憾的是,表面上的搜索切口并没有给出。

Zy,文件如果不关闭,就没有访问它们的权利,如果OnDeinit()突然不工作了,它们就会被关闭,只能通过关闭终端

有经验的方式,忘了记录文件的关闭)))))。

你之前没有描述测试指标 的整个过程

据我所知,你在MT4的测试器中以可视化模式运行指标,尽管你可以在MT4的可视化器中添加指标.....。

我从来没有在MT4中测试过指标,我只是在EA的TS代码中检查它。


作为一个替代方案,在指标中设置日期,当你结束测试时作为一个变量,在达到这个日期后,保存文件并退出OnCalculate() - 代码只有几行,但它肯定会起作用。

 
Igor Makanu:

你之前没有描述测试指标 的整个过程

据我所知,你在MT4测试器中以视觉模式运行指标,尽管你可以在MT4的视觉器中添加指标.....。

我从来没有在MT4中测试过指标,我只是在EA的TS代码中检查它。


作为一个替代方案,在指标中设置日期,当你结束测试时作为一个变量,在达到这个日期后,保存文件并退出OnCalculate() - 代码只有几行,但它肯定会起作用。

是的,测试器窗口并不关心指标是否被测试或指标是否被覆盖在测试器窗口上。

谢谢你提供的这个不那么明显的拐杖)

boolIsTesting()。

我得试试,我想它应该是由一个停止的谎言返回)
 
Valeriy Yastremskiy:

是的,测试器窗口并不关心指标是否被测试或指标是否被覆盖在测试器窗口上。

谢谢你提供的这个不那么明显的拐杖)

boolIsTesting()。

我应该试一试,似乎它应该在停止时返回false)

不,它没有。

我有一个开放的问题,如何追踪事件 2021.04.29 08:55:41.177 2020.10.01 08:23:13 测试仪:按下停止按钮

是这样做的)

int OnInit()
{
if(IsTesting()) FlagTest=true;
....
}

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[])
  {

if(!IsTesting() && FlagTest) { Print("Окончание тестирования"); OnDeinit(1);}
....
}

 
Igor Makanu:

搜索来自Metacquot的文章:"云"

很久以前就读过,远程代理应该从你的电脑上下载历史记录,或者如果连接到同一个经纪人--从经纪人那里获取真实的刻度。


但我可能是错的,我没有用过它。


Metacquot的一篇关于这个问题的文章,也许那里有信息https://www.mql5.com/ru/articles/2612

伊戈尔,谢谢。文档、论坛、文章--还没有找到答案。

在日志中,有。

"REGRES_EURGBP:已经同步了蜱虫[57字节]"。

我希望这是我所需要的。

 
Valeriy Yastremskiy:

不,它没有。

无论如何,问题是开放的,如何在指标测试中跟踪事件 2021.04.29 08:55:41.177 2020.10.01 08:23:13 测试器:按下停止按钮

是这样做的)


你必须写这样的东西。

datetime t_stop=D'20.04.2021'; 
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[])
  {
if(time[0]>=t_stop)
{
        if(f_handle<0) return;
        FileClose(f_handle);
        f_handle = -1;
}
不记得MT4让测试的最后一天(今天)--需要拿起t_stop。
 
HimOrik:

伊戈尔,谢谢你。文档、论坛、文章--还没有找到答案。

在日志中,有。

"REGRES_EURGBP:已经同步了蜱虫[57字节]"。

我希望这是我所需要的。

版主不说话,活跃的用户很少

在一般性讨论中创建一个关于你的问题的主题,我想你会更快地解决你的问题。

 
Igor Makanu:

你必须写这样的东西。

我不记得MT4让我测试最后一天(今天) - 我需要选择t_stop

我理解这个想法,它很有用,但在这种情况下,它对我不起作用。我需要为测试器 计时 在指示器上按下停止按钮

原因: