HistorySelectByPosition

Recupera la cronistoria delle operazioni e degli ordini tramite l'identificativo di posizione specificato.

bool  HistorySelectByPosition(
   long   position_id     // identificativo della posizione - POSITION_IDENTIFIER
   );

Parametri

position_id

[in] Identificativo della posizione che è impostato per ogni ordine eseguito ed ogni operazione.

Valore restituito

Restituisce true se ha successo, altrimenti restituisce false.

Nota

Non confondere gli ordini della cronistoria di trading con gli attuali ordini pendenti che vengono visualizzati nella scheda "Trade" della barra "BoxAttrezzi". L'elenco degli ordini che sono stati cancellati o hanno portato ad una transazione, possono essere visualizzati nella scheda "Cronistoria" del "BoxAttrezzi" del terminale client.

HistorySelectByPosition() crea in un programma mql5 un elenco di ordini ed un elenco delle operazioni con un determinato identificativo della posizione per ulteriore riferimento agli elementi dell'elenco utilizzando le funzioni appropriate. Per conoscere la grandezza della lista delle operazioni, utilizzare la funzione HistoryDealsTotal(), la grandezza della lista degli ordini nella cronistoria può essere ottenuta usando HistoryOrdersTotal(). Per scorrere attraverso gli elementi della lista degli ordini, utilizzare HistoryOrderGetTicket(), per gli elementi della lista delle operazioni - HistoryDealGetTicket().

Dopo aver usato HistoryOrderSelect(), l'elenco degli ordini della cronistoria disponibili per il programma mql5 viene azzerato e riempito di nuovo con l'ordine trovato, se la ricerca di un ordine dal suo ticket ha avuto successo. Lo stesso si riferisce alla lista delle operazioni disponibili per il programma mql5 - viene resettato dalla funzione HistoryDealSelect() ed è riempito di nuovo, se un'operazione è stata trovata con successo dal numero di ticket.

Esempio:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   long  pos_id_array[];         // array per la memorizzazione degli ID delle posizioni
 
//--- richiedere l'intera cronologia
   if(!HistorySelect(0TimeCurrent()))
     {
      Print("HistorySelect() failed. Error "GetLastError());
      return;
     }
     
//--- raccogliere nell'array tutti i Position ID (Identificativi delle Posizioni) solo per gli ordini pendenti
   int total=HistoryOrdersTotal();
   for(int i=0i<totali++)
     {
      ulong ticket=HistoryOrderGetTicket(i);
      if(ticket==0)
         continue;
      ENUM_ORDER_TYPE type=(ENUM_ORDER_TYPE)HistoryOrderGetInteger(ticketORDER_TYPE);
      long pos_id=HistoryOrderGetInteger(ticketORDER_POSITION_ID);
      if(type<=ORDER_TYPE_SELL || pos_id==0)
         continue;
      
      int size=ArraySize(pos_id_array);
      if(ArrayResize(pos_id_arraysize+1)==size+1)
         pos_id_array[size]=pos_id;
     }
   
//-- per elenco di identificativi delle posizioni nell'array
   total=ArraySize(pos_id_array);
   for(int i=0i<totali++)
     {
      //--- stampare l'intestazione, nonché l'ordine della posizione e la lista delle operazioni
      long position_id=pos_id_array[i];
      Print("List of orders and deals for position with ID: "position_id);
      HistorySelectByPositionProcess(position_id);
     }
   /*
   risultato:
   List of orders and deals for position with ID1819629924
     [0Order Sell Limit #1819629924
     [1Order Buy #1819633194
     [0Entry In Deal Sell #1794972472
     [1Entry Out Deal Buy #1794975589
   List of orders and deals for position with ID1841753970
     [0Order Sell Stop #1841753970
     [1Order Buy #1842322160
     [0Entry In Deal Sell #1817242142
     [1Entry Out Deal Buy #1817765341
   */
  }
//+----------------------------------------------------------------------------------------------------------+
//| Selezionare la cronologia degli ordini e delle operazioni per ID posizione e                             |
//| stampare una lista degli ordini e delle operazioni per la posizione nel journal                          |
//+----------------------------------------------------------------------------------------------------------+
bool HistorySelectByPositionProcess(const long position_id)
  {
//--- richiedere la cronologia delle operazioni e degli ordini con l'ID della posizione specificato
   if(!HistorySelectByPosition(position_id))
     {
      PrintFormat("HistorySelectByPosition(%I64d) failed. Error %d"position_idGetLastError());
      return(false);
     }
     
//--- stampare un elenco di ordini di posizione
   int orders_total=HistoryOrdersTotal();
   for(int i=0i<orders_totali++)
     {
      ulong ticket=HistoryOrderGetTicket(i);
      if(ticket==0)
         continue;
      ENUM_ORDER_TYPE order_type=(ENUM_ORDER_TYPE)HistoryOrderGetInteger(ticketORDER_TYPE);
      PrintFormat("  [%d] Order %s #%I64u"iOrderTypeDescription(order_type), ticket);
     }
     
//--- stampare una lista di operazioni di posizione nel journal
   int deals_total =HistoryDealsTotal();
   for(int i=0i<deals_totali++)
     {
      ulong ticket=HistoryDealGetTicket(i);
      if(ticket==0)
         continue;
      ENUM_DEAL_ENTRY deal_entry=(ENUM_DEAL_ENTRY)HistoryDealGetInteger(ticketDEAL_ENTRY);
      ENUM_DEAL_TYPE  deal_type= (ENUM_DEAL_TYPE)HistoryDealGetInteger(ticketDEAL_TYPE);
      if(deal_type!=DEAL_TYPE_BUY && deal_type!=DEAL_TYPE_SELL)
         continue;
      PrintFormat("  [%d] Entry %s Deal %s #%I64u"iDealEntryDescription(deal_entry), DealTypeDescription(deal_type), ticket);
     }
   return(true);
  }
//+------------------------------------------------------------------+
//| Restituire la descrizione del tipo di ordine                     |
//+------------------------------------------------------------------+
string OrderTypeDescription(const ENUM_ORDER_TYPE type)
  {
   switch(type)
     {
      case ORDER_TYPE_BUY              :  return("Buy");
      case ORDER_TYPE_SELL             :  return("Sell");
      case ORDER_TYPE_BUY_LIMIT        :  return("Buy Limit");
      case ORDER_TYPE_SELL_LIMIT       :  return("Sell Limit");
      case ORDER_TYPE_BUY_STOP         :  return("Buy Stop");
      case ORDER_TYPE_SELL_STOP        :  return("Sell Stop");
      case ORDER_TYPE_BUY_STOP_LIMIT   :  return("Buy Stop Limit");
      case ORDER_TYPE_SELL_STOP_LIMIT  :  return("Sell Stop Limit");
      default                          :  return("Unknown order type: "+(string)type);
     }
  }
//+-------------------------------------------------------------------------------------+
//| Restituire la descrizione del tipo di operazione di posizione                       |
//+-------------------------------------------------------------------------------------+
string DealTypeDescription(const ENUM_DEAL_TYPE type)
  {
   switch(type)
     {
      //--- restituire la descrizione solo delle operazioni Buy e Sell,
      //--- poiché tutti gli altri tipi non si applicano alle posizioni
      case DEAL_TYPE_BUY   :  return("Buy");
      case DEAL_TYPE_SELL  :  return("Sell");
      default              :  return("Unknown deal type: "+(string)type);
     }
  }
//+------------------------------------------------------------------------+
//| Restituire la modalità di variazione della posizione                   |
//+------------------------------------------------------------------------+
string DealEntryDescription(const ENUM_DEAL_ENTRY entry)
  {
   switch(entry)
     {
      case DEAL_ENTRY_IN      :  return("In");
      case DEAL_ENTRY_OUT     :  return("Out");
      case DEAL_ENTRY_INOUT   :  return("InOut");
      case DEAL_ENTRY_OUT_BY  :  return("Out by");
      case DEAL_ENTRY_STATE   :  return("Status record");
      default                 :  return("Unknown deal entry: "+(string)entry);
     }
  }

Vedi anche

HistorySelect(), HistoryOrderGetTicket(), Proprietà degli Ordini