Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.


Portalsuche


Werbung

Login
Benutzername:
Kennwort:


Statistik
Themen: 3774
Beiträge: 37294
Benutzer: 5.958
Aktive Benutzer: 505
Links: 80
Wir begrüßen unseren neuesten Benutzer: Alf0809
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 22 Stunden
- Alf0809
vor einem Tag
- jimydirekt...
vor einem Tag
- Geri78
vor 2 Tagen
- Phil7
vor 2 Tagen
- daijiro051...

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 43
Gesamt: 44
Team: 0
Team:  
Benutzer:  fxnoob
Freunde anzeigen

Empfehlungen

Werbung

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 06.07.17
Neues Mitglied
 
Registriert seit: Jul 2017
Beiträge: 10
McMenneman befindet sich auf einem aufstrebenden Ast
Standard 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();
}
}


}
//+------------------------------------------------------------------+
Mit Zitat antworten
  #2 (permalink)  
Alt 06.07.17
Mitglied
 
Registriert seit: May 2015
Beiträge: 250
next user befindet sich auf einem aufstrebenden Ast
Standard

Benutze beim nächsten mal bitte die Code-Tags, ist einfach übersichtlicher.
Was sagt denn GetLastError() an entsprechender Stelle?
Mit Zitat antworten
  #3 (permalink)  
Alt 06.07.17
Mitglied
 
Registriert seit: Jun 2016
Ort: Österreich
Beiträge: 117
Leopold befindet sich auf einem aufstrebenden Ast
Standard

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---
Mit Zitat antworten
  #4 (permalink)  
Alt 06.07.17
Neues Mitglied
 
Registriert seit: Jul 2017
Beiträge: 10
McMenneman befindet sich auf einem aufstrebenden Ast
Standard

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.
Mit Zitat antworten
  #5 (permalink)  
Alt 06.07.17
Mitglied
 
Registriert seit: May 2015
Beiträge: 250
next user befindet sich auf einem aufstrebenden Ast
Standard

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.
Mit Zitat antworten
  #6 (permalink)  
Alt 06.07.17
Neues Mitglied
 
Registriert seit: Jul 2017
Beiträge: 10
McMenneman befindet sich auf einem aufstrebenden Ast
Standard

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 ???
Mit Zitat antworten
  #7 (permalink)  
Alt 06.07.17
Mitglied
 
Registriert seit: May 2015
Beiträge: 250
next user befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von McMenneman Beitrag anzeigen
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

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 ???
4108 = Invalid Ticket
4051 = Invalid function parameter value

Teste mal deine Ticket-Variable. Da kann was nicht stimmen.
Schau mal, ob OrderSelect() einen Fehler verursacht.
Mit Zitat antworten
  #8 (permalink)  
Alt 06.07.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 1.848
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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;
            }
         }
      }
   }
}
Das setzt allerdings voraus, dass die Orders beim Senden mit einer MagicNumber versehen werden.
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.
Mit Zitat antworten
  #9 (permalink)  
Alt 07.07.17
Mitglied
 
Registriert seit: Jun 2016
Ort: Österreich
Beiträge: 117
Leopold befindet sich auf einem aufstrebenden Ast
Standard

Genau, so ist es besser.

Man muss natürlich überprüfen ob Orders vorhanden sind und ob OrderType der richtige ist.
Mit Zitat antworten
  #10 (permalink)  
Alt 10.07.17
Neues Mitglied
 
Registriert seit: Jul 2017
Beiträge: 10
McMenneman befindet sich auf einem aufstrebenden Ast
Smile

Klasse! TarderDoc, das hat geholfen!

Vielen Dank auch den anderen...
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
mql4, pending order, pending order löschen, programmierung, programmierung metatrader, programmierung mql4


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +2. Es ist jetzt 08:46 Uhr.



-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2017 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2017 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------