[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 165

 
这里的故障')'藏在哪里?- 错误的参数计数 4次? 也许这不是写的方式?
//-----------------------------------------------------------------------------+ 
//  Удаление объекта OBJ_HLINE горизонтальная линия  /Blue/Red          |  
//-----------------------------------------------------------------------------+   
 void DelHLine(color cl, string nm="", double p1=0, int st=0, int wd=1)  
  { 
     int    obj_total= ObjectsTotal(OBJ_HLINE); 
   
  for(int i=0;i<obj_total;i++) 
   {
     if(ObjectType(OBJ_HLINE)==true) 
     {
        if(ObjectGet(OBJPROP_COLOR)==Red)
         { 
           if(ObjectGet(OBJPROP_PRICE1)>Ask) ObjectDelete(FrDnNam);
         } 
     }
  }
    
    for(i=0;i<obj_total;i++) 
       {
         if(ObjectType(OBJ_HLINE)==true)
         {
          if(ObjectGet(OBJPROP_COLOR)==Blue) 
         { 
          if(ObjectGet(OBJPROP_PRICE1)<Bid) ObjectDelete(FrApNam); 
       }
       
    } 
   }

    return; 
  }
 
检查ObjectGet(),必须有两个参数。
 
Roger:

使用NormalizeDouble(lot,2)函数

谢谢你。我怀疑这就是我在寻找的东西。

splxgf

谢谢你的讨论。你的信息也会派上用场。

 
Operr:
这里的故障')'藏在哪里?- 错误的参数计数 4次? 也许不应该这样写?
ObjectType()和ObjectGet()函数缺少对象名称
 
Operr:
这里的故障')'藏在哪里?- 错误的参数计数 4次?也许这不是写的方法?

//------------------------------------------------------------+ 
//  Удаление объекта OBJ_HLINE горизонтальная линия  /Blue/Red|  
//------------------------------------------------------------+   
void DelHLine(string nm="")  
{int obj_total=ObjectsTotal();
  for(int i=0;i<obj_total;i++) 
  {if(nm==ObjectName(i)&&ObjectType(nm)==OBJ_HLINE)
   {color cl=ObjectGet(nm,OBJPROP_COLOR);double pr=ObjectGet(nm,OBJPROP_PRICE1);
    if((cl==Red&&pr>Ask)||(cl==Blue&&pr<Bid))ObjectDelete(nm);}}}
 
请您告诉我,是否可以在MT4中强制更新构建?当我重新启动终端时,它并没有更新。
 

各位专业人士,我又需要你们的帮助了!

下面是一段负责关闭交易的代码,但问题是,当挂单 没有被执行时,它并没有删除它们,我搞不清楚原因。但是,当我需要关闭一个已经执行的挂单时,一切都很正常,如果订单没有被执行,那么它就会挂在那里,直到执行为止。

OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
Magic = OrderMagicNumber();
orderticket = OrderTicket();

if (OrdersTotal() ==1 && Magic == 111 &&OrderType( ) == 0)
{
if (H1_BUY_5 == 0 || H1_BUY_1 == 0)
{
OrderClose(orderticket, lots, Bid, 5, Yellow);
if (OrdersTotal( ) == 1) OrderDelete(orderticket, Brown);
}

}

 

Xaoss1990:

下面是一段负责关闭交易的代码,但问题是,当挂单没有被执行时,它并没有删除它们,我不明白为什么。


如果(OrdersTotal() == 1 && Magic == 111 &&OrderType( ) == 0)


这干扰了
 

我在我的EA中加入了一个功能,当止损被触发到盈亏平衡时,关闭1/3的开仓手,但由于某些原因,它没有发挥作用。

你能告诉我什么是错的吗?

//=======================================================================================     
void BuyCloseOneThird(string sy="", int op=-1, int mn=-1) {
  double pr=0;
  int    i, k=OrdersTotal(), np=-1;

  if (sy=="0") sy=Symbol();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && OrderType()==OP_BUY) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (Bid>OrderOpenPrice() && Bid==OrderStopLoss()) {
    if (OrderSelect(np, SELECT_BY_POS, MODE_TRADES)) {
      ClosePosBySelect();}
    }
  }
}
}
}
}
//=======================================================================================     
void SellCloseOneThird(string sy="", int op=-1, int mn=-1) {
  double pr=0;
  int    i, k=OrdersTotal(), np=-1;

  if (sy=="0") sy=Symbol();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && OrderType()==OP_BUY) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (Ask<OrderOpenPrice() && Ask==OrderStopLoss()) {
    if (OrderSelect(np, SELECT_BY_POS, MODE_TRADES)) {
      ClosePosBySelect();}
    }
  }
}
}
}
}

//+------------------------------------------------------------------+
void ClosePosBySelect() {
  bool   fc;
  color  clClose;
  double pa, pb, pp;
  int    err, it;
double ll = MathCeil(OrderLots() / 3.0 * 10.0) / 10.0;

  if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
    for (it=1; it<=5; it++) {
      if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
      while (!IsTradeAllowed()) Sleep(5000);
      RefreshRates();
      pa=MarketInfo(OrderSymbol(), MODE_ASK);
      pb=MarketInfo(OrderSymbol(), MODE_BID);
      if (OrderType()==OP_BUY) {
        pp=pb; clClose=Red;
      } else {
        pp=pa; clClose=Blue;
      }
      ll=OrderLots();
      fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
      if (fc) {
        PlaySound("wave"); break;
      } else {
        err=GetLastError();
        if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
        Print(OrderTicket(),"  Ask=",pa,"  Bid=",pb,"  pp=",pp);
        Print("sy=",OrderSymbol(),"  ll=",ll,"  sl=",OrderStopLoss(),
              "  tp=",OrderTakeProfit(),"  mn=",OrderMagicNumber());
        Sleep(1000*5);
      }
    }
  } 
}
 
Sancho77:

我在我的EA中加入了一个功能,当止损被触发到盈亏平衡时,关闭1/3的开仓手,但由于某些原因,它没有发挥作用。

你能告诉我什么是错的吗?


可能是因为你先计算了地段,然后

ll=OrderLots();
fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);