初学者的问题 MQL5 MT5 MetaTrader 5 - 页 548

 
edutak:

我不愿意展示代码,因为第一个版本被证明是很有生存能力的。它在没有优化的情况下存活了10年。现在我想让它变得更加复杂和有利可图。

代码非常简单。

不过,由于逻辑上的错误,订单可能会在每个tick上打开。

开仓前 检查一下,看是否已经开仓。
 
Vitalii Ananev:
你开仓前 要检查一下是否已经开仓。
对吗?
for(int pos=0; pos<OrdersTotal(); pos++)
     {
      OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magik)
         kolpos++;
     }
 

闭幕前是这样的。

 if(OrdersTotal()!=0)
         if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
            if(OrderType()==OP_BUY)
 
edutak:
对吗?
   for(int pos=OrdersTotal()-1; pos>=0; pos--)         
   {
      if(!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) continue;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magik)  kolpos++;
   }

情况是这样的。

最好把它变成一个函数。

int CountOrder(string Smb,int Magik)
{
   int Total = OrdersTotal();
   if (Total==0) return(0);
   int kolpos = 0;
   for(int pos=Total-1; pos>=0; pos--)         
   {
      if(!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) continue;
      if(OrderSymbol()==Smb && OrderMagicNumber()==Magik)  kolpos++;
   }
   return(kolpos);
}
 
edutak:

闭幕前是这样的。

你在关闭前没有检查魔力和符号。可以关闭另一个EA的交易或手动开启的交易。
 
Vitalii Ananev:
情况是这样的。

不,问题还没有解决。它不在这个单位。

能否请你解释一下我的方案与你的方案之间的区别?

 
edutak:

不,问题还没有解决。它不在这个单位。

能否请你解释一下我的方案与你的方案之间的区别?

那么你就做错了,解决你的代码问题。

我的更好 :)

...

这样,你就不会错过任何订单。在你的版本中,如果在那一刻一些头寸被关闭或一个订单被删除,你可以跳过剩余的一些。

 
Vitalii Ananev:

所以你做错了,处理好你的代码。

我的更好 :)

...

这样,你就不会错过任何订单。如果你的版本显示,如果在那一刻一些头寸被关闭或一个订单被删除,那么你可以跳过剩下的一些。

我把它声明为一个全局变量,但它给了我一个错误。

int CountOrder;
 
edutak:

我把它声明为一个全局变量,但它给出了一个错误。

我写给你的是一个函数。

下面是一个如何使用它的例子。

int Count = CountOrder(Symbol(),12345);

if (Count==0)
{
//можно открывать
}
 
Vitalii Ananev:

我写给你的是一个函数。

下面是一个如何使用它的例子。

困惑