错误、漏洞、问题 - 页 2723 1...271627172718271927202721272227232724272527262727272827292730...3184 新评论 Igor Makanu 2020.04.23 22:57 #27221 Aleksey Mavrin: 你能告诉我出了什么问题,如何加快图表的更新速度?C hartRedraw函数是由专家顾问调用的,但仍有几分钟的延迟。 ChartRedraw只需要用于绘制(更新)图形对象,对于通过指标缓冲区 绘制的普通指标,我们不需要ChartRedraw。 我认为你应该寻找指标中的问题,也许每一个刻度的缓冲区计算是不正确的,有的 "作者 "每一个刻度都计算整个历史。 ZZY:我不能确认,但也许ChartRedraw用同步的历史记录更新整个图表,如果是这样,你实际上每次都要重新启动指标,对整个历史记录进行全面计算。 UPD:尝试将图表上的历史记录限制在较少的条数上,10 000条就足够了,在MT4中曾出现过这样的情况:一个重的指标 "吞噬 "了所有的内存,然后寻找EA不能正常工作的原因(它工作后又不工作了)。尽管在MT5中,所有的内存都被使用的可能性不大,....,但这种情况还是发生了。 Aleksey Mavrin 2020.04.23 23:09 #27222 Igor Makanu: ChartRedraw仅在绘制(更新)图形对象时需要,对于通过指标缓冲区 绘制的普通指标,你不需要ChartRedraw。 我认为你应该寻找指标中的问题,也许每一个刻度的缓冲区计算是不正确的,有的 "作者 "每一个刻度都计算整个历史。 ZZY:我不能确认,但也许ChartRedraw用同步的历史记录更新整个图表,如果是这样,那么每次你重启指标时都会对整个历史记录进行全面计算 UPD:尝试将图表上的历史记录限制在较少的条数上,10 000条就足够了,在MT4中曾出现过这样的情况:一个重的指标 "吞噬 "了所有的内存,然后寻找EA不能正常工作的原因(它工作后又不工作了)。虽然在MT5中,所有的内存都被使用的可能性不大,....,但也可能发生。 我已经试图优化计算,并测试了以前版本的指标。我以前每1000个柱子就计算一次,现在我在等待新的柱子打开。 如果这就是原因,我应该还是很惊讶的。1千条不是很强的计算会使图表绘制速度减慢2分钟? Igor Makanu 2020.04.23 23:19 #27223 Aleksey Mavrin: 如果是这个原因,还是值得大吃一惊的。1条不是很强的计算,会使图表绘制速度减慢2分钟? 在我看来,这是不可能的,终端会卸载这样的指标,并发出 "xxx指标的计算 时间太长 "的信息。 MT的运行时间(4/5)非常快,当然你可以多次计算相同的数据,但我认为,你必须努力尝试。 我认为该指标的作者不熟悉指标缓冲区的经济计算,忘记了正确计算最后的条数......去QB研究一下指标是怎么写的吧;) Alain Verleyen 2020.04.24 00:04 #27224 Slava : 这两个程序是在同一个终端还是在两个不同的终端? 重现该问题的代码发布在这里。https://www.mql5.com/en/forum/332849 你需要至少运行2次代码来重现它。 File-Sharing ... my next "Sometimes-Bug" in MT5? 2020.02.16www.mql5.com FILE_SHARE_READ and FILE_SHARE_WRITE do not work proper. MQL creates buffers with different contents for the same file. Please watch the example... [删除] 2020.04.24 06:36 #27225 Alexey Navoykov: 完全没有必要。为什么是C,C#怎么样?- 从意义上讲,它更接近于C#。 可能是因为µl c++是类似的,结构是从c中来的。 所有关于被动结构的谈论都是过时的观念,我认为。 如果你需要构造函数,请使用类或去找夏普。我们为什么要剥夺结构的这种内涵呢?这只会使程序更具表现力。我可能会拿着某人的代码,看到他/她有一个结构而不是一个类,并从一个词中得到很多信息。你将一无所获,你将勤奋地研究源代码以获得同样的结果,而我在一眨眼的功夫就得到了。在我的经验中--这种结构的惯例得到了尊重,好吧,也许是某种发条式的虚无主义的边缘化。 我相信,至少每个类型都应该有一个构造函数。未初始化的字段是邪恶的,应该避免。 在你看来,那里没有邪恶。Vaughn甚至拖入了标准:读取未初始化的unsigned char和std::byte不是未定义的行为。你可以为POD使用聚合初始化。而且不要忘记--所有这些初始化都不是免费的,它是真正的资源消耗(CPU、内存、可执行文件的大小)。如果你对你的数字计算机不屑一顾,在一些微控制器的情况下,它可能是重要的。毕竟,C/C++并不像夏普那样只是一个Windows的洗牌。 unsigned char fn() {unsigned char q; return q + 2;} int main() { fn(); } 0000000000001119 <fn>: 1119: 55 push %rbp 111 a: 48 89 e5 mov %rsp,%rbp 111 d: 0 f b6 45 ff movzbl -0x1(%rbp),%eax 1121: 83 c0 02 add $0x2,%eax 1124: 5 d pop %rbp 1125: c3 retq unsigned char fn2() {unsigned char q = 5; return q + 2;} int main() { fn(); } 0000000000001119 <fn2>: 1119: 55 push %rbp 111 a: 48 89 e5 mov %rsp,%rbp 111 d: c6 45 ff 05 movb $0x5,-0x1(%rbp) 1121: 0 f b6 45 ff movzbl -0x1(%rbp),%eax 1125: 83 c0 02 add $0x2,%eax 1128: 5 d pop %rbp 1129: c3 retq 仅仅一个变量的初始化就使指令大小增加了30%。 Slava 2020.04.24 06:48 #27226 Stanislav Korotky: 在一个终端。专家写数据,指标读数据。挂在不同的图表上,但显然可能是在同一个图表上(如果这很重要的话)。建2380。 读取该文件的专家顾问必须保持该文件的关闭。 在MQL5中实现文件的特殊性是,它们将来自文件的数据最大限度地保留在自己的缓冲区中。如果信息量大到无法容纳在缓冲区内,那么你把指针移到文件的开头,然后再移到文件的结尾的把戏就能奏效。 所以在这一点上,打开文件,检查内容,然后再次关闭它 Alain Verleyen 2020.04.24 07:03 #27227 Slava : 读取文件的专家顾问必须保持这个文件的关闭。 MQL5中文件实现的特殊性在于,它们尽可能地将来自文件的数据保存在自己的缓冲区中。如果信息量大到无法容纳在缓冲区内,那么你把指针移到文件的开头,然后再移到文件的结尾的技巧可能会奏效。 所以在这一点上,打开文件,检查内容,然后再次关闭它 所以,FileFlush()是无用的? Slava 2020.04.24 07:45 #27228 Alain Verleyen: 所以,FileFlush()是无用的? 不,如果你想让其他人能够读到修改过的文件,必须进行FileFlush。 问题是,MQL5程序在打开文件时将其读入自己的缓冲区。它不会知道文件中的任何变化,直到它再次读取文件。只有通过关闭然后再打开文件才能再次读取该文件 Andrey Barinov 2020.04.24 07:46 #27229 Slava: 不,如果你想让其他人能够读到修改过的文件,必须进行FileFlush。 即使你关闭了文件? Slava 2020.04.24 07:50 #27230 Andrey Barinov: 即使你关闭了文件? 这正是我所说的。关闭,然后重新打开 或者你是指在关闭文件之前的FileFlush? 1...271627172718271927202721272227232724272527262727272827292730...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你能告诉我出了什么问题,如何加快图表的更新速度?C hartRedraw函数是由专家顾问调用的,但仍有几分钟的延迟。
ChartRedraw只需要用于绘制(更新)图形对象,对于通过指标缓冲区 绘制的普通指标,我们不需要ChartRedraw。
我认为你应该寻找指标中的问题,也许每一个刻度的缓冲区计算是不正确的,有的 "作者 "每一个刻度都计算整个历史。
ZZY:我不能确认,但也许ChartRedraw用同步的历史记录更新整个图表,如果是这样,你实际上每次都要重新启动指标,对整个历史记录进行全面计算。
UPD:尝试将图表上的历史记录限制在较少的条数上,10 000条就足够了,在MT4中曾出现过这样的情况:一个重的指标 "吞噬 "了所有的内存,然后寻找EA不能正常工作的原因(它工作后又不工作了)。尽管在MT5中,所有的内存都被使用的可能性不大,....,但这种情况还是发生了。
ChartRedraw仅在绘制(更新)图形对象时需要,对于通过指标缓冲区 绘制的普通指标,你不需要ChartRedraw。
我认为你应该寻找指标中的问题,也许每一个刻度的缓冲区计算是不正确的,有的 "作者 "每一个刻度都计算整个历史。
ZZY:我不能确认,但也许ChartRedraw用同步的历史记录更新整个图表,如果是这样,那么每次你重启指标时都会对整个历史记录进行全面计算
UPD:尝试将图表上的历史记录限制在较少的条数上,10 000条就足够了,在MT4中曾出现过这样的情况:一个重的指标 "吞噬 "了所有的内存,然后寻找EA不能正常工作的原因(它工作后又不工作了)。虽然在MT5中,所有的内存都被使用的可能性不大,....,但也可能发生。
我已经试图优化计算,并测试了以前版本的指标。我以前每1000个柱子就计算一次,现在我在等待新的柱子打开。
如果这就是原因,我应该还是很惊讶的。1千条不是很强的计算会使图表绘制速度减慢2分钟?
如果是这个原因,还是值得大吃一惊的。1条不是很强的计算,会使图表绘制速度减慢2分钟?
在我看来,这是不可能的,终端会卸载这样的指标,并发出 "xxx指标的计算 时间太长 "的信息。
MT的运行时间(4/5)非常快,当然你可以多次计算相同的数据,但我认为,你必须努力尝试。
我认为该指标的作者不熟悉指标缓冲区的经济计算,忘记了正确计算最后的条数......去QB研究一下指标是怎么写的吧;)
这两个程序是在同一个终端还是在两个不同的终端?
重现该问题的代码发布在这里。https://www.mql5.com/en/forum/332849
你需要至少运行2次代码来重现它。
完全没有必要。为什么是C,C#怎么样?- 从意义上讲,它更接近于C#。
可能是因为µl c++是类似的,结构是从c中来的。
所有关于被动结构的谈论都是过时的观念,我认为。
如果你需要构造函数,请使用类或去找夏普。我们为什么要剥夺结构的这种内涵呢?这只会使程序更具表现力。我可能会拿着某人的代码,看到他/她有一个结构而不是一个类,并从一个词中得到很多信息。你将一无所获,你将勤奋地研究源代码以获得同样的结果,而我在一眨眼的功夫就得到了。在我的经验中--这种结构的惯例得到了尊重,好吧,也许是某种发条式的虚无主义的边缘化。
我相信,至少每个类型都应该有一个构造函数。未初始化的字段是邪恶的,应该避免。
在你看来,那里没有邪恶。Vaughn甚至拖入了标准:读取未初始化的unsigned char和std::byte不是未定义的行为。你可以为POD使用聚合初始化。而且不要忘记--所有这些初始化都不是免费的,它是真正的资源消耗(CPU、内存、可执行文件的大小)。如果你对你的数字计算机不屑一顾,在一些微控制器的情况下,它可能是重要的。毕竟,C/C++并不像夏普那样只是一个Windows的洗牌。
仅仅一个变量的初始化就使指令大小增加了30%。在一个终端。专家写数据,指标读数据。挂在不同的图表上,但显然可能是在同一个图表上(如果这很重要的话)。建2380。
读取该文件的专家顾问必须保持该文件的关闭。
在MQL5中实现文件的特殊性是,它们将来自文件的数据最大限度地保留在自己的缓冲区中。如果信息量大到无法容纳在缓冲区内,那么你把指针移到文件的开头,然后再移到文件的结尾的把戏就能奏效。
所以在这一点上,打开文件,检查内容,然后再次关闭它
读取文件的专家顾问必须保持这个文件的关闭。
MQL5中文件实现的特殊性在于,它们尽可能地将来自文件的数据保存在自己的缓冲区中。如果信息量大到无法容纳在缓冲区内,那么你把指针移到文件的开头,然后再移到文件的结尾的技巧可能会奏效。
所以在这一点上,打开文件,检查内容,然后再次关闭它
所以,FileFlush()是无用的?
不,如果你想让其他人能够读到修改过的文件,必须进行FileFlush。
问题是,MQL5程序在打开文件时将其读入自己的缓冲区。它不会知道文件中的任何变化,直到它再次读取文件。只有通过关闭然后再打开文件才能再次读取该文件
不,如果你想让其他人能够读到修改过的文件,必须进行FileFlush。
即使你关闭了文件?
即使你关闭了文件?
这正是我所说的。关闭,然后重新打开
或者你是指在关闭文件之前的FileFlush?