Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Pending Order Magic Number (http://www.expert-advisor.com/forum/showthread.php?t=6275)

MA-EA 05.12.18 11:16

Pending Order Magic Number
 
Liste der Anhänge anzeigen (Anzahl: 1)
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? :confused:

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);}


AVT 05.12.18 20:39

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


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:14 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum