So prüfen Sie, ob ein Auftrag ausgewählt ist - Seite 10

 
artmedia70:
Ich sehe da kein Problem. Was ist schon dabei... Sie müssen in einer Hauptfunktion A() einen Auftrag auswählen und in einer anderen Funktion B(), die von der Hauptfunktion A() aufgerufen wird, den in Funktion A() ausgewählten Auftrag verarbeiten. Und wir sollten in der Funktion B() sicher wissen, ob der Auftrag noch ausgewählt ist oder nicht... Übergeben Sie also der Funktion B() das Ticket der in Funktion A() ausgewählten Bestellung. In der Funktion B() können wir prüfen, aus welcher Liste die Bestellung ausgewählt wurde und dann entscheiden, wohin wir gehen und was wir an die Funktion A() zurückgeben...

Du verstehst mich völlig falsch. Das tut die Hälfte der Menschen aus irgendeinem Grund auch. Ich brauche in der Funktion B() nicht den Auftrag zu verarbeiten, der in der Funktion A() ausgewählt wird. Die Funktion B() arbeitet mit anderen Aufträgen, egal mit welchen, sie hat nichts mit der Funktion A() zu tun; die Funktion B() hat ihre eigene Logik. Es kann die Anzahl der Aufträge, ihren Gesamtgewinn zählen, ihre Kommentare, TP SL usw. durchsehen. Die Aufgabe besteht darin, von Funktion B() zu Funktion A() zurückzukehren, so dass unabhängig davon, was Funktion B() mit den Aufträgen gemacht hat, die Logik von Funktion A() zum Zeitpunkt des Aufrufs von Funktion B() nicht verletzt wird, da der Auftrag, der von Funktion A() vor dem Aufruf von Funktion B() ausgewählt wurde, nicht mehr ausgewählt wird und der ausgewählte Auftrag ein anderer zufälliger Auftrag ist, der von Funktion B() verarbeitet wird, die höchstwahrscheinlich auch Aufträge in der Schleife sucht.

artmedia70:
Stellen wir uns nun vor, was mit der last_select-Variable nach dem Neustart des Terminals passiert (die Lichter werden von bösen Jungs ausgeschaltet)

Nach dem Neustart wird die Variable last_select auf 0 initialisiert, wie erforderlich.

 

Das sind 10 Seiten Blabla, Blabla, Blabla. Hier ist der Code, der dafür sorgt, dass die Funktion mit einer anderen (nicht hervorgehobenen) Bestellung funktioniert:

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Получаем актуальную информацию об ордере                                  |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
bool fGet_OrderDetails (int fi_Ticket)              // OrderTicket()
{
    int lia_cmd[] = {1,-1,-1,1,1,-1};
//----
    //---- На текущий момент может быть выделенным другой ордер
    int li_LastTicket = OrderTicket();
    if (li_LastTicket != fi_Ticket)
    {   
        if (!OrderSelect (fi_Ticket, SELECT_BY_TICKET))
        {fSet_Comment (fi_Ticket, fi_Ticket, 100, "fGet_OrderDetails()", True, GetLastError()); return (false);}
    }
    if (bi_curTicket != fi_Ticket)
    {
        bi_Type = OrderType();
        bd_OpenPrice = NDD (OrderOpenPrice());
        bd_Lots = OrderLots();
        bi_cmd = lia_cmd[bi_Type];
        bi_curTicket = fi_Ticket;
    }
    bd_curSL = NDD (OrderStopLoss());
    bd_curTP = NDD (OrderTakeProfit());
    //---- Выделяем первоначальный ордер
    if (li_LastTicket != fi_Ticket) {if (li_LastTicket > 0) OrderSelect (li_LastTicket, SELECT_BY_TICKET);}
//----
    return (true);
}
Dies ist nur ein Beispiel. Eine Person, die das Thema versteht, wird es verstehen.
 
TarasBY:

Das sind 10 Seiten Blabla, Blabla, Blabla. Hier ist der Code, der dafür sorgt, dass die Funktion mit einer anderen (nicht zugewiesenen) Bestellung funktioniert:

Dies ist nur ein Beispiel. Eine Person, die das Thema versteht, wird es verstehen.

Das ist nicht der Punkt. Es gibt lokale oder globale Variablen im EA und es gibt Terminalvariablen. Für das Programm sind diese Variablen interaktiv, und ihr Wert kann sich für den EA jederzeit auf völlig unerklärliche Weise ändern. Das Vorzeichen der Auftragswahl ist eine solche Variable. Wenn Metaquotes den Zugriff auf das "select"-Attribut eines grafischen Objekts erlauben würde, wäre dies ebenfalls der Fall. Dies würde unweigerlich zu folgender Schlussfolgerung führen: Wir sollten eine Order immer dann auswählen, wenn wir die Nummer der ausgewählten Order wissen müssen, oder uns die ausgewählte Order nur dann merken, wenn dies von der Logik des Expert Advisors verlangt wird. Es geht also folgendermaßen...
 
tara:
Das ist nicht der Punkt. Es gibt lokale oder globale Variablen im EA und es gibt Variablen des Terminals. Diese Variablen sind aus Sicht des Programms interaktiv, und ihr Wert kann sich für den EA jederzeit auf unerklärliche Weise ändern. Das Vorzeichen der Auftragswahl ist eine solche Variable. Wenn Metaquotes den Zugriff auf das "select"-Attribut eines grafischen Objekts erlauben würde, wäre dies ebenfalls der Fall. Dies würde unweigerlich zu folgender Schlussfolgerung führen: Wir sollten eine Order immer dann auswählen, wenn wir die Nummer der ausgewählten Order wissen müssen, oder uns die ausgewählte Order nur dann merken, wenn dies von der Logik des Expert Advisors verlangt wird. Es geht also folgendermaßen...

Ich stimme mit Ihnen völlig überein:

  • Zunächst einmal müssen wir berücksichtigen, was wir haben (MQL4-Fähigkeiten);
  • Zweitens verwende ich selbst die Struktur der Verarbeitung ALLERHandelsaufträge mit offenen Aufträgen an einem Ort: Ich mache eine Aufzählung der Aufträge und führe alle notwendigen Aktionen mit jedem Auftrag (in der Reihenfolge) durch.

P.S. Und ich führe die obige Überprüfung im Code durch, "nur für den Fall"... :)

 

:)

Schöne Feiertage! Für mich sind 20 Jahre nicht das Schlimmste in meinem Leben.

 
TarasBY:

Das sind 10 Seiten Blabla, Blabla, Blabla. Hier ist der Code, der dafür sorgt, dass die Funktion mit einer anderen (nicht hervorgehobenen) Reihenfolge funktioniert:

Dies ist nur ein Beispiel. Eine Person, die das Thema versteht, wird es verstehen.

Ja, genau das:

int li_LastTicket = OrderTicket();

Ihr Code erzeugt einen 4105-Ausführungsfehler, wenn es keinen OrderSelect-Aufruf gab, bevor er ausgeführt wurde. Setzen Sie einfach eine GetLastError-Prüfung an das Ende jedes Ticks und erkennen Sie diesen Fehler.

 
tara:

:)

Schöne Feiertage! Für mich sind 20 Jahre nicht das Schlimmste in meinem Leben.

Herzlichen Glückwunsch! Sind Sie seit 20 Jahren im Dienst von Glaube und Wahrheit?
 
borilunad:
Herzlichen Glückwunsch! Sind Sie seit 20 Jahren im Dienst von Glaube und Wahrheit?
Das ist richtig.
 
tara:
Sie, meine Liebe.
Also, "over-enlisted", wie man mich zu meiner Zeit nannte, oder vielleicht sogar jetzt, ein Stück...? :)
 
borilunad:
Also "over-enlisted", wie man mich zu meiner Zeit nannte, oder vielleicht auch heute noch, ein Stück...? :)
Würden Sie sich besser fühlen, wenn ich das sagen würde? :)