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: 4311
Beiträge: 39780
Benutzer: 6.636
Aktive Benutzer: 203
Links: 80
Wir begrüßen unseren neuesten Benutzer: merlinlorenz
Mit 1.311 Benutzern waren die meisten Benutzer gleichzeitig online (16.09.19 um 01:18).
Neue Benutzer:
vor 23 Stunden
- merlinlore...
vor 2 Tagen
- rafaelp
vor 2 Tagen
- albula
vor 2 Tagen
- rudolfschw...
vor 3 Tagen
- chucksman

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

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 25.05.19
AVT AVT ist offline
Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 230
AVT befindet sich auf einem aufstrebenden Ast
Standard Trailingstop herabsetzen

Ich bin mir nicht ganz im Klaren, wie ich am besten einen Trailingstop decrementor einbaue.
Beispiel: Eine Long Order läuft, der erste Trailingabstand ist 1000.
Aufgabe: Geht der Kurs weiter hoch, soll der Trailingabstand vermindert werden von 1000 auf 800 usw.

Code bisher:
Code:
// === user input
extern int DefaultTS = 1000; // default Trailing Stop (2000)
extern int DecreasTs =  200; // Trailing Stop descrease (200)
// === internal global
int LastTS = DefalutTS;      // initial Decreased value

// === die Trailing Funktion
   double ordprofit=0; // orders profit size to begin trailing
   double rq_price=0;  // required price for stop loss setting (Bid or Ask)
   double rq_trail=0;  // distance of trailing stop to price
   
   rq_trail=NormalizeDouble(LastTS*_Point,_Digits);          //Normalize

   // === innerhalb der OrderSelect()
   ordprofit=2*( OrderCommission()+OrderSwap() );            //CoverCostsCash

   // ======= Buy Orders =======
   if(Type==OP_BUY && OrderType()==OP_BUY)                   //Type wird der Funktion übergeben
   {
      // ===>while
      rq_price=MarketInfo(_Symbol,MODE_BID);                 //required price            
      if(   OrderProfit()>ordprofit                          //ProfitCoversCosts
         && OrderStopLoss()<rq_price-rq_trail )              //SLBelow Bid-TrailDist
      {
         if(OrderModify(OrderTicket(),OrderOpenPrice(),
                        rq_price-rq_trail,                   //ChangeSL:Bid-TSdist
                        OrderTakeProfit(),0,ColArrowShort) )
            if(LastTS>DecreaseTS) LastTS=LastTS-DecreasTs;   //NewValueUntilMinimum
         else
            Sleep(ErrorInterval);                            //FailWait
		// <=== end while
      } //ProfitCoversCosts
   } //BuyOrder
Frage: Gibt es eine Möglichkeit (ist das überhaupt sinnvoll ), die Trailing Funktion erst dann zu verlassen, wenn wir mit dem Vermindern fertig sind?
Ich denke da an so etwas wie while(LastTS>DecreaseTS) ...
Wäre nett, wenn Ihr dazu etwas anzumerken hättet. Danke. AVT
  #2 (permalink)  
Alt 26.05.19
Mitglied
 
Registriert seit: Mar 2019
Beiträge: 34
MIMO befindet sich auf einem aufstrebenden Ast
Standard

Distanz zwischen aktuellen Preis und Eröffnungspreis berechnen?
Entweder via OrderSelect oder den Preis von einem Array auslesen.
Wobei ich nicht ganz verstehe ist das nun ein TrailingStop oder TrailingProfit?

Mimo
  #3 (permalink)  
Alt 31.05.19
AVT AVT ist offline
Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 230
AVT befindet sich auf einem aufstrebenden Ast
Arrow wie komme ich aus der Funktion raus

Ich habe das einigermaßen so hinbekommen, daß es schon mal funktioniert, ABER
jetzt brauche ich Hilfe, um aus dieser Funktion bei Bedarf rauszukommen.
Egal was ich versuche, einmal drin gibt es kein Entkommen mehr (außer SL ausgelöst; das ist zwar eigentlich Sinn und Zweck der Sache, aber wenn der Spike nicht sofort abgeht, ist es besser auszusteigen).
Es geht hier um einen Booster, der den SL verdammt schnell nachzieht, zu benutzen bei Spikes (wenn man schnell genug ist).
Der Aufbau vereinfacht am Beispiel Long:
1. 2 Buttons: 1x für LongBoost und 1x für Close
2. Beim LongBoost-Button wird die Variable BoostLongEnabled=true gesetzt und die BoostLong() aufgerufen
3. Beim Close-Button wird die Variable BoostLongEnabled=false gesetzt und die Close() Funktion aufgerufen
Das Problem dabei ist wie oben gesagt, daß ein BoostLongEnabled=false die BoostLong() Funktion nicht abbricht.
Code:
void BoostLong()
{
   double ordprofit=0;    // orders profit size to begin trailing, we use 2*(commission+swap)
   double rq_price=0;     // required price for stop loss setting (Bid or Ask)
   double rq_trail=0;     // distance of trailing stop to price
   
   TrailingStop=(double)StringToDouble(ObjectGetString(0,PFX+"TS<>",OBJPROP_TEXT)); //TSField
   DecreaseTS=DecreaseTS;
   
   ResetLastError();
   while(OpenPos(OP_BUY)>0 && BoostLongEnabled)                           //WhileWeHaveLongs
   {
      for(int i=OrdersTotal()-1; i>=0; i--)                               //LoopOverAllOrders
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))                     //SelectRunningOrders
            if(   OrderSymbol()==_Symbol                                  //OurMarket
               && OrderMagicNumber()==MagicNumber                         //OurEA
               && OrderType()==OP_BUY )                                   //BuyOrder
            {                                                             //IsOneOfOurLongs:
               rq_price=MarketInfo(_Symbol,MODE_BID);                     //Getrequired price
               ordprofit=2*( OrderCommission()+OrderSwap() );             //CoverCostsCash
               if(OrderProfit()>ordprofit)                                //WeAreInProfit:
               {
                  while(TrailingStop>DecreaseTS && BoostLongEnabled )       //WhileTSBiggerDecrementor
                  {
                     rq_trail=NormalizeDouble(TrailingStop*_Point,_Digits); //NormalizeIt
                     _Debug(__FUNCTION__
                            +" rq_trail="+DoubleToStr(rq_trail,0) );
                     if(OrderStopLoss()<rq_price-rq_trail )                //SLBelow Bid-TrailDist
                        if(OrderModify(OrderTicket(),OrderOpenPrice(),     //TrailShort
                                    rq_price-rq_trail,                     //ChangeSL:Bid-TSdist
                                    OrderTakeProfit(),0,ColorArrowShort) ) //BoostSuccess:
                           TrailingStop=TrailingStop-DecreaseTS;           //DecreaseStopDistance
                           _Log(" Buy boost.");
                           _Debug(__FUNCTION__
                                  +" TrailingStop="+DoubleToStr(TrailingStop,0) );
                  }
                  //TSReachedDecrementor+StillInTrade
                  rq_trail=NormalizeDouble(DecreaseTS*_Point,_Digits);    //NormalizeDecrementor
                  if(OrderStopLoss()<rq_price-rq_trail )                  //SLBelow Bid-TrailDist
                     if(OrderModify(OrderTicket(),OrderOpenPrice(),       //TrailShort
                                   rq_price-rq_trail,                     //ChangeSL:Bid-TSdist
                                   OrderTakeProfit(),0,ColorArrowShort) ) //TrailSuccess:
                        _Log(" Buy boost.");
               }
            
            }
   }//WhileWeHaveLongs
   if(OpenPos(OP_BUY)==0) { BoostLongEnabled=false; return; } //NoLongPositionsOpenAnyMore
}
Kann mir bitte jemand sagen, wo der Fehler ist . Danke. 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 +2. Es ist jetzt 23:40 Uhr.


Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2019 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.
-----------------------------------------------------------------------------------------------------------------------------