Abfrage der damaligen SL und TP Kurse

 
Hallo,

ich möchte gerne die seinerzeitigen SL und TP Kurse abfragen welche bei Eröffnung hinterlegt wurden.

So siehts momentan aus
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
{
string test=HistoryDealGetInteger(trans.deal,DEAL_TICKET)+";"
                                 +HistoryDealGetInteger(trans.deal,DEAL_ORDER)+";"
                                 +(datetime)HistoryDealGetInteger(trans.deal,DEAL_TIME)+";"
                                 +(ENUM_DEAL_TYPE)HistoryDealGetInteger(trans.deal,DEAL_TYPE)+";"
                                 +(ENUM_DEAL_ENTRY)HistoryDealGetInteger(trans.deal,DEAL_ENTRY)+";"
                                 +HistoryDealGetInteger(trans.deal,DEAL_MAGIC)+";"
                                 +(ENUM_DEAL_REASON)HistoryDealGetInteger(trans.deal,DEAL_REASON)+";"
                                 +HistoryDealGetInteger(trans.deal,DEAL_POSITION_ID)+";"
                                 +HistoryDealGetDouble(trans.deal,DEAL_VOLUME)+";"
                                 +HistoryDealGetDouble(trans.deal,DEAL_PRICE)+";"
                                 +HistoryDealGetDouble(trans.deal,DEAL_COMMISSION)+";"
                                 +HistoryDealGetDouble(trans.deal,DEAL_SWAP)+";"
                                 +HistoryDealGetDouble(trans.deal,DEAL_FEE)+";"
                                 +HistoryDealGetDouble(trans.deal,DEAL_TP)+";"
                                 +HistoryDealGetDouble(trans.deal,DEAL_PROFIT)+";"                                 
                                 +HistoryDealGetString(trans.deal,DEAL_SYMBOL)+";"
                                 +HistoryDealGetString(trans.deal,DEAL_COMMENT)+";"
                                 +HistoryDealGetString(trans.deal,DEAL_EXTERNAL_ID)+";"
                                 +HistoryOrderGetDouble(trans.deal,ORDER_SL)+";"
                                 +HistoryOrderGetDouble(trans.deal,ORDER_TP)
;
}
Print(string);

Auf diesem Wege erhalte ich alles, bis auf genau diese Werte (diese sind immer 0.00) - ich habe das ganze auch einmal mit "trans.order" versucht, das Ergebnis ist das gleiche. Was mache ich hier falsch?
Dokumentation zu MQL5: Handelsfunktionen / HistoryOrderGetDouble
Dokumentation zu MQL5: Handelsfunktionen / HistoryOrderGetDouble
  • www.mql5.com
HistoryOrderGetDouble - Handelsfunktionen - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 
ReLor:
Hallo,

ich möchte gerne die seinerzeitigen SL und TP Kurse abfragen welche bei Eröffnung hinterlegt wurden.

So siehts momentan aus
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
{
string test=HistoryDealGetInteger(trans.deal,DEAL_TICKET)+";"
                                 +HistoryDealGetInteger(trans.deal,DEAL_ORDER)+";"
                                 +(datetime)HistoryDealGetInteger(trans.deal,DEAL_TIME)+";"
                                 +(ENUM_DEAL_TYPE)HistoryDealGetInteger(trans.deal,DEAL_TYPE)+";"
                                 +(ENUM_DEAL_ENTRY)HistoryDealGetInteger(trans.deal,DEAL_ENTRY)+";"
                                 +HistoryDealGetInteger(trans.deal,DEAL_MAGIC)+";"
                                 +(ENUM_DEAL_REASON)HistoryDealGetInteger(trans.deal,DEAL_REASON)+";"
                                 +HistoryDealGetInteger(trans.deal,DEAL_POSITION_ID)+";"
                                 +HistoryDealGetDouble(trans.deal,DEAL_VOLUME)+";"
                                 +HistoryDealGetDouble(trans.deal,DEAL_PRICE)+";"
                                 +HistoryDealGetDouble(trans.deal,DEAL_COMMISSION)+";"
                                 +HistoryDealGetDouble(trans.deal,DEAL_SWAP)+";"
                                 +HistoryDealGetDouble(trans.deal,DEAL_FEE)+";"
                                 +HistoryDealGetDouble(trans.deal,DEAL_TP)+";"
                                 +HistoryDealGetDouble(trans.deal,DEAL_PROFIT)+";"                                 
                                 +HistoryDealGetString(trans.deal,DEAL_SYMBOL)+";"
                                 +HistoryDealGetString(trans.deal,DEAL_COMMENT)+";"
                                 +HistoryDealGetString(trans.deal,DEAL_EXTERNAL_ID)+";"
                                 +HistoryOrderGetDouble(trans.deal,ORDER_SL)+";"
                                 +HistoryOrderGetDouble(trans.deal,ORDER_TP)
;
}
Print(string);

Auf diesem Wege erhalte ich alles, bis auf genau diese Werte (diese sind immer 0.00) - ich habe das ganze auch einmal mit "trans.order" versucht, das Ergebnis ist das gleiche. Was mache ich hier falsch?

Ein deal hat keinen sl und tp, ein deal ist ein deal

du musst die order oder die position abfragen

 
amando #:

Ein deal hat keinen sl und tp, ein deal ist ein deal

du musst die order oder die position abfragen

Ok, verstehe, aber machen ich das nicht genau damit " HistoryOrderGetDouble(trans.deal,ORDER_SL) "

Wie bekomme ich den beim auslösen einer aktion " OnTradeTransaction " die gewünschte Info über den ursprünglichen SL/TP?
Dokumentation zu MQL5: Handelsfunktionen / HistoryOrderGetDouble
Dokumentation zu MQL5: Handelsfunktionen / HistoryOrderGetDouble
  • www.mql5.com
HistoryOrderGetDouble - Handelsfunktionen - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 
ReLor #:
Ok, verstehe, aber machen ich das nicht genau damit " HistoryOrderGetDouble(trans.deal,ORDER_SL) "

Wie bekomme ich den beim auslösen einer aktion " OnTradeTransaction " die gewünschte Info über den ursprünglichen SL/TP?

der Order SL ist der SL der Order, der Preis des Deals der ausgeführte

 
ReLor #:
Ok, verstehe, aber machen ich das nicht genau damit " HistoryOrderGetDouble(trans.deal,ORDER_SL) "

Wie bekomme ich den beim auslösen einer aktion " OnTradeTransaction " die gewünschte Info über den ursprünglichen SL/TP?
Ein Tipp: Im Editor kann man die Maus auf eine System-Funktion stellen und F1 drücken und kommt so direkt zur Dok. der Funktion - oft ist da auch ein Programmbeispiel zum Kopieren dabei ;)
 
amando #:

der Order SL ist der SL der Order, der Preis des Deals der ausgeführte

Achso ok, ich blicke da noch nicht ganz so durch. Wenn ich das richtig sehe gibt es aber keine Funktion HistroyPosition... - wie bekomme ich den aber in der Function " OnTradeTransaction " die damaligen SL/TP-Kurse die bei den einzelnen Positionen vorlagen?

 
ReLor #:

Achso ok, ich blicke da noch nicht ganz so durch. Wenn ich das richtig sehe gibt es aber keine Funktion HistroyPosition... - wie bekomme ich den aber in der Function " OnTradeTransaction " die damaligen SL/TP-Kurse die bei den einzelnen Positionen vorlagen?

Hier ist eine Liste aller Funktionen, da kann man auch mit Ctfl+F nach  Schlüsselwörtern suchen, wenn man nicht weiß, wie die Funktion in MQL5 heißt:

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

HistroyPosition gibt es in der Tat nicht, dann musst Du mit den Deals arbeiten und die entsprechenden Deal auswählen mit die "Eigenschaften der Deals", DEAL_ENTRY_OUT ist das Schließen einer offenen Position.

Dokumentation zu MQL5: MQL5 Funktionenliste
Dokumentation zu MQL5: MQL5 Funktionenliste
  • www.mql5.com
MQL5 Funktionenliste - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 

Also verstehe ich das richtig,

bei Aufruf von "OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)"

erhalte ich in

"trans.order" = Ticket der Order
"trans.deal" = Ticket des Deals

Wenn ih nun die Daten der ursprünglichen Position habe die gerade über onTradeTransaction behandelt wird muss ich dann die zum Deal gehörenden Positionan abfragen - richtig?

Sodann könnte ich das doch mit PositionSelectByTicket "PositionSelectByTicket" machen?

HIerzu jedoch auch die Frage mit welchem "Ticket" der Aufruf von PositionSelectByTicket erfolgt, eigentlich ist da ja eine (eigene?) Ticketnummer vorgesehen. Woher bekomme ich nun diese wenn ich vorher nur die Daten aus  trans.ordr bzw.  trans.deal habe?



Wäre prima wenn mir das jemand kurz anhand der Situation erläutern könnte, da ich die Zusammenhänge auch nach Blick in die Dokus noch nicht wirklich richtig zusammen bekomme.


 
Zu der Dok. zu Funktion gibt es doch ein ausführliches Beispiel, Du brauchst doch nur die Teile kopieren, die Du brauchst. Die Werte werden zwar ausgedruckt, aber Du kannst ja etwas anders damit machen.
 
Hallo @Carl Schreiber,

ich schaue mir das Beispiel dort nochmals genau an.

Dennoch wäre ich dankbar, wenn mir jemand den Zusammenhang der TicketID über Order, Deal und Positionen erläutern könnte, damit ich verstehe wie ich am Ende an die gewünschte Info komme!?
 

Ticket ist die Referenz oder ID die der Broker bzw. sein Server für jeden Handelseintrag vergibt - die Magic-Nr. ist Deine ID. Es ist ein bisschen umständlich bei einem Deal (zB. teilweises Schließen einer Position) das ursprüngliche Ticket abzufragen, aber es geht.

Die Beziehung der drei Order, Deal Position ist hier erklärt: https://www.mql5.com/de/articles/211 // Orders, Positions und Abschlüsse in MetaTrader 5

Orders, Positions und Abschlüsse in MetaTrader 5
Orders, Positions und Abschlüsse in MetaTrader 5
  • www.mql5.com
Einen robusten Handelsroboter zu erzeugen geht nicht ohne das Verständnis der Mechanismen des MetaTrader 5 Handelssystems. Der Client-Terminal erhält vom Handelsserver Informationen über die Positions, Orders und Abschlüsse. Um diese Daten mittels MQL5 entsprechend verarbeiten zu können, ist ein gutes Verständnis der Interaktion zwischen dem mql5-Programm und dem Client-Terminal unabdingbar.