PositionGetDouble

PositionGetSymbol veya PositionSelect kullanılarak önceden seçilmiş olan açık pozisyonun bir özelliğine dönüş yapar. Pozisyon özelliği double tipinde olmalıdır. Fonksiyonun iki türü mevcuttur.

1. Hızlı bir şekilde özellik değerine dönüş yapar.

double  PositionGetDouble(
   ENUM_POSITION_PROPERTY_DOUBLE  property_id      // özellik tanımlayıcı
   );

2. Fonksiyonun başarısına bağlı olarak 'true' veya 'false' değerlerinden birine dönüş yapar. Başarı durumunda özellik değeri referansla geçirilen son parametreye girilir.

bool  PositionGetDouble(
   ENUM_POSITION_PROPERTY_DOUBLE  property_id,     // özellik tanımlayıcı
   double&                        double_var       // özellik değerini burada kabul ediyoruz
   );

Parametreler

property_id

[in]  Pozisyon özelliğinin tanımlayıcısı. bu değişkenin ENUM_POSITION_PROPERTY_DOUBLE sayımının değerlerinden birini labilir.

double_var

[out]  İstenen özellik değerini alacak olan double tipli değişken.

Dönüş Değeri

double tipli değer. Başarısız sonuç duruunda, 0 dönüşü yapar.

Not

Netleştirme (netting) sisteminde (ACCOUNT_MARGIN_MODE_RETAIL_NETTING ve ACCOUNT_MARGIN_MODE_EXCHANGE) bir sembol üzerinde sadece bir pozisyon bulunabilir. Bu pozisyon bir veya daha fazla işlemin sonucu açılmış olabilir. Müşteri terminalinde Araçkutusunun "İşlem" sekmesi içinde birlikte gösterilen mevcut bekleyen emirler ve pozisyonlar birbirleriyle karıştırılmamalıdır.

Çoklu pozisyonlara izin verilemsi durumunda (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) bir sembol üzerinde birden fazla pozisyon açılabilir.

Güncel verinin alınabilmesi için PositionSelect() çağrısının değişikliklerden sonra yapıldığından emin olmanız gerekir.

Örnek:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- hesaptaki tüm pozisyonlara göre bir döngü içerisinde
   int total=PositionsTotal();
   for(int i=0i<totali++)
     {
      //--- özelliklerine erişmek için otomatik olarak seçerek bir sonraki pozisyonun fişini al
      ulong ticket=PositionGetTicket(i);
      if(ticket==0)
         continue;
      
      //--- pozisyonun türünü al ve seçilen pozisyonun reel özelliklerinin listesi için başlığı görüntüle
      string type=(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE ? "Buy" : "Sell");
      PrintFormat("Double properties of an open position %s #%I64u:"typeticket);
      
      //--- seçilen pozisyonun tüm reel özelliklerini başlık altında yazdır
      PositionPropertiesDoublePrint(15);
     }
   /*
   sonuç:
   Double properties of an open position Buy #2807075208:
   Volume:        1.00
   Price open:    1.10516
   StopLoss:      0.00000
   TakeProfit:    0.00000
   Price current1.10518
   Swap:          0.00
   Profit:        2.00 USD
   */
  }
//+------------------------------------------------------------------+
//| Seçilen pozisyonun reel özelliklerini günlükte görüntüle  |
//+------------------------------------------------------------------+
void PositionPropertiesDoublePrint(const uint header_width=0)
  {
   uint   w=0;
   string header="";
   double value=0;
   
//--- hesap para birimini, pozisyon sembolünü ve bu sembolün ondalık basamak sayısını al
   string currency=AccountInfoString(ACCOUNT_CURRENCY);
   string symbol  =PositionGetString(POSITION_SYMBOL);
   int    digits  =(int)SymbolInfoInteger(symbolSYMBOL_DIGITS);
   
//--- başlık metnini ve başlık alanının genişliğini tanımla
//--- başlık genişliği fonksiyona sıfıra eşit olarak aktarılırsa, genişlik başlık satırının boyutu + 1 olacaktır
   header="Volume:";
   w=(header_width==0 ? header.Length()+1 : header_width);
//--- pozisyon hacmini al ve belirtilen başlık genişliğiyle günlükte görüntüle
   if(!PositionGetDouble(POSITION_VOLUMEvalue))
      return;
   PrintFormat("%-*s%-.2f"wheadervalue);
   
//--- pozisyon fiyatını günlükte görüntüle
   header="Price open:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_PRICE_OPENvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
   
//--- Zararı Durdur seviyesini günlükte görüntüle
   header="StopLoss:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_SLvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
   
//--- Kârı Al seviyesini günlükte görüntüle
   header="TakeProfit:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_TPvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
 
//--- mevcut fiyat değerini günlükte görüntüle
   header="Price current:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_PRICE_CURRENTvalue))
      return;
   PrintFormat("%-*s%-.*f"wheaderdigitsvalue);
 
//--- birikmiş swapı günlükte görüntüle
   header="Swap:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_SWAPvalue))
      return;
   PrintFormat("%-*s%-.2f"wheadervalue);
 
//--- mevcut kâr değerini günlükte görüntüle
   header="Profit:";
   w=(header_width==0 ? header.Length()+1 : header_width);
   if(!PositionGetDouble(POSITION_PROFITvalue))
      return;
   PrintFormat("%-*s%-.2f %s"wheadervaluecurrency);
  }

Ayrıca bakınız

PositionGetSymbol(), PositionSelect(), Pozisyon Özellikleri