HistorySelectByPosition

Belirli bir pozisyon tanımlayıcısı ile, emir ve işlem geçmişini düzeltir.

bool  HistorySelectByPosition(
   long   position_id     // pozisyon tanımlayıcı - POSITION_IDENTIFIER
   );

Parametreler

position_id

[in]  Her işlenmiş emir ve her işlem için ayarlanan pozisyon tanımlayıcısı.

Dönüş değeri

Başarı durumunda 'true', aksi durumda 'false' dönüşü yapar.

Not

Alım-satım geçmişindeki emirlerle - "AraçKutusu" çubuğunun "Trade" sekmesinde görünen - bekleyen emirleri birbirine karıştırmayın. İptal edilmiş veya bir faaliyete konu olmuş emirler, "AraçKutusu" çubuğunun "Geçmiş" sekmesinde bulunabilir.

HistorySelectByPosition() fonksiyonu, daha sonraki başvurular için MQL5 programının içinde pozisyon tanımlayıcısı ile belirtilen bir emir listesi ve bir işlem listesi oluşturur. İşlem listesinin uzunluğunu öğrenmek için HistoryDealsTotal() fonksiyonunu, emir listesinin uzunluğunu almak içinse HistoryOrdersTotal() fonksiyonunu kullanın. Emir listesinin elemanlarını gözden geçirmek için HistoryOrderGetTicket() fonksiyonunu, işlem listesinin elemanları içinse HistoryDealGetTicket() fonksiyonunu kullanın.

HistoryOrderSelect() fonksiyonunu kullandıktan sonra, MQL5 programında mevcut bulunan emir geçmişi sıfırlanır ve emrin fiş ile aranması başarıyla tamamlanmışsa, bulunan emirlerle yeniden doldurulur. Aynısı, MQL5 programında mevcut bulunan işlem geçmişi içinde geçerlidir - HistoryDealSelect() ile sıfırlanır. Sonra işlemi fiş ile arama başarılı olursa yeniden doldurulur.

Örnek:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   long  pos_id_array[];         // pozisyon kimliklerini saklamak için dizi
 
//--- tüm geçmişi talep et
   if(!HistorySelect(0TimeCurrent()))
     {
      Print("HistorySelect() failed. Error "GetLastError());
      return;
     }
     
//--- sadece bekleyen emirlerden tüm pozisyon kimliklerini dizide topla
   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;
     }
   
//--- dizideki pozisyon kimliği listesine göre
   total=ArraySize(pos_id_array);
   for(int i=0i<totali++)
     {
      //--- başlığı ve pozisyonun emir ve işlem listesini yazdır
      long position_id=pos_id_array[i];
      Print("List of orders and deals for position with ID: "position_id);
      HistorySelectByPositionProcess(position_id);
     }
   /*
   sonuç:
   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
   */
  }
//+------------------------------------------------------------------+
//| Pozisyon kimliğine göre emir ve işlem geçmişini seç ve           |
//| pozisyonun emir ve işlem listesini günlüğe yazdır                |
//+------------------------------------------------------------------+
bool HistorySelectByPositionProcess(const long position_id)
  {
//--- belirtilen pozisyon kimliğine sahip işlem ve emirlerin geçmişini talep et
   if(!HistorySelectByPosition(position_id))
     {
      PrintFormat("HistorySelectByPosition(%I64d) failed. Error %d"position_idGetLastError());
      return(false);
     }
     
//--- pozisyon emirlerinin listesini yazdır
   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);
     }
     
//--- pozisyon işlemlerinin listesini günlüğe yazdır
   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);
  }
//+------------------------------------------------------------------+
//| Emir türü açıklamasını geri döndür                               |
//+------------------------------------------------------------------+
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);
     }
  }
//+------------------------------------------------------------------+
//| Pozisyon işlem türü açıklamasını geri döndür                     |
//+------------------------------------------------------------------+
string DealTypeDescription(const ENUM_DEAL_TYPE type)
  {
   switch(type)
     {
      //--- diğer tüm türler pozisyon için geçerli olmadığından,
      //--- yalnızca alış ve satış işlemlerinin açıklamasını geri döndür
      case DEAL_TYPE_BUY   :  return("Buy");
      case DEAL_TYPE_SELL  :  return("Sell");
      default              :  return("Unknown deal type: "+(string)type);
     }
  }
//+------------------------------------------------------------------+
//| Pozisyon değişim yöntemini geri döndür                           |
//+------------------------------------------------------------------+
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);
     }
  }

Ayrıca Bakınız

HistorySelect(), HistoryOrderGetTicket(), Emir özellikleri