Anzeige von SL- und TP-Daten im Chart

 

Hallo zusammen,

wenn ich im Chart meine SL- oder TP-Linie nehme und mit der Maus ziehe, werden mir der Betrag und die Punkte angezeigt. Sobald ich die Linie jedoch loslasse, verschwinden die Daten wieder :-(.

Gibt es eine Möglichkeit, das so einzustellen, dass die Daten (Währung und Punkte) immer sichtbar bleiben und nicht nur die SL- oder TP-Linie angezeigt wird?

Vielen Dank im Voraus für eure Hilfe!


Gruß Mücke



 
Du kannst Dir einen Indikator schreiben, der SL und TP so anzeigt, wie Du es Dir wünscht, als Kommentar, als Text-Label oder grafische Objekte.
 
Carl Schreiber #:
Du kannst Dir einen Indikator schreiben, der SL und TP so anzeigt, wie Du es Dir wünscht, als Kommentar, als Text-Label oder grafische Objekte.
Ok, das kann ich alles so nicht in den Einstellungen aktivieren.

Wenn ich das selber schreibe, muss ich die Berechnungen wieder selber machen ;-( hat schon das letzte Mal nicht geklappt, deshalb hatte ich gehofft, dass man das einstellen kann.


Aber der Hinweis mit dem Indikator ist glaube ich nicht schlecht, dann schaue ich mal ob es da schon was gibt was ich verwenden kann.
 

Lerne zu suchen: google nach: site:mql5.com display SL TP

Vielleicht gibt es ja ein Produkt das passt?

 
Im Moment versuche ich herauszufinden, ob man die Daten, die da stehen, irgendwie auslesen kann, denn wenn man mit der Maus auf den SL oder TP geht, kommt auch eine kleine Anzeige.

Da steht dann:

Zahlen zu ändern und der Wert in Euro und Punkten.


Und ja du hast recht, suchen ist immer gut, wenn man auch die richtigen Begriffe dafür verwendet und ich liege sehr oft daneben :-(
 
#include <Trade/Trade.mqh>
CTrade trade;
datetime last_trade = 0;

struct SPosTicketSLTP
  {
   ulong             ticket;
   double            price_sl;
   double            price_tp;
  };

SPosTicketSLTP  position[];

ulong MagicNumber = 123123123123123;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   trade.SetExpertMagicNumber(MagicNumber);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   GetPositionTicketSLTP(_Symbol, MagicNumber);
   BuySellEveryHour();
   PrintPositions();
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int GetPositionTicketSLTP(string symbol, ulong magic)
  {
   int pos_total = PositionsTotal();

   ArrayResize(position, 0);
   int j = 0;
   for(int i = 0; i < pos_total; i++)
     {
      PositionSelectByTicket(PositionGetTicket(i));
      if(PositionGetString(POSITION_SYMBOL) == _Symbol && PositionGetInteger(POSITION_MAGIC) == magic)
        {
         j++;
         ArrayResize(position, j);

         position[j - 1].ticket = PositionGetTicket(i);
         position[j - 1].price_sl = PositionGetDouble(POSITION_SL);
         position[j - 1].price_tp = PositionGetDouble(POSITION_TP);
        }
     }
   return(j);
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void BuySellEveryHour()
  {
   if(last_trade == 0 || int(last_trade) + 3600 < TimeCurrent()) //handelt nach 60 Minuten erneut
     {
      trade.Buy(0.01, _Symbol, 0.0, 0.0, 0.0, "Hello World!");
      trade.Sell(0.01, _Symbol, 0.0, 0.0, 0.0, "Hello World!");
      last_trade = TimeCurrent();
     }
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void  PrintPositions()
  {
   for(int i = 0; i < ArraySize(position); i++)
     {
      PrintFormat("************ticket %d; price_sl %g; price_tp %g;", position[i].ticket, position[i].price_sl, position[i].price_tp);
     }
  }

Mal als Beispiel wie du die SL und TP der offenen Positionen eines bestimmten Symbols und einer best. Magic Nummer bekommst.

 
Muecke82 #:
gut, wenn man auch die richtigen Begriffe dafür verwendet und ich liege sehr oft daneben :-(

Vorschlag dazu:

Beginne hier: https://www.mql5.com/de/docs/function_indices

  1.  Schritt: Das sind alle Funktionen mit Kurzerklärung, sodass man (ich auch wegen Wie heißt noch mal die Funktion?) auch nach Schlüsselwörtern suchen kann.
  2.  Schritt: Dann nach der Funktion oder deren Enum_Parameter suchen, entweder mit der Lupe oben rechts oder mit Google unter site:mql5.com ...
Dokumentation zu MQL5: MQL5 Funktionenliste
Dokumentation zu MQL5: MQL5 Funktionenliste
  • www.mql5.com
Alle MQL5 Funktionen in alphabetischer Reihenfolge...
 
Tobias Johannes Zimmer #:
Mal als Beispiel wie du die SL und TP der offenen Positionen eines bestimmten Symbols und einer best. Magic Nummer bekommst.

Cool, danke.

Jedoch verstehe ich deinen Code nicht, habe es jetzt mehrfach versucht, diesen nachzuvollziehen. :-(.

Das mit der Magic Nummer habe ich auch noch nicht verstanden ;-(

 
Muecke82 #:
Das mit der Magic Nummer habe ich auch noch nicht verstanden ;-(

Die MagicNummer ist Deine Referenz. So können zB. versch. EAs ihre Positionen und Aufträge von anderen unterscheiden..

 
Muecke82 #:

Cool, danke.

Jedoch verstehe ich deinen Code nicht, habe es jetzt mehrfach versucht, diesen nachzuvollziehen. :-(.

Das mit der Magic Nummer habe ich auch noch nicht verstanden ;-(

Du kannst in der Praxis mehrere Strategien gleichzeitig laufen lassen und dann jeder Strategie eine eigene Magic Nummer geben. die Positionen Aller Symbole und aller Strategien liegen zusammen im Terminal vor, das heißt es ist äußerst praktisch, wenn man einen EA laufen lassen kann und der seine eigenen Positionen wiederfindet, die anderen jedoch liegen lässt. Du könntest auch für jeder Strategie zwei Magic Nummern machen und dann Buy und Sell trennen. Siehe unten.

Ich habe die Funktionen außerhalb des Hauptcodes definiert und dann braucht ich nur noch von OnTick aus auf diese zugreifen.

Hast Du konkrete Fragen? Welche Teile verstehst du, welche nicht?

Viele Sachen lernt man außerdem, indem man fremden Code liest und im Debugger Schritt für Schritt durchlaufen lässt und dabei schaut wie sich die Variablen verändern :)

#include <Trade/Trade.mqh>
CTrade trade[];
datetime last_trade_buy = 0;
datetime last_trade_sell = 0;

struct SPosTicketSLTP
  {
   ulong             ticket;
   double            price_sl;
   double            price_tp;
  };

SPosTicketSLTP  position_buy[];
SPosTicketSLTP  position_sell[];

const ulong MagicNumberBuy = 123123123123123;
const ulong MagicNumberSell = 124124124124124;

int sl_points = 1000;
int tp_points = 2000;
double ask, bid;
bool is_buy = false, is_sell = false;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(PeriodSeconds(_Period) >= 3600)
     {
      Alert("Bitte wähle einen Zeitrahmen kleiner als H1 !");
     }

   ArrayResize(trade, 2);
   trade[0].SetExpertMagicNumber(MagicNumberBuy);
   trade[1].SetExpertMagicNumber(MagicNumberSell);
//---
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);

   GetPositionTicketSLTP(position_buy, _Symbol, MagicNumberBuy);
   GetPositionTicketSLTP(position_sell, _Symbol, MagicNumberSell);

   BuyEveryHour();
   SellEveryHour();

   PrintPositions(position_buy);
   PrintPositions(position_sell);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int GetPositionTicketSLTP(SPosTicketSLTP& position[], string symbol, ulong magic)
  {
   int pos_total = PositionsTotal();

   ArrayResize(position, 0);
   int j = 0;
   for(int i = 0; i < pos_total; i++)
     {
      PositionSelectByTicket(PositionGetTicket(i));
      if(PositionGetString(POSITION_SYMBOL) == _Symbol && PositionGetInteger(POSITION_MAGIC) == magic)
        {
         j++;
         ArrayResize(position, j);

         position[j - 1].ticket = PositionGetTicket(i);
         position[j - 1].price_sl = PositionGetDouble(POSITION_SL);
         position[j - 1].price_tp = PositionGetDouble(POSITION_TP);
        }
     }
   return(j);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void BuyEveryHour()
  {
   if(((last_trade_buy == 0)
       || (int(last_trade_buy) + 3600 < TimeCurrent()))/*&&ArraySize(position)==0*/)
     {
      is_buy = trade[0].Buy(0.01, _Symbol, ask, ask - (sl_points * _Point), ask + (tp_points * _Point), "Hello World!");
      last_trade_buy = TimeCurrent();
     }
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void SellEveryHour()
  {
   if(((last_trade_sell == 0)
       || (int(last_trade_sell) + 3600 < TimeCurrent()))/*&&ArraySize(position)==0*/)
     {
      is_sell = trade[1].Sell(0.01, _Symbol, bid, bid + (sl_points * _Point), bid - (tp_points * _Point), "Hello World!");
      last_trade_sell = TimeCurrent();
     }
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void  PrintPositions(SPosTicketSLTP& position[])
  {
   for(int i = 0; i < ArraySize(position); i++)
     {
      PositionSelectByTicket(position[i].ticket);
      ulong magic = PositionGetInteger(POSITION_MAGIC);
      PrintFormat("************%s ticket %d; price_sl %g; price_tp %g;", GetStringFrom(magic), position[i].ticket, position[i].price_sl, position[i].price_tp);
     }
  }

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string GetStringFrom(const ulong magic)
  {
   string result = "";

   if(magic == MagicNumberBuy)
      result = "Buy";
   if(magic == MagicNumberSell)
      result = "Sell";

   return(result);
  }
//+------------------------------------------------------------------+