[警告关闭!]任何新手问题,为了不给论坛添乱。专业人士,不要走过。没有你,哪里都不能去。 - 页 779

 
ToLik_SRGV:

OrderSend 函数有错误的开盘/定盘价。这个错误使其无法正确下单,这意味着EA由于某种原因想要下更多的订单,而由于这个错误而无法做到。请检查挂单的价格是否正常化,是否所有订单都已到位。

如果你不介意用你的专业眼光来看待它,那里没有别的东西

附加的文件:
test_21_3.mq4  16 kb
 
FoxUA:

如果你不介意用你的专业眼光来看待它,那里没有其他东西。

解包显示,错误发生在挂单 区块,你试图把它们放在一个负的价格上。

 
ToLik_SRGV:

解包显示,错误发生在挂单设置块,你试图把它们放在一个负的价格上。


你是怎么解决的,除了用头撞墙;)我去哪里了?

 
ToLik_SRGV:

不是按照这个想法。下面是一本教科书的摘录。

P.S.
关于佩特卡,一百年了,仍然很有趣:)))


"...以及处于冻结区的市场订单的声明止损价格..."。

然而,事实证明,这有一个影响...你必须考虑到这一点 - 我只需要在一个未平仓的头寸上删除已宣布的止损单水平...而如果你已经进入冻结区,那么你只需等待收盘...或回调...

谢谢你,伙计!!!。

关于Petya--这里的情况也一样...- 我说我把1.6--它工作,我把1.8--它不工作......而且即使是1.9也无济于事!!。真是一团糟啊!!!。这很可怕。哦!
这些数字是什么?公升或什么的。

 
FoxUA:

嗯,除了用头撞墙之外,你怎么解决呢;)我在哪里迷路了?

我从Kim的功能中认出了这些指纹...去看他的主题--他在每个函数后都有一个脚本来检查它。没有比这更清楚的了......
 
artmedia70:
我从Kim的功能中认出了这些指纹...去他的分支--他在每个函数后都有一个脚本来检查它。没有比这更清楚的了......


是的,这是他们在这里给我的他的图书馆里的,所以这和邮筒里的脚本是一样的。 我把它加进去了,所以没有反应。

{SetOrder(sy, OP_BUYLIMIT, Lot*3, NormalizeDouble(PrAskLim, Digits), PrAskLim-StopLoss*po, PrAskLim+TakeProfit*po,mn);
    SetOrder(sy, OP_BUYSTOP,  Lot,   NormalizeDouble(PrAskSt, Digits),  PrAskSt-StopLoss*po,  PrAskSt+TakeProfit*po,mn);
    SetOrder(sy, OP_SELLLIMIT,Lot*3, NormalizeDouble(PrBidLim, Digits), PrBidLim+StopLoss*po, PrBidLim-TakeProfit*po,mn);
    SetOrder(sy, OP_SELLSTOP, Lot,   NormalizeDouble(PrBidSt, Digits),  PrBidSt+StopLoss*po,  PrBidSt-TakeProfit*po,mn);
     } 
 
FoxUA:

嗯,除了用头撞墙之外,你怎么治好这个病呢;)我在哪里迷路了?

让我们继续前进。
负数从StopLossLastPos()TakeProfitLastPos() 函数进入变量。它们的出现是由于其工作的失败,即-1是未能获得StopLoss和TakeProfit的最后值的标志。你没有检查获得最后数值的成功与否,所以-1作为价格进入你的工作,然后从它开始计算设置挂单的数值...等等。

其结果是雪球效应和虫子的海洋。现在在测试器中,我将看到它是如何工作的,我将报告...


 
ToLik_SRGV:

继续前进。
负数从StopLossLastPos()TakeProfitLastPos() 函数进入变量。它们出现在那里是由于失败,即-1是获得StopLoss和TakeProfit的最后值失败的标志。你没有检查获得最后的数值是否成功,所以-1作为一个价格进入你的工作,然后从它开始计算设置挂单的数值...等等。

其结果是雪球效应和错误的海洋。现在我打算在测试器中观看,并报告情况......。




我想知道它怎么会是这样的。

 
FoxUA:

是的,我想知道它怎么会是这样的。

我就不说了。
错误出在逻辑上。它是围绕两个市场订单建立的。但这里我们有一个微妙的观点:函数OrdersTotal() 返回的不是未结市场订单的总数,而是所有在市场上的订单,以及被设定的挂单。
结果,在交易过程中,发生了一次没有市场订单的情况,当时挂单继续挂,也就是OrdersTotal()的 返回值超过了0,相应地,你的阻止开市订单如果(total_order==0),就不能开。但新的挂单可能(在OrdersTotal() 返回2的时刻),但由于没有市场订单,StopLossLastPos()TakeProfitLastPos() 函数返回-1,而开立挂单的条件是if(total_order==2),所以它们捕捉-1并将其作为价格。

 
ToLik_SRGV:

我就不说了。
错误出在逻辑上。它是围绕两个市场订单建立的。但这里我们有一个微妙的观点:函数OrdersTotal() 返回的不是未结市场订单的总数,而是所有在市场上的订单,以及被设定的挂单。
结果,在交易过程中,发生了一次没有市场订单的情况,当时挂单继续挂,也就是OrdersTotal()的 返回值超过了0,相应地,你的阻止开市订单如果(total_order==0),就不能开。但新的挂单可能(在OrdersTotal() 返回2的时刻),但由于没有市场订单,StopLossLastPos()TakeProfitLastPos() 函数返回-1,而开立挂单的条件是if(total_order==2),所以它们捕捉-1并将其作为价格。


我知道了,我现在就改,非常感谢。
原因: