[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 165

 
Wo versteckt sich hier der Fehler ')'? - falsche Parameter zählen 4 mal? Vielleicht ist dies nicht der richtige Weg, es zu schreiben?
//-----------------------------------------------------------------------------+ 
//  Удаление объекта 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; 
  }
 
Prüfen Sie ObjectGet(), es müssen zwei Parameter angegeben werden.
 
Roger:

Verwenden Sie die Funktion NormalizeDouble(lot,2)

Ich danke Ihnen. Ich vermute, das ist es, wonach ich gesucht habe.

splxgf:

Vielen Dank für die Diskussion. Auch Ihre Informationen werden sich als nützlich erweisen.

 
Operr:
Wo versteckt sich hier der Fehler ')'? - falsche Parameter zählen 4 mal? Vielleicht sollte es nicht so geschrieben werden?
Den Funktionen ObjectType() und ObjectGet() fehlen Objektnamen
 
Operr:
Wo versteckt sich hier der Fehler ')'? - falsche Parameter zählen 4 mal? Vielleicht ist dies nicht der richtige Weg, es zu schreiben?

//------------------------------------------------------------+ 
//  Удаление объекта 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);}}}
 
Könnten Sie mich bitte beraten, ist es möglich, ein Update des Builds in MT4 zu erzwingen? Es wird nicht aktualisiert, wenn ich das Terminal neu starte.
 

Meine Herren Fachleute, ich brauche wieder Ihre Hilfe!

Unten ist ein Codeschnipsel, der für das Schließen von Geschäften verantwortlich ist, aber die Sache ist die, dass wenn schwebende Aufträge nicht ausgeführt werden, sie nicht gelöscht werden, ich kann nicht herausfinden, warum. Aber wenn ich einen schwebenden Auftrag, der bereits ausgeführt wurde, schließen muss, läuft alles korrekt, und wenn der Auftrag nicht ausgeführt wurde, bleibt er einfach hängen, bis er ausgeführt wird...

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:

Nachfolgend finden Sie einen Codeschnipsel, der für das Schließen von Geschäften verantwortlich ist, aber die Sache ist die, dass, wenn schwebende Aufträge nicht ausgeführt werden, sie nicht gelöscht werden, ich kann nicht verstehen, warum.


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


das stört
 

Ich habe eine Funktion in meinem EA, um 1/3 des offenen Lots zu schließen, wenn Stoploss bei Breakeven ausgelöst wird, aber aus irgendeinem Grund funktioniert es nicht.

Können Sie mir sagen, was los ist?

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

Ich habe eine Funktion in meinem EA, um 1/3 des offenen Lots zu schließen, wenn Stoploss bei Breakeven ausgelöst wird, aber aus irgendeinem Grund funktioniert es nicht.

Können Sie mir sagen, was los ist?


Wahrscheinlich, weil Sie zuerst das Los berechnen und dann

ll=OrderLots();
fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
Grund der Beschwerde: