Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 423

 
novichok2018:

Hallo! Helfen Sie mir, die Situation zu lösen: Ich öffne eine Position 1 unter der Bedingung von Y1, geschlossen unter der Bedingung von Y2. Aber wenn vor dem Auftreten von U2 noch einmal U1 auftritt und Position 2 öffnet, reagiert sie nicht auf U2, und hängt an der nächsten U2, die nach der neuen U1 kam (!) Und diese neue Position wird nicht durch eine neue U2 geschlossen, und wartet auf die nächste Bedingung U1-U2. Wie lässt sich das vermeiden? Mein Kopf bringt mich um. Ich danke Ihnen.

Wir brauchen eine Schleife zum Schließen von OrderClose(...) aller Aufträge unter der Bedingung U2 - auch wenn wir hundert davon haben. Wir können einen bei jedem Tick löschen - dann tun Sie Folgendes: 1) durch U2-Bedingung, heben Sie die Flagge. 2) Wenn das Kennzeichen gesetzt ist, löschen Sie EINE Bestellung. 3) Wenn es keine Befehle gibt, senken Sie die Flagge. Dann werden alle Bestellungen nacheinander gelöscht....

 
STARIJ:

Wir brauchen eine Schleife zum Schließen von OrderClose(...) aller Aufträge nach der Bedingung U2 - man kann hundert davon auf einmal öffnen


Ich befinde mich ohnehin in einem Zyklus. Stimmt etwas nicht mit ihr?

void ClosePoz()
  { int total=OrdersTotal();
  if(total>1)
   {
      for(int i=0;i<OrdersTotal();i++)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) 
      { Print("позиция для закрытия не найдена");
         break;
      }
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {double WPR0 = iWPR(NULL,PERIOD_M5,bars,0);
         if(OrderType()==OP_BUY && MathAbs(WPR0)>80)
           OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,clrNONE);                  
         }
      }
    } 
  }   
 
novichok2018:
Ich befinde mich ohnehin in einem Zyklus. Stimmt etwas nicht mit ihr?
Ich verstehe das nicht - ich habe SRC verwendet, um den Code einzufügen, und ich kann ihn nicht sehen.
Sie müssen auf Einfügen und dann auf Hinzufügen drücken.
 
STARIJ:
Sie müssen auf Einfügen und dann auf Hinzufügen drücken.

Oben, wenn auch nicht an der richtigen Stelle, aber sie lautet. Oh! Jetzt ist es an der richtigen Stelle. Ach du meine Güte!

 
novichok2018:

Ich habe Ihren Code korrekt eingefügt.

Drücken Sie zunächst die Schaltfläche SRC, übertragen Sie Ihren Code in das Fenster, drücken Sie die Schaltfläche "Einfügen" und senden Sie Ihre Nachricht.

 
tura210577:

Vielen Dank für Ihre Antwort!

Bitte sehr. Versuchen Sie, die Multiplattform-Funktionen wie diese zu nutzen:

//+------------------------------------------------------------------+
//| Returns specified Open by shift                                  |
//+------------------------------------------------------------------+
double Open(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyOpen(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified High by shift                                  |
//+------------------------------------------------------------------+
double High(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyHigh(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified Low by shift                                   |
//+------------------------------------------------------------------+
double Low(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyLow(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified Close by shift                                 |
//+------------------------------------------------------------------+
double Close(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyClose(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified Time by shift                                  |
//+------------------------------------------------------------------+
datetime Time(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   datetime array[];
   if(CopyTime(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
 
novichok2018: Ich befinde mich ohnehin in einem Zyklus. Stimmt etwas nicht mit ihr?

Es gibt 2 Fehler im Code. 1) Diese Seite erklärt die Reihenfolge der Aufträge in der Schleife. 2) break - Verlassen der Schleife und Fortfahren - überspringen Sie dies

 
Artyom Trishkin:

Ich habe Ihren Code korrekt eingefügt.

Zuerst drücken Sie die Schaltfläche SRC, dann übertragen Sie Ihren Code in das Fenster, drücken die Schaltfläche "Einfügen" und senden Ihre Nachricht.


Danke. (lacht) Wenigstens hast du mich zum Lachen über mein Schreiben gebracht. Was ist der Sinn der Frage? Ist in der Schleife alles korrekt?

 
novichok2018:

Vielen Dank. Wenigstens hast du mich zum Lachen über mein Schreiben gebracht. Was soll das bringen? Ist der Zyklus richtig?

Sie haben bereits eine Antwort erhalten:

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Alle Fragen von Anfängern zu MQL4, Hilfe und Diskussion über Algorithmen und Codes

STARIJ, 2018.01.18 20:19

Es gibt 2 Fehler im Code. 1) Diese Seite erklärt die Reihenfolge der Aufträge in der Schleife. 2) break - Verlassen der Schleife, und Sie sollten fortfahren - überspringen Sie dies


 
Artyom Trishkin:

Sie haben bereits eine Antwort erhalten:



Ja, danke, ich habe die Seite gelesen. Nur meine Kenntnisse in MKL4 reichten aus, um zu bemerken, dass in meiner Schleife die Positionen von Null bis zur letzten durchlaufen werden, während im Beispiel im Gegenteil die Positionen von der letzten bis zur Null durchlaufen werden.Ich weiß immer noch nicht, wo ichdie Pause einfügen soll.Und als ich meine Schleife auf Umkehrung umgestellt habe, schließen sich die Positionen überhaupt nicht mehr.