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.
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?
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.
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
- 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.
- Schritt: Dann nach der Funktion oder deren Enum_Parameter suchen, entweder mit der Lupe oben rechts oder mit Google unter site:mql5.com ...
- www.mql5.com
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 ;-(
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); } //+------------------------------------------------------------------+
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
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