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

 
crossy:


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

??

你可以在循环中使用continue 转到下一个值。......或者用break 从循环中跳出......点击链接查看相关文档。
 
crossy:

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


???

这段代码是错误的 . . .

cnt需要从OrdersTotal() - 1开始,然后向下递减到cnt >= 0 ... ...第一个条目是0而不是1

这就是我要求查看代码的原因。......而你已经展示了足够的内容来确定问题所在 ......可能吧。)

 
RaptorUK:

这段代码是错误的 . . .

cnt需要从OrdersTotal() - 1开始,然后向下递减到cnt >= 0 ... ...第一个条目是0而不是1

这就是我要求查看代码的原因。......而你已经展示了足够的内容来确定问题所在 ......可能吧。)


非常正确。谢谢你,Wizeman!
 
crossy:

非常正确。谢谢你,Wizeman!


还有一个想法。

如果我有很多条件,你可以写。

If( X>b && B>S && NB<F......)

{

BBB= 5;

}f.e.

在这里,EA必须计算括号内的每个条件。

但是,如果你在寻找效率(4000个代码行......),我更喜欢有。

如果 ( X>b )

{

while (B>S)

{

While ( NB<F...)

{

BBB=5。

}

break;

}

break;

}

这两种变化是一样的吗?

Y.

 

crossy,当你写代码时,请使用SRC按钮,它将更易读

所以它会像这样显示

   //--- first code
   If(X>b && B>S && NB<F......)
     {
      BBB=5;
     }
   
   // --- second code
   If(X>b)
     {
      while(B>S)
        {
         while(NB<F..)
           {
            BBB=5;
           }
         break;
         }
      break;
     }

关于mql4中 "if, while and for "循环的解释https://book.mql4.com/operators/assign

在第二段代码中,由于你使用了break,所以是可以的,但是,为了得到BBB=5,这是一个很长的过程,我更喜欢第一段代码,它使用的资源更少。

 
crossy:


还有一个想法。

如果我有很多条件,你可以写。

If( X>b && B>S && NB<F......)

{

BBB= 5;

}f.e.

在这里,EA必须计算括号内的每个条件。

但是,如果你在寻找效率(4000个代码行......),我更喜欢有。

像这样使用while,你可能会发现自己处于一个无限的循环中. . .
 
谢谢你们俩!。
 
onewithzachy:

请使用SRC按钮来显示你的代码,以便更好地阅读 :)

你的OrderSelect()的编码方式是错误的。把你的代码和这个比较一下。 然后,如果你仍然有问题,请回信 :)


特别感谢onewithzachy。

我不知道ORDERSELECT不能捕捉,所以你可能有未知的错误。

我的代码本来是4016行,现在变成了将近4500行--但没有错误。

谢谢大家,朋友们。

Y.

 

你好,朋友们。

在这里工作了很长时间后,我的EA取得了不错的成绩,但我还有一个问题,如下所示。

我有以下的代码行。

CLOSE_Single_P(Pair1, "LONG",OrderT, OrderL)。

因为。

Pair1 是符号。

"LONG " 是多头交易的标志。

OrderT订单票号

OrderL 是订单的手数。

该函数如下。

void CLOSE_Single_P(string SYMB, string TREN, int TICKET, double LOTT)
{
double PRC;
bool Check = false;
for ( int cntt=0; cntt<20000; cntt++ )
{
if ( Check )
{
Check_Ini( ) 。
return;
}
for ( int vvv = OrdersTotal()-1; vvv >= 0; vvv-- )
{
if ( OrderSelect(vvv, SELECT_BY_POS, MODE_TRADES) )
{
Check = false;
if ( TREN == "LONG" )
PRC = MarketInfo(SYMB,MODE_BID);
else
if ( TREN == "SHORT" )
PRC = MarketInfo(SYMB,MODE_ASK);

Check = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow);
if ( Check )
break;
}
}
}
return;
}

我的问题是。EA有时能很好地关闭交易,但有时EA关闭了交易,但它还在继续寻找票据来关闭它,尽管它已经被关闭。

(我得到的错误是:"未知票据号码..." 。

我认为我有一个逻辑错误。

谢谢你的帮助。

Y

 

请 ... ... ... ...