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: 43252
Benutzer: 7.220
Aktive Benutzer: 81
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 11 Stunden
- JosephTK
vor 2 Tagen
- Hopfen&Mal...
vor 3 Tagen
- frankmicha...
vor einer Woche
- DFeck
vor einer Woche
- bb1107

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

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 25.05.19
AVT AVT ist offline
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
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
Gesperrter Benutzer
 
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
Elite Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 612
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 +1. Es ist jetzt 09:20 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.
-----------------------------------------------------------------------------------------------------------------------------