Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4
Startseite Registrieren Hilfe Community Kalender Heutige Beiträge Suchen

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4978
Beiträge: 43266
Benutzer: 7.224
Aktive Benutzer: 75
Links: 84
Wir begrüßen unseren neuesten Benutzer: Sundaytrader
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 4 Tagen
- Sundaytrad...
vor 4 Tagen
- TS_6
vor 6 Tagen
- Mane
vor 2 Wochen
- AlbertZiz
vor 2 Wochen
- michak

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

Empfehlungen

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

} } } }
  #32 (permalink)  
Alt 02.09.20
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
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.
  #33 (permalink)  
Alt 03.09.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
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.
Thema geschlossen

Lesezeichen

Stichworte
break-even, stop loss nachziehen


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 20:03 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.
-----------------------------------------------------------------------------------------------------------------------------