|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Pending Order deleten
Hallo Zusammen,
bin seid ein paar Monaten mehr oder weniger erfolgreich meine kleinen EAs am programmieren und habe mal wieder ein Problem das ich nicht gelöst bekomme. Würde mich freuen, wenn mir jemand Hilfe leisten könnte. Folgendes: Ich platziere eine Stop Buy Order und möchte das Sie sofern sie in der nächsten Periodeneinheit nicht gefilled wird, sofort gelöscht wird. Das sieht als Idee so aus...ABER es wird nicht gelöscht! Wo ist mein Fehler, bzw. vielleicht gibt es ja auch schon eine CodeZeile in MQL? Danke... Aktuell habe ich den EA zum testen auf 1min laufen...es geht mir nur um die Streichung der Pending order... //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //pending Orders streichen orderCheck = OrderSelect(0,SELECT_BY_POS,0); OrderNumber = OrderTicket(); if (TimeCurrent()+60>BarsSinceEntry){ orderCheck = OrderDelete(OrderNumber,Blue); } if(OrdersTotal()<2){ if (i<1){ OrderNumber = OrderSend(Symbol(), OP_BUYSTOP,0.1,High[1]+10, 5,Low[1]-10, 0,"Test",202,TimeCurrent()+660,Blue); Print(GetLastError()); i++; BarsSinceEntry=TimeCurrent(); } } } //+------------------------------------------------------------------+ |
|
|||
Benutze beim nächsten mal bitte die Code-Tags, ist einfach übersichtlicher.
Was sagt denn GetLastError() an entsprechender Stelle? |
|
|||
Hallo,
manches ist mir noch nicht ganz klar: orderCheck = OrderSelect(0,SELECT_BY_POS,0); ist es absicht, dass du immer Position 0 selectieren willst? Ich weis auch nicht ob die "0" am ende richtig ist. Ich verwende immer MODE_TRADES. ich würde das ganze so schreiben: if (TimeCurrent()>BarsSinceEntry+PeriodSeconds(PERIOD _CURRENT)) { orderCheck = OrderSelect(0,SELECT_BY_POS,MODE_TRADES); if (orderCheck == True) } OrderNumber = OrderTicket(); orderCheck = OrderDelete(OrderNumber,Blue); } } ---Leopold--- |
|
|||
danke für die fixe Antwort Leopold.
orderCheck = OrderSelect(0,SELECT_BY_POS,MODE_TRADES); Die 0 => Position 0? Er soll eben die erste Pending Order löschen. |
|
|||
Soweit ich weiss ist MODE_TRADES == 0, aber ich finde es so auch etwas besser.
Oder den dritten Parameter einfach weglassen. Ist ja die Standardeinstellung. PeriodSeconds ist sinnvoll, sofern er nicht nur eine bestimmte Zeiteinheit nutzt. Wie schon gesagt, schau mal was GetLastError() ausspuckt. |
|
|||
das spuckt er mir aus....???
2017.07.06 17:09:24.090 TEST .US30Cash,M1: 4108 2017.07.06 17:09:24.090 TEST .US30Cash,M1: market order #24114630 cannot be deleted Market Order??? Ich platziere ja einen OP_BUYSTOP...was soll das denn? und jetzt bei dem durchlauf: 2017.07.06 17:30:06.710 TEST .US30Cash,M1: open #24115773 buy stop 0.10 .US30Cash at 21404.00 sl: 21335.00 ok 2017.07.06 17:31:07.885 TEST .US30Cash,M1: 0 2017.07.06 17:31:07.886 TEST .US30Cash,M1: invalid ticket for OrderDelete function 2017.07.06 17:31:07.886 TEST .US30Cash,M1: 4051 ??? help me ??? |
|
|||
Zitat:
4051 = Invalid function parameter value Teste mal deine Ticket-Variable. Da kann was nicht stimmen. Schau mal, ob OrderSelect() einen Fehler verursacht. |
|
|||
Nimm mal den Code, der funktioniert bestimmt:
Code:
if (BarsSinceEntry > 0 && TimeCurrent() > BarsSinceEntry + PeriodSeconds(PERIOD_CURRENT)) { for (int i = OrdersTotal()-1; i >= 0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if (OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP) { bool res = OrderDelete(OrderTicket()); if (res) BarsSinceEntry = 0; break; } } } } } Die ist zwar nicht zwingend notwendig, sollte man sich aber angewöhnen, um die Eineindeutigkeit der Orderselektion zu gewährleisten. Damit könnten nun auch mehrere Charts desgleichen Währungspaares offen sein, wenn z.B. in verschiedenen TimeFrames gearbeitet werden soll und zu jedem TF eine andere MagicNumber vergeben wird. Das wäre zwar für den Tester zunächst irrelevant, aber der EA soll ja mal mindestens im Demo-Account laufen. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Genau, so ist es besser.
Man muss natürlich überprüfen ob Orders vorhanden sind und ob OrderType der richtige ist. |
Lesezeichen |
Stichworte |
mql4, pending order, pending order löschen, programmierung, programmierung metatrader, programmierung mql4 |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|