Fixe SL u. TP im MT4

 

hallo

brauche eure Hlfe :-)

Wie/wo kann ich fixe SL und TP einrichten? Diese Einstellung soll mir ermöglichen, dass ich bei jeder Positionseröffnung (Ein-Klick Handel) automatisch ein von mir vorgegebenes SL und TP habe.

Dies ist beim Scalping enorm wichtig.

 
Such mal unter den Artikeln oder in der CodeBase - das Problem haben viele und wurde mehrfach gelöst!!
 

danke für den Hinweis... bin bereits seit 2 Stunden auf der Suche , hab aber noch nichts Passendes gefunden.

Aber ich gebe nicht auf :-)

Würde mich trotzdem freuen, falls es jemand bereits weiß oder zumindest sagen kann, wo es GENAU steht.


gruß an alle

 

Zum Beispiel auf der ersten Seite der Artikel in deutsch: "Entwicklung eines plattformübergreifenden Expert Advisors zur Festlegung von StopLoss und TakeProfit basierend auf den Risikoeinstellungen." Nicht gefunden - oder nicht gesucht?

Außerdem gibt es die Artikelserie (ist aber noch nicht ganz fertig): "Bibliothek für ein leichtes und schnelles Entwickeln vom Programmen für den MetaTrader (Teil X): Kompatibilität mit MQL4 - Ereignisse der Positionseröffnung und der Aktivierung von Pending-Orders".

Riskiere mal einen Blick hinein und ans Ende...

 

Danke für deine Hilfe.

Habe mir die Artikel durchgelesen, allerdings verstehe ich v. Programmieren null-Komma-nichts.

Ich bin vielmehr davon ausgegangen, dass man im MT4 mit 3-4 Mausklicks die entsprechenden Eingabe-Felder findet und sie dann auch simple mit den gewünschten Parametern bedienen kann.

 
AndrewDjosten:

Danke für deine Hilfe.

Habe mir die Artikel durchgelesen, allerdings verstehe ich v. Programmieren null-Komma-nichts.

Ich bin vielmehr davon ausgegangen, dass man im MT4 mit 3-4 Mausklicks die entsprechenden Eingabe-Felder findet und sie dann auch simple mit den gewünschten Parametern bedienen kann.

Ich hab zwar schon lange nix mehr für den MT4 geproggt, im MT5 ist das alles viel leichter, aber .......

Siehe dazu den Link https://www.youtube.com/watch?v=IT2WinT4yjY

//+------------------------------------------------------------------+
//|                                                    Auto_SLTP.mq4 |
//|                                Copyright © 2019 Ing. Otto Pauser |
//|                       https://www.mql5.com/de/users/kronenchakra |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019 Ing. Otto Pauser"
#property link      "https://www.mql5.com/de/users/kronenchakra"
#property version   "1.00"
#property strict

input int inp_SL = 20;       // SL(points)
input int inp_TP = 20;       // TP(points)

double slDistance,
       tpDistance;
double SL,TP;

int OnInit()
{
   slDistance=inp_SL*_Point; // sl as price distance
   tpDistance=inp_TP*_Point; // tp as price distance
   return(INIT_SUCCEEDED);
}

void OnTick()
{
   int total=OrdersTotal(); 
   for(int pos=0;pos<total;pos++) 
      if(OrderSelect(pos,SELECT_BY_POS)) 
         if(OrderSymbol()==_Symbol)
            {
               if(OrderType()==OP_BUY)
                  {
                     SL=OrderOpenPrice()-slDistance;
                     TP=OrderOpenPrice()+slDistance;
                     if(OrderStopLoss()==NULL)
                        OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),OrderExpiration());
                     if(OrderTakeProfit()==NULL)
                        OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),TP,OrderExpiration());
                  }
               if(OrderType()==OP_SELL)
                  {
                     SL=OrderOpenPrice()+slDistance;
                     TP=OrderOpenPrice()-slDistance;
                     if(OrderStopLoss()==NULL)
                        OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),OrderExpiration());
                     if(OrderTakeProfit()==NULL)
                        OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),TP,OrderExpiration());

                  }
            }
}

Ist nicht getestet, sollte aber funktionieren. Ich teste das wenn der Markt wieder offen ist.

Dateien:
 
Werde es ausprobieren, vielen herzlichen Dank :-)
 

Und für die Interessierten, so sieht das in MQL5 aus:

//+------------------------------------------------------------------+
//|                                                    Auto_SLTP.mq5 |
//|                               Copyright © 2019, Ing. Otto Pauser |
//|                       https://www.mql5.com/de/users/kronenchakra |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Ing. Otto Pauser"
#property link      "https://www.mql5.com/de/users/kronenchakra"
#property version   "1.00"

#include <Trade\TradeExt.mqh>

input int inp_SL = 20;       // SL(points)
input int inp_TP = 20;       // TP(points)

double slDistance,
       tpDistance;

int OnInit()
{
   slDistance=inp_SL*_Point; // sl as price distance
   tpDistance=inp_TP*_Point; // tp as price distance
   return(INIT_SUCCEEDED);
}

void OnTick()
{
   if(!Trade.OnTick())
      return;

   if(Trade.PosOpened)
      switch(Trade.PosType)
        {
         case POSITION_TYPE_BUY :
                     if(Trade.PosSL==NULL) Trade.DoModifyBuySL(slDistance);
                     if(Trade.PosTP==NULL) Trade.DoModifyBuyTP(tpDistance);
         break;
         case POSITION_TYPE_SELL :
                     if(Trade.PosSL==NULL) Trade.DoModifySellSL(slDistance);
                     if(Trade.PosTP==NULL) Trade.DoModifySellTP(tpDistance);
         break;
        }
}

Allerdings benötigt das eine Erweiterung der Systemlibrary (TradeExt.mqh).

Die war aber zu viel Arbeit um sie zu verschenken - sorry.

 

Kleines Update zu Auto_SLTP

SL, TP werden, falls nicht gesetzt jetzt gleichzeitig gesetzt.

Zu beachten ist, daß der Spread nicht mit gerechnet ist.

Also SL 7 bei einem Spread von 10 geht nicht. Das geht so wie so nicht!

SL und TP können erst nach dem Eintreffen eines neuen Ticks auf diese Art berechnet werden.

Dateien:
 
extern int TP_pips=100;//TP in Point
extern int SL_pips=100;//SL in Point

void OnTick()
{ 

   /////////////////// SEND TP /////////////////////////////////   
   if(TP_pips>0)
   {
      for(int i = 0; i<=OrdersTotal()-1; i++)
      {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)
         && OrderSymbol()==Symbol() 
         && OrderTakeProfit()==0 
         && OrderMagicNumber()==Magic
         )
         {
            if(OrderType() == OP_BUY)
            {
               TP=OrderOpenPrice()+TP_pips*Point;
               if(TP<Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
               {
                  TP=Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;   
               }
               res=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),TP,0,Green);           
               Print(">>>>>>>>>>>>>>>>>>>>>>>>> Send TP for BUY. Ticket="+IntegerToString(OrderTicket()));
            }
            if(OrderType() == OP_SELL)
            {
               TP=OrderOpenPrice()-TP_pips*Point;
               if(TP>Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
               {
                  TP=Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;   
               }
               res=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),TP,0,Green);           
               Print(">>>>>>>>>>>>>>>>>>>>>>>>> Send TP for SELL. Ticket="+IntegerToString(OrderTicket()));
            }
         }   
      }
   }   

   /////////////////// SEND SL /////////////////////////////////   
   if(SL_pips>0)
   {
      for(int i = 0; i<=OrdersTotal()-1; i++)
      {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)
         && OrderSymbol()==Symbol() 
         && OrderStopLoss()==0 
         && OrderMagicNumber()==Magic
         )
         {
            if(OrderType() == OP_BUY)
            {
               SL=OrderOpenPrice()-SL_pips*Point;
               if(SL>Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
               {
                  SL=Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;   
               }
               res=OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,Green);           
               Print(">>>>>>>>>>>>>>>>>>>>>>>>> Send SL for BUY. Ticket="+IntegerToString(OrderTicket()));
            }
            if(OrderType() == OP_SELL)
            {
               SL=OrderOpenPrice()+SL_pips*Point;
               if(SL<Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)
               {
                  SL=Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;   
               }
               res=OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,Green);           
               Print(">>>>>>>>>>>>>>>>>>>>>>>>> Send SL for SELL. Ticket="+IntegerToString(OrderTicket()));
            }
         }
      }
   }

}

Das ist ein Teil von meinem Muster.

Falls noch was zum Fragen - gerne!

MfG.

Grund der Beschwerde: