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

 
MakarFX #:

如果没有打开的,你有条件一次打开两个。

那是什么?

double GetLotSize()
  {
   double Ls=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL) {Ls=OrderLots();}
           }
        }
     }
   return Ls;
  }    

这个东西算得上是目前的地段。

该参数在设置中被设定:LotControl

分别是,当:GetLotSize()>LotControl - 我需要它在bSignalBuy()信号上打开vOrderOpenSell()。

是的,我知道两个订单都是按条件开的。我一开始就是这样写的。 但我应该如何让vOrderOpenBuy()不打开呢?

 
Mihail Matkovskij #:

如果机器人已经在一个方向上进入市场,它就不会在同一方向上再次进入。你们的录入算法是这样的吗?

如果满足 这个条件,就会触发

之后

还有就是当有卖出信号时。

那么,以相反的方向进入的原因是条件被触发了

是的,这就是我需要的。但它需要通过这个条件来停止/排除一个前进的条目。

GetLotSize()>LotControl
 
Kedrov #:

谢谢你,Makar,谢谢你给我带来的麻烦!

这里有一张截图。

是的,你搞得一团糟)

现在,在每个文件夹中,逐一将文件夹Experts重命名为_Experts,Indicators重命名为_Indicators

在一个文件夹中重命名--启动终端,如果没有帮助--重命名回来,再去下一个文件夹。

P.S. 终端第一次启动的时间会比平时长一点。

 
законопослушный гражданин #:

这个东西可以计算出当前的地段大小

该参数在设置中被设置为:LotControl

当GetLotSize()>LotControl - 我需要vOrderOpenSell()在信号bSignalBuy()时发生。

是的,我知道两个订单都是按条件开的。我一开始就是这样写的。 但我应该如何让vOrderOpenBuy()不打开呢?

        if((bSignalBuy() == true)&&(GetLotSize()>LotControl))
           vOrderOpenSell();
        else
        if(bSignalBuy() == true)
           vOrderOpenBuy();
         
 
законопослушный гражданин #:

是的。这就是我需要的。但它需要通过这个条件来停止/排除向前的进入。

我对这种情况感到困惑

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
     {

有这种情况

GetLotSize()=0
 
MakarFX #:

谢谢你,已经改正,我会考虑的。

 
MakarFX #:

我对这种情况感到困惑

有了这个条件。

看起来你是对的。

对。

 if((bSignalBuy() == true)&&(GetLotSize()>LotControl))
         vOrderOpenSell();
         else
         if(bSignalBuy() == true)
         vOrderOpenBuy();

对(GetLotSize()>LotControl)条件完全没有反应。

 
законопослушный гражданин #:

看起来你是对的。

对。

对(GetLotSize()>LotControl)条件完全没有反应。

GetLotSize()必须取自最后关闭的一个,然后在

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
     {

(GetLotSize()>LotControl)将发挥作用
 
MakarFX #:

GetLotSize()应该取自最后关闭的一个,然后在

(GetLotSize()>LotControl)将发挥作用

非常感谢!

 
законопослушный гражданин #:

是的。这就是我需要的。但在这样做的时候,你需要通过这个条件停止/排除前向进入。

if (bSignalBuy()) {
  if (GetLotSize() > LotControl)
    vOrderOpenSell();
  else
    vOrderOpenBuy();
}
double GetLotSize()
  {
   double Ls=0;
   datetime last = 0, openTime;
   for (int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if (OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if (OrderSymbol() == _Symbol && OrderMagicNumber() == Magic)
           {
             if(OrderType() == OP_BUY || OrderType() == OP_SELL) {
               if ((openTime = OrderOpenTime()) > last) {
                 last = openTime;
                 Ls = OrderLots();
               }
             }
           }
        }
     }
   return Ls;
  }
原因: