[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 165

 
Où se cache le défaut ')' ici ? - paramètres erronés compte 4 fois ? Peut-être que ce n'est pas la bonne façon de l'écrire ?
//-----------------------------------------------------------------------------+ 
//  Удаление объекта 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; 
  }
 
Vérifiez ObjectGet(), il doit y avoir deux paramètres.
 
Roger:

Utiliser la fonction NormalizeDouble(lot,2)

Merci. Je pense que c'est ce que je cherchais.

splxgf:

Merci pour la discussion. Vos informations seront également utiles.

 
Operr:
Où se cache le défaut ')' ici ? - paramètres erronés compte 4 fois ? Peut-être que ce n'est pas comme ça qu'il faut l'écrire ?
Les fonctions ObjectType() et ObjectGet() n'ont pas de noms d'objets.
 
Operr:
Où se cache le défaut ')' ici ? - paramètres erronés compte 4 fois ? Peut-être que ce n'est pas la bonne façon de l'écrire ?

//------------------------------------------------------------+ 
//  Удаление объекта 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);}}}
 
Pourriez-vous me dire s'il est possible de forcer une mise à jour du build dans MT4 ? Il ne se met pas à jour lorsque je redémarre le terminal.
 

Messieurs les professionnels, j'ai encore besoin de votre aide !

Vous trouverez ci-dessous un extrait de code responsable de la clôture des transactions, mais le problème est que lorsque les ordres en attente ne sont pas exécutés, ils ne sont pas supprimés, je n'arrive pas à comprendre pourquoi. Mais lorsque j'ai besoin de fermer un ordre en attente qui a déjà été exécuté, tout se passe correctement et si l'ordre n'a pas été exécuté, il reste simplement suspendu jusqu'à ce qu'il soit exécuté....

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:

Vous trouverez ci-dessous un extrait de code responsable de la clôture des transactions, mais le problème est que lorsque les ordres en attente ne sont pas exécutés, il ne les supprime pas, je ne comprends pas pourquoi.


si (OrdersTotal() == 1 && Magic == 111 && OrderType( ) == 0)


cela interfère
 

J'ai mis une fonction dans mon EA pour fermer 1/3 du lot ouvert lorsque le stoploss est déclenché au seuil de rentabilité, mais pour une raison quelconque, cela ne fonctionne pas.

Pouvez-vous me dire ce qui ne va pas ?

//=======================================================================================     
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:

J'ai mis une fonction dans mon EA pour fermer 1/3 du lot ouvert lorsque le stoploss est déclenché au seuil de rentabilité, mais pour une raison quelconque, cela ne fonctionne pas.

Pouvez-vous me dire ce qui ne va pas ?


Probablement parce que vous calculez le lot d'abord et ensuite

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