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

 
Vinin:


Ich habe niemanden speziell gefragt.

Aber es war sicher richtig, dass Sie es persönlich genommen haben.

Ich kann Sie nicht als Dummkopf bezeichnen, aber Sie sind taub, das steht fest.

Sie hören nicht auf andere. Ich spreche nicht von meinen Bemerkungen, sondern von den Ratschlägen, die Sie erhalten haben.

Haben Sie jemals interoperable Programme geschrieben?

Was Ant_TL fordert, ist "Interoperabilität", die jedoch nicht in MQL implementiert werden kann.

 
PapaYozh:

Haben Sie jemals ein interoperables Programm geschrieben?

Worum Ant_TL bittet, ist "Interoperabilität", aber das ist in MQL nicht machbar.


Es ist nicht schwer, das umzusetzen. Und im Prinzip gibt es eine Lösung. Zu faul, um weiterzulesen
 
Eine solche Lösung kann für geschlossene Positionen, die sich nicht mehr ändern, praktikabel sein. Für offene Stellen lohnt es sich jedoch nicht
 
Vinin:

Sie ist nicht schwer umzusetzen. Und es gibt eine Lösung. Zu faul, um weiterzulesen

Sie werden nicht in der Lage sein, Vorgänge mit Aufträgen auszuführen und sicherzustellen, dass die Umwelt nicht beeinträchtigt wird.

Es wurde bereits über GetLastError() gesagt, dass Sie nicht in der Lage sein werden, den Code wiederherzustellen, dervon der Funktion GetLastError() zurückgegeben werden sollte.

 
PapaYozh:

Sie werden nicht in der Lage sein, Vorgänge mit Aufträgen auszuführen und sicherzustellen, dass die Umwelt nicht beeinträchtigt wird.

Es wurde bereits über GetLastError() gesagt, dass Sie nicht in der Lage sein werden, den Code wiederherzustellen, den die Funktion GetLastError() hätte zurückgeben sollen.


Wenn Sie wollen, können Sie, es wird nur eine eigene Funktion (ich meineGetLastError())
 

Dies mag wie eine Lösung aussehen - OrderSelect() - MySelect() Wrapper für die Verwendung in Funktionen, die nach Aufträgen nach Index suchen

int last_select=0; // irgendwo vor init und start einfügen

// ...... Programmcode

bool MySelect(int i,int mode=MODE_TRADES){ // Auftragsauswahl - gibt True zurück, wenn der Auftrag ausgewählt ist und zum EA gehört, sonst False
if(OrderSelect(i,SELECT_BY_POS,mode)){
last_select=OrderTicket();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
return(true);
else
return(false);
}
return(false);
}

bool TickSelect(int tick){ // Auftragsauswahl direkt nach Tick
if(OrderSelect(tick,SELECT_BY_TICKET))
last_select=tick;
else
return(false);
return(true);
}

void SomeFunc(){ // Eine Funktionsvorlage, die die Orderauswahl und damit die Programmlogik unterbrechen kann, wenn die aktuelle Orderauswahl nicht beachtet wird
int tick=last_select;

// ... erforderliche Aktionen durchführen

if(tick>0)
TickSelect(tick);
}

 
Ant_TL:

Das kann er nicht, es sei denn, Sie ändern diesen Zustand selbst im Programm.

Es wird davon ausgegangen, dass der Auftragsstatus von MODE_TRADES zu MODE_HISTORY gewechselt hat. Und Ihr Expert Advisor hat nichts mit dem Auftrag gemacht. Handelt es sich um dieselbe Reihenfolge oder um eine andere?

 
Mislaid:

Es wurde angenommen, dass sich der Auftragsstatus von MODE_TRADES zu MODE_HISTORY geändert hat. Und Ihr EA hat nichts mit dem Auftrag gemacht. Handelt es sich um dieselbe Reihenfolge oder um eine andere?

Es ist die gleiche Reihenfolge

 
Ich sehe das Problem nicht. Und es gibt eine Menge Aufregung... 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 Sie prüfen, aus welcher Liste die Bestellung ausgewählt wurde, und dann entscheiden, wohin sie gehen und was an die Funktion A() zurückgegeben werden soll...
 
Ant_TL:

Dies mag wie eine Lösung aussehen - OrderSelect() - MySelect() Wrapper für die Verwendung in Funktionen, die nach Aufträgen nach Index suchen

int last_select=0; // irgendwo vor init und start einfügen

// ...... Programmcode

bool MySelect(int i,int mode=MODE_TRADES){ // Auswahl der benötigten Order - gibt True zurück, wenn die Order ausgewählt wurde und zum Expert Advisor gehört; ansonsten False
if(OrderSelect(i,SELECT_BY_POS,mode)){
last_select=OrderTicket();
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
return(true);
sonst
return(false);
}
return(false);
}

bool TickSelect(int tick){ // Auswahl direkt nach Tick sortieren
if(OrderSelect(tick,SELECT_BY_TICKET))
last_select=tick;
sonst
return(false);
return(true);
}

void SomeFunc(){ // Eine Funktionsvorlage, die die Auftragsauswahl und damit die Programmlogik unterbrechen kann, wenn die aktuelle Auftragsauswahl nicht beachtet wird
int tick=last_select;

// ... die gewünschte Aktion durchführen

if(tick>0)
TickSelect(tick);
}

Stellen wir uns vor, was mit der Variable last_select passiert, nachdem das Terminal neu gestartet wurde (die Bösewichte haben das Licht ausgeschaltet)
Grund der Beschwerde: