错误、漏洞、问题 - 页 2451 1...244424452446244724482449245024512452245324542455245624572458...3184 新评论 [删除] 2019.05.03 11:24 #24501 名称中带有#的文件不能被添加到存储器中。这是正常的行为还是一个错误? Igor Zakharov 2019.05.03 11:41 #24502 如果我们谈论的是外汇,在那里,滴答声不会使价格发生太大的变化(通常)。但在其他市场上,一个订单可能会因为一个小的方法而严重滑落。我仍然赞成在蜱虫之间进行尝试--我看不出有什么坏处,潜在的好处就在那里。 我们必须尝试... Sergey Dzyublik 2019.05.03 13:33 #24503 行动中的滞后现象...关于隐式赋值复制 操作符在结构中如何工作的例子。#define PRINT(x) Print(#x, ":", string(x)) struct MyArray{ uchar data[]; }; void OnStart(){ MyArray tmp_arr; MyArray huge_arr; ArrayResize(huge_arr.data, 1000); ArrayInitialize(huge_arr.data, 0x8); MyArray small_arr; ArrayResize(small_arr.data, 10); ArrayInitialize(small_arr.data, 0x1); tmp_arr = small_arr; Print("\r\nTest with small_arr"); PRINT(ArraySize(tmp_arr.data)); PRINT(tmp_arr.data[0]); PRINT(tmp_arr.data[ArraySize(tmp_arr.data)-1]); tmp_arr = huge_arr; Print("\r\nTest with huge_arr"); PRINT(ArraySize(tmp_arr.data)); PRINT(tmp_arr.data[0]); PRINT(tmp_arr.data[ArraySize(tmp_arr.data)-1]); tmp_arr = small_arr; Print("\r\nTest with small_arr"); PRINT(ArraySize(tmp_arr.data)); PRINT(tmp_arr.data[0]); PRINT(tmp_arr.data[ArraySize(tmp_arr.data)-1]); } 结果。2019.05.03 14:29:14.005 Test_push (EURUSD,H1) Test with small_arr 2019.05.03 14:29:14.005 Test_push (EURUSD,H1) ArraySize(tmp_arr.data):10 2019.05.03 14:29:14.005 Test_push (EURUSD,H1) tmp_arr.data[0]:1 2019.05.03 14:29:14.005 Test_push (EURUSD,H1) tmp_arr.data[ArraySize(tmp_arr.data)-1]:1 2019.05.03 14:29:14.005 Test_push (EURUSD,H1) 2019.05.03 14:29:14.005 Test_push (EURUSD,H1) Test with huge_arr 2019.05.03 14:29:14.005 Test_push (EURUSD,H1) ArraySize(tmp_arr.data):1000 2019.05.03 14:29:14.005 Test_push (EURUSD,H1) tmp_arr.data[0]:8 2019.05.03 14:29:14.005 Test_push (EURUSD,H1) tmp_arr.data[ArraySize(tmp_arr.data)-1]:8 2019.05.03 14:29:14.005 Test_push (EURUSD,H1) 2019.05.03 14:29:14.005 Test_push (EURUSD,H1) Test with small_arr 2019.05.03 14:29:14.005 Test_push (EURUSD,H1) ArraySize(tmp_arr.data):1000 2019.05.03 14:29:14.005 Test_push (EURUSD,H1) tmp_arr.data[0]:1 2019.05.03 14:29:14.005 Test_push (EURUSD,H1) tmp_arr.data[ArraySize(tmp_arr.data)-1]:8 fxsaber 2019.05.03 13:41 #24504 Sergey Dzyublik: 行动中的滞后现象...通过一个例子来说明隐式复制操作符在结构中是如何工作的。也许,为了发现这样的事情,人们不得不达到一种内部状态/愚蠢,即 "这里没有什么不可能的,但我还是要检查一下",以寻找自己代码中的一个错误。 Sergey Dzyublik 2019.05.03 14:40 #24505 fxsaber:我猜为了检测这样的事情,你必须达到 "这里不可能出错,但我还是要检查一下 "的内部状态/愚蠢的程度,以寻找你的代码中的错误。该代码正在为一个特定的协议解析字节流。 已解压和未解压的数据(下一级封装的数据)不匹配。 fxsaber 2019.05.03 14:50 #24506 Sergey Dzyublik:该代码正在解析一个特定协议的字节流。 已解压和未解压的数据(下一级封装的数据)不匹配。 要检测这样的任务并不难。很幸运。 A100 2019.05.03 16:08 #24507 Sergey Dzyublik: 行动中的滞后现象...隐式复制操作符在结构中如何工作的一个例子。问题是什么? void OnStart() { int a[]; ArrayResize( a, 3 ); ArrayInitialize( a, 3 ); int b[]; ArrayResize( b, 2 ); ArrayInitialize( b, 2 ); 在MQL中,一个条件性条目 // a = b; 等同于 ArrayCopy( a, b ); 结果。 ArrayPrint( a ); } 2 2 3 Sergey Dzyublik 2019.05.03 17:00 #24508 A100:问题是什么呢? 在我看来,赋值复制 操作者不仅应该复制数组元素 本身,还应该复制它们的编号,保留的内存量是有效的。而现在实际上是以下情况。 int size; size = 4; // size == 4 size = 8; // size == 8 size = 4; // size == 8 源代码。 struct MyArray{ uchar data[]; } MyArray GetArray(int i){ MyArray arr; if (i%2 == 0){ ArrayResize(arr.data, 8); ArrayInitialize(arr.data, 0x8); }else{ ArrayResize(arr.data, 4); ArrayInitialize(arr.data, 0x4); } return arr; } void OnStart(){ MyArray arr_1 = GetArray(1); ArrayPrint(arr_1.data); // 4 4 4 4 MyArray arr_2 = GetArray(2); ArrayPrint(arr_2.data); // 8 8 8 8 8 8 8 8 arr_2 = arr_1; ArrayPrint(arr_2.data); // 4 4 4 4 8 8 8 8 } A100 2019.05.03 17:17 #24509 Sergey Dzyublik: 复制操作者不仅要复制数组中的元素 本身,还要复制它们的编号,保留的内存数量不动。 那为什么 struct MyArray { uchar data[]; }; void OnStart() { { uchar a[], b[]; a = b; } //(1) Error { MyArray a, b; a = b; } //(2) нормально } 在(1)中的错误和在(2)中它是好的!?有什么区别? 不同的是,数组的复制不是通过规则a = b,而是通过规则ArrayCopy( a, b ) 根据a=b的规则不存在,因为它不存在,如果它存在,错误(1)就不会存在 Alexey Viktorov 2019.05.03 17:29 #24510 Igor Zakharov:对每一个刻度进行计数是资源密集型的,特别是在策略测试器中。只在交易事件中重新计算不是更正确吗,也就是说,当未结头寸列表中的某些东西实际发生变化时,才重新计算?有了OnTradeTransaction(),更容易控制用户对EA的干预。(有一些先例 :) 在这个机器人中,我正在测试关闭网格的可能性:损失+利润>X,然后关闭它们(通常在不同的符号上)。但是,失败发生了,因为即使它们已经关闭,测试人员也没有意识到这一点,并继续进行下一次迭代,错误地将现有的与已经关闭的 "配对"。所以我不得不在每次关闭后增加一个重新计算。 我已经重新计算了计数器,并首先对所有打开的计数器进行了重新计算,而不是+1/-1。 我同意,最初使用OnTradeTransaction() 是有风险的。实际上,在我的请求不是异步 的情况下,我可能会拒绝使用它--它们只会引起麻烦。这一点都不冒险。问题只在于组织行动和事件的顺序。傻瓜的建议是正确的--关闭这对组合,离开这个循环,直到下一次打勾。在下一个刻度,价格不一定比现在差。也许,晚一点关闭会更好,但不会混淆什么与什么关闭。 第二种变体:不是按照PositionsTotal来安排循环,而是按照事先创建的数组。而当关闭一些对子时,这些票子应该从阵列中删除。这将不允许已关闭的位置 再次被关闭。总的来说,是一种飞行的幻想和行动的逻辑。 1...244424452446244724482449245024512452245324542455245624572458...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
如果我们谈论的是外汇,在那里,滴答声不会使价格发生太大的变化(通常)。但在其他市场上,一个订单可能会因为一个小的方法而严重滑落。我仍然赞成在蜱虫之间进行尝试--我看不出有什么坏处,潜在的好处就在那里。
我们必须尝试...
结果。
行动中的滞后现象...通过一个例子来说明隐式复制操作符在结构中是如何工作的。
也许,为了发现这样的事情,人们不得不达到一种内部状态/愚蠢,即 "这里没有什么不可能的,但我还是要检查一下",以寻找自己代码中的一个错误。
我猜为了检测这样的事情,你必须达到 "这里不可能出错,但我还是要检查一下 "的内部状态/愚蠢的程度,以寻找你的代码中的错误。
该代码正在为一个特定的协议解析字节流。
已解压和未解压的数据(下一级封装的数据)不匹配。
该代码正在解析一个特定协议的字节流。
已解压和未解压的数据(下一级封装的数据)不匹配。
行动中的滞后现象...隐式复制操作符在结构中如何工作的一个例子。
问题是什么?
在MQL中,一个条件性条目
// a = b;等同于
ArrayCopy( a, b );结果。
ArrayPrint( a ); }2 2 3
问题是什么呢?
在我看来,赋值复制 操作者不仅应该复制数组元素 本身,还应该复制它们的编号,保留的内存量是有效的。
而现在实际上是以下情况。
源代码。
复制操作者不仅要复制数组中的元素 本身,还要复制它们的编号,保留的内存数量不动。
那为什么
在(1)中的错误和在(2)中它是好的!?有什么区别?
不同的是,数组的复制不是通过规则a = b,而是通过规则ArrayCopy( a, b )
根据a=b的规则不存在,因为它不存在,如果它存在,错误(1)就不会存在
对每一个刻度进行计数是资源密集型的,特别是在策略测试器中。只在交易事件中重新计算不是更正确吗,也就是说,当未结头寸列表中的某些东西实际发生变化时,才重新计算?有了OnTradeTransaction(),更容易控制用户对EA的干预。(有一些先例 :)
在这个机器人中,我正在测试关闭网格的可能性:损失+利润>X,然后关闭它们(通常在不同的符号上)。但是,失败发生了,因为即使它们已经关闭,测试人员也没有意识到这一点,并继续进行下一次迭代,错误地将现有的与已经关闭的 "配对"。所以我不得不在每次关闭后增加一个重新计算。
我已经重新计算了计数器,并首先对所有打开的计数器进行了重新计算,而不是+1/-1。
我同意,最初使用OnTradeTransaction() 是有风险的。实际上,在我的请求不是异步 的情况下,我可能会拒绝使用它--它们只会引起麻烦。
这一点都不冒险。问题只在于组织行动和事件的顺序。傻瓜的建议是正确的--关闭这对组合,离开这个循环,直到下一次打勾。在下一个刻度,价格不一定比现在差。也许,晚一点关闭会更好,但不会混淆什么与什么关闭。
第二种变体:不是按照PositionsTotal来安排循环,而是按照事先创建的数组。而当关闭一些对子时,这些票子应该从阵列中删除。这将不允许已关闭的位置 再次被关闭。总的来说,是一种飞行的幻想和行动的逻辑。