Jump to content
Tom Next - Daytrading Community

mql4 Pending Order nach "nicht Ausführung" kurz vor Close schließen


chimbonda

Recommended Posts

Ich bin seit einer Woche am "coden", wenn man meine ersten Gehversuche so nennen kann. Ich habe sogar bei meinem ersten Backtest einen critical error beseitigen können happy.png hat auch "nur" ca. 4,5 Stunden gedauert. Seit dem (also Dienstagnacht) stehe ich vor dem nächsten Problem.

 

Wie lasse ich eine Pending Order auslaufen?

 

Konkret: Am ersten Tag t=0 habe ich ein Setup. Das möchte ich am darauffolgendenTag t=1 per Stop Order handeln. Wenn mein Einstieg jedoch nicht erreicht wurde, möchte ich, dass die Order um eine Minute vor Close des Tag t=1 gecancelled wird. Ich verwende die OrderSend Funktion. Die vorletzte Variable in der Funktion soll ja angeblich genau dafür gedacht sein (Expiration). Das Problem ist halt nur, dass es sich hierbei um eine datetime Variable handelt und ich damit nicht umgehen kann. datetime rechnet ja von 01.01.1970 an. Ich habe auch schon versucht eine TimeMinute dort ein zu bauen und vieles mehr aber am Ende wird immer nach einer datetime gefragt.

 

Was erschwerend jetzt noch hinzu kommt ist, dass nicht alle Tage um die selbe Uhrzeit schließen, sodass wenn ich auch mit der Variable datetime umgehen könnte, es unweigerlich zu Verschiebungen kommen würde. Wichtig ist mir dass die Order Kurz vor Close nach nicht Ausführung geschlossen wird.

 

OrderSend(Symbol(),OP_BUY,0.01,Ask,3,(Ask-0.01),(Ask+0.02),NULL,0,0,Green);

(ich hoffe ich habe das jetzt richtig gemacht)

 

Ich hoffe es kann mir jemand helfen.

 

 

Link to comment
Share on other sites

Was erschwerend jetzt noch hinzu kommt ist, dass nicht alle Tage um die selbe Uhrzeit schließen, sodass wenn ich auch mit der Variable datetime umgehen könnte, es unweigerlich zu Verschiebungen kommen würde. Wichtig ist mir dass die Order Kurz vor Close nach nicht Ausführung geschlossen wird.

 

Das ist wahrlich unschön und lässt sich IMHO nur über verschiedene Abfragen lösen. Eine Minute finde ich allerdings etwas knapp bemessen. Würde da eher auf 5 oder mehr gehen. Bei Deinem OrderSend Beispiel sendest Du übrigens keine Pending sondern eine Market Order ab. Die kann naturgemäß nicht verfallen, da sie sofort ausgeführt wird.

  • Upvote 2
Link to comment
Share on other sites

JUHUU sauber ich hab´s !!! idea.gifgoody.gif

 

Ich arbeite zwar immer mit StoppOrders aber das muss der EA ja nicht wissen ;) also habe ich aus aus dem OP_SELLSTOPP einfach ein OP_STOPP gemacht (oben habe ich versehentlich die falsche Formel hineinkopiert). Hier die "echte" also bereits verbesserte. (ich hatte wirklich ein OP_SELLSTOPP in der Ausgangsformel)

void Short()
{
OrderSend(Symbol(),OP_SELL,0.01,entry,3,sl,tp,NULL,0,0,Green);
// OrderSend(akt Symbol,Kaufen,Lot,entry,Abw3Punkte,sl,tp,Kommentartext,ID,Datum,Farbe
}

 

Wenn man also eine StoppOrder am Ende des Tages verfallen lassen möchte muss man nur die Bedingungen um einen Tag in die Vergangenheit versetzen und Market einsteigen. Nur was mache ich wenn wenn die möchtegern StoppOrder zwei Tage stehen bleiben soll???

 

Jetzt muss ich nur noch den Sonntag mit hilfe von 20000 if Funktionen eliminieren und alles ist gut :D

 

 

PS.:Warum schreibt der immer den Code zwei mal dahin obwohl ich den nur einmal einfüge? Und dann noch diese komischen <br>. Ach Gott wat ne. Dat han wa so nit jewollt.

Edited by chimbonda
Link to comment
Share on other sites

Wenn man also eine StoppOrder am Ende des Tages verfallen lassen möchte muss man nur die Bedingungen um einen Tag in die Vergangenheit versetzen und Market einsteigen. Nur was mache ich wenn wenn die möchtegern StoppOrder zwei Tage stehen bleiben soll???

 

Oder man sendet die Order einfach vernünftig ab :wink:.

Link to comment
Share on other sites

  • 3 weeks later...

Als erstes wünsche ich allen hier in der community schöne Ostertage. Ich persönlich versuche nicht zu viel zu futtern aber das ist heute (erster Familientag) schon mächtig in die Hose gegangen :D

 

Zweitens möchte ich mich dafür entschuldigen, dass ich meinem Versprechen meine Vortschritte hier zu posten nicht ganz nachgekommen bin. Das "Semester" hat zwischenzeitlich wieder angefangen und die Semestervorbereitungen haben mich voll eingespannt und in ca. drei Monaten stehen schon wieder Prüfungen an.

 

@ conglom-o: das war tatsächlich genau das wonauc ich gesucht habe. Vielen Dank nochmal.

 

Obwohl ich weiß, dass die meisten hier meine Problemchen belächeln mögen, gibt es vielleicht jemanden wie mich der gerade vor dem gleichen Problem Steht bzw. die selben Fargen hat. Deswegen jetzt das Update:

 

datetime et;

et = (TimeCurrent()+86400);

void Short()
{
OrderSend(Symbol(),OP_SELLSTOP,0.01,entry,3,sl,tp,NULL,0,et,Green);
// OrderSend(akt Symbol,Kaufen,Lot,entry,Abw3Punkte,sl,tp,Kommentartext,ID,Datum,Farbe

 

et steht für exporation time und ich habe es als globale Variable definiert. Die 86400 Sekunden sind die Sekunden pro Tag und et voilà die StopOrder wird nach einem Tag bei Nichtausführung gelöscht good2.gif Das hat fast auf Anhieb funktioniert. Nur wenn das Ziel am selben Tag/ Bar erreicht wird, wird beim take profit nochmal eine Order gesendet. Und manchmal wird eine Order gesendet die nicht im geringsten meinem Setup entsprechen. Ich definiere es mal als Schluckauf.

 

Das Setup folgt folgenden einfachen Regeln: Wenn a > b und a > c dann mach am nächsten Tag einen SellStopp, der nur einen Tag stehen bleibt.

 

Und der Schluckauf setzt hin und wieder absolut willkürlich und ohne Sinn eine Orde.

 

Ich vermute mal, dass es an der OrderSend Funktion liegt. Es steht immer folgende Warnug "return value of 'OrderSend' should be checked". Jetzt habe ich herausgefunden, dass wenn ich die OrderSend Funktion in einer if() Funktion Verwurste, dass diese Meldung nicht mehr kommt. Nur hatte diese if Funktion absolut keine Auswirkungen auf das o.g. Problem gehabt weswegen ich das wieder rückgängig gemacht habe. Ich hatte es auch schon mal mit einem return (0) versucht nur ist dann immer die Handelsplattform abgestürtzt. Return (0) hat der Kasten dann wahrscheinlich zu wörtlich genommen und absolut nichts mehr zurück gegeben grin.gif

 

Ich habe auch schon in diesem mql4 forum gesucht bin aber nicht fündig geworden. Wahrscheinlich verwende ich die falschen Suchbegriffe.

Edited by chimbonda
  • Upvote 2
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...