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: 4383
Beiträge: 40079
Benutzer: 6.740
Aktive Benutzer: 228
Links: 80
Wir begrüßen unseren neuesten Benutzer: eurix
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 7 Stunden
- eurix
vor 11 Stunden
- Yogi
vor einem Tag
- olistr
vor einem Tag
- IstDochEga...
vor 5 Tagen
- junga

Onlineuser
'Wer ist online' anzeigen Benutzer: 1
Gäste: 298
Gesamt: 299
Team: 0
Team:  
Benutzer:  Bayreuther
Freunde anzeigen

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor 2 Wochen
Neues Mitglied
 
Registriert seit: Feb 2020
Beiträge: 15
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?
Mit Zitat antworten
  #2 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.290
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.
Mit Zitat antworten
  #3 (permalink)  
Alt vor 2 Wochen
Elite Mitglied
 
Registriert seit: Sep 2015
Beiträge: 884
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);}} }}}
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
breakeven berechnen, profit auslesen, vollautomatisches handelssystem


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 21:08 Uhr.


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