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: 43267
Benutzer: 7.220
Aktive Benutzer: 82
Links: 84
Wir begrüßen unseren neuesten Benutzer: JosephTK
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 2 Stunden
- JosephTK
vor 2 Tagen
- Hopfen&Mal...
vor 2 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107

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

Empfehlungen

Like Tree3Likes
Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 05.01.12
Mitglied
 
Registriert seit: Oct 2011
Beiträge: 77
Biatsch befindet sich auf einem aufstrebenden Ast
Standard StopLoss auf Break Even nachziehen

Kann mir jemand in Code-Form aufschreiben, wie ich den StopLoss einer bestehenden Order auf Break Even ziehe, sobald ich 20 Pips im Plus bin und die Order anschließend mit einem TrailingStop versehe ?
  #2 (permalink)  
Alt 05.01.12
Benutzerbild von Seroleashed
Elite Mitglied
 
Registriert seit: Jan 2012
Ort: Berlin
Beiträge: 169
Seroleashed befindet sich auf einem aufstrebenden Ast
Standard

Joa das wäre cool!!

Aber nur So nebenbei: Breakeven bedeutet, dass man gerade an die Stelle kommt, an der man keinen Verlust mehr macht (aber auch noch keinen Gewinn). Man geht also +-0 aus dem Trade (bzw setzt den Stoploss so, dass man +-0 ausgehen würde). Der Breakeven wäre meiner Meinung nach also nicht der Einstiegskurs sondern wenn überhaupt der Einstiegskurs Plus Spread... als sicherheitsfanatiker oder "ganz genauer" könnte man auch noch Plus ein paar Pips als Ausgleich für die Evtl anfallende Kommission dazu rechnen;-p
Nur fürs allgemeine Verständnis, damit keine Missverstände auftreten!!
  #3 (permalink)  
Alt 05.01.12
Elite Mitglied
 
Registriert seit: Jun 2010
Ort: Trier
Beiträge: 116
naranjoe befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

das ist kein Problem.

Code:
 
void UpdateBE()
{
 if(UpdateToBE <= 0) return;

 for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
       if(OrderType() == OP_BUY && OrderOpenPrice() > OrderStopLoss() && Bid - OrderOpenPrice() >= UpdateToBE * Point)
  	 {
  	  OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
  	 }
  		 
  	if(OrderType() == OP_SELL && OrderOpenPrice() < OrderStopLoss() && OrderOpenPrice() - Ask >= UpdateToBE * Point)
  	 {
  	  OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
  	 }
      }
    }
}
Definiere UpdateToBE als externe Variable und setzte sie z.B. auf 20 Pips (bei 0 wird kein Update to BE ausgeführt).
Das void UpdateBE() rufst du aus der void Start() auf (also bei jedem Tick).
Fertig!
Spread wird berücksichtigt.
Läuft die Order nach dem Break Even Update ins SL wird sie exakt mit 0 geschlossen.

Gruß
naranjoe
  #4 (permalink)  
Alt 05.01.12
Mitglied
 
Registriert seit: Oct 2011
Beiträge: 77
Biatsch befindet sich auf einem aufstrebenden Ast
Standard

Danke dir für den Code.
Und wie füge ich nun einen TrailingStop zu eben dieser Order hinzu ?
  #5 (permalink)  
Alt 05.01.12
Benutzerbild von Seroleashed
Elite Mitglied
 
Registriert seit: Jan 2012
Ort: Berlin
Beiträge: 169
Seroleashed befindet sich auf einem aufstrebenden Ast
Standard

Wenn ich den Code richtig verstehe, IST das der Training Stopp.
Bei jedem Tick, also jeder Kursänderung wird überprüft, ob der Kurs gestiegen ist. Wenn er gestiegen sein sollte wird der aktuelle StopLoss gelöscht und ein neuer mit dem vorgegebenen Abstand wird erstellt.
Nichts anderes ist ein TrailingStop vom Broker;-p
__________________
das "mql-leicht-gemacht.de.vu"-Programm ist fürs erste aus Zeitgründen erstmal "auf's Eis gelegt"...

Sobald es wieder online ist, meld ich mich

Mein REAL Konto mit WSFR und MegaDroid bei FxPro
  #6 (permalink)  
Alt 05.01.12
Elite Mitglied
 
Registriert seit: Jun 2010
Ort: Trier
Beiträge: 116
naranjoe befindet sich auf einem aufstrebenden Ast
Standard

Diese Funktion beinhaltet keinen Trailing Stop.
Es funktioniert so:
Wenn deine Order einen bestimmten Wert (UpdateToBE) im Plus ist, dann wird der Stop Loss auf den Eröffnungspreis der Order gesetzt. Läuft jetzt der Kurs zurück und der Stop Loss wird erreicht, (welcher ja jetzt mit dem Eröffnungspreis übereinstimmt) wird die Order genau bei 0 geschlossen.

Code für den Trailling Stop folgt.

Gruß
naranjoe
  #7 (permalink)  
Alt 05.01.12
Elite Mitglied
 
Registriert seit: Jun 2010
Ort: Trier
Beiträge: 116
naranjoe befindet sich auf einem aufstrebenden Ast
Standard Trailing Stop

Eröffne deine Order mit TrailingStop Pips als Stop Loss (also z.B. 20).
Das SL wird dann immer mit dem Abstand von 20 Pips der Order nachgezogen oder halt eben ausgelöst (wenn der Kurs dreht). Dafür solltest du auch ein Take Profit wählen das etwas größer ist z.B. 50.
Aufruf von void UpdateTS erfolgt wie beim void UpdateBE.

Code:
void UpdateTS()
{
  for(int i = OrdersTotal() - 1; i >= 0; i--)
	{
	 if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
  	   {
  	    if(OrderType() == OP_BUY && NormalizeDouble(Bid - OrderStopLoss(), Digits) > NormalizeDouble(TrailingStop * Point, Digits))
  	      {
  	       OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TrailingStop * Point, OrderTakeProfit(), 0);
  	       }
  	     if(OrderType() == OP_SELL && NormalizeDouble(OrderStopLoss() - Ask, Digits) > NormalizeDouble(TrailingStop * Point, Digits))
  		{
  		 OrderModify(OrderTicket(), OrderOpenPrice(), Ask + TrailingStop * Point, OrderTakeProfit(), 0);
  		 }
  	     }
	 }
}
Das hier stellt nur ein Grundgerüst dar, um die Funktionsweise zu erläutern. Du solltest den Code aber noch erweitern. z.B.müsste der EA auch feststellen ob die ausgewählte Order auch die Richtige ist, Stichwort Symbol() oder MagicNumber.
Aber das überlasse ich mal dir

Gruß
naranjoe
  #8 (permalink)  
Alt 20.01.12
Mitglied
 
Registriert seit: Oct 2011
Beiträge: 77
Biatsch befindet sich auf einem aufstrebenden Ast
Standard

Und wie weise ich diese 2 Funktionen einer bestimmten Order zu ?
Sorry, aber ich bin halt noch Anfänger.

Ich habe gerade erst das visuelle Backtesting ausprobiert und festgestellt, dass die BreakEven-Funktion nichts tut.

Zur Info:
Ich habe die genannte Funktion innerhalb der Start-Funktion eingefügt aber ohne die letzte und die ersten 3 Zeilen, also folgendermaßen:

HTML-Code:
 for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
       if(OrderType() == OP_BUY && OrderOpenPrice() > OrderStopLoss() && Bid - OrderOpenPrice() >= UpdateToBE * Point)
  	 {
  	  OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
  	 }
  		 
  	if(OrderType() == OP_SELL && OrderOpenPrice() < OrderStopLoss() && OrderOpenPrice() - Ask >= UpdateToBE * Point)
  	 {
  	  OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
  	 }
      }
    }
Wo liegt mein Denkfehler ?
  #9 (permalink)  
Alt 20.01.12
Elite Mitglied
 
Registriert seit: Jun 2010
Ort: Trier
Beiträge: 116
naranjoe befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Und wie weise ich diese 2 Funktionen einer bestimmten Order zu ?
Gar nicht, die Funktionen finden die Order selbst wenn die Bedingungen zutreffen.
Häng doch mal deinen kompletten Code hier dran, dann lässt sich der Fehler
ganz leicht herausfinden und erklären.

Gruß
naranjoe
  #10 (permalink)  
Alt 20.01.12
Mitglied
 
Registriert seit: Oct 2011
Beiträge: 77
Biatsch befindet sich auf einem aufstrebenden Ast
Standard

HTML-Code:
extern double dLots=0.1;
extern int iStopLoss=6500;
extern int iTakeProfit=500;
extern int iSlippage=30;
extern int iMaxTrades=1;
extern int iMagicNumber=11111;
extern int UpdateToBE=30;


int iTradeSignal=0;
int iOpenBuySignal=10;
int iCloseBuySignal=-10;
int iOpenSellSignal=20;
int iCloseSellSignal=-20;
int iNoSignal=-1;

int iTotalTrades;
int iOrderOpenStatus;
int iErrorNumber;

string strErrorMessage;

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {

   double MAshort1 = iMA(NULL,15,20,0,MODE_EMA, PRICE_CLOSE,1);
   double MAshort0 = iMA(NULL,15,20,0,MODE_EMA, PRICE_CLOSE,0);
   double MAmiddle = iMA(NULL,60,20,0,MODE_EMA, PRICE_CLOSE,0);
   double MAlong   = iMA(NULL,240,20,0,MODE_EMA, PRICE_CLOSE,0);
   double Close1   = iClose(NULL,0,1);
   double Close2   = iClose(NULL,0,2);
   double Close3   = iClose(NULL,0,3);
   double SAR0     = iSAR(NULL,15,0.02,0.2,0);     // Unbenutzt
   double SAR1     = iSAR(NULL,15,0.02,0.2,1);
   double SAR2     = iSAR(NULL,15,0.02,0.2,2);
   double SAR3     = iSAR(NULL,15,0.02,0.2,3);
   
//-------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------BUY_LOGIK-------------------------------------------------------------------------------
if((Ask<MAlong) && (Ask<MAmiddle) && (Ask>MAshort0) && (Close1<MAshort1)){
   if((Close3>SAR3) && (Close2>SAR2) && (Close1>SAR1))
      iTradeSignal = iOpenBuySignal;
   }
   
//-------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------SELL_LOGIK------------------------------------------------------------------------------
if((Bid>MAlong) && (Bid>MAmiddle) && (Bid<MAshort0) && (Close1>MAshort1)){
   if((Close3<SAR3) && (Close2<SAR2) && (Close1<SAR1))
      iTradeSignal = iOpenSellSignal;
}

//--------------------------------------------------------------------------------------------------------------------------------
//----------------------------------MONEY_MANAGEMENT------------------------------------------------------------------------------
for(int i = OrdersTotal(); i >= 1; i--)
{
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
       if(OrderType() == OP_BUY && OrderOpenPrice() > OrderStopLoss() && Bid - OrderOpenPrice() >= UpdateToBE * Point)
  	    {
  	       OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
  	    }
  		 
       if(OrderType() == OP_SELL && OrderOpenPrice() < OrderStopLoss() && OrderOpenPrice() - Ask >= UpdateToBE * Point)
  	    {
  	       OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
  	    }
    }
}
//--------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------BUY_ORDER--------------------------------------------------------------------------
iTotalTrades=OrdersTotal();

if ((iTradeSignal == iOpenBuySignal) && (iTotalTrades < iMaxTrades))

{ 
double dBuyStopLoss=Ask-(iStopLoss*Point);
double dBuyTakeProfit=Ask+(iTakeProfit*Point);


iOrderOpenStatus=OrderSend (Symbol(), OP_BUY,dLots, Ask, iSlippage, dBuyStopLoss, dBuyTakeProfit, "EA",iMagicNumber,0,Green);
   if (iOrderOpenStatus<0)
      {
      iErrorNumber=GetLastError();
      Print ("Order fehlgeschlagen!: ", iErrorNumber);
      return;
      }
}
//--------------------------------------------------------------------------------------------------------------------------------
//----------------------------------------------SELL_ORDER------------------------------------------------------------------------

iTotalTrades=OrdersTotal();

if ((iTradeSignal == iOpenSellSignal) && (iTotalTrades < iMaxTrades))

   {
   double dSellStopLoss=Bid+(iStopLoss*Point);
   double dSellTakeProfit=Bid-(iTakeProfit*Point);
 
   
iOrderOpenStatus=OrderSend (Symbol(), OP_SELL,dLots, Bid, iSlippage, dSellStopLoss, dSellTakeProfit, "EA",iMagicNumber,0,Red);
   if (iOrderOpenStatus<0)
      {
      iErrorNumber=GetLastError();
      Print ("Order fehlgeschlagen!: ", iErrorNumber);
      return;
      }
}


   return(0);
  }
//+------------------------------------------------------------------+
Thema geschlossen

Lesezeichen

Stichworte
breakeven, mql4, programmierung, sl, stoploss, 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 +1. Es ist jetzt 00: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.
-----------------------------------------------------------------------------------------------------------------------------