Die Sprache MQL5 von Grund auf selbst erlernen - Seite 66

 
Valeriy Yastremskiy:

Der Schleifenoperator und die Operatoren im Schleifenkörper. Nicht gerade klassisch russisch.

Alles ist natürlich gut, aber wo ist der Iterator i im Schleifenkörper? Und um das Positionssymbol und seine magische Zahl zu erhalten, muss es zuerst ausgewählt werden. Die Positionsbeschreibung ist eine Struktur (in MQL5 die ganze Struktur und die Aufträge und die Zeit und die Geschäfte) und sie wird durch die Auswahl ausgefüllt, durch den Iterator, der kein Positionsticket ist, sondern eine Positionsnummer. Und wir sollten uns daran erinnern, dass in der Struktur der Positionsbeschreibung es immer die letzte Positionsauswahl ist.

Hallo Valery! Danke für die Klarstellung.

Das war der Grund für meine Verwirrung, denn alles funktionierte ohne den for-Schleifenoperator, während es mit ihm aus irgendeinem Grund nicht funktionierte. Habe ich es richtig verstanden, dass ich zunächst alle notwendigen Abfragen per Antrag stellen sollte?

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin:

Hallo Valery! Danke für die Klarstellung.

Das war der Grund für meine Verwirrung, denn ohne den for-Schleifenoperator funktionierte alles, aber mit ihm aus irgendeinem Grund nicht. Habe ich es richtig verstanden, dass ich zunächst alle erforderlichen Abfragen per Antrag durchführen muss?

Mit freundlichen Grüßen, Vladimir.

Nein, ich weiß nicht recht MKL5 . Dies ist ein Ersuchen um Vollstreckung. Und Sie müssen die Position nach Nummer auswählen, um damit weiterarbeiten zu können.

PositionSelect

Ich glaube schon.

 
MrBrooklin:

Guten Tag und gute Laune an alle!

Liebe Fachleute! Bitte beraten Sie mich, aber nicht in Worten, sonst werde ich die Programmiersprache MQL5 nie lernen.

Mit freundlichen Grüßen, Vladimir.

Hallo! Das Problem ist, dass Sie die Schleife der offenen Positionen angewandt haben, und Sie haben sie nicht im Sinne von "wenn" definiert, d.h., wonach genau die for-Schleife sucht, und Sie haben sie noch nicht abgeschlossen, sie muss etwas zurückgeben...

Da die offenen Positionen ständig gezählt werden, ist es besser, einen Block mit einer Schleife zu erstellen, und wenn Sie ihn öffnen, können Sie ihn zum Beispiel auf diese Weise aufrufen;

input int MaxOpenedPositions=1;
.
.
.
int Total=TotalPositions(-1);
if(Total<MaxOpenedPositions && другие условия для открытия) OpenBUY();//например
if(Total<MaxOpenedPositions && другие условия для открытия) OpenSELL();//например

//+------------------------------------------------------------------+
//| Total Positions                                                  |
//+------------------------------------------------------------------+
int TotalPositions(int Type)
   {
int cnt=0;
if(PositionsTotal()>0)
for(int i=PositionsTotal()-1;i>=0;i--)
   
if(PositionSelectByTicket(PositionGetTicket(i)) && PositionGetString(POSITION_SYMBOL)==_Symbol && PositionGetInteger(POSITION_MAGIC)==MagicNumber) 
   {
   if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) {cnt++;continue;}
   if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL) {cnt++;}
   }
   return(cnt);
   }
 
Valeriy Yastremskiy:

nein, ich kenne MKL5 nicht wirklich. Dies ist ein Ersuchen um Vollstreckung. Und Sie müssen eine Position nach Nummer auswählen, um mit ihr weiterarbeiten zu können.

PositionSelect

Ich glaube schon.

Ich habe alles versucht, auch PositionSelect. Keiner von ihnen hat geholfen.

Mit freundlichen Grüßen, Vladimir.

 
VVT:

Hallo! Mit Worten; der Punkt ist, dass Sie bei der Anwendung der Schleife der offenen Positionen nicht in "if"-Bedingungen spezifiziert haben, d.h. was genau die for-Schleife versucht, auch haben Sie sie nicht in irgendeiner Weise beendet, sie sollte etwas zurückgeben...

Die offenen Positionen werden ständig berechnet, daher ist es besser, einen Block mit einer Schleife zu erstellen und diesen aufzurufen, wenn Sie ihn z. B. öffnen;

Hallo!

Vielen Dank für den Hinweis. Ich werde versuchen, Ihre Methode der Aufzählung der offenen Stellen zu analysieren und anzuwenden.

Mit freundlichen Grüßen, Vladimir.

 
VVT:

Hallo! In Worten: Der Punkt ist, dass Sie bei der Anwendung der Schleife für die Suche nach offenen Stellen in der "if"-Schleife nicht spezifiziert haben, d.h. wonach genau die for-Schleife sucht, und Sie haben sie nicht auf irgendeine Weise beendet, sie sollte etwas zurückgeben...

Übrigens sagt die MQL5-Referenz nichts über die Tatsache aus, dass die Schleife nach Abschluss etwas zurückgeben muss. Vielleicht habe ich etwas missverstanden? Oder bezieht sich das vielleicht auf die if-Anweisung?

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin:

Ich habe alles versucht, auch PositionSelect. Nichts hat geholfen.

Mit freundlichen Grüßen, Vladimir.

Nur verstanden, ja, Positionsauswahl im Netting nach Werkzeug, nicht nach Nummer. Oh, sie haben es vermasselt).

Dies ist möglich durch

  • PositionGetTicket gibt das Positionsticket nach Positionsnummer zurück (und wir haben eine Nummer) und nachdem wir das Positionsticket erhalten haben, können wir sein Symbol und seine Magie erhalten.
Oder, wenn es sich um Netting handelt, können wir darüber nachdenken und entscheiden, warum wir die Gesamtzahl der Aufträge oder Positionen benötigen, wenn wir nur eine Position auf einem Instrument haben können und diese kennen müssen. Deshalb brauchen wir vielleicht keinen Zyklus. Wenn PositionSelect False zurückgibt, wird eine Position geöffnet, und wenn True, wird eine Position auf diesem Instrument ausgewählt, und wir können damit arbeiten und sie für das Trawling ändern.
 
Valeriy Yastremskiy:

Ich habe gerade festgestellt, dass die Positionsauswahl beim Netting nach Instrumenten und nicht nach Nummern erfolgt. Oh, sie sind verkorkst.)

Dies ist möglich durch

  • PositionGetTicket gibt ein Positionsticket nach Positionsnummer zurück (und wir haben eine Nummer) und wenn wir das Positionsticket bekommen, können wir sein Symbol und seine Magie bekommen.
Oder, wenn es sich um Netting handelt, können wir darüber nachdenken und entscheiden, warum wir die Gesamtzahl der Aufträge oder Positionen benötigen, wenn wir nur eine Position auf einem Instrument haben können und diese kennen müssen. Deshalb brauchen wir vielleicht keinen Zyklus. Wenn PositionSelect False zurückgibt, wird eine Position geöffnet, und wenn True, wird eine Position auf diesem Symbol ausgewählt, und wir können damit arbeiten und sie für das Trawling ändern.

Der Code wurde also ursprünglich ohne den Schleifenoperator geschrieben, obwohl ich neugierig war, ihn später auszuprobieren.

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin:

Übrigens steht in der MQL5-Referenz nichts über die Tatsache, dass die Schleife nach Beendigung etwas zurückgeben sollte. Vielleicht habe ich es wieder falsch verstanden?

Mit freundlichen Grüßen, Vladimir.

Die Formulierung ist nicht ganz korrekt: Aktionen sollten im Schleifenkörper ausgeführt werden, abhängig vom Iterator. Abhängig von dem Iterator. Und das Ergebnis der Durchführung dieser Aktionen im Schleifenkörper sollte zurückgegeben werden. Wenn die Schleife übergeben wurde und es keine Break- oder Kontingenzoperatoren gab, bedeutet dies, dass wir zu Ausdruck 3 und dann zu Ausdruck 2 gehen, und wenn dieser wahr ist, geben wir ihn mit dem neuen Iterator an den Schleifenkörper zurück.

 
MrBrooklin:

Ursprünglich war der Code also ohne den Schleifenoperator geschrieben worden, obwohl ich dann ausprobieren wollte, wie man ihn anwenden kann.

Hochachtungsvoll, Vladimir.

Sie können sich bewerben

  • PositionGetTicket liefert ein Positionsticket nach Positionsnummer (und wir haben eine Nummer), und nachdem wir das Positionsticket erhalten haben, können wir sein Symbol und seine Magie abrufen.

Gehen Sie alle Tickets nach Nummern durch. Und durch die Karten die Symbole der Position herausfinden und mit unseren vergleichen. Holen Sie sich die Positionsmagie und vergleichen Sie sie mit unserer.

if(PositionSelectByTicket(PositionGetTicket(i)) && PositionGetString(POSITION_SYMBOL)==_Symbol && 
PositionGetInteger(POSITION_MAGIC)==MagicNumber) // вот эта строчка

Aber nur warum.