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: 3977
Beiträge: 37889
Benutzer: 6.279
Aktive Benutzer: 387
Links: 80
Wir begrüßen unseren neuesten Benutzer: sunap
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor einem Tag
- sunap
vor 2 Tagen
- IInvest84
vor 2 Tagen
- tbrbde
vor 3 Tagen
- Leofor
vor 3 Tagen
- therealroc...

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

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 12.03.18
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 152
piptrade befindet sich auf einem aufstrebenden Ast
Standard "CloseAllOrders" am SL einer 2. Position

Liebe Trader, liebe User-Gemeinde,
seit geraumer Zeit komme ich einfach nicht weiter und würde mich über Eure Unterstützung sehr freuen.

Das Problem:
Eine 1. Position wird eröffnet und mit einem Trailing_Stop ausgestattet. Hier funktioniert der nachfolgende Code:
Code:
     double TSL = Trail_SL *100 *Point;
   
//--- Trailing_SL for order type BUY --------------------------------+
   if (OrderType() == OP_BUY  &&  openOrders == 1)
      {
      if (Bid - OrderOpenPrice() > Trail_Target *100 * Point)          //  Trail_Target = Trailing begin
         {
         if (OrderStopLoss() < Bid - TSL  ||  OrderStopLoss() == 0)  
            {
            if (!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TSL, OrderTakeProfit(), Blue))
               Print("Error setting Buy trailing stop: ", GetLastError());
            }
         }
      }
Wird nun eine 2. Position zusätzlich eröffnet, sollen an dessen Trailing_Stop BEIDE Positionen glattgestellt werden. Also habe ich den Code der 1. Position übernommen und lediglich mit "CloseAllOrders" ergänzt:
Code:
    if (OrderType() == OP_BUY  &&  openOrders == 2)
      {
      if (Bid - OrderOpenPrice() > Trail_Target *100 * Point)
         {
         if (OrderStopLoss() == 0  ||  OrderStopLoss() < Bid - TSL)
            {
            if (!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TSL, OrderTakeProfit(), Blue))
                Print("Error setting Buy trailing stop: ", GetLastError());
           
                CloseAllOrders();
            }                        
         }
      }
Obwohl mir der o.a. Ansatz logisch erscheint, funktioniert der Code nicht, wie gewünscht. Ist "CloseAllOrders" falsch eingeordnet, muss ich zusätzliche Bedingungen schaffen?
Würde mich über Eure Hilfestellung sehr freuen.

LG. piptrade
Mit Zitat antworten
  #2 (permalink)  
Alt 12.03.18
AVT AVT ist offline
Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 58
AVT befindet sich auf einem aufstrebenden Ast
Standard

Das fällt mir auf die Schnelle dazu ein:
Zitat:
sollen an dessen Trailing_Stop BEIDE Positionen glattgestellt werden
An wessen Trailing_Stop? Von der 1. Position? der ändert sich doch mit jedem Pips und Paps, dazu müßtest Du einen Weg finden, die Position des TS auszulesen (dazu brauchst Du die Ticket Nummer, damit Du auch die richtige Position erwischt).
Irgendwie verstehe ich aber noch nicht ganz, wie Deine beiden Position laufen, etwa so: 1. Position eröffnet mit TS und läuft, 5 Min später 2. Position eröffnet mit TS und läuft hinterher - wenn 2. Position den TS der ersten einholt, alles zumachen?
Mit Zitat antworten
  #3 (permalink)  
Alt 13.03.18
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 152
piptrade befindet sich auf einem aufstrebenden Ast
Standard

Hallo AVT,
herzlichen Dank für Dein schnelles Statement. An Hand der Antworten merkt man erst einmal, was man ggf. falsch erläutert hat und wie präzise die deutsche Sprache ist.

Zitat:
sollen an dessen Trailing_Stop BEIDE Positionen glattgestellt werden
Hier war "dessen" natürlich falsch; - "deren" (der 2. Position nämlich) wäre hier richtig gewesen !

Unabhängig von allen strategischen Überlegungen und allen "Pips und Paps" (wäre zu umfangreich) hier nochmals eine kurze Erläuterung, was ich eigentlich will:
Es sind 2 Positionen geöffnet (die 1. Pos. ohne TP und ohne SL) und die 2. Position läuft in den TS. Genau an dieser Stelle sollen nun BEIDE Positionen geschlossen werden.
Der Code soll einfach nur BEIDE Positionen schließen, falls die 2. Position den TS erreicht. Deshalb der "Einbau" "CloseAllOrders" unter ---> if (openOrders() == 2).

LG. piptrade
Mit Zitat antworten
  #4 (permalink)  
Alt 13.03.18
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
next user befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von piptrade Beitrag anzeigen
Es sind 2 Positionen geöffnet (die 1. Pos. ohne TP und ohne SL)
Klang beim Anfangspost aber noch etwas anders:
Zitat:
Zitat von piptrade Beitrag anzeigen
Eine 1. Position wird eröffnet und mit einem Trailing_Stop ausgestattet.
Mal nebenbei, wenn die Bedingungen relativ gleich sind, so lieber immer zusammenfügen. Dein Code würde dann so aussehen:
Code:
if(OrderType() == OP_BUY)
{
   if(Bid - OrderOpenPrice() > Trail_Target *100 * Point)
   {
      if(OrderStopLoss() < Bid - TSL || OrderStopLoss() == 0)
      {
         if(!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TSL, OrderTakeProfit(), Blue))
            Print("Error setting Buy trailing stop: ", GetLastError());
            
         if(openOrders == 2)
            CloseAllOrders();
      }
   }
}
Wie sieht denn deine "CloseAllOrders()" aus? Das "funktioniert nicht wie gewünscht" kommt vielleicht daher, das du ERST
den TrailingStop der zweiten Order mit "OrderModify()" aktualisierst, direkt danach dann aber "CloseAllOrders()" aufrufst.
Mit Zitat antworten
  #5 (permalink)  
Alt 13.03.18
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 152
piptrade befindet sich auf einem aufstrebenden Ast
Standard

Hallo, next user,

der Zitate-Widerspruch resultiert daraus, dass ich alles etwas zu vereinfachen versuche, um am Kern des Problems ein Stückchen weiterzukommen.
Zum Zweiten: Das Zusammenfügen beider Code-Bestandteile bei gleichzeitiger Ergänzung der Ausnahme (if (openOrders == 2)) ist ein guter Hinweis. Werde ich so anwenden.
Und zum 3.: "CloseAllOrders()" sollte soweit richtig sein, da es an mehreren Stellen des EA angewendet wird und dort gut funktioniert. Was aber wichtig zu sein scheint ist die Tatsache, dass ich den Trail_SL mit "OrderModify()" aktualisiere, sofort danach aber "CloseAllOrders()" aufrufe. Damit kann ein Modify bestenfalls nur 1 x erfolgen.
Wäre dann die nachfolgende Code-Ergänzug möglich und sinnvoll ? ("CloseAllOrders()" soll ja erst dann stattfinden, wenn der modifitierte Trail_SL durchbrochen wird.)

Code:
 if(OrderStopLoss() < Bid - TSL || OrderStopLoss() == 0)
      {
         if(!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TSL, OrderTakeProfit(), Blue))
            Print("Error setting Buy trailing stop: ", GetLastError());
            
         if(openOrders == 2  &&  Bid == OrderStopLoss())  //  <==========
            CloseAllOrders();
      }
Vielleicht gibt es aber auch hier eine bessere Lösung ? Vorab schon einmal ein herzliches DANKESCHÖN und

LG. piptrade
Mit Zitat antworten
  #6 (permalink)  
Alt 13.03.18
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
next user befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von piptrade Beitrag anzeigen
"CloseAllOrders()" soll ja erst dann stattfinden, wenn der modifitierte Trail_SL durchbrochen wird.
Das geht ja aber schlecht, wenn du "CloseAllOrders()" im selben if aufrufst, der NUR DANN aufgerufen wird, wenn der Kurs entsprechend in die
andere Richtung läuft und ein Nachziehen des StopLoss nötig wird.
Mit Zitat antworten
  #7 (permalink)  
Alt 13.03.18
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 152
piptrade befindet sich auf einem aufstrebenden Ast
Standard

Hallo, next user,

richtig, der Trail_SL soll natürlich nachgezogen werden. Verläuft der Kurs dann aber in die entgegengesetzte Richtung, verbleibt der Trail_SL an seiner letzten Stelle, wo er u.U. gebrochen wird. Und erst dann soll CloseAllOrders() erfolgen.
Also müssen neue, separate if-Bedingungen geschaffen werden:

Code:
   {
      if(OrderStopLoss() < Bid - TSL || OrderStopLoss() == 0)
        {
         if(!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TSL, OrderTakeProfit(), Blue))
            Print("Error setting Buy trailing stop: ", GetLastError());
        {
      if(openOrders == 2  &&  OrderStopLoss != 0)
        {            
         if(Bid == OrderStopLoss()
            CloseAllOrders();
        }
      }
   }
So könnte der Trailing-Part ungestört laufen und erst, wenn unter einem separatem "if" "Bid == OrderStopLoss()" ist, erfolgt "CloseAllOrders()".
Kommen wir so der Lösung etwas näher ?

LG. piptrade
Mit Zitat antworten
  #8 (permalink)  
Alt 13.03.18
Premium Mitglied
 
Registriert seit: May 2015
Beiträge: 367
next user befindet sich auf einem aufstrebenden Ast
Standard

Ich würde Schwankungen immer im Code beachten, das heißt kein "==" sondern
Code:
if(Bid <= OrderStopLoss())
Mit Zitat antworten
  #9 (permalink)  
Alt 13.03.18
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 152
piptrade befindet sich auf einem aufstrebenden Ast
Standard

Ohhh, sorry,
ich hatte nicht kompelliert. So sollte es etwas richtiger sein !

Code:
 
       {
         if (OrderStopLoss() == 0  ||  OrderStopLoss() < Bid - TSL)  
            { 
            if (!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TSL, OrderTakeProfit(), Blue))
                Print("Error setting Buy trailing stop: ", GetLastError());
            }
         if (openOrders == 2  &&  OrderStopLoss() != 0)
            {            
            if (Bid == OrderStopLoss())
                CloseAllOrders();
            }
        }
In banger Hoffnung nochmals
LG. piptrade
Mit Zitat antworten
  #10 (permalink)  
Alt 13.03.18
Mitglied
 
Registriert seit: Sep 2012
Beiträge: 152
piptrade befindet sich auf einem aufstrebenden Ast
Standard

Das <= gefällt mit gut ! (hatte ich vorher auch schon `mal, - allerdings mit den anfänglich falschen if-Bedingungen)

Im Moment bin ich recht zuversichtlich, werde den Code jetzt testen.
Somit vorab recht herzlichen Dank; - ich melde mich noch einmal, wenn alles funktioniert (- oder auch, wenn nicht!)

LG. piptrade
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
trailingstop


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 23:22 Uhr.



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