Trailingstop zieht nicht nach

 

Hallo liebe Leute


Ich habe da (vermutlich) eine peinliche Frage !


Ich habe eine EA zusammengebaut welcher von einem Externen Indikator gefütter wird.

Der Einstieg ist sehr simpel gehalten. Ein Alarmt löst einen Order aus. Und das funktioniert auch.

Aber der Trailingstop zieht einfach nicht nach. (?)

Darüber hinaus wird der Stoploss und der TP mit Werten übergeben welche ich nicht eingestellt habe.

Ich bin also etwas verwirrt und frage ein nach einen Guten Rat von Eurer Seite.

-------------------
#include <Trade/Trade.mqh>;

CTrade trade;

input int TslPoint = 65;
input int TtpPoint = 45;
input int TslTrailing = 10;
input double Lot = 0.2;

input ENUM_TIMEFRAMES      erste_period=PERIOD_M5; // Periode M5
input ENUM_TIMEFRAMES      zweite_period=PERIOD_M15; // Periode M15
input ENUM_TIMEFRAMES      dritte_period=PERIOD_H1; // Periode H4

void OnTick()
  {

int handle;
int handle2;
int handle3;
int handleDown;
int handleUp;


   string name ="Market\\UniversalMA MT5.ex5";
   handle = iCustom(_Symbol,erste_period,name);  
   handle2 = iCustom(_Symbol,zweite_period,name);
   handle3 = iCustom(_Symbol,dritte_period,name);
   handleDown = iCustom(_Symbol,erste_period,name);
   handleUp = iCustom(_Symbol,erste_period,name);
 
   
//     double  indi_Status_H1[3];
//   CopyBuffer(handle3,1,1,1,indi_Status_H1);
   
     double indi_Status_M5[3];
   CopyBuffer(handle,2,1,1,indi_Status_M5);
   
//      double indi_Status_M30[3];
//   CopyBuffer(handle2,1,1,1,indi_Status_M30);


     double indi_Status_Down[3];
   CopyBuffer(handleDown,5,1,1,indi_Status_Down);
   
   
     double indi_Status_Up[3];
   CopyBuffer(handleUp,4,1,1,indi_Status_Up);   


   //Ask Preis berechnen
   double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK) ,_Digits);
   //Bid Preisberechnen
   double Bid=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID) ,_Digits);

 
   if ((PositionsTotal()<1) && (indi_Status_Down[0] != 0))
    {
 
 trade.Sell(Lot,NULL,Bid,(Bid+TslPoint *_Point),(Bid-TtpPoint *_Point),NULL);
 }
 
 
 
 
  if ((PositionsTotal()<1)  && (indi_Status_Up[0] != 0))
      {
 

 trade.Buy(Lot,NULL,Ask,(Ask-TslPoint*_Point),(Ask+TtpPoint *_Point),NULL);
 }
 

 
 
   } // Das Ende der OnTick Funktion !
   





void CheckTrailingStopAsk(double Ask)
{
// Zielsetzung des Trailing Stop auf 150 Punkte
   double SL=NormalizeDouble(Ask-TslPoint*_Point,_Digits);
   double TP=NormalizeDouble(Ask+TtpPoint*_Point,_Digits);
   
// Überprüfung aller offenen Positionen im aktuelle Symbol
   for( int i=PositionsTotal()-1; i>=0; i--) // Zählt alle runter von der aktuellen Position
     {
     string symbol=PositionGetSymbol(i); // damit erhält man das Währungspaar
     
     if (_Symbol==symbol) // Wenn das Chart Symbol gleich wie das gewünschte Symbol   
     {
     // zum erhalten der TicketNummer
     ulong PositionTicket=PositionGetInteger(POSITION_TICKET);
     
     // ermittlung des aktuellen SL
     double CurrentStopLoss=PositionGetDouble(POSITION_SL);
     // ermittlung des aktuellen TP
//     double CurrentTakeProfit=PositionGetDouble(POSITION_TP);          
     // wen der aktuelle SL ist unter xxx Punkte vom Ask Preis
     if (CurrentStopLoss<SL)
     {
     // ! Dann Modifizieren wir den SL mit 10 Punkten
     trade.PositionModify(PositionTicket,(CurrentStopLoss+10*_Point),0);
     }
     
     
     }// Ende des Symbol Loop
     
     }// Ende des Loops

}// Ende des TrailingStop Funktion

void CheckTrailingStopBid(double Bid)
{
// Zielsetzung des Trailing Stop auf 150 Punkte
   double SL=NormalizeDouble(Bid+TslPoint*_Point,_Digits);
   double TP=NormalizeDouble(Bid-TtpPoint*_Point,_Digits);
   
// Überprüfung aller offenen Positionen im aktuelle Symbol
   for( int i=PositionsTotal()-1; i>=0; i--) // Zählt alle runter von der aktuellen Position
     {
     string symbol=PositionGetSymbol(i); // damit erhält man das Währungspaar
     
     if (_Symbol==symbol) // Wenn das Chart Symbol gleich wie das gewünschte Symbol   
     {
     // zum erhalten der TicketNummer
     ulong PositionTicket=PositionGetInteger(POSITION_TICKET);
     
     // ermittlung des aktuellen SL
     double CurrentStopLoss=PositionGetDouble(POSITION_SL);
     // ermittlung des aktuellen TP
//     double CurrentTakeProfit=PositionGetDouble(POSITION_TP);     
     
     // wen der aktuelle SL ist unter xxx Punkte vom Ask Preis
     if (CurrentStopLoss>SL)
     {
     // ! Dann Modifizieren wir den SL mit 10 Punkten
     trade.PositionModify(PositionTicket,(CurrentStopLoss-10*_Point),0);
      
     }
     
     
     }// Ende des Symbol Loop
     
     }// Ende des Loops

}// Ende des TrailingStop Funktion


Bitte Bitte kan mir jemand Helfen ?

Danke vorab !



 

 
  1. Bitte verwende die Code-Darstellung mit oder Alt+s in der Editor-Zeile für Posts (Du kannst das auch im Nachhinein noch ändern.
  2. Wenn ein Programm compiliert, aber nicht tut was es soll, ist die erste Wahl bzw. der nächste Entwicklungsschritt der Debugger, lies dazu:
    Tracing, Debugging und strukturelle Analyse von Quellcodes: https://www.metatrader5.com/de/metaeditor/help/development/debug
    Zur Fehlerbehebung von MQL5-Programmen (Debugging): https://www.mql5.com/de/articles/654
    Einführung in MQL5: Schreiben eines einfachen Expert Advisor und benutzerdefinierten Indikators, Siehe Ende: Starten und Debuggen: https://www.mql5.com/de/articles/35
    Die Fehlerverarbeitung und Protokollierung in MQL5: https://www.mql5.com/de/articles/2041
    https://www.mql5.com/de/articles/272
    Fehler finden und Protokollierung:  https://www.mql5.com/de/articles/150

Code-Debugging - Programme entwickeln - MetaEditor Hilfe
Code-Debugging - Programme entwickeln - MetaEditor Hilfe
  • www.metatrader5.com
MetaEditor hat einen eingebauten Debugger, mit dem Sie die Programmausführung Schritt für Schritt (durch einzelne Funktionen) ü...