Hallo!
Ich versuche jetzt schon seit längerer Zeit die Profite der laufenden Orders auszulesen, doch leider habe ich mit der Funktion double PosProfit = PositionGetDouble(POSITION_PROFIT);
kein Glück... Wie kann ich diese Werte (bei mehreren Orders) auslesen und als nutzbaren Wert (pro Tick) weiterverwenden... (zB. beenden einer Order (ausserhalb des StopLoss!!), wenn ein gewisser Gewinn unterschritten wird...
Danke für Eure Infos!
Poste mal Deinen Code, mit dem Dir das nicht gelingt - aber verwende dazu Alt+S oder den Code-Icon (</>) aus der Editierzeile.
Poste mal Deinen Code, mit dem Dir das nicht gelingt - aber verwende dazu Alt+S oder den Code-Icon (</>) aus der Editierzeile.
// Ermittle ID der aktuellen Position int ticket = PositionGetTicket(0); // Ermittle Profit der aktuellen Position double PosProfit = PositionGetDouble(POSITION_PROFIT); // Abfrage Position if (PosProfit < Ausstieg); { // Aktuelle Position Schließen trade.PositionClose(ticket); }
Dachte ich es mir doch, Du verwendest die Funktion wahrscheinlich falsch. In der Dok steht:
PositionGetTicket
Die Funktion gibt das Ticket der Position nach dem Index in der Liste offener Positionen zurück und wählt diese Funktion für die weitere Arbeit mithilfe von Funktionen PositionGetDouble, PositionGetInteger und PositionGetString automatisch aus.
Du hast aber keine Liste.
Mit PositionsTotal() kriegst Du alle offenen Positionen (keine Pending Orders!) und dann kannst Du in einer Schleife durch alle gehen:
int o = PositionsTotal(); while(o-->0) { int ticket = PositionGetTicket(0); ... }
![Dokumentation zu MQL5: Handelsfunktionen / PositionGetTicket Dokumentation zu MQL5: Handelsfunktionen / PositionGetTicket](https://c.mql5.com/36/40/dokumentation-zu-mql5-handelsfunktionen.png)
- www.mql5.com
Dachte ich es mir doch, Du verwendest die Funktion wahrscheinlich falsch. In der Dok steht:
Du hast aber keine Liste.
Mit PositionsTotal() kriegst Du alle offenen Positionen (keine Pending Orders!) und dann kannst Du in einer Schleife durch alle gehen:
// von der Anzahl der Positionen auf 0 zählen // for (int i=PositionsTotal()-1; i>=0; i--) // alle Positionen durchgehen { // Ermittle ID der aktuellen Position int ticket = PositionGetTicket(i); // Ermittle Profit der aktuellen Position double PosProfit = PositionGetDouble(POSITION_PROFIT); // Abfrage Position if (PosProfit < Ausstieg) { // Aktuelle Position Schließen trade.PositionClose(ticket); }
Leider bin ich mit meinen Programmierkenntnissen noch nicht so weit... Ich versuche es gerade mit einer Option, welche ich im iNet gefunden habe... doch da ist das Ergebnis nicht das gewünschte, da die Orders alle, undabhängig von der if-Funktion, geschlossen werden....
Leider bin ich mit meinen Programmierkenntnissen noch nicht so weit... Ich versuche es gerade mit einer Option, welche ich im iNet gefunden habe... doch da ist das Ergebnis nicht das gewünschte, da die Orders alle, undabhängig von der if-Funktion, geschlossen werden....
double PositionProfit(const string symbol, const int MagicNumber) //Gewinn der Gesamtposition { double profit=0; //--- in allen offenen Positionen suchen int i = PositionsTotal(); while(i-->0) { ulong position_ticket=PositionGetTicket(i);// das Ticket der Position PositionSelectByTicket(position_ticket); string position_symbol=PositionGetString(POSITION_SYMBOL); // Symbol ulong magic=PositionGetInteger(POSITION_MAGIC); // MagicNumber der Position double position_profit=PositionGetDouble(POSITION_PROFIT); //--- wenn die MagicNumber übereinstimmt, sind Stop Loss und Take Profit nicht gesetzt if(position_symbol==symbol && MagicNumber==magic) { profit+=position_profit; } } return(profit); }
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- 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!
Ich versuche jetzt schon seit längerer Zeit die Profite der laufenden Orders auszulesen, doch leider habe ich mit der Funktion double PosProfit = PositionGetDouble(POSITION_PROFIT);
kein Glück... Wie kann ich diese Werte (bei mehreren Orders) auslesen und als nutzbaren Wert (pro Tick) weiterverwenden... (zB. beenden einer Order (ausserhalb des StopLoss!!), wenn ein gewisser Gewinn unterschritten wird...
Danke für Eure Infos!