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: 43533
Benutzer: 7.224
Aktive Benutzer: 74
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 8 Stunden
- Sundaytrad...
vor 14 Stunden
- TS_6
vor 2 Tagen
- Mane
vor 2 Wochen
- AlbertZiz
vor 2 Wochen
- michak

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

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 06.02.20
Neues Mitglied
 
Registriert seit: Feb 2020
Beiträge: 20
chesstigran befindet sich auf einem aufstrebenden Ast
Question Teilprofite raussichern und Breakeven setzen,Code fehlerfrei aber wird nicht umgesetz

Hey Leute,

ich brauche zwei Funktionen die ich schon implementiert habe allerdings funktionieren diese nicht ganz ..

Diese zwei Funktionen wären einmal Breakeven setzen, wenn der Trade aktuell 10 Pips/Punkte im Profit ist:

Code:
bool bResult = false;

    for(int i = OrdersTotal() - 1; i >= 0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {  
       
    if(OrderType() == OP_BUY && (OrderOpenPrice() > OrderStopLoss()) && (((Bid - OrderOpenPrice()) >= 10))) {
    bResult = OrderModify(OrderTicket(), OrderOpenPrice(),OrderOpenPrice(), OrderTakeProfit(), 0);
  	 }
  		 
  	 if(OrderType() == OP_SELL  && (OrderOpenPrice() < OrderStopLoss()) && (((OrderOpenPrice() - Ask) >= 10))){
  	 bResult = OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
  	      }
      }
    }
und die zweite die ich brauche ist Teilprofite reinclosen wenn der Trade zb mehr als 50 Pips/Punkte im Profit ist.Code:

Code:
bool bClose = false;

    if(OrderType() == OP_BUY && (Bid - OrderOpenPrice()) >= 100.00) {
    bClose = OrderClose(OrderTicket(),OrderLots() / 2, OrderClosePrice(),3, Green);
    }
    if(OrderType() == OP_SELL && (OrderOpenPrice() - Ask) >= 100.00) {
    bClose = OrderClose(OrderTicket(),OrderLots() / 2, OrderClosePrice(), 3, Green);
    }
das Ganze hab ich auf einen Zeitraum vom 3.7.19 bis zum 6.2.20 getestet. Das Interessante ist das er das in den letzen Wochen beachtet aber je weiter weg der Zeitraum ist desto mehr macht er es gar nicht(bzw ab einem Punkt macht er es gar nicht).

Weiß da jemand weiter? ist mit dem Code irgendwas falsch oder so? Hat das was mit der Historiendatenbank zu tun?
  #2 (permalink)  
Alt 06.02.20
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Beide Funktionen würden nur korrekt funktionieren, wenn es sich nicht um Währungspaare handelt, denn die Differenz aus

Bid - OrderOpenPrice() >= 10
bzw.
Bid - OrderOpenPrice() >= 100.00

wird dann nie >=10 bzw. >=100.00 ergeben können.
Bei Währungspaaren müsste dann stehen: 10*_Point bzw. 100*_Point.
Und dann hängt es noch davon ab, es ein 4- oder 5-Digit-Broker ist. Sollten reale 10 bzw. 100 Pips gemeint sein, dann müsste beim 5-Digit-Broker nochmals mit 10 multipliziert werden.

Ansonsten liegt in der Tat der Verdacht nahe, dass die historischen Daten in die Vergangenheit nicht ausreichen.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #3 (permalink)  
Alt 06.02.20
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 1.178
MA-EA befindet sich auf einem aufstrebenden Ast
Standard

So läufts bei mir ganz gut. Mit nen paar Pips Abweichung hier und da...
Code:
//-----------------------------------------------------------------------------------------------------------*/

extern int Stop_Loss=400;

//-----------------------------------------------------------------------------------------------------------*/

extern string TS="Trailing Stop";

input bool Trailing_Stop=false; // Zum Testen aus
extern int Trailing_Stop_Step=30; // Bei TSS 6 wurden gar keine Orders geöffnet.

//-----------------------------------------------------------------------------------------------------------*/

extern int Take_Profit=5000; // Zum Testen 5.000

//-------------------------------------------------------------------------------------------------------------
Code:
 //=============================================================================================================
// S T O P   L O S S
//=============================================================================================================

//SL auf 0 stellen, wenn oben <1,
//um irgendwelche Missverständnisse zu vermeiden.
if(Stop_Loss<1){
  Buy_SL=0.0;
  Sel_SL=0.0;}

  else{
    Buy_SL=NormalizeDouble(Ask-Stop_Loss*_Point,_Digits);
    Sel_SL=NormalizeDouble(Bid+Stop_Loss*_Point,_Digits);}

//SL genauso groß wie Minstoplevels machen, wenn er kleiner ist:
double MSL=MarketInfo(Symbol(),MODE_STOPLEVEL);
if(Buy_SL<MSL)Buy_SL=MSL;
if(Sel_SL<MSL)Sel_SL=MSL;

//=============================================================================================================
// T A K E   P R O F I T
//=============================================================================================================

//TP auf 0 stellen, wenn oben <1,
//um irgendwelche Missverständnisse zu vermeiden.
if(Take_Profit<1){
  Buy_TP=0.0;
  Sel_TP=0.0;}

  else{
    Buy_TP=NormalizeDouble(Ask+Take_Profit*_Point,_Digits);
    Sel_TP=NormalizeDouble(Bid-Take_Profit*_Point,_Digits);}
Code:
//=============================================================================================================
// M O D I F Y   O R D E R S
//=============================================================================================================

if(Trailing_Stop==true){

  for(i=OrdersTotal()-1;i>=0;i--){
    if(OrderSelect(i,SELECT_BY_POS)){
///////////////////////////////////////////////////////////////////////////////////////////////////////////////

      //Neuer BUY-"SL" (B_TS) Funktionen/Berechnungen
      if(OrderType()==OP_BUY&&OrderMagicNumber()==Buy_MN&&OrderSymbol()==Symbol()){

        //BUY-Öffnungskurs - gesendeten BUY-SL, um Wert zu ermitteln, der vom Ask abgezogen wurde:
        double BOOP_BOSL = OrderOpenPrice() - OrderStopLoss();
        
        //ASK - BUY_SL double-Wert = neuer BUY-"SL", der bei OrderModify gesendet werden soll:
        double Buy_TS = Ask - BOOP_BOSL;

        //neuer BUY_"SL" - Trailing_Stop_Step.
        //Damit soll geprüft werden, ob BUY_"SL" (B_TS) nach gezogen werden muss.
        double BuyTS_TSS = NormalizeDouble( Buy_TS - Trailing_Stop_Step *_Point,_Digits);
        
        //Wenn aktueller/zuletzt gesendeter BUY_SL kleiner als
        //neuer BUY_SL - TSS ist, soll neuer BUY_"SL" (BUY_TS) gesendet werden:
        if( OrderStopLoss() < BuyTS_TSS ){
          
          if(IsTradeAllowed()==true)OM=OrderModify(OrderTicket(),OrderOpenPrice(),Buy_TS,OrderTakeProfit(),0,CLR_NONE);}}


//////////////////////////////////////////////////////////////////////////////////////////////////////////////


      //Neuer SELL-"SL" (S_TS) Funktionen/Berechnungen
      if(OrderType()==OP_SELL&&OrderMagicNumber()==Sell_MN&&OrderSymbol()==Symbol()){

        //gesendeter SELL_SL - Öffnungskurs, um double-Wert ermitteln, der zum BID dazu gerechnet wurde:
        double SOSL_SOOP = OrderStopLoss() - OrderOpenPrice();

        //BID + SELL-SL double-Wert = neuer SELL-"SL", der bei OrderModify gesendet werden soll
        double Sel_TS = Bid + SOSL_SOOP;

        double SelTS_TSS=NormalizeDouble(Sel_TS + Trailing_Stop_Step *_Point,_Digits);
        
        if( OrderStopLoss() > SelTS_TSS ){
          
          if(IsTradeAllowed()==true)OM=OrderModify(OrderTicket(),OrderOpenPrice(),Sel_TS,OrderTakeProfit(),0,CLR_NONE);}} }}}
Thema geschlossen

Lesezeichen

Stichworte
breakeven berechnen, profit auslesen, vollautomatisches handelssystem


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 02:28 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.
-----------------------------------------------------------------------------------------------------------------------------