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: 4536
Beiträge: 41153
Benutzer: 6.932
Aktive Benutzer: 232
Links: 80
Wir begrüßen unseren neuesten Benutzer: traderotor
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor einem Tag
- traderotor
vor 3 Tagen
- Brummi
vor 4 Tagen
- Fussellien...
vor 5 Tagen
- ZHannes82
vor 5 Tagen
- LigthofGod

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

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #31 (permalink)  
Alt vor 3 Wochen
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.010
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

@ Michael: Dann mach halt je nach Buy oder Sell nen Trailing Stop, der für alle Orders genutzt wird.


SL / TP / OrderOpenPrice() aus ner offenen Order auszulesen sollte ja eigentlich möglich sein. Auch wenn der SL natürlich immer wieder nach gezogen wird, kann man immer noch
Code:
OrderOpenPrice() +||- (Je nach Richtung halt) OrderStopLoss()
rechnen.
Code:
input bool Trailing_Stop=false;
 extern int Trailing_Stop_Step=35;.
Prüfung der MagicNumber rauslassen, dann müsste für alle Buy / Sell-Orders, die offen sind, der SL nach gezogen werden.

Code:
if(Trailing_Stop==true){
 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////

  for(int j=OrdersTotal()-1;j>=0;j--){
    if(OrderSelect(j,SELECT_BY_POS)){
      if(OrderSymbol()==Symbol()){

//////////////////////////////////////////////////////////////////////////////////////////////////////////////


// Neuer SELL-"SL" (S_TS) Funktionen/Berechnungen
        if(OrderMagicNumber()==MN_Sel){


//        gesendeter SELL_SL - Öffnungskurs, um double-Wert zu ermitteln, der zum BID dazu gerechnet wurde:
          double OSLS_OOPS = OrderStopLoss() - OrderOpenPrice();


//        Bid + SELL-SL double-Wert = neuer SELL-"SL", der bei OrderModify gesendet werden soll
          double TS_Sel = Bid + OSLS_OOPS;


          double TSS_TSS=NormalizeDouble( TS_Sel + Trailing_Stop_Step *_Point,_Digits);
        

          if(OrderStopLoss() > TSS_TSS){
            if(IsTradeAllowed()==true)OrderModify(OrderTicket(),OrderOpenPrice(),TS_Sel,OrderTakeProfit(),NULL,Blue);
            if(IsTradeContextBusy()==true)Sleep(Sl_MS);}}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////


        if(OrderMagicNumber()==MN_Buy){


//        BUY-Öffnungskurs - gesendeten BUY-SL, um Wert zu ermitteln, der vom Ask abgezogen wurde:
          double OOPB_OSLB = OrderOpenPrice() - OrderStopLoss();


//        Ask - BUY_SL double-Wert = neuer BUY-"SL", der bei OrderModify gesendet werden soll:
          double TS_Buy = Ask - OOPB_OSLB;


//        neuer BUY_"SL" - Trailing_Stop_Step.
//        Damit soll geprüft werden, ob BUY_"SL" (B_TS) nach gezogen werden muss.
          double TSB_TSS = NormalizeDouble( TS_Buy - Trailing_Stop_Step *_Point,_Digits);


//        Wenn aktueller BUY_SL kleiner als
//        neuer BUY_SL - TSS ist, soll neuer BUY_"SL" (BUY_TS) gesendet werden:
          if( OrderStopLoss() < TSB_TSS ){
            if(IsTradeAllowed()==true)OrderModify(OrderTicket(),OrderOpenPrice(),TS_Buy,OrderTakeProfit(),NULL,Blue);
            if(IsTradeContextBusy()==true)Sleep(Sl_MS);}}

} } } }
Mit Zitat antworten
  #32 (permalink)  
Alt vor 3 Wochen
AVT AVT ist offline
Premium Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 434
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Michael_ Beitrag anzeigen
  1. Wenn ein LONG-Signal gegeben ist, dann werden 2 Long-Orders aufgegeben.
  2. Sagen wir mal, der Kurs pendelt und es ergibt sich später nochmal ein LONG-Signal, es werden wieder 2 Long-Orders eröffnet. Dann sind derzeit 4 Orders offen.
  3. Angenommen, der Kurs steigt und aufgrund dessen soll mit einem Trailing Stop nachgezogen werden. Nachdem aber beim 1. LONG-Signal ein anderer Eröffnungspreis UND SL gesetzt wurde als beim 2. LONG-Signal, ist der Trailing Stop bei den ersten beiden Orders anders als bei den zweiten zwei Orders.
  4. Ich berechne den Trailing Stop daher mit dem ursprünglich gesetzten SL der Order. Wenn aber schon nachgezogen wurde, dann passt meine Berechnung nicht mehr.
0. EAname ist ein string, der eindeutig beschreibt, auf was sich dieser EA bezieht (darf nicht mit einer Zahl beginnen), also z.B.
EAname="EA"+IntegerToString(MagicNummer)+_Symbol;
Das ergibt dann sowas wie EA1234EURUSD

1. wenn LongOder1 erfolgreich abgesetzt wurde
a. GlobalVariableSet(EAname+"-Long1Ticket",TicketNummer);
b. GlobalVariableSet(EAname+"-Long1SL",ursprünglicherLongOrder1SLwert);
Dasselbe für LongOrder2, 3 und 4.
Dasselbe wenn ShortOrders rausgehen.

2. Beim Trailen prüfen, ob das noch dieselbe TicketNummer ist
a. wenn OrderTicket()==(int)GlobalVariableGet(EAname+"-Long1Ticket")
b. dann ursprünglichen SL holen SL=GlobalVariableGet(EAname+"-Long1SL")
c. mit dem geholten SL den Trailwert ermitteln und trailen

Wenn Du keine Teilverkäufe machst, mußt Du nur überwachen, ob die LongOrder1 geschlossen wurde (dann findest Du die TicketNummer in der HISTORY), dann kannst Du die beiden Globalvariaben zu dieser LongOrder löschen.
Außerdem mußt Du die HISTORY überwachen, um zu sehen, ob die Orders in den TP oder SL gelaufen sind (dann enthält der OrderComment() zusätzlich [sl] oder [tp]) - auch dann können die Globalvariablen entfernt werden.
Wenn Du den EA am Tagesende schließt, alle Orders schließen - wenn geschlossen, die Globalvariablen zu dieser Order löschen.

Das wäre der Weg. AVT
p.s. Bei Teilverkäufen ist das noch mal ein bißchen mehr zu rechnen.
Mit Zitat antworten
  #33 (permalink)  
Alt vor 3 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.415
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Das unter 2a. geht eigentlich nur, wenn nur eine Order existent ist, denn bei mehreren kann hier schlecht ein Index laufen, um den Inhalt der GV mit OrderTicket() zu vergleichen.

D.h. der initiale SL muss wie folgt gespeichert werden:

GlobalVariableSet(EAname+"_"+(string)TicketNummer, Initialer_SL);

dann werden über

GlobalVariablesTotal() alle GVs bzgl. des Namens der GV gescannt und darin über StringFind() die Ticketnummer gesucht und bei Vorhandensein der initiale SL ausgelesen.

Sollten doch Teilschließungen vorhanden sein, dann müsste die Ticketnummer der verbleibenden Order nach der Teilschließung gegen die Ticketnummer in der GV der vor der Teilschließung existierenden GV "ausgetauscht" werden.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
break-even, stop loss nachziehen

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 15:17 Uhr.





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