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

 
MrBrooklin #:

Hallo Alexey, die Variable pos_total=PositionsTotal() war nur auf der globalen Ebene gesetzt. Jetzt habe ich sie innerhalb der Funktion verschoben und es stellte sich heraus, dass dies das Problem war. Alles hat funktioniert. Was ist das Problem? Ich verstehe den Scherz überhaupt nicht!!!

Jetzt habe ich pos_total versuchsweise wieder auf die globale Ebene verschoben und es funktionierte wieder nicht, aber wenn ich es in die Funktion einfüge, funktioniert es wie es soll! Ein paar Wunder, zumindest für mich!!!! )))

Es stellt sich heraus, dass eine Variable auf globaler Ebene nicht durch eine Funktion initialisiert werden kann? Ist das richtig?

Mit freundlichen Grüßen, Vladimir.

Manchmal kann man das, aber nicht jede Variable. In diesem Fall, wenn Sie den EA ausführen, sieht er noch keine offenen Positionen und die Variable ist gleich null....

Eigentlich habe ich gestern mit Positionssampling experimentiert und bin zu dem Schluss gekommen, dass PositionsTotal() nur benötigt wird, um die Anzahl der Positionen zu bestimmen. Und diese Zahl wird nur benötigt, um die Schleife zu begrenzen.

Hier ist eine solche Schleife

  int i = 0;
  while(bool(posTicket = PositionGetTicket(i)) && !IsStopped())
   {
    string posSymbol = PositionGetString(POSITION_SYMBOL);
    double posPrice = PositionGetDouble(POSITION_PRICE_OPEN),
           pos_tp = PositionGetDouble(POSITION_TP),
           pos_sl = PositionGetDouble(POSITION_SL);
    printf("%s Ticket %d цена = %g тейк-профит = %g стоп-лосс = %g", posSymbol, posTicket, posPrice, pos_tp, pos_sl);
    i++;
   }


funktioniert auch, wenn man vorher eine Liste von Aufträgen oder Geschäften aus der Historie erhält. Eines Tages werde ich prüfen, ob die Auswahl der schwebenden Aufträge die Schleife stören wird.


Und in Ihrem Fall ist es einfacher, ohne eine Schleife zu schreiben

      PositionGetTicket(PositionsTotal()-1); // получим тикет позиции

wenn Sie die letzte Position benötigen...

 
Alexey Viktorov #:
In diesem Fall, wenn Sie den EA starten, sieht er noch keine offenen Positionen und die Variable ist gleich Null ...

Ich würde Ihnen zustimmen, aber hier ist das Problem - als ich die Variable pos_total auf die globale Ebene setzte, sah der EA während des gesamten Testzeitraums keine offenen Positionen, obwohl in diesem Zeitraum mehr als 50 Positionen eröffnet wurden. Ich verstehe das nicht! Es stellt sich heraus, dass diese Option nicht funktioniert?

Mit freundlichen Grüßen, Vladimir.

 
Alexey Viktorov #:

In Ihrem Fall ist es einfacher, ohne eine Schleife zu schreiben

wenn Sie die letzte Position benötigen...

Ich stimme zu, wenn ich nicht mehrere Positionen auf einem anderen Symbol und in verschiedenen Richtungen offen hätte. Ich meine kaufen und verkaufen. Aber trotzdem danke für den Hinweis!

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin #:

Ich stimme zu, wenn nicht mehrere Positionen auf einem anderen Symbol und in verschiedenen Richtungen offen wären. Ich meine kaufen und verkaufen. Aber trotzdem danke für den Tipp!

Mit freundlichen Grüßen, Vladimir.

Es macht keinen Unterschied, wie viele Positionen offen sind und ob sie nach Norden oder zum Ficken oder in alle Richtungen gleichzeitig gehen... Das letzte wird PositionsTotal()-1 sein.

 
Alexey Viktorov #:

Es macht keinen Unterschied, wie viele Positionen offen sind und ob sie nach Norden, nach Norden oder in alle Richtungen gleichzeitig offen sind... Die letzte Zahl wird PositionsTotal()-1 sein.

Hallo Alexej, ich war ein bisschen verwirrt. Du hast wie immer Recht!!! )))

Mit freundlichen Grüßen, Vladimir.

 
Alexey Viktorov #:

Tatsächlich habe ich gestern mit Positionssampling experimentiert und bin zu dem Schluss gekommen, dass PositionsTotal() nur benötigt wird, um die Anzahl der Positionen zu bestimmen. Und diese Zahl wird nur benötigt, um die Schleife zu begrenzen.

Hier ist eine solche Schleife


funktioniert auch, wenn man vorher eine Liste von Aufträgen oder Geschäften aus der Historie erhält. Am anderen Tag werde ich prüfen, ob die Auswahl der ausstehenden Aufträge stören wird.

Auch hier gibt es eine Raffinesse.

Wenn die Liste wirklich groß und nach einem bestimmten Kriterium geordnet ist, kann es vorteilhafter sein, das gesuchte Element nicht durch Durchsuchen aller Elemente in der Schleife, sondern durch Halbteilung zu suchen, und hier kann die Kenntnis der Gesamtzahl der Elemente in der Liste sehr nützlich sein.

 
JRandomTrader #:

Auch hier gibt es eine gewisse Subtilität.

Wenn die Liste wirklich groß und nach einem bestimmten Kriterium geordnet ist, kann es vorteilhafter sein, das gesuchte Element nicht in einer Schleife durch alle Elemente zu suchen, sondern durch Halbteilung, und hier kann die Kenntnis der Gesamtzahl der Elemente in der Liste sehr nützlich sein.

Ich habe nicht gesagt, dass die Funktion völlig nutzlos ist. Aber in manchen Fällen kann und muss man auf sie verzichten. Schließlich ist jede Funktion Zeit. Sie können ein bisschen auf einmal tippen, bis Sie Bremsen bekommen....

 
MrBrooklin #:

Hallo, Alexej! Ich war dumm. Du hast wie immer Recht!!! )))

Mit freundlichen Grüßen, Vladimir.

Ich habe Recht, aber ich habe nicht angegeben, dass die Funktion, so wie Sie sie geschrieben haben, nicht korrekt funktioniert, wenn mehrere Trades auf verschiedenen Symbolen eröffnet werden.

Da Sie nur das letzte überprüfen, und es (das letzte) kann auf einem anderen Symbol geöffnet werden.

 
Aleksandr Slavskii #:

Richtig, aber ich habe nicht angegeben, dass die Funktion, so wie Sie sie geschrieben haben, nicht richtig funktioniert, wenn mehrere Geschäfte für verschiedene Symbole eröffnet werden.

Denn Sie prüfen nur das letzte, und dieses (das letzte) kann auf einem anderen Symbol eröffnet werden.

Hallo Alexander, ich habe bereits über dieses Thema nachgedacht, aber ich habe noch nicht angefangen, die Frage hier zu stellen, weil ich noch nicht an der Stelle im Code angekommen bin, an der es verschiedene Symbolpositionen geben wird. Danke für den Hinweis! )) Jetzt bin ich an einer Stelle ratlos, aber ich will es hier nicht zur öffentlichen Diskussion stellen, denn ich habe den unbändigen Wunsch, es aus eigener Kraft "fertigzustellen".

Übrigens ist mir aufgefallen, dass alle meine so genannten "Stolpersteine" in solchen Kleinigkeiten liegen, die ich nicht sehen kann. Nehmen Sie den Spezifizierer, von dem mir Artem Trishkin erzählt hat. Das ist so eine Kleinigkeit, und hier habe ich mir den Kopf darüber zerbrochen, warum das Skript nicht funktioniert. Oder der gleiche Link &. Ich habe so viel Zeit damit verloren. Im Allgemeinen, immer noch zu lernen, zu lernen und zu lernen, und in Russisch - zu lesen, zu lesen und zu lesen Dokumentation.

Mit freundlichen Grüßen, Vladimir.

 
Guten Tag!


Ich habe ein Netting-Konto.

In meinem Expert Advisor verwende ich den folgenden Code, um die getätigten Geschäfte zu kontrollieren:

HistorySelect(0,TimeCurrent());
ulong ticket = OrderGetTicket(0);
N_deals = HistoryDealsTotal();

Aber ich muss auch die Anzahl der abgeschlossenen Geschäfte schätzen.
Ich denke, ich muss den Modifikator DEAL_ENTRY_OUT verwenden.
Aber wie man ihn verwendet, verstehe ich nicht.

Bitte helfen Sie mir.

Mit freundlichen Grüßen, Alexander