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

 
tara:

Spanien auch:)
Spanien ist südlich und Barcelona hat ein sehr mildes Klima ohne Kälte und unerträgliche Hitze, und die Stadt selbst ist sehr schön und kompakt, so dass es mir als Moskauerin sehr gut gefallen hat!
 

Der TS möchte eine undokumentierte Funktion von MT4 nutzen. Die Funktion OrderSelect() erzeugt einen Zeiger (TC nennt ihn "order selected"), der für den EA (Skript) global ist. Die folgenden beiden Skripte veranschaulichen dies

Der durch diese aufgerufene Prozedur erzeugte Zeiger ist in der aufrufenden Prozedur verfügbar:

int start()
{
   ordsel();
   Print( OrderTicket( ) );
   return(0);
}
void ordsel()
{
   OrderSelect( 1, SELECT_BY_POS, MODE_HISTORY );
   Print( OrderTicket( ) );
}

2013.02.17 02:50:48 111 EURUSD,H1: uninit Grund 0
2013.02.17 02:50:48 111 EURUSD,H1: 18338793
2013.02.17 02:50:48 111 EURUSD,H1: 18338793
2013.02.17 02:50:48 111 EURUSD,H1: erfolgreich geladen

Der erzeugte Zeiger ist in der aufgerufenen Prozedur verfügbar:

int start()
{
   OrderSelect( 1, SELECT_BY_POS, MODE_HISTORY );
   Print( OrderTicket( ) );
   ordsel();
   return(0);
}
void ordsel()
{
   Print( OrderTicket( ) );
}

2013.02.17 02:56:10 111 EURUSD,H1: uninit Grund 0
2013.02.17 02:56:10 111 EURUSD,H1: 18338793
2013.02.17 02:56:10 111 EURUSD,H1: 18338793
2013.02.17 02:56:10 111 EURUSD,H1: erfolgreich geladen


Aber es ist irgendwie unheimlich, es zu benutzen.

 
tara:
Du solltest heiraten, Bruder.
Und wozu? Viele Menschen leben hier ohne Anmeldung und mit Kindern. Warum alle möglichen Gebühren bezahlen? Dann habe ich schon alles, also ist es nicht nötig.
 
Ant_TL:

Nun, anscheinend sind alle hier supercool, aber ich fürchte, wenn ich anfange, mich auf die Coolness-Aspekte zu konzentrieren, werde ich von Herrn FAQ, der zweifellos auch cool ist, einen Bannhammer auf den Kopf bekommen. Vielen Dank also an alle, die sich an der Diskussion beteiligt haben. Das Thema kann wahrscheinlich geschlossen werden, da außer mir niemand an dieser Frage interessiert ist.

Vielleicht war der Name des Themas irreführend, es hätte"Wie prüfe ich, ob der aktuelle Auftrag in mql4 gerade ausgewählt ist" oder so ähnlich heißen sollen. Andernfalls müssen einige Pädagogen die Fragen auf dem Niveau von bucs buchstabieren.


1) Ich glaube, es ist deine"Großartigkeit", die deine Augen tränen lässt.

2) Wenn Sie weiterhin unhöflich sind, werden Sie genau das bekommen, was Sie zu Erziehungszwecken als "Bannhammer" bezeichnen.

3) Ihre Botschaft (fett gedruckt) wurde seit Seite 2 auch ohne "Präzisierung" verstanden, und ich habe (wie alle, die im Tank sind) bereits mit Nein geantwortet. Es gibt keine solche Garantie. Wenn Sie eine haben wollen, müssen Sie sich selbst und rechtzeitig darum kümmern.

4) Sie können so lange Programme schreiben, wie Sie wollen, aber wenn Sie eine Wissenslücke haben und diese auf Kosten der Gesellschaft füllen wollen (wofür dieses Forum da ist), dann versuchen Sie, sich anständig zu verhalten.

 
Mislaid:

Der TS möchte eine undokumentierte Funktion von MT4 nutzen. Die Funktion OrderSelect() erzeugt einen Zeiger (TC nennt ihn "order selected"), der für den EA (Skript) global ist. Wie in den folgenden beiden Skripten gezeigt

Aber es ist unheimlich, sie zu benutzen.

Warum undokumentiert und warum seltsam? Das funktioniert immer, außer bei benutzerdefinierten Bibliotheken, denn offenbar ist dieser "Zeiger" nur innerhalb eines EA oder eines Skriptmoduls global, während ein Bibliotheksmodul seinen eigenen Zeiger hat.

 
FAQ:

3) Ihre Botschaft (fett gedruckt) ist bereits klar, ohne dass Sie sie auf Seite 2 "ausbuchstabieren", und ich (wie auch die anderen im Tank) habe bereits mit Nein geantwortet. Es gibt keine solche Garantie. Wenn Sie eine haben wollen, müssen Sie sich selbst und rechtzeitig darum kümmern.

4) Sie können so lange Programme schreiben, wie Sie wollen, aber wenn Sie eine Wissenslücke haben und diese auf Kosten der Gesellschaft füllen wollen (wofür dieses Forum da ist), dann versuchen Sie, sich anständig zu verhalten.

Welche andere Ermächtigung gibt es nicht? Ich habe keine Wissenslücke, das ist Ihre Fiktion. Ich habe auf ein Problem aufmerksam gemacht, das meiner Meinung nach eine Lücke im Mechanismus der Arbeit mit Aufträgen in mql4 darstellt, das ist alles. Wenn eine Reihe von Funktionen mit einem markierten Auftrag arbeiten, sollte es möglich sein, zu prüfen, ob ein Auftrag markiert ist oder nicht, um keinen Fehler zu erzeugen. Ich verstehe, dass man sich Krücken ausdenken kann, sich die Auswahl des Auftrags an einem Dutzend Stellen merken kann, einen Parameter übergeben kann, um keinen Fehler zu machen, und so weiter.

FAQ:

2) Wenn Sie weiterhin so unhöflich sind, werden Sie sicherlich einen "Bannhammer" zu Erziehungszwecken bekommen.

Die Tatsache, dass Ihr Freund bori mehrere Seiten lang unhöflich zu mir war, ist offensichtlich an Ihren scharfen Augen vorbeigegangen. Sie sind wählerisch.

 
Ant_TL:

Welche andere Ermächtigung gibt es nicht? Ich habe keine Wissenslücke, das ist Ihre Fiktion. Ich habe auf das Problem hingewiesen, das meiner Meinung nach eine Lücke im Mechanismus der Arbeit mit Aufträgen in mql4 ist, das ist alles. Wenn einige Funktionen mit einem ausgewählten Auftrag arbeiten, müssen wir in der Lage sein, zu prüfen, ob ein Auftrag ausgewählt ist oder nicht, um keinen Fehler zu erzeugen. Ich verstehe, dass wir Krücken machen können, uns daran erinnern, einen Auftrag an einem Dutzend Stellen auszuwählen, einen Parameter senden, um keinen Fehler zu machen, usw.

Es gibt keine Lücke in mql4. Der Status des ausgewählten Auftrags kann sich während jeder Operation mit Aufträgen ändern: Öffnen/Schließen, Nehmen/Stoppen, Ausführen/Löschen eines schwebenden Auftrags oder teilweises Schließen eines Auftrags. Wir müssen also nichts speichern und übertragen. Sie sollten sich nie darauf verlassen, dass sich der Zustand nicht geändert hat. Ein Auftrag kann ausgewählt werden, aber er ist nicht mehr derselbe.
 
Mislaid:
Es gibt keine Lücke in mql4. Der Zustand eines ausgewählten Auftrags kann sich bei jeder Operation mit Aufträgen ändern: Öffnen/Schließen, Nehmen/Stoppen, Ausführen/Löschen eines schwebenden Auftrags oder teilweises Schließen eines Auftrags. Daher sollten wir nichts speichern und übertragen. Sie sollten sich nie darauf verlassen, dass sich der Zustand nicht geändert hat. Ein Auftrag kann ausgewählt werden, aber er ist nicht mehr derselbe.

Ich habe auf eine konkrete Situation hingewiesen: Wir haben eine Hauptschleife, die mit Aufträgen arbeitet. Und es gibt eine Reihe von Hilfsfunktionen, die in dieser Schleife verwendet werden, die auch mit Aufträgen arbeiten. Die Logik der Hauptschleife darf nach dem Aufruf dieser Funktionen nicht unterbrochen werden. Das bedeutet, dass eine Hilfsfunktion, die mit Aufträgen arbeitet, sich den Zustand des "Zeigers" zum Zeitpunkt ihres Aufrufs merken und ihn in den Zustand zurückversetzen sollte, in dem er sich bei Beendigung der Funktion befand. Aber sie kann es nicht ohne Krücken tun und Fehler erzeugen. Das ist genau die Lücke, die hier entsteht.

Wie ich bereits im ersten Beitrag schrieb, kann das Ignorieren der Notwendigkeit, den "Zeiger"-Zustand in Hilfsfunktionen zu kontrollieren, zu schwer zu erkennenden Fehlern führen.

 
Ant_TL:

Ich habe auf eine konkrete Situation hingewiesen: Wir haben eine Hauptschleife, die mit Aufträgen arbeitet. Und es gibt eine Reihe von Hilfsfunktionen, die in dieser Schleife verwendet werden, die auch mit Aufträgen arbeiten. Die Logik der Hauptschleife darf nach dem Aufruf dieser Funktionen nicht unterbrochen werden. Das bedeutet, dass eine Hilfsfunktion, die mit Aufträgen arbeitet, sich den Zustand des "Zeigers" zum Zeitpunkt ihres Aufrufs merken und ihn in den Zustand zurückversetzen sollte, in dem er sich bei Beendigung der Funktion befand. Aber sie kann es nicht ohne Krücken tun und Fehler erzeugen. Das ist genau die Lücke, die hier entsteht.

Wie ich bereits im ersten Beitrag schrieb, kann das Ignorieren der Notwendigkeit, den "Zeiger"-Status in Hilfsfunktionen zu überwachen, zu schwer zu erkennenden Fehlern führen.

Angenommen, Sie haben Ihren EA an jemanden weitergegeben. Sie wissen nicht, ob er/sie andere EAs im Einsatz hat, vielleicht handelt er/sie auch selbst.

Vielleicht haben Sie diesen EA beendet und beginnen einen neuen zu schreiben. Das ist der Punkt, an dem die alte Version versagt.

 
Mislaid:

Angenommen, Sie haben Ihren EA an jemanden weitergegeben. Sie wissen nicht, vielleicht hat er andere EAs arbeiten, handelt er seine eigenen Hände.

Vielleicht haben Sie diesen EA beendet und beginnen einen neuen zu schreiben. Das ist der Punkt, an dem das alte System versagt.

Wie bitte? Was hat das damit zu tun, wem ich den Expert Advisor gegeben habe? Glauben Sie, dass der Status des "Zeigers" durch Aktionen anderer EAs und des Terminals beeinflusst wird? Der "Zeiger" (das Ticket der aktuell ausgewählten Bestellung) ist eine Variable der Modulebene. Es wäre schön, wenn man darauf zugreifen könnte, ohne dass ein 4105-Fehler auftritt, worüber ich die ganze Zeit geschrieben habe

Grund der Beschwerde: