新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1688

 
好吧,科学人士,那就解释一下为什么神奇的增量停在2,而独特的却没有。在源代码中,我们打开了10个订单,每个订单都应该通过唯一的增量分配一个独特的魔法,它们的唯一性应该通过嵌套循环中的比较(!=)来检查:在一个增量魔法中,有一个与所有订单法师的比较通道,如果没有匹配,那么唯一将等于这些混合物的数量,如果它等于或大于订单数量,那么魔法是唯一的,它将被分配给订单。

我不知道这是不是太复杂了,但我认为如果我们看一下代码,会更容易理解。
附加的文件:
 
pribludilsa #:
问题是,表单很方便,只要给它一些项目,它就可以填充一些数组。如果输入0,一切都会崩溃,因为ArrayResize与位置数相关联。基于这个原因,我有额外的条件,如果位置的数量超过0,那么这个循环。我也经常弄错,现在我又检查了一遍。这个建议是正确的,因为否则的话,表单将不会填充数组的零元素,而这正是表单的作用。

是的,因为这个原因,我一直有问题。我希望这种明确性能够减少修复错误的时间。

 
Nerd Trader #:
好吧,科学界人士,那就解释一下为什么神奇的增量停在2,而独特的却没有。在源代码中,我们开了10个订单,每个订单都应该通过唯一的增量分配一个唯一的魔法,它们的唯一性是通过嵌套循环中的比较(!=)来检查的:在一个增量魔法中,有一个与所有订单魔法比较的通道,如果没有匹配,那么唯一将等于那些未匹配的数量,如果它等于订单的数量,那么魔法是唯一的,它将被分配到一个订单。我不知道这是不是太复杂了,但我认为如果我们看一下代码,会更容易理解。

如果你需要循环创建10个不同法师的订单,这就是你应该做的。

    for(int i = 0; i < 10; i ++)
    { 
    int order_send = OrderSend(Symbol(), OP_BUY, 0.01, Bid, 10,
    0, 0, "", i, 0, CLR_NONE);
    if(order_send == -1) ResetLastError();
    }

在这种情况下,我的作用不仅是控制循环,也是命令的魔术师。


但在你的例子中,有很多错误,形成了一种难题。很少有人会彻底调查它的原因是什么......

嗯,最起码,顺序循环不正确......。而这个神奇的变量是本地的,并且一直在重置...(不积累)

 
Nikolay Ivanov #:

如果你需要循环创建10个不同法师的订单,这就是你应该做的。

在这种情况下,我的作用不仅是控制循环,也是命令的魔术师。


但在你的例子中,有很多错误,形成了一种难题。很少有人会彻底调查它的原因是什么......

嗯,至少,顺序循环是错误的......而这个神奇的变量是本地的,并且一直在重置...(不累积)

这段代码是用于测试的,EA不会在这样的循环中创建订单;有一些逻辑不应该被纳入测试中。为什么订单周期是错的呢?"魔法 "应该被清除,没有理由让它累积。而且这里没有什么可理解的,只有两个嵌套的循环,里面有几行代码。

 
Nerd Trader #:

是的,因为这个原因,我一直有问题。我希望这种明确性能够减少修复错误的时间。

我也花了一些时间才搞清楚。讽刺的是,我开始弄明白的同时,其他用户也在这里发布了关于同样的事情。我只是复制粘贴对了,然后整理了一下,写错了,因为我只检查了循环的输入,忘记了输出。通过强制检查值,用打印机检查代码。
 
Nerd Trader #:

这段代码是用于测试的,EA不会在这样的循环中创建订单,这里面有一个逻辑,我们不应该在测试中加入。为什么顺序循环是错误的呢?"魔法 "应该被重置,没有理由让它累积起来。

没有-1。

for(int i = OrdersTotal()-1; i >= 0 ; i --)

如果魔术是这样设计的,那么事实证明,在逻辑上(在整体设计上)有一个错误,我们需要解开一个谜题来找到它...

 
Nikolay Ivanov #:

没有-1

如果魔法是这样设计的,那么在逻辑上就有一个错误(在整体设计上),你必须解开谜题才能找到它...

除非是这样。但-1也不能解决任何问题。为什么会出现错误?当魔力等于或大于订单数量时,将给予魔力。如果魔力应该归零,否则如果我们关闭几个魔力为5和6的订单,新的订单将高于最后一个订单的魔力,即11-12,以此类推。这样,当一个订单被清零时,它被比较并从零开始迭代,从而产生新的订单,其主数为封闭的,即5和6......

 
pribludilsa #:
我也花了很长时间才搞清楚。讽刺的是,我是在其他网友在这里发表关于同样事情的帖子的同时开始弄明白的。我只是复制粘贴对了,然后整理了一下,写错了,因为我只检查了循环的输入,忘记了输出。用打印机检查代码,强制检查值。
mql4没有一个像样的调试器,这太令人讨厌了。即使在上述源码上的真实数据,调试器也没有进入循环。我不得不用印刷品来弥补,但这并不严重。
 

基本上这很简单,你的独特总结了不同魔术师之间所有不匹配的订单...

例如,有3个订单

第一个迭代的magic=1unique=0,在迭代结束时unique将=2

第二次迭代magik=2unique=2,在迭代结束时unique将是=3

由于3>=所有订单的数量,while循环将中断...而魔法=3从未被检查过......。所以魔法=2,以此类推,所有...

 
pribludilsa #:
哦,对了,谢谢。但事实证明,这是一个拐杖就像整个mql 的事情。

争取更多--所有的编程语言

这很简单--在编程语言中,计数从零开始。一个数组的第一个单元格的索引为0。因此,你必须在包括它在内的零点之前做一个反向循环。即>=0

OrdersTotal()输出,例如,10。而你从10开始循环,而数组的最后一个索引是9(记住,我们是从0开始的?)那么当你访问一个不存在的数组单元时,会发生什么?这是正确的--程序将在一个关键错误中崩溃,因为你已经进入了一个未分配的内存区域,超过了数组的限制

这些是可靠的拐杖,是肯定的。阅读、学习,一切都会向你走来。

原因: