Verständnisfrage zu OrderSelect, für welche Art Zugriff ist Order exklusiv gesperrt (locked)

 

Hallo,

ich hätte eine Verständnisfrage zu OrderSelect, vor allem dazu, für welche Art von Zugriff (durch EA) die Order exklusiv für andere Zugriffe (durch anderen EA) gesperrt ist.

Ein Beispiel:

  1. Ein bestimmter EA (EA 01) regelt das Ordermanagement ausschließlich seiner selbst erstellten Orders.Dazu durchläuft er alle offenen Orders im Account, prüft nach der Magic dieses EAs und handelt entsprechend (also der übliche Vorgang).

  2. Ein weiterer EA (EA 02) prüft den OrderProfit ALLER offenen Orders und greift z. B. ein, wenn dieser aus dem Normbereich läuft indem bestimmte Orders geschlossen werden. Dazu prüft er ebenfalls alles offenen Orders und handelt entsprechend.

Beide EAs greifen also per OrderSelect auf alle offenen Orders zu indem sie z. B. den Profit abfragen, prüfen, ob der SL getrailt werden kann usw.

Da es sich um verschiedene EAs handelt und der PC gleichzeitig die Aktionen beider EAs ausführen kann, besteht auch die Möglichkeit, dass eine bereits selektierte Order (durch EA 01) GLEICHZEITIG von EA 02 selektiert wird.

Wahrscheinlich erfolgen sehr viel mehr GEMEINSAME Zugriffe (durch EA 01 und EA 02) als man merkt. Bei bestimmten Zugriffen taucht aber dann im Log die Meldung "Order is locked" auf mit der Fehlernummer.


  • Berichtigt mich, falsch ich falsch liegt, aber es muss doch einen Unterschied bei der Art der Zugriffe auf die Order geben (Select nach: OrderProfit, OrderModify, OrderClose usw.) sonst müssten sehr viel mehr "Order is locked" im Log stehen.
    Wie unterschieden sich diese? 

  • Im Log sehe ich, dass manchmal eine Order schon mal für bis zu 2 Sekunden gelocked ist und ein weiterer Zugriff (durch anderen EA) nicht möglich ist.
    2 Sekunden sind eine lange Zeit, gibt es eine Möglichkeit, diese gesperrte Order nach spätestens z. B. 0,5 Sekunden wieder freizugeben? 

Vielleicht hat jemand dazu Erfahrung und eine Idee, was man hier verbessern könnte.

Danke, schon mal und viele Grüße


Werner

 

Eigentlich sollten/müssen die EAs jeweils eine eigene Magicnummer haben, damit jeder EA seine eignen Positionen, Orders, ... erkennt und von den anderen unterscheiden kann.

Manche EAs erlauben das einstellen der Magicnummer in den Einstellungen.

 
Carl Schreiber:

Eigentlich sollten/müssen die EAs jeweils eine eigene Magicnummer haben, damit jeder EA seine eignen Positionen, Orders, ... erkennt und von den anderen unterscheiden kann.

Manche EAs erlauben das einstellen der Magicnummer in den Einstellungen.

Hallo Carl,

  • es gibt mehrere EAs (EA01, EA02, EA 03 etc.), die sich um das Erstellen (verschiedene Strategieren) und das Ordermanagement (Trailing, Break-Even etc.) kümmern. Jeder hat eine eigene Magic.

  • Dann gibt es EINEN SEPARATEN EA, der den Gesamtprofit ALLER offenen Orders prüft um bei bestimmten Fällen einzugreifen (Eur-Basket unterschreitet bestimmte Verlustgrenze --> Schließen, etc.)
    Dieser separate EA (der keine Orders erstellt oder trailt etc.) prüft also den gesamten Magic-Nummernkreis der anderen EAs ab (EA 01, EA 02, EA 03 etc.).


Für die Kontrolle des Gesamtprofits der offenen Orders würde es meiner Meinung nach keinen Sinn machen, jeden einzelnen EA damit zu beauftragen. Deswegen habe ich diese Aufgabe an einen einzigen, separaten EA ausgelagert.

Prinzipiell klappt es wunderbar, bis auf die wenigen Fehlermeldung, die ich bekomme, wenn ein gleich zeitiger Zugriff von beiden EAsauf die gleiche Ordererfolgt.

  • Wie gesagt, ich vermute, dass GLEICHZEITIGE Zugriffe auf die selbe Order öfter erfolgen als man merkt. Obwohl nur wenige Fehlermeldungen (Order is locked) ausgegeben werden. Deswegen vermute ich einen Unterschied bei der Art des Zugriffs.

  • Punkt 2 ist, dass in wenigen Fällen vorgekommen ist, dass eine Order für z. B. 2 Sekunden gelockt ist. Das sehe ich an den Fehlermeldungen im Log, wenn ein weiterer Zugriff verhindert.
    Hier ginge es mir vor allem darum, eine gelockte Order bereits nach z. B. 0,5 Sekunden wieder freizugeben, auch, wenn die Aktion noch nicht erledigt ist.

Ich hoffe, dass ich meine Absicht jetzt besser erklärt habe.


Gruß Werner

 

Das liegt in den Codes der EAs, wie oft sie die Situation ihrer Positionen überprüfen. Dort müsste man ansetzen.

Vielleicht ist dadurch das Auslagern an einen anderen EA doch keine so gute Idee.

Was spricht gegen eine Funktion, die über eine einzige Datei (einzubinden mit #include ...mgh) alle EAs dazu bringt, offenen Positionen auf dieselbe Art zu behandeln?

 
Carl Schreiber:

Das liegt in den Codes der EAs, wie oft sie die Situation ihrer Positionen überprüfen. Dort müsste man ansetzen.

Vielleicht ist dadurch das Auslagern an einen anderen EA doch keine so gute Idee.

Was spricht gegen eine Funktion, die über eine einzige Datei (einzubinden mit #include ...mgh) alle EAs dazu bringt, offenen Positionen auf dieselbe Art zu behandeln?

<<Was spricht gegen eine Funktion, die über eine einzige Datei (einzubinden mit #include ...mgh) alle EAs dazu bringt, offenen Positionen auf dieselbe Art zu behandeln? >>

Damit habe ich noch nicht gearbeitet und somit keine Erfahrung.

Kannst Du vielleicht einen bestimmten Link empfehlen (Artikel, Beispiel o. ä.) wo diese Vorgehensweise genauer beschrieben ist und den ich mal durcharbeiten könnte?

Wenn es halbwegs verständlich erklärt ist, dürfte ich schon klar kommen damit.

 

ich verstehe nicht ganz, was du mit "Order ist locked" meinst.

Ein EA blockiert keine Order. eine Abfrage über eine Order oder Position sperrt ja nix.

bist Du sicher das hier nicht was vom Broker kommt?

 
fintrad0:

<<Was spricht gegen eine Funktion, die über eine einzige Datei (einzubinden mit #include ...mgh) alle EAs dazu bringt, offenen Positionen auf dieselbe Art zu behandeln? >>

Damit habe ich noch nicht gearbeitet und somit keine Erfahrung.

Kannst Du vielleicht einen bestimmten Link empfehlen (Artikel, Beispiel o. ä.) wo diese Vorgehensweise genauer beschrieben ist und den ich mal durcharbeiten könnte?

Wenn es halbwegs verständlich erklärt ist, dürfte ich schon klar kommen damit.

Gib mal in die Suchzeile der MQL5-Referenz #include ein. Eigentlich steht dort alles, was Du wissen musst.

Sonst gib hier oben rechts in die Suche #include ein - es gibt viele, viele Beispiele, ua. der MACD-EA in: C:\...\MQL5\Experts\Examples\MACD

 
Carl Schreiber:

Gib mal in die Suchzeile der MQL5-Referenz #include ein. Eigentlich steht dort alles, was Du wissen musst.

Sonst gib hier oben rechts in die Suche #include ein - es gibt viele, viele Beispiele, ua. der MACD-EA in: C:\...\MQL5\Experts\Examples\MACD

Das werde ich machen. Danke, Carl, für Deine Hilfe!

Schönen Tag noch!

Gruß

Werner

 

Noch was zur Info:


So weit ich weiß wird im MT5 jeder Chart nacheinander abgearbeitet.Egal wieviele EAs da laufen

ES gibt keine Synchronen Zugriffen auf das Konto.

Sprich eine Order wird immer nur zur Zeit von einem EA bearbeitet werden können.

 
amando:

ich verstehe nicht ganz, was du mit "Order ist locked" meinst.

Ein EA blockiert keine Order. eine Abfrage über eine Order oder Position sperrt ja nix.

bist Du sicher das hier nicht was vom Broker kommt?

Hallo Amando,

der Text der Fehlermeldung heißt "Order is locked." Die Meldung kommt dann, wenn eine weitere Aktion (OrderModify, OrderClose etc.) durchgeführt werden hätte sollen, aber abgelehnt wurde, weil die Order bereits von einem anderen Befehl belegt wird. So zumindest stelle ich mir das vor. 

Kritisch sehe ich das deswegen, weil in seltenen Fällen die Order schon mal bis zu 2 Sekunden geblockt wurde. In dieser Zeit kann viel passieren.

Gruß Werner

 
Christian:

Noch was zur Info:


So weit ich weiß wird im MT5 jeder Chart nacheinander abgearbeitet.Egal wieviele EAs da laufen

ES gibt keine Synchronen Zugriffen auf das Konto.

Sprich eine Order wird immer nur zur Zeit von einem EA bearbeitet werden können.

Hallo Christian, das wusste ich nicht. Allerdings arbeite ich jetzt noch mit dem MT4, ob es da gleich ist, kann ich nicht sagen.

Ich kann mir das aber auch kaum vorstellen. Es ist so, dass ich 32 EAs zum Testen auf einem VPS laufen habe. Manche Trades werden von verschiedenen EAs zur exakt der gleichen Zeit geöffnet, zumindest auf die Sekunde genau. Ich meine mal etwas davon gelesen zu haben, dass ein CPU mit mehreren Prozessorkernen die anstehenden Jobs verteilt und so gleichzeitig ausführen kann.

Ich werde mal im Log genauer darauf achten, ob exakt zur selben Zeit verschiedene Aktionen durchgeführt wurden. 

Wahrscheinlich werde ich noch ein paar Änderungen an meinem System vornehmen (Ideen gibt es zu genüge) und dann weiter testen. Carl hat mir den Tipp mit dem Einbinden von Dateien gegeben. Da werde ich mir mal ein paar Videos ansehen und etwas rumprobieren. Mal sehen, wie weit ich kommen. Das eröffnet wieder komplett neue Möglichkeiten.

Dank Euch hier im Forum bin ich aber bereits enorm weit gekommen.

Also, schönen Abend!

Gruß Werner

Grund der Beschwerde: