初学者的问题 MQL5 MT5 MetaTrader 5 - 页 742 1...735736737738739740741742743744745746747748749...1503 新评论 fxsaber 2017.04.10 18:09 #7411 Klimenko_a_e:在实际代码中,该函数返回一个对象。我认为在这种情况下,复制构造函数应该创建一个临时副本。该代码在MQL5 build 1545中正确工作。在新版本中,复制构造函数甚至不能调整一维数组的大小:错误4007。我认为这是不正确的。在这种情况下,我很难做一个明确的声明。对于你的问题,有非常好的专家,所以我建议把这个问题交给https://www.mql5.com/ru/forum/1111。经过我的编辑,代码可以正常工作。没有它,就没有。但你的代码是否应该工作,最好是在上面的链接中的分支。 Ошибки, баги, вопросы www.mql5.com Форум алго-трейдеров MQL5 Klimenko_a_e 2017.04.10 18:44 #7412 Klimenko_a_e:在实际代码中,该函数返回一个对象。我认为在这种情况下,复制构造函数应该创建一个临时副本。该代码在MQL5 build 1545中正确工作。在新版本中,复制构造函数甚至不能调整一维数组的大小:错误4007。在我看来,这是不正确的。 这个错误已经在Build 1580中被修复,谢谢,一切都在正常工作)。 Klimenko_a_e 2017.04.10 19:26 #7413 fxsaber:在这种情况下,我很难说什么定论。对于你的问题,有非常好的专家,所以我建议你向https://www.mql5.com/ru/forum/1111。经过我的编辑,代码可以正常工作。没有它,就没有。但你的代码是否应该工作,最好是针对上面链接的分支。 谢谢你的链接。 Marat Sultanov 2017.04.12 07:04 #7414 也许有人能给我一个提示。我不知道如何在手动改变输入设置后中断EA的执行。1) 在图表上像这样运行EA代码。#property version "1.00" input int Setting_ = 0; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { Print ("OnInit:",Setting_); return (INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { Print ("OnDeinit(",reason,"):",Setting_); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { while (!_StopFlag) { Sleep(1000); } }2) 打开设置窗口,将 "设置_"参数改为1。3) 并应用这些变化。所以,为了开始应用变化,OnInit必须被执行,但OnInit将不会被执行,直到OnTick(或任何其他)的计算停止。据我所知,只有通过_StopFlag--停止一个mql5-程序的标志来检查停止程序,但它只是为了完全退出。但我不知道如何理解,输入设置已经改变,停止计算。也许有人遇到过这样的情况?也许有什么秘密的黑客? Artyom Trishkin 2017.04.12 07:15 #7415 Marat Sultanov:也许有人能给我一个提示。我不知道如何在手动改变输入设置后中断EA的执行。1) 在图表上像这样运行EA代码。2) 打开设置窗口,将 "设置_"参数改为1。3) 并应用这些变化。所以,为了开始应用变化,OnInit必须被执行,但OnInit将不会被执行,直到OnTick(或任何其他)的计算停止。据我所知,只有通过_StopFlag--停止一个mql5-程序的标志来检查停止程序,但它只是为了完全退出。但我不知道如何理解,输入设置已经改变,停止计算。也许有人遇到过这样的情况?也许有什么秘密的黑客?检查OnInit()中的去初始化代码。取消初始化的原因由UninitializeReason()返回的Expert Advisor的去初始化原因代码。它们可以有以下任何一个值。恒定.价值描述理论_计划0专家已经通过调用ExpertRemove()停止了工作。REASON_REMOVE1从图表中删除的程序原因_重新编译2程序重新编译原因_图表变化3图表符号或周期已被改变原因_chartclose4该图表已关闭原因_参数5输入参数被用户改变REASON_ACCOUNT6另一个账户被激活或重新连接到交易服务器,因为账户设置被改变了原因_模板7应用了另一个图表模板拒绝接受的原因8标志着OnInit()处理程序已经返回了一个非零值解释_关闭9终点站已关闭 新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 [存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. 不能初始化原因代码 Marat Sultanov 2017.04.12 08:01 #7416 Artyom Trishkin:检查OnInit()中的去初始化代码。...嗯...你不了解我 :)你需要在函数中知道(例如在OnTick 中),用户已经改变了输入参数,也就是说,知道是时候收尾了,让程序进入OnDeinit。 Artyom Trishkin 2017.04.12 09:33 #7417 Marat Sultanov:嗯...你误解了我的意思 :)你需要在函数内部(例如在OnTick)知道用户已经改变了输入参数,也就是说,知道现在是时候收工了,让程序退出到OnDeinit。 一旦用户调用EA设置窗口(F7)并按下那里的确定按钮,OnDeinit()就会立即被调用,而这又会在去初始化代码中写入REASON_PARAMETERS 值。然后调用OnInit(),在这里 使用UninitializeReason() 可以检查去初始化代码,如果其值等于REASON_PARAMETERS,就可以决定下一步该怎么做。 Marat Sultanov 2017.04.12 09:49 #7418 Artyom Trishkin: 一旦用户调用EA设置窗口(F7)并点击那里的OK按钮,OnDeinit()就会被立即调用,而这又会在去初始化代码中写入REASON_PARAMETERS 的值。然后调用OnInit(),在这里 使用UninitializeReason() 可以检查去初始化代码,如果其值等于REASON_PARAMETERS,就可以决定下一步该怎么做。好的。 请。 1)首先运行我的代码,这是我在第一篇帖子中给出的。 我不是为了美丽而把它放在那里......你可以在任何图表上运行它。2) 调用EA设置窗口。3) 改变参数并按确定。如果你仔细看了我的代码,那么结果不会让你吃惊:OnDeinit()将不会被调用。 Marat Sultanov 2017.04.12 10:01 #7419 不仅如此,我还在deinit中增加了一个打印,包括原因和参数,这样你就可以确保专家没有到达deinit。请注意代码中最重要的一块。void OnTick() { while (!_StopFlag) { Sleep(1000); } }这是一个清晰的模拟长计算,不会因为输入参数的变化而中断。而我需要打断它,问题是如何打断?:)我只是想确定我在MQL5中没有遗漏任何东西,在语言中除了_StopFlag 之外,确实没有其他东西,不幸的是,这并不能解决这种情况。粗略的说,我需要在繁重的计算过程中抓住输入参数变化的瞬间。 Artyom Trishkin 2017.04.12 10:41 #7420 Marat Sultanov:不仅如此,我还在deinit中添加了一个打印,包括原因和参数,这样你就可以确保专家没有到达deinit。请注意代码中最重要的一块。这是一个清晰的模拟长计算,不会因为输入参数的变化而中断。而我需要打断它,问题是如何打断?:)我只是想确定我在MQL5中没有遗漏任何东西,在语言中除了_StopFlag 之外,确实没有其他东西,不幸的是,这并不能解决这种情况。粗略的说,我需要在繁重的计算过程中抓住输入参数变化的瞬间。粗略的说--重新仔细阅读我写给你的东西,把无限循环从你的代码中删除。你确定将专家顾问驱动到一个无限循环中是正确的解决方案吗? 1...735736737738739740741742743744745746747748749...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
在实际代码中,该函数返回一个对象。
我认为在这种情况下,复制构造函数应该创建一个临时副本。
该代码在MQL5 build 1545中正确工作。
在新版本中,复制构造函数甚至不能调整一维数组的大小:错误4007。
我认为这是不正确的。
在这种情况下,我很难做一个明确的声明。对于你的问题,有非常好的专家,所以我建议把这个问题交给https://www.mql5.com/ru/forum/1111。
经过我的编辑,代码可以正常工作。没有它,就没有。但你的代码是否应该工作,最好是在上面的链接中的分支。
在实际代码中,该函数返回一个对象。
我认为在这种情况下,复制构造函数应该创建一个临时副本。
该代码在MQL5 build 1545中正确工作。
在新版本中,复制构造函数甚至不能调整一维数组的大小:错误4007。
在我看来,这是不正确的。
这个错误已经在Build 1580中被修复,谢谢,一切都在正常工作)。
在这种情况下,我很难说什么定论。对于你的问题,有非常好的专家,所以我建议你向https://www.mql5.com/ru/forum/1111。
经过我的编辑,代码可以正常工作。没有它,就没有。但你的代码是否应该工作,最好是针对上面链接的分支。
谢谢你的链接。
也许有人能给我一个提示。
我不知道如何在手动改变输入设置后中断EA的执行。
1) 在图表上像这样运行EA代码。
2) 打开设置窗口,将 "设置_"参数改为1。
3) 并应用这些变化。
所以,为了开始应用变化,OnInit必须被执行,但OnInit将不会被执行,直到OnTick(或任何其他)的计算停止。
据我所知,只有通过_StopFlag--停止一个mql5-程序的标志来检查停止程序,但它只是为了完全退出。但我不知道如何理解,输入设置已经改变,停止计算。
也许有人遇到过这样的情况?也许有什么秘密的黑客?
也许有人能给我一个提示。
我不知道如何在手动改变输入设置后中断EA的执行。
1) 在图表上像这样运行EA代码。
2) 打开设置窗口,将 "设置_"参数改为1。
3) 并应用这些变化。
所以,为了开始应用变化,OnInit必须被执行,但OnInit将不会被执行,直到OnTick(或任何其他)的计算停止。
据我所知,只有通过_StopFlag--停止一个mql5-程序的标志来检查停止程序,但它只是为了完全退出。但我不知道如何理解,输入设置已经改变,停止计算。
也许有人遇到过这样的情况?也许有什么秘密的黑客?
检查OnInit()中的去初始化代码。
取消初始化的原因
由UninitializeReason()返回的Expert Advisor的去初始化原因代码。它们可以有以下任何一个值。
恒定.
价值
描述
理论_计划
0
专家已经通过调用ExpertRemove()停止了工作。
REASON_REMOVE
1
从图表中删除的程序
原因_重新编译
2
程序重新编译
原因_图表变化
3
图表符号或周期已被改变
原因_chartclose
4
该图表已关闭
原因_参数
5
输入参数被用户改变
REASON_ACCOUNT
6
另一个账户被激活或重新连接到交易服务器,因为账户设置被改变了
原因_模板
7
应用了另一个图表模板
拒绝接受的原因
8
标志着OnInit()处理程序已经返回了一个非零值
解释_关闭
9
终点站已关闭
检查OnInit()中的去初始化代码。
...
嗯...你不了解我 :)
你需要在函数中知道(例如在OnTick 中),用户已经改变了输入参数,也就是说,知道是时候收尾了,让程序进入OnDeinit。
嗯...你误解了我的意思 :)
你需要在函数内部(例如在OnTick)知道用户已经改变了输入参数,也就是说,知道现在是时候收工了,让程序退出到OnDeinit。
一旦用户调用EA设置窗口(F7)并点击那里的OK按钮,OnDeinit()就会被立即调用,而这又会在去初始化代码中写入REASON_PARAMETERS 的值。然后调用OnInit(),在这里 使用UninitializeReason() 可以检查去初始化代码,如果其值等于REASON_PARAMETERS,就可以决定下一步该怎么做。
好的。
请。
1)首先运行我的代码,这是我在第一篇帖子中给出的。 我不是为了美丽而把它放在那里......你可以在任何图表上运行它。
2) 调用EA设置窗口。
3) 改变参数并按确定。
如果你仔细看了我的代码,那么结果不会让你吃惊:OnDeinit()将不会被调用。
不仅如此,我还在deinit中增加了一个打印,包括原因和参数,这样你就可以确保专家没有到达deinit。
请注意代码中最重要的一块。
这是一个清晰的模拟长计算,不会因为输入参数的变化而中断。而我需要打断它,问题是如何打断?:)
我只是想确定我在MQL5中没有遗漏任何东西,在语言中除了_StopFlag 之外,确实没有其他东西,不幸的是,这并不能解决这种情况。
粗略的说,我需要在繁重的计算过程中抓住输入参数变化的瞬间。
不仅如此,我还在deinit中添加了一个打印,包括原因和参数,这样你就可以确保专家没有到达deinit。
请注意代码中最重要的一块。
这是一个清晰的模拟长计算,不会因为输入参数的变化而中断。而我需要打断它,问题是如何打断?:)
我只是想确定我在MQL5中没有遗漏任何东西,在语言中除了_StopFlag 之外,确实没有其他东西,不幸的是,这并不能解决这种情况。
粗略的说,我需要在繁重的计算过程中抓住输入参数变化的瞬间。
粗略的说--重新仔细阅读我写给你的东西,把无限循环从你的代码中删除。
你确定将专家顾问驱动到一个无限循环中是正确的解决方案吗?