Einzelnen Beitrag anzeigen
  #2 (permalink)  
Alt 05.12.18
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
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