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: 4100
Beiträge: 38680
Benutzer: 6.388
Aktive Benutzer: 221
Links: 80
Wir begrüßen unseren neuesten Benutzer: fynnfx
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 18:12).
Neue Benutzer:
vor 2 Tagen
- fynnfx
vor 5 Tagen
- Oppus...
vor 5 Tagen
- justme177
vor 5 Tagen
- DanielF
vor einer Woche
- haschmat

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 72
Gesamt: 73
Team: 0
Team:  
Benutzer:  traderdoc
Freunde anzeigen

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor einer Woche
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 696
MA-EA befindet sich auf einem aufstrebenden Ast
Standard Pending Order Magic Number

Hallo,

ich experimentiere an einem MT4-EA, der nur jeweils eine Buy_Stop und eine Sell_Stop Order sendet. Wenn eine davon ausgeführt wurde, also der Broker OP_Buy/OP_Sell entsprechend geöffnet hat, sollen die Stop_Orders gelöscht werden.

Aber was ist mit den Magic Numbers? Die schick ich mit den Stop_Orders an der entsprechenden Stelle mit. Aber hat das so überhaupt nen Sinn? Ich meine, verpasst er der Markt-Order die MN, die mit der Stop_Order gesendet wurde oder wie ist das?

Code:
extern int Buy_Stop_MN=12;

extern int Buy_Market_MN=34;

extern int Sell_Stop_MN=56;

extern int Sell_Market_MN=78;
Code:
  if(Buy_Stop==true)OrderSend(Symbol(),OP_BUYSTOP,Lots,Buy_Stop_OOP,Slippage,Buy_Stop_SL,Buy_Stop_TP,Name + " Buy(#" + Buy_Stop_MN + ")",Buy_Stop_MN,0,MediumBlue);


   if(Sell_Stop==true)OrderSend(Symbol(),OP_SELLSTOP,Lots,Sel_Stop_OOP,Slippage,Sel_Stop_SL,Sel_Stop_TP,Name + " Sell(#" + Sell_Stop_MN + ")",Sell_Stop_MN,0,SteelBlue);}
Angehängte Dateien
Dateityp: mq4 Valerius_MT4_LoSh_OnlyStopOrd_EA.mq4 (31,8 KB, 1x aufgerufen)
Mit Zitat antworten
  #2 (permalink)  
Alt vor einer Woche
AVT AVT ist offline
Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 70
AVT befindet sich auf einem aufstrebenden Ast
Standard

Erstens (ich betrachte hier mal nur die Long Seite), eine BuyStopOrder ist (genau wie eine BuyLimitOrder) eine pending order, das heißt sie bleibt so lange nicht aktiv wie die Ask Linie den Preis nicht erreicht hat. Eine Marktorder ist eine, die sofort ausgeführt wird, das ist ein Unterschied und darf nicht verwechselt werden.

So ein Ding setzt Du manuell durch das Einfügen einer BuyStop Linie und im Code, indem Du bei OrderSend() OP_BUYSTOP nimmst. Dem kannst Du eine Deiner MagicNumbers mitgeben, bei Dir also die Buy_Stop_MN=12. (Hast Du ja in Deinem Beispiel schon gemacht.)
Diese MagicNumber ist nun fest mit Deiner Order verankert und Du kannst sie verwenden, wann immer Du nach genau dieser Order suchst (vorausgesetzt, Du verwendest diese Nummer nur ein einziges Mal - und nicht für etliche weitere BuyLimitOrders).

Willst Du also wissen, ob Deine pending Order mittlerweile aktiviert wurde (also eine laufende BuyOrder wurde, fragst Du das in einer Schleife über die laufenden Orders ab, Kurzform:
Code:
for(int i=OrdersTotal()-1; i>=0; i--) //SchleifeAlleOrders
{
  if( OrderSelect(i,SELECT_BY_POS,MODE_TRADES) ) //NurLaufendeOrders
  {
    if(   OrderSymbol()==_Symbol //UnserMarkt
       && OrderType()==OP_BUY //LaufenderLongTrade SollteÜberflüssigSein
       && OrderStopLoss()==Buy_Stop_SL //SollteÜberflüssigSein
       && OrderTakeProfit()==Buy_Stop_TP //SollteÜberflüssigSein
       && OrderMagicNumber()==Buy_Stop_MN ) //UnsereAlteBuyStop
    {
      Print( "pending Buy läuft auf Position "+IntegerToString(i) );
      ... hier könnte jetzt die Sell_Stop Order gelöscht werden
      ... hier könnten auch alle anderen laufenden Orders gestoppt werden
    }
  }
}
Wenn Du also z.B. eine Range hast und oben und unten jeweils eine pending Order zum Abholen setzt, und die obere wird abgeholt/aktiviert, dann kannst Du so die untere mit OrderDelete() wieder rausnehmen.

Mein Tradingpanel gibt z.B. allen Orders dieselbe MagicNumber; sollte ich in dem Markt einen Langläufer haben oder nebenbei auf die Idee kommen, noch mal ne StopBuy Marke zu setzen, die dann aktiviert wird, und ich drücke auf dem Panel den Trailingknopf, dann trailt er nur die Positionen, die ich mit dem Panel eröffnet habe - alle anderen läßt er in Ruhe (dafür ist die MagicNumber als Unterscheidung).

Ich hoffe, das war's was Du brauchst. AVT
__________________
heute schon gelacht?
Mit Zitat antworten
Antwort

Lesezeichen


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 00:13 Uhr.


Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2018 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.
-----------------------------------------------------------------------------------------------------------------------------