[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 409 1...402403404405406407408409410411412413414415416...631 新评论 asasusa 2012.10.02 02:18 #4081 sss2019。 请给我看一个例子,我做了,但没有用。 我做的脚本是这样的 int orderstotal = OrdersTotal(); for(i = 0; i < orderstotal; i++ ) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == FALSE) break; if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if(OrderType() == OP_BUY) if(OrderClose(OrderTicket(),OrderLots(),Bid,Slippage) == false) { Print(GetLastError()); } if(OrderType() == OP_SELL) if(OrderClose(OrderTicket(),OrderLots(),Ask,Slippage) == false) { Print(GetLastError()); } if(OrderType() > 1) if(OrderDelete(OrderTicket()) == false) { Print(GetLastError()); } } Print(i," ",orderstotal); } 结果是,打印输出如下 0 4 1 4 这就是全部,由于某些原因,循环没有打印出 2 4 3 4 我在循环中加入了OrderSelect(i, SELECT_BY_POS, MODE_TRADES,而不是I 0,也就是说,第一个订单总是被选中,而且脚本工作正常。事实证明,当循环删除两个订单时,当列表中只有两个订单时,它试图选择第三个订单。 Виктор 2012.10.02 02:33 #4082 sss2019: 制作的脚本是这样的 最后... 实例 --- 2012.10.02 03:14 #4083 sss2019: 请给我看一个例子,我有 for(i = OrdersTotal(); i > 0; i--) 没有帮助。 因为你仍然要思考。 for(i = OrdersTotal()-1; i >=0; i--) asasusa 2012.10.02 07:20 #4084 帮助我解决这个难题 int i; double maxrange,range; double Ma1 = iMA(Symbol(),Period(),FastMaPeriod,0,MODE_EMA,PRICE_OPEN,i); double Ma2 = iMA(Symbol(),Period(),SlowMaPeriod,0,MODE_EMA,PRICE_OPEN,i); while(Ma1 > Ma2) { i++; Ma1 = iMA(Symbol(),Period(),FastMaPeriod,0,MODE_EMA,PRICE_OPEN,i); Ma2 = iMA(Symbol(),Period(),SlowMaPeriod,0,MODE_EMA,PRICE_OPEN,i); range = (Ma1 - Ma2)/Point; if(range > maxrange) maxrange = range; } 脚本搜索线条之间的最大距离。它在所有的柱子上输出所有的值,最大范围是一个柱子上的1.6235和另一个柱子上的1.6208。 我试着打印Print(maxrange);它打印的是0.086,我不明白为什么,我是用点除以的。 Владимир Тезис 2012.10.02 08:33 #4085 sss2019: 帮助我解决这个难题 脚本搜索线条之间的最大 距离。它在所有的柱子上输出所有的值,最大范围是一个柱子上的1.6235和另一个柱子上的1.6208。 我试着输出Print(maxrange);它返回0.086,我完全不明白为什么,我在用点除法。 这不是一个两难的问题。进退两难是指你不知道两个解决方案中哪个是最好的。 那么,首先,iMA()函数有七个参数,而不是六个。第二,你已经通过int i字符串声明了一个变量。再进一步说,i变量没有在任何地方初始化一个值。结果是,它要么是零,要么是含有前一个活动留下的内存垃圾。第三,while循环的安排是不正确的。好吧,我们假设i变量在初始化后等于零。我们还假设Ma1>Ma2的表达也是真的。因此,while(Ma1 > Ma2)行将开始循环。在下一次循环迭代中,我们将发现(Ma1>Ma2)表达式不再是真的,循环将被终止。变量Ma1和Ma2将不包含最大的距离--最大的距离是一次。这个条件只会显示Ma1现在已经小于或等于Ma2。 此外,maxrange变量将只在range = (Ma1 - Ma2)/Point这一行被初始化一个值;那么,如果条件if(range > maxrange)永远不会出现,因为你没有在代码的其他地方给maxrange变量初始化一个值,怎么办?因此,事实证明,你是在将计算的结果与记忆细胞的垃圾进行比较。在这里,你有难以理解的打印结果,这是代码执行的结果。 asasusa 2012.10.02 08:44 #4086 事情是这样的,我在循环中输出所有的MA值,所有的值都是正确的,也就是说,这个时期的所有MA值都被列举出来。但这个地方的计算是错误的--范围=(Ma1-Ma2)/Point。 if(range > maxrange) maxrange = range; [删除] 2012.10.02 09:01 #4087 sss2019: 这就是问题的关键,我在循环中输出所有的MA值,所有的值都是正确的,也就是说,这个时期的所有MA值都被搜索到了。但这个地方的计算是错误的--范围=(Ma1-Ma2)/Point。 if(range > maxrange) maxrange = range; *点 范围=(Ma1 - Ma2)*点 Владимир Тезис 2012.10.02 09:17 #4088 pako:*点范围 = (Ma1 - Ma2)*Point 马1 = 0.6526,马2 = 0.6516。ma1-ma2 = 0.6526-0.6516 = 0.0010。点=0.0001。若是相乘,就是一个双库。0,0010 * 0,0001 = 0,0000001 Владимир Тезис 2012.10.02 09:19 #4089 sss2019: 事情是这样的,我在循环中输出所有的MA值,所有的值都是正确的,也就是说,这个时期的所有MA值都被列举出来。但这个地方的计算是错误的--范围=(Ma1-Ma2)/Point。 if(range > maxrange) maxrange = range; 那么,你需要检查输入的是什么。计算中涉及哪些变量值? [删除] 2012.10.02 10:56 #4090 在 MQL教程 ,在标准函数一章的图形操作部分,有一个函数WindowHandle,描述如下。"......返回包含指定图形的窗口(窗口手柄)的系统描述符"。 问题:"窗柄 "是什么意思(它是什么),有什么用? P.S.为了不给论坛添乱,提前感谢您的回答 1...402403404405406407408409410411412413414415416...631 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
sss2019。
请给我看一个例子,我做了,但没有用。
我做的脚本是这样的
结果是,打印输出如下
0 4
1 4
这就是全部,由于某些原因,循环没有打印出
2 4
3 4
我在循环中加入了OrderSelect(i, SELECT_BY_POS, MODE_TRADES,而不是I 0,也就是说,第一个订单总是被选中,而且脚本工作正常。事实证明,当循环删除两个订单时,当列表中只有两个订单时,它试图选择第三个订单。
制作的脚本是这样的
最后...
请给我看一个例子,我有
没有帮助。
因为你仍然要思考。
帮助我解决这个难题
脚本搜索线条之间的最大距离。它在所有的柱子上输出所有的值,最大范围是一个柱子上的1.6235和另一个柱子上的1.6208。
我试着打印Print(maxrange);它打印的是0.086,我不明白为什么,我是用点除以的。
帮助我解决这个难题
脚本搜索线条之间的最大 距离。它在所有的柱子上输出所有的值,最大范围是一个柱子上的1.6235和另一个柱子上的1.6208。
我试着输出Print(maxrange);它返回0.086,我完全不明白为什么,我在用点除法。
这不是一个两难的问题。进退两难是指你不知道两个解决方案中哪个是最好的。
那么,首先,iMA()函数有七个参数,而不是六个。第二,你已经通过int i字符串声明了一个变量。再进一步说,i变量没有在任何地方初始化一个值。结果是,它要么是零,要么是含有前一个活动留下的内存垃圾。第三,while循环的安排是不正确的。好吧,我们假设i变量在初始化后等于零。我们还假设Ma1>Ma2的表达也是真的。因此,while(Ma1 > Ma2)行将开始循环。在下一次循环迭代中,我们将发现(Ma1>Ma2)表达式不再是真的,循环将被终止。变量Ma1和Ma2将不包含最大的距离--最大的距离是一次。这个条件只会显示Ma1现在已经小于或等于Ma2。
此外,maxrange变量将只在range = (Ma1 - Ma2)/Point这一行被初始化一个值;那么,如果条件if(range > maxrange)永远不会出现,因为你没有在代码的其他地方给maxrange变量初始化一个值,怎么办?因此,事实证明,你是在将计算的结果与记忆细胞的垃圾进行比较。在这里,你有难以理解的打印结果,这是代码执行的结果。
if(range > maxrange) maxrange = range;
这就是问题的关键,我在循环中输出所有的MA值,所有的值都是正确的,也就是说,这个时期的所有MA值都被搜索到了。但这个地方的计算是错误的--范围=(Ma1-Ma2)/Point。
if(range > maxrange) maxrange = range;
*点
范围=(Ma1 - Ma2)*点
*点
范围 = (Ma1 - Ma2)*Point
事情是这样的,我在循环中输出所有的MA值,所有的值都是正确的,也就是说,这个时期的所有MA值都被列举出来。但这个地方的计算是错误的--范围=(Ma1-Ma2)/Point。
if(range > maxrange) maxrange = range;
那么,你需要检查输入的是什么。计算中涉及哪些变量值?
在 MQL教程 ,在标准函数一章的图形操作部分,有一个函数WindowHandle,描述如下。"......返回包含指定图形的窗口(窗口手柄)的系统描述符"。
问题:"窗柄 "是什么意思(它是什么),有什么用?
P.S.为了不给论坛添乱,提前感谢您的回答