新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 829 1...822823824825826827828829830831832833834835836...1953 新评论 Seric29 2019.05.04 07:28 #8281 有一个这样的格式问题:有这样的代码 int P=3。 如果(P==5){那么就有必要进入图书馆并计算一些东西}。 在这种情况下,P=3,即条件是假的。 问题是,编译器会进入库中并空闲地运行代码,还是编译器会读取 当前文件中的代码?我会解释我为什么要这样问。好吧,看,假设我们写下以下的格式条件 int Y=4。 如果(Y==4){做一些事情}否则{做一些其他事情}。在这种情况下,我们得到以下图片Y==4,首先我们可以说,优先级运算符被执行了,但是else{do something else}块也将被检查和计算(只是计算和总是),但是没有被执行,因为优先级是一个表达式if(Y==4)。换句话说,无论真相结果如何,机器都会进行所有的计算,也就是说,无论二级运算符是否被执行,它都会在计算上耗费能量。如果我使用大的程序和库,而编译器每次都会挖掘库的代码,最终会使程序变慢。 在这种情况下,使用库的效果会如何,我是否应该使用mql4代码本身尽可能的简洁,使机器人的性能高?谁对这个问题有什么想法? Pavel Soin 2019.05.04 08:14 #8282 Pavel Soin:你好。 假设我有两个指标,第一个有4个缓冲区,第二个有2个。我把它们放在图表上并打开数据窗口(CTRL+D)。 列表中包含6个缓冲区,从0到5。我怎样才能在MQL中从这个列表中读取缓冲区5的值呢?按要求的指标使用iCustom是不方便的。使用这个列表更方便。我知道他们是这样做的,但怎么做呢?谁能帮帮我? Alexey Viktorov 2019.05.04 08:26 #8283 Seric29:有一个这样的格式问题:有这样的代码 int P=3。 如果(P==5){那么就有必要进入图书馆并计算一些东西}。 在这种情况下,P=3,即条件是假的。 问题是,编译器会进入库中并空闲地运行代码,还是编译器会读取 当前文件中的代码?我会解释我为什么要这样问。好吧,看,假设我们写下以下的格式条件 int Y=4。 如果(Y==4){做一些事情}否则{做一些其他事情}。在这种情况下,我们得到以下图片Y==4,首先我们可以说,优先级运算符被执行了,但是else{do something else}块也将被检查和计算(只是计算和总是),但是没有被执行,因为优先级是一个表达式if(Y==4)。换句话说,无论真相结果如何,机器都会进行所有的计算,也就是说,无论二级运算符是否被执行,它都会在计算上耗费能量。如果我使用大的程序和库,而编译器每次都会挖掘库的代码,最终会使程序变慢。 在这种情况下,使用库的效果会如何,我是否应该使用mql4代码本身尽可能的简洁,使机器人的性能高?谁对这个问题有什么想法?MetaEditor的内置调试器能很好地回答这些问题。你应该写一个具有类似条件的脚本,并在调试器中一步一步地运行。你会看到,程序不会进入它无事可做的地方。此外,这样的条件 int P = 3, Y = 4; if(P == 5 && Y == 4) 在检查了P !=3之后,没有什么会被进一步检查。 Lomonosov1991 2019.05.04 09:40 #8284 下午好。你能告诉我怎样做才能在周末保持图表上的所有图形元素? Artyom Trishkin 2019.05.04 10:03 #8285 Lomonosov1991: 下午好。你能告诉我怎样做才能在周末保持图表上的所有图形元素? 不要删除它们 Seric29 2019.05.04 10:28 #8286 Alexey Viktorov:MetaEditor的内置调试器很好地回答了这些问题。写一个具有类似条件的脚本,并在调试器中一步步运行。你会看到程序如何不进入它无事可做的地方。此外,这个条件 在检查了P !=3之后,没有什么会被进一步检查。下面是一个例子 int pp=8;if(pp==8){pp=3;}else{pp=340000000000000000000000000000;} pp=8在这种情况下是8,但编译器对这个大数字发誓,我想把它放到一个变量里,但我不会把这个数字放到一个变量里,因为pp=8是正确的,但由于某种原因,编译器开始挖掘我写的东西,检查它是否可以,所以我们得出结论,是编译器在检查和计算,好吧,这当然是一个粗略的错误,我们可以犯不那么严重的错误,但编译器还是会检查它是否可以的。我不是说要在里面写那种东西,但编译器会检查它应该做什么,但它不会做,会算数。我试着用MQL4调试器工作,我读了这里的说明https://www.metatrader5.com/ru/metaeditor/help/development/debug,但 我甚至没有看到一个活跃的标签 "对照历史检查",尽管说明显示它应该是活跃的。 Alexey Viktorov 2019.05.04 11:07 #8287 Seric29:下面是一个例子 int pp=8;if(pp==8){pp=3;}else{pp=340000000000000000000000000000;} pp=8在这种情况下是8,但编译器对我想放入变量的大数字发誓,但我不会把这个数字放入变量,因为pp=8是正确的,但由于某种原因,编译器开始挖掘我写的东西,并检查它是否可以,所以我们得出结论,是编译器检查并增加了一切,嗯,这当然是一个粗略的错误,我们可以犯不那么严重的错误,但编译器仍然会检查它是否可以。我不是说要在里面写那种东西,但编译器会检查它应该做什么,但它不会做,会算数。我试着用MQL4调试器工作,我读了这里的说明https://www.metatrader5.com/ru/metaeditor/help/development/debug,但"对照历史检查 "选项卡甚至没有激活,尽管说明表明它应该激活。我试着用真实数据检查,但在这种情况下,变量值没有显示,我没有看到任何东西,只是想知道发生了什么事。编译器在编译时检查有效值,但在运行时不检查。阅读一下变量类型,以及这些变量的值允许在什么范围内。如果编译器没有检查这些范围,你可能会在代码执行的时候丢失数值,得到错误的计算结果。所以这种行为对程序员来说是好事。编译器总是会对可能的精度损失发出警告。 而MT4调试器对历史数据不起作用。这是MT5测试者的特权。但无论如何在历史上调试脚本是没有意义的,你可以观察我在MT4测试器中的建议。你只需要在代码的开头设置一个断点,然后一步一步地观察执行的顺序和变量的值。 Artyom Trishkin 2019.05.04 13:35 #8288 你认为讨论反编译的代码片段可以吗?他们至少应该重新命名这些变量。它不是那么厚颜无耻... Lomonosov1991 2019.05.04 14:16 #8289 Artyom Trishkin: 你认为讨论反编译的代码片段可以吗?他们至少应该重新命名这些变量。否则,就太无耻了...... 该EA以MQL4格式在线提供。三人舞》,我只是为自己重拍。 Artyom Trishkin 2019.05.04 14:21 #8290 Lomonosov1991:该顾问可在网上查询。Trio Dancer,我只是为自己修改一下。 那又怎样?有一些地方,他们购买和出售赃物。这个论坛不属于这个类别。它在一段时间前被黑掉了(从作者那里偷来的),现在你在为自己制作。请不要在这个网站上这样做。我们这里有道德规范。 1...822823824825826827828829830831832833834835836...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
有一个这样的格式问题:有这样的代码
int P=3。
如果(P==5){那么就有必要进入图书馆并计算一些东西}。
在这种情况下,P=3,即条件是假的。 问题是,编译器会进入库中并空闲地运行代码,还是编译器会读取 当前文件中的代码?我会解释我为什么要这样问。好吧,看,假设我们写下以下的格式条件
int Y=4。
如果(Y==4){做一些事情}否则{做一些其他事情}。在这种情况下,我们得到以下图片Y==4,首先我们可以说,优先级运算符被执行了,但是else{do something else}块也将被检查和计算(只是计算和总是),但是没有被执行,因为优先级是一个表达式if(Y==4)。换句话说,无论真相结果如何,机器都会进行所有的计算,也就是说,无论二级运算符是否被执行,它都会在计算上耗费能量。如果我使用大的程序和库,而编译器每次都会挖掘库的代码,最终会使程序变慢。 在这种情况下,使用库的效果会如何,我是否应该使用mql4代码本身尽可能的简洁,使机器人的性能高?谁对这个问题有什么想法?
你好。
假设我有两个指标,第一个有4个缓冲区,第二个有2个。我把它们放在图表上并打开数据窗口(CTRL+D)。 列表中包含6个缓冲区,从0到5。我怎样才能在MQL中从这个列表中读取缓冲区5的值呢?按要求的指标使用iCustom是不方便的。使用这个列表更方便。我知道他们是这样做的,但怎么做呢?
谁能帮帮我?
有一个这样的格式问题:有这样的代码
int P=3。
如果(P==5){那么就有必要进入图书馆并计算一些东西}。
在这种情况下,P=3,即条件是假的。 问题是,编译器会进入库中并空闲地运行代码,还是编译器会读取 当前文件中的代码?我会解释我为什么要这样问。好吧,看,假设我们写下以下的格式条件
int Y=4。
如果(Y==4){做一些事情}否则{做一些其他事情}。在这种情况下,我们得到以下图片Y==4,首先我们可以说,优先级运算符被执行了,但是else{do something else}块也将被检查和计算(只是计算和总是),但是没有被执行,因为优先级是一个表达式if(Y==4)。换句话说,无论真相结果如何,机器都会进行所有的计算,也就是说,无论二级运算符是否被执行,它都会在计算上耗费能量。如果我使用大的程序和库,而编译器每次都会挖掘库的代码,最终会使程序变慢。 在这种情况下,使用库的效果会如何,我是否应该使用mql4代码本身尽可能的简洁,使机器人的性能高?谁对这个问题有什么想法?
MetaEditor的内置调试器能很好地回答这些问题。你应该写一个具有类似条件的脚本,并在调试器中一步一步地运行。你会看到,程序不会进入它无事可做的地方。此外,这样的条件
在检查了P !=3之后,没有什么会被进一步检查。
下午好。你能告诉我怎样做才能在周末保持图表上的所有图形元素?
MetaEditor的内置调试器很好地回答了这些问题。写一个具有类似条件的脚本,并在调试器中一步步运行。你会看到程序如何不进入它无事可做的地方。此外,这个条件
在检查了P !=3之后,没有什么会被进一步检查。
下面是一个例子
int pp=8;if(pp==8){pp=3;}else{pp=340000000000000000000000000000;}
pp=8在这种情况下是8,但编译器对这个大数字发誓,我想把它放到一个变量里,但我不会把这个数字放到一个变量里,因为pp=8是正确的,但由于某种原因,编译器开始挖掘我写的东西,检查它是否可以,所以我们得出结论,是编译器在检查和计算,好吧,这当然是一个粗略的错误,我们可以犯不那么严重的错误,但编译器还是会检查它是否可以的。我不是说要在里面写那种东西,但编译器会检查它应该做什么,但它不会做,会算数。我试着用MQL4调试器工作,我读了这里的说明https://www.metatrader5.com/ru/metaeditor/help/development/debug,但 我甚至没有看到一个活跃的标签 "对照历史检查",尽管说明显示它应该是活跃的。
下面是一个例子
int pp=8;if(pp==8){pp=3;}else{pp=340000000000000000000000000000;}
pp=8在这种情况下是8,但编译器对我想放入变量的大数字发誓,但我不会把这个数字放入变量,因为pp=8是正确的,但由于某种原因,编译器开始挖掘我写的东西,并检查它是否可以,所以我们得出结论,是编译器检查并增加了一切,嗯,这当然是一个粗略的错误,我们可以犯不那么严重的错误,但编译器仍然会检查它是否可以。我不是说要在里面写那种东西,但编译器会检查它应该做什么,但它不会做,会算数。我试着用MQL4调试器工作,我读了这里的说明https://www.metatrader5.com/ru/metaeditor/help/development/debug,但"对照历史检查 "选项卡甚至没有激活,尽管说明表明它应该激活。我试着用真实数据检查,但在这种情况下,变量值没有显示,我没有看到任何东西,只是想知道发生了什么事。
编译器在编译时检查有效值,但在运行时不检查。阅读一下变量类型,以及这些变量的值允许在什么范围内。如果编译器没有检查这些范围,你可能会在代码执行的时候丢失数值,得到错误的计算结果。所以这种行为对程序员来说是好事。编译器总是会对可能的精度损失发出警告。
而MT4调试器对历史数据不起作用。这是MT5测试者的特权。但无论如何在历史上调试脚本是没有意义的,你可以观察我在MT4测试器中的建议。你只需要在代码的开头设置一个断点,然后一步一步地观察执行的顺序和变量的值。
你认为讨论反编译的代码片段可以吗?
他们至少应该重新命名这些变量。否则,就太无耻了......
该EA以MQL4格式在线提供。三人舞》,我只是为自己重拍。
该顾问可在网上查询。Trio Dancer,我只是为自己修改一下。