wie kann ich mit dem POSITION_IDENTIFIER etwas abfragen wenn die Position geschlossen wurde?

 

Ich muss irgendwie auf Informationen eines speziellen nun geschlossen Deals kommen, von dem ich zu lebzeiten (also direkt nach dem zeitpunkt der erstellung) etwas abrfragen kann, POSITION_IDENTIFIER hört sich richtig an oder?

Wenn die Position dann geschlossen ist, muss ich hier dran kommen:

long  HistoryDealGetInteger(
   ulong                       ticket_number,     // Ticket
   ENUM_DEAL_PROPERTY_INTEGER  property_id        // Identifikator der Eigeschaft
   );

das will aber nicht klappen, also was genau ist hierbei mit Ticket gemeint & wie komme ich an dieses Zu Lebzeiten der Position ran?


Einfach durchloopen, macht für mich wenig sinn, da wir zu lebzeiten der Position eine Nummer auswählen müssen

ist das eine möglichkeit?

ulong  HistoryDealGetTicket(
   int  index      // Nummer des Deals
   );

 

Falls es sich um MQL5 handelt kannst du sicher mit diesem Code was anfangen.

Aus meiner umfangreichen Bibliothek:

bool LastDealsInfo(string _symbol,
                   ulong &deal_ticket, 
                   ENUM_DEAL_TYPE &deal_type, 
                   long &deal_magic, 
                   double &deal_volume, 
                   double &deal_price, 
                   double &deal_profit, 
                   ENUM_DEAL_REASON &deal_reason,
                   int back=3600)
{
   datetime limit=TimeCurrent();
   datetime start=limit-back;                   // 3600=seconds of 1 hour, 86400=seconds of 1 day

   if(!HistorySelect(start,limit))              // select history
      return(false);                            // no history available

   uint     idx, 
            idxMax=HistoryDealsTotal()-1;
   //ulong    deal_ticket;
   string   deal_symbol;

   ENUM_DEAL_ENTRY  deal_entry;
   //ENUM_DEAL_REASON deal_reason;
   
   double   deal_commiss;
   double   deal_swap;
   double   deal_rawprof;

   for(idx=idxMax; idx>0; idx--)
      {
         deal_ticket = HistoryDealGetTicket(idx);                       // get ticket
         deal_symbol = HistoryDealGetString(deal_ticket,DEAL_SYMBOL);   // get symbol
         if(deal_symbol==_symbol)                                       // check symbol
            {
               deal_entry  = (ENUM_DEAL_ENTRY )HistoryDealGetInteger(deal_ticket,DEAL_ENTRY);
               deal_reason = (ENUM_DEAL_REASON)HistoryDealGetInteger(deal_ticket,DEAL_REASON);
               if(deal_entry==DEAL_ENTRY_OUT)                           // check entrytype
                //if(deal_reason==DEAL_REASON_SL)                       // check reason
                     {
                        deal_type    = (ENUM_DEAL_TYPE)HistoryDealGetInteger(deal_ticket,DEAL_TYPE);
                        deal_magic   =                 HistoryDealGetInteger(deal_ticket,DEAL_MAGIC);
                        deal_volume  =                 HistoryDealGetDouble (deal_ticket,DEAL_VOLUME);
                        deal_price   =                 HistoryDealGetDouble (deal_ticket,DEAL_PRICE);
                        deal_commiss =                 HistoryDealGetDouble (deal_ticket,DEAL_COMMISSION);
                        deal_swap    =                 HistoryDealGetDouble (deal_ticket,DEAL_SWAP);
                        deal_rawprof =                 HistoryDealGetDouble (deal_ticket,DEAL_PROFIT);

                        deal_profit  = deal_commiss+deal_swap+deal_rawprof;
                        return(true);
                     }
            }
      }
   return(false);
}

double LastDealsProfit(string _symbol, int back=3600)
{
   datetime limit=TimeCurrent();
   datetime start=limit-back;                   // 3600=seconds of 1 hour, 86400=seconds of 1 day

   if(!HistorySelect(start,limit))              // select history
      return(NULL);                             // no history available

   uint     idx, 
            idxMax=HistoryDealsTotal()-1;
   ulong    deal_ticket;
   string   deal_symbol;
   long     deal_entry;
   long     deal_reason;
   
   double   deal_commiss;
   double   deal_swap;
   double   deal_profit;
   double   deal_result;

   for(idx=idxMax; idx>0; idx--)
      {
         deal_ticket = HistoryDealGetTicket(idx);                       // get ticket
         deal_symbol = HistoryDealGetString(deal_ticket,DEAL_SYMBOL);   // get symbol
         if(deal_symbol==_symbol)                                       // check symbol
            {
               deal_entry  = (ENUM_DEAL_ENTRY )HistoryDealGetInteger(deal_ticket,DEAL_ENTRY);
               deal_reason = (ENUM_DEAL_REASON)HistoryDealGetInteger(deal_ticket,DEAL_REASON);
               if(deal_entry==DEAL_ENTRY_OUT)                           // check entrytype
                //if(deal_reason==DEAL_REASON_SL)                       // check reason
                     {
                        deal_commiss = HistoryDealGetDouble (deal_ticket,DEAL_COMMISSION);
                        deal_swap    = HistoryDealGetDouble (deal_ticket,DEAL_SWAP);
                        deal_profit  = HistoryDealGetDouble (deal_ticket,DEAL_PROFIT);
                        deal_result  = deal_commiss+deal_swap+deal_profit;
                        return(deal_result);
                     }
            }
      }
   return(NULL);
}

double LastDealsPrice(string _symbol, int back=3600)
{
   datetime limit=TimeCurrent();
   datetime start=limit-back;                   // 3600=seconds of 1 hour, 86400=seconds of 1 day

   if(!HistorySelect(start,limit))              // select history
      return(NULL);                             // no history available

   uint     idx, 
            idxMax=HistoryDealsTotal()-1;
   ulong    deal_ticket;
   string   deal_symbol;
   long     deal_entry;
   long     deal_reason;
   
   double   deal_price;

   for(idx=idxMax; idx>0; idx--)
      {
         deal_ticket = HistoryDealGetTicket(idx);                       // get ticket
         deal_symbol = HistoryDealGetString(deal_ticket,DEAL_SYMBOL);   // get symbol
         if(deal_symbol==_symbol)                                       // check symbol
            {
               deal_entry  = (ENUM_DEAL_ENTRY )HistoryDealGetInteger(deal_ticket,DEAL_ENTRY);
               deal_reason = (ENUM_DEAL_REASON)HistoryDealGetInteger(deal_ticket,DEAL_REASON);
               if(deal_entry==DEAL_ENTRY_OUT)                           // check entrytype
                //if(deal_reason==DEAL_REASON_SL)                       // check reason
                     {
                        deal_price   = HistoryDealGetDouble (deal_ticket,DEAL_PRICE);
                        return(deal_price);
                     }
            }
      }
   return(NULL);
}

Für Donations siehe mein Profil.

 
Bayne:

Ich muss irgendwie auf Informationen eines speziellen nun geschlossen Deals kommen, von dem ich zu lebzeiten (also direkt nach dem zeitpunkt der erstellung) etwas abrfragen kann, POSITION_IDENTIFIER hört sich richtig an oder?

Wenn die Position dann geschlossen ist, muss ich hier dran kommen:

long  HistoryDealGetInteger(
   ulong                       ticket_number,     // Ticket
   ENUM_DEAL_PROPERTY_INTEGER  property_id        // Identifikator der Eigeschaft
   );

das will aber nicht klappen, also was genau ist hierbei mit Ticket gemeint & wie komme ich an dieses Zu Lebzeiten der Position ran?


Einfach durchloopen, macht für mich wenig sinn, da wir zu lebzeiten der Position eine Nummer auswählen müssen

ist das eine möglichkeit?

ulong  HistoryDealGetTicket(
   int  index      // Nummer des Deals
   );

Was willst du denn machen?

 
Otto Pauser:

Falls es sich um MQL5 handelt kannst du sicher mit diesem Code was anfangen.

Aus meiner umfangreichen Bibliothek:

Für Donations siehe mein Profil.

Das ist Leider nicht was ich suche, vielmehr muss der identifikator, direkt nach der Positionseröffnung (also wenn die Position offen ist) erfasst werden. Ich will nachdem die Position geschlossen wurde, mit dieser Identifikatornummer die Informationen abfragen.

Bei deiner Option wird einfach durchgeloopt, und das will ich eher vermeiden.

 
Bayne:

Das ist Leider nicht was ich suche, vielmehr muss der identifikator, direkt nach der Positionseröffnung (also wenn die Position offen ist) erfasst werden. Ich will nachdem die Position geschlossen wurde, mit dieser Identifikatornummer die Informationen abfragen.

Bei deiner Option wird einfach durchgeloopt, und das will ich eher vermeiden.

Jede position hat eine order nummer, die geht von der pending order in die position und dann weiter in die closed order, bei einer market order ist das die posi5ion nimmer, die kannst verwenden in der order history 

 

Du brauchst also das Ticket der Position.

Im Netting-Mode ist das sehr simpel:

if(PositionSelect(_Symbol))
   ulong ticket=PositionGetInteger(POSITION_TICKET);

Im Hedging-Mode musst du durch die Positionen iterieren.

Beispiel, musst du für deine Zwecke umbauen:

void CloseAll(string aSymbol=NULL)
{
   int i;
   ulong ticket;

   if(aSymbol==NULL)
      aSymbol=_Symbol;

   for(i=PositionsTotal(); i>=0; i--)
      if(PositionGetSymbol(i)==aSymbol)
         {
            ticket=PositionGetTicket(i);
            if(ticket>0)
               Trade.PositionClose(ticket);
         }
}
 

Damit jeder weiß was Bayne möchte :-)

Siehe letzter Thread https://www.mql5.com/de/forum/307954/page2

Kann Jemand die korrekte Verwendung von OnTradeTransaction erklären?
Kann Jemand die korrekte Verwendung von OnTradeTransaction erklären?
  • 2019.03.24
  • www.mql5.com
Trotz der sehr umfassenden Doku, verstehe ich immernoch nicht sie korrekt anzuwenden: Hat jemand evtl. ein korrektes Beispiel...
 
amando:

Jede position hat eine order nummer, die geht von der pending order in die position und dann weiter in die closed order, bei einer market order ist das die posi5ion nimmer, die kannst verwenden in der order history 

Wie genau finde ich diese raus? meinst :
POSITION_IDENTIFIER oder ORDER_POSITION_ID oder POSITION_TICKET

Welche ist das

 
Bayne:
Wie genau finde ich diese raus? meinst :

Welche ist das

Auswendig kann ich dir das nicht sagen, aber in der domu stehts bei position und order information, das weis ich noch, bin nicht am pc


wobei bei on trade tranaction brauchst du das ja nicht, da kannst du ja den deal abfangen und die iformationen abfragen

 

Lies mal den Artikel: https://www.mql5.com/de/articles/211: Orders, Positions und Abschlüsse in MetaTrader 5


Da findest Du Lösungen für alle Deine Fragen. Wenn Du nicht alles lesen willst, ctrl-f & POSITION_IDENTIFIER

Orders, Positions und Abschlüsse in MetaTrader 5
Orders, Positions und Abschlüsse in MetaTrader 5
  • www.mql5.com
Jeder Händler verfolgt als ultimatives Ziel mit den Mitteln von Handels-Operationen in Finanzmärkten Gewinne zu machen. Dieser Beitrag beschreibt die Begriffe und Vorgänge der MetaTrader 5 Handels-Plattform, deren Kenntnis zum angemessenen Verständnis der Funktionsweise von Handelsfunktionen der MQL5 Sprache notwendig ist Orders — sind die...
Grund der Beschwerde: