帮助。为什么EA不关闭交易 - 页 2

 
crossy:


谢谢onewithzachy。

首先,我认为你有一个小错误。

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

你必须加上绿色和粗体的修正。

但是,我不明白下面这一行对我们有什么帮助?

#include "...\libraries\stdlib.mq4"

谢谢,Y。

你对计数的看法是正确的,但是,如果我们像我写的那样写,OrderSelect()将返回false,for循环继续到下一个计数。

这包括将打印这段代码中的错误......

Print("failed to close buy position ", ErrorDescription(GetLastError())  ); 

...这样我们就知道为什么你的EA没有关闭任何订单:(。

你也可以这样写,包括...

#include <stdlib.mqh>

在MetaEditor脚本文件夹中有一个例子,标题为trade.mq4。


应该 知道该把附件放在哪里,对吗?把它放在你的EA的顶部(就像全局变量或者就像trade.mq4)。

stdlib.mq4位于MetaEditor > Navigator Window(Ctrl + D)> files tab > libraries folder > stdlib.mq4。

哇,我希望你不要介意我说得太详细,因为我不知道你是否已经知道或不知道:)

 
onewithzachy:

你对计数的看法是正确的,但是,如果我们像我写的那样写,OrderSelect()将返回false,for循环继续到下一个计数。

这包括将打印出这段代码中的错误......

...这样我们就知道为什么你的EA没有关闭任何订单:(。

你也可以这样写,包括...

在MetaEditor脚本文件夹中有一个例子,标题为trade.mq4。


应该 知道该把附件放在哪里,对吗?把它放在你的EA的顶部(就像全局变量或者就像trade.mq4)。

stdlib.mq4位于MetaEditor > Navigator Window(Ctrl + D)> files tab > libraries folder > stdlib.mq4。

哇,我希望你不要介意我说得太详细,因为我不知道你是否已经知道或不知道:)


谢谢onewithzachy。

我按照你的建议做了,我在等待正确的结论。我将更新。

 
crossy:


谢谢onewithzachy。

我按照你的建议做了,我在等待正确的结论。我将更新。

嗯....,我不太喜欢回溯测试,然而,RaptorUK在另一个主题中建议(点击这里),我们可以用回溯测试来调试我们的代码。
 
onewithzachy:
嗯....,我不太喜欢回测,但是,RaptorUK在另一个主题(点击这里)中建议,我们可以用回测来调试我们的代码。


该EA是多对的,所以回测是不可能的。

总之,我可以很快得到相关情况。我已经得到了结果。我将更新。

谢谢

 
crossy:


该EA是多对的,所以不可能进行回测。

不是回测......调试......即使是基于投资组合的EA,调试也是可能的。
 

谢谢Raptor。

我注意到ORDERSELECT是一个bool变量,有时MT4不能成功地

做到这一点。正因为如此,onewithzachy建议我们这样做。

for(int cnt=0; cnt<OrdersTotal(); cnt++)
{
如果(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES) == true &&)
OrderSymbol()==Pair &&。
OrderType()==OP_BUY)
{
// 关闭的代码
}
}

我的问题是:如果ORDERSELECT是假的,我怎样才能再次进行 "cnt "循环,而不丢失...?

我希望你能理解我。

Y.

 
crossy:

谢谢Raptor。

我注意到ORDERSELECT是一个bool变量,有时MT4不能成功地

做到这一点。正因为如此,onewithzachy建议我们这样做。

for(int cnt=0; cnt<OrdersTotal(); cnt++ )

我的问题是:如果ORDERSELECT是假的,我怎样才能再次进行 "cnt "循环,而不丢失...?

我希望你能理解我。

Y.

如果你要关闭订单,你必须 往下数。 而不是 向上。
 
RaptorUK:
如果你要关闭订单,你必须 往下数...。而不是 向上。


对不起,Raptor,我只是从以前的帖子中复制粘贴了一下,但我在代码中改了一下。

总之,你对我之前的问题有什么想法吗?

 
crossy:


对不起,Raptor,我只是从以前的帖子中复制了一个Copy_paste,但我在我的代码中改变了它。

总之,你对我之前的问题有什么想法吗?

请出示你的代码,我可以给你一个意见。
 
RaptorUK:
请出示你的代码,我可以给你一个意见。


Rap,它是4016个代码行....

总之,我的问题是一个技术性的问题。我曾经学过FORTRAN,在那里,你可以用数字来表示所需的代码行,所以你可以做

"GO to 120",然后代码就会再次进入该行。

在这里,如果Orderselect是FALSE,EA如何回到代码行:for(int cnt=OrdersTotal(); cnt > 0; cnt-- )

???