Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 642

 
paylesss:

Danke! Der Neustart des Computers hat geholfen! Schade, ich habe den ganzen Morgen hier gesessen))

Jetzt ist der Aufbau des Terminals wichtiger, und es wäre wünschenswert, dass Sie sich daran erinnern, was Sie getan haben, damit die globalen Variablen nicht funktionieren. Wenn es möglich ist, die Situation zu wiederholen, wäre das großartig.

 
Kirill Andreev:

eine Eule geschrieben, aber aus irgendeinem Grund funktioniert der Trailing-Stop nicht... Was könnte der Grund dafür sein?

damit es funktioniert, müssen Sie es in OnTick einfügen
 
Vladislav Andruschenko:
Er muss in OnTick eingefügt werden, damit er funktioniert.
Danke, ich werde es ausprobieren!!!
 

Hallo.

Bitte helfen Sie mir, ich möchte alle Positionen ändern, bis auf die letzte, die "jüngste". Wo muss ich eins hinzufügen oder abziehen?


 int i; total = OrdersTotal();
          for(i = 0; i < total; i++)
             {
              if(OrderSelect(i, SELECT_BY_POS)   && OrderLots() == _Lots)
              {
              if (OrderType()==OP_BUY) 
              {
              if (OrderOpenPrice()!=OrderStopLoss()) 
              {
              ModifyOrder(-1,OrderOpenPrice() , -1);
              }
             } 
            }  
           }
 
mila.com:

Hallo.

Bitte helfen Sie mir, ich möchte alle Positionen ändern, bis auf die letzte, die "jüngste". Wo muss ich eine hinzufügen oder abziehen?



 int i; total = OrdersTotal();
          for(i = 0; i < total-1; i++)
             {
              if(OrderSelect(i, SELECT_BY_POS)   && OrderLots() == _Lots)
              {
              if (OrderType()==OP_BUY) 
              {
              if (OrderOpenPrice()!=OrderStopLoss()) 
              {
              ModifyOrder(-1,OrderOpenPrice() , -1);
              }
             } 
            }  
           }


 
-Aleks-:
int i; total = OrdersTotal();
          for(i = 0; i < total-1; i++)
             {
              if(OrderSelect(i, SELECT_BY_POS)   && OrderLots() == _Lots)
              {
              if (OrderType()==OP_BUY) 
              {
              if (OrderOpenPrice()!=OrderStopLoss()) 
              {
              ModifyOrder(-1,OrderOpenPrice() , -1);
              }
             } 
            }  
           }

Sind Sie sicher, dass Sie einen zuverlässigen Weg aufgezeigt haben, um die letzte Position in der Liste zu verfehlen?

Wenn Sie realistisch handeln, haben Sie dann nicht Angst, dass die Sortierung plötzlich abhängig wird?

Dennoch brauchen wir hier IMHO zwei Zyklen - im ersten suchen wir nach der frischesten Position nach Eröffnungszeit, im zweiten ändern wir alle außer der, deren Ticket im ersten Zyklus gefunden wurde.

 
mila.com:

Hallo.

Bitte helfen Sie mir, ich möchte alle Positionen ändern, bis auf die letzte, die "jüngste". Wo muss ich eine hinzufügen oder abziehen?


Ich würde das tun.

/********************Script program start function********************/
void OnStart()
{
 int i, t1, t2, clTicket, total = OrdersTotal();
  datetime d1, d2;
   double v1, v2, clVolume;
    for(i = total-1; i > 0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS))
       {
        t1 = OrderTicket();
         d1 = OrderOpenTime();
        v1 = OrderLots();
       }
      else continue;
        if(OrderSelect(i-1, SELECT_BY_POS))
         {
          t2 = OrderTicket();
           d2 = OrderOpenTime();
          v2 = OrderLots();
         }
        else continue;
        clTicket = d1 > d2 ? t1 : t2;
       clVolume = d1 > d2 ? v1 : v2;
      if(!OrderClose(clTicket, clVolume, OrderClosePrice(), 100)) // закрывает независимо от типа ордера OP_BUY или OP_SELL
       Print("фигня кака-та");
    }
}/********************************************************************/

Ich habe es nicht aktiviert und kann nicht entscheiden, ob ich eine "Lücke" in meiner Bestellliste haben werde, wenn ich die nächste Bestellung abschließe.

Wenn jemand erklären kann, wie es zu einer solchen "Lücke" kommen kann, wäre ich dankbar...

Als Versicherung haben wir noch eine weitere eingefügt; wenn es eine Lücke gibt, wird ein Auftrag einfach übersprungen. Das scheint mir so.

 
Alexey Viktorov:

Ich würde das tun.

Leider wurde dies nicht getestet, und ich kann nicht herausfinden, ob in der Liste der Aufträge ein "Loch" entsteht, nachdem der nächste Auftrag abgeschlossen wurde.

Wenn jemand erklären kann, wie es zu einer solchen "Lücke" kommen kann, wäre ich dankbar...

Als Versicherung wird eine weitere Fortsetzung eingefügt; wenn eine Lücke entsteht, wird einfach eine Bestellung übersprungen. Mir scheint es so zu sein.

Ursprünglich ging es bei der Frage darum, die letzte Bestellung zu überspringen. Und genau da müssen Sie ansetzen.

Sie müssen es so machen:

for(int i = total-2; i >= 0; i--)

Dann gibt es nach dem Löschen keine Lücken mehr und die letzte Bestellung wird übersprungen.

 
Alexey Kozitsyn:

Die ursprüngliche Frage war, die letzte Bestellung zu überspringen. Hier müssen Sie anfangen.

Sie müssen es so machen:

Dann wird nach dem Löschen nichts mehr übersprungen und der letzte Auftrag wird übersprungen.

Nicht der letzte auf der Liste, aber der "jüngste" nach Zeit.

Obwohl ich genauso rücksichtslos bin. Die Frage bezieht sich auf eine Änderung und ich schreibe in der Nähe... Und wenn Sie es einfach ändern, wird es keine Löcher in der Liste der Aufträge geben... Möglicherweise müssen Sie nur Variablen hinzufügen und ihnen Werte zuweisen, und Sie MÜSSEN die Parameter überprüfen, um Fehler Nr. 1 zu vermeiden. Nun, Mila kann das selbst regeln.

 
Alexey Kozitsyn:

Die ursprüngliche Frage war, die letzte Bestellung zu überspringen. Hier müssen Sie anfangen.

Sie müssen es so machen:

for(int i = total-2; i >= 0; i--)

Dann wird nach der Löschung nicht weitergesprungen, sondern die letzte Bestellung wird übersprungen.

Wie können Sie sicher sein, dass es nicht zu einer Sortierabhängigkeit kommt und Sie die falsche Reihenfolge verpassen?

Auch hier gilt: Um die letzte Bestellung zuverlässig zu finden, muss sie anhand ihrer Öffnungszeit und nicht anhand ihrer Position in der Liste identifiziert werden.