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: 43248
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: 265
Gesamt: 265
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 05.12.18
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
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)
  #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
Thema geschlossen

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 +1. Es ist jetzt 12:24 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.
-----------------------------------------------------------------------------------------------------------------------------