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.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4973
Beiträge: 43253
Benutzer: 7.219
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: Hopfen&Malz
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107
vor 2 Wochen
- rg-trader

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 123
Gesamt: 123
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
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();
}
}


}
//+------------------------------------------------------------------+
  #2 (permalink)  
Alt 06.07.17
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
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?
  #3 (permalink)  
Alt 06.07.17
Premium Mitglied
 
Registriert seit: Jun 2016
Ort: Österreich
Beiträge: 362
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---
  #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.
  #5 (permalink)  
Alt 06.07.17
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
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.
  #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 ???
  #7 (permalink)  
Alt 06.07.17
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
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.
  #8 (permalink)  
Alt 06.07.17
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
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.
  #9 (permalink)  
Alt 07.07.17
Premium Mitglied
 
Registriert seit: Jun 2016
Ort: Österreich
Beiträge: 362
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.
  #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...
Thema geschlossen

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 +1. Es ist jetzt 09:25 Uhr.





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