mql5语言的特点、微妙之处以及技巧 - 页 159 1...152153154155156157158159160161162163164165166...247 新评论 Maxim Kuznetsov 2020.01.17 21:36 #1581 Yurixx: 你能告诉我吗,请告诉我。 在指标中,系列的顺序,例如close[],是由ArraySetAsSeries()设置一次还是以其他方式设置? 是在OnCalculate()中完成还是可以在OnInit()中完成? 我遇到了一个令人困惑的情况。 close[]中的订单,在第一个tick上被AS_SERIES设置,在下一个tick上自发地改变为正常的,即!AS_SERIES。 我还没有在代码中找到这个原因。 在任何获得标量&arr[]的函数中,你都不能绝对确定数组的索引 方向 :-( 此外,如果你改变了内部的 "序列性",这个方向将在你的函数结束后仍然存在......这将是一个副作用,没有人希望如此。 这就是为什么,不幸的是,当你得到一个数组输入到一个函数中时,要记住它的序列化,把它设置成一个方便的序列化,当你退出函数时,一定要把原始的序列化返回。 这是OnCalculate的罕见情况,但在实践中,它也曾经被其他代码所调用。 Yurixx 2020.01.18 11:09 #1582 Maxim Kuznetsov:此外,如果你在内部改变了 "序列化",当你的函数结束时,这个方向将保持不变...... 这正是我所指望的。这就是为什么我把ArraySetAsSeries(close,true)放在OnCalculate() 块中,它在第一次登录时只执行一次。而这种 "序列化 "确实是设定的。然而,令我惊讶的是,在第二次打勾,甚至更多的时候,"序列性 "已经相反了。 Maxim Kuznetsov: 对于OnCalculate来说,这是一种罕见的情况,但在实践中,它恰好也被其他代码所调用。 我没有这样的异物,而且,我也没有在程序中改变时间序列和缓冲区数组的 "序列化"。因此,我只需在指标开始时设置一次即可。但是,如果我们不能确定这些数组的 "序列性 "是否被保存,我们就必须在每个OnCalculate() 循环的开始设置它。这似乎是完全不自然的事情。 fxsaber 2020.01.26 13:34 #1583 input string inStr = NULL; // Входная строка не может быть NULL, но об этом нигде не сообщается. #define PRINT(A) Print(#A + " = " + (string)(A)); void OnStart() { string Str = NULL; PRINT(inStr == NULL); // false PRINT(Str == NULL); // true PRINT(inStr == ""); // true PRINT(Str == ""); // false } 在编译时生成一个警告是个好主意。 Alexey Viktorov 2020.01.26 13:52 #1584 fxsaber: 在编译时生成一个警告是个好主意。 如果从以前到现在没有什么变化,那么NULL !"="" 很多人以前都上过当。 fxsaber 2020.01.26 13:57 #1585 Alexey Viktorov: 如果从以前到现在没有什么变化,那么NULL !"="" 很多人以前都上过当。 这不是我们正在谈论的问题。 Alexey Viktorov 2020.01.26 14:05 #1586 fxsaber: 我们谈论的是别的东西。 然后解释为什么不可能。为什么? input string inStr = ""; 可以,但 input string inStr = NULL; 不可能的。 fxsaber 2020.01.26 14:08 #1587 Alexey Viktorov: 然后解释为什么不可能。 上面的脚本显示了这一点。 Alexey Viktorov 2020.01.26 14:10 #1588 fxsaber: 上面的脚本显示了这一点。 如果是这样,就不会有问题了。你总是认为周围的人都应该读懂你的想法,或者在编程方面比你训练得更好。 fxsaber 2020.01.26 14:20 #1589 Alexey Viktorov: 如果是这样,就不会有问题了。你总是认为每个人都应该读懂你的想法,或者在编程方面比你训练得更好。 我不明白这种反应的原因。简短的代码100%地演示了这个功能。 Alexey Viktorov 2020.01.26 14:44 #1590 fxsaber: 我不明白这种反应的原因。简短的代码100%地演示了这个功能。 正常反应。我不明白你的代码,我要求解释,答案是...... NULL是这样一个模糊的概念,你必须小心地处理它。特别是在应用于字符串变量时。 从文件中可以看出 //--- если строка не инициализирована, то присвоим ей наше предопределенное значение if(some_string==NULL) some_string="empty"; 因此,在这个例子中,NULL并不意味着字符串的长度 等于零,而是意味着该变量没有被初始化。 在你的例子中 input string inStr = NULL; 该变量被初始化。我不清楚它是如何被初始化的,我也不觉得有什么好整理的。 因此。 PRINT(inStr == NULL); // false 表示该变量已被初始化。同样,用什么来做是个大问题。为什么你认为不可能用NULL来初始化一个变量? 显然,这个初始化导致字符串长度等于零,这就是这个检查说的 PRINT(inStr == ""); // true 1...152153154155156157158159160161162163164165166...247 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你能告诉我吗,请告诉我。
在指标中,系列的顺序,例如close[],是由ArraySetAsSeries()设置一次还是以其他方式设置?
是在OnCalculate()中完成还是可以在OnInit()中完成?
我遇到了一个令人困惑的情况。
close[]中的订单,在第一个tick上被AS_SERIES设置,在下一个tick上自发地改变为正常的,即!AS_SERIES。
我还没有在代码中找到这个原因。
在任何获得标量&arr[]的函数中,你都不能绝对确定数组的索引 方向 :-(
此外,如果你改变了内部的 "序列性",这个方向将在你的函数结束后仍然存在......这将是一个副作用,没有人希望如此。
这就是为什么,不幸的是,当你得到一个数组输入到一个函数中时,要记住它的序列化,把它设置成一个方便的序列化,当你退出函数时,一定要把原始的序列化返回。
这是OnCalculate的罕见情况,但在实践中,它也曾经被其他代码所调用。
此外,如果你在内部改变了 "序列化",当你的函数结束时,这个方向将保持不变......
这正是我所指望的。这就是为什么我把ArraySetAsSeries(close,true)放在OnCalculate() 块中,它在第一次登录时只执行一次。而这种 "序列化 "确实是设定的。然而,令我惊讶的是,在第二次打勾,甚至更多的时候,"序列性 "已经相反了。
对于OnCalculate来说,这是一种罕见的情况,但在实践中,它恰好也被其他代码所调用。
我没有这样的异物,而且,我也没有在程序中改变时间序列和缓冲区数组的 "序列化"。因此,我只需在指标开始时设置一次即可。但是,如果我们不能确定这些数组的 "序列性 "是否被保存,我们就必须在每个OnCalculate() 循环的开始设置它。这似乎是完全不自然的事情。
在编译时生成一个警告是个好主意。
如果从以前到现在没有什么变化,那么NULL !"="" 很多人以前都上过当。
如果从以前到现在没有什么变化,那么NULL !"="" 很多人以前都上过当。
这不是我们正在谈论的问题。
我们谈论的是别的东西。
然后解释为什么不可能。为什么?
可以,但
不可能的。
然后解释为什么不可能。
上面的脚本显示了这一点。
上面的脚本显示了这一点。
如果是这样,就不会有问题了。你总是认为周围的人都应该读懂你的想法,或者在编程方面比你训练得更好。
如果是这样,就不会有问题了。你总是认为每个人都应该读懂你的想法,或者在编程方面比你训练得更好。
我不明白这种反应的原因。简短的代码100%地演示了这个功能。
我不明白这种反应的原因。简短的代码100%地演示了这个功能。
正常反应。我不明白你的代码,我要求解释,答案是......
NULL是这样一个模糊的概念,你必须小心地处理它。特别是在应用于字符串变量时。
从文件中可以看出
因此,在这个例子中,NULL并不意味着字符串的长度 等于零,而是意味着该变量没有被初始化。
在你的例子中
该变量被初始化。我不清楚它是如何被初始化的,我也不觉得有什么好整理的。
因此。
表示该变量已被初始化。同样,用什么来做是个大问题。为什么你认为不可能用NULL来初始化一个变量?
显然,这个初始化导致字符串长度等于零,这就是这个检查说的