OrderCalcProfit

Mevcut hesap için kar miktarını hesaplar. Hesaplama, mevcut piyasa ortamına göre ve geçirilen parametreler bazında yapılır. Bu fonksiyon, bir alım-satım işlemin sonucu için ön değerlendirme amacıyla kullanılır. Değere, hesaptaki para birimi cinsinden dönüş yapılır.

bool  OrderCalcProfit(
   ENUM_ORDER_TYPE       action,           // emir tipi (ORDER_TYPE_BUY veya ORDER_TYPE_SELL)
   string                symbol,           // sembol ismi
   double                volume,           // hacim
   double                price_open,       // açılış fiyatı
   double                price_close,      // kapanış fiyatı
   double&               profit            // kar değerinin alınacağı değişken
   );

Parametreler

action

[in]  Emir tipi, ENUM_ORDER_TYPE değerlerinden biri olabilir: ORDER_TYPE_BUY veya ORDER_TYPE_SELL.

symbol

[in]  Sembol ismi.

volume

[in]  Alım-satım işleminin hacmi.

price_open

[in]  Açılış fiyatı.

price_close

[in]  Kapanış fiyatı.

profit

[out]  Fonksiyonun başarılı olması durumunda, hesaplanan kar değerinin yazılacağı değişken. Hesaplanan kar değeri bir çok faktöre bağlıdır ve farklı piyasa koşullarına göre değişim gösterebilir.

Dönüş değeri

Başarı durumunda 'true' değerine, aksi durumda 'false' değerine dönüş yapacaktır. Geçersiz emir tipi belirtilmişse 'false' dönüşü yapar. Hata hakkında bilgi almak için GetLastError() fonksiyonunu çağırın.

Örnek:

 
#define   VOLUME     1.0   // emir hacmi
#define   DEVIATION  100   // kapanış fiyatından önceki puan sayısı
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   string currency_profit=SymbolInfoString(_Symbol,SYMBOL_CURRENCY_PROFIT);   // kâr para birimi
   double close_price=ChartPriceOnDropped(); // komut dosyasının fare kullanılarak bırakıldığı noktaya karşılık gelen fiyat koordinatı, kapanış fiyatı olarak işlev görür
 
//---
   for(int i=0i<=ORDER_TYPE_SELLi++)
     {
      ENUM_ORDER_TYPE order_type=(ENUM_ORDER_TYPE)i;                 // emir türü: 0 - Alış, 1 - Satış
      double open_price=PriceOpenByOrderType(_Symbolorder_type);   // açılış fiyatı: Alış için - Ask, Satış için - Bid
     
      //--- açılış fiyatı alınmazsa, döngüye devam et
      if(open_price==0)
         continue;
      
      //--- kapanış fiyatı sıfırsa (kod grafiğe sürüklenerek başlatılmadıysa), fiyatı hesapla
      if(close_price==0)
         close_price=(order_type==ORDER_TYPE_BUY ? open_price + DEVIATION * _Point : open_price - DEVIATION * _Point);
      
      //--- iletilen parametrelere dayanarak mevcut hesap ve piyasa ortamı için yaklaşık kâr büyüklüğünü hesapla
      double profit=0;
      ResetLastError();
      if(!OrderCalcProfit(order_type_SymbolVOLUMEopen_priceclose_priceprofit))
        {
         Print("OrderCalcProfit() failed. Error "GetLastError());
         continue;
        }
      
      //--- elde edilen kâr değerini günlüğe yazdır
      PrintFormat("Estimated profit for %.2f %s position on %s with opening price of %.*f and closing price of %.*f: %.2f %s",
                  VOLUMEOrderTypeDescription(order_type), _Symbol_Digitsopen_price_Digitsclose_priceprofitcurrency_profit);
      
     }
   /*
   sonuç:
   Estimated profit for 1.00 Buy position on EURUSD with opening price of 1.10757 and closing price of 1.10881124.00 USD
   Estimated profit for 1.00 Sell position on EURUSD with opening price of 1.10753 and closing price of 1.10881: -128.00 USD
   */
  }
//+------------------------------------------------------------------+
//| Emir türüne göre açılış fiyatını geri döndür                     |
//+------------------------------------------------------------------+
double PriceOpenByOrderType(const string symbolconst ENUM_ORDER_TYPE order_type)
  {
   MqlTick tick={};
 
//--- sembole göre son fiyatları al
   if(!SymbolInfoTick(symboltick))
     {
      Print("SymbolInfoTick() failed. Error "GetLastError());
      return 0;
     }
     
//--- emir türüne bağlı olarak fiyatı geri döndür
   switch(order_type)
     {
      case ORDER_TYPE_BUY              :  return(tick.ask);
      case ORDER_TYPE_SELL             :  return(tick.bid);
      default                          :  return(0);
     }
  }
//+------------------------------------------------------------------+
//| Emir türü açıklamasını geri döndür                               |
//+------------------------------------------------------------------+
string OrderTypeDescription(const ENUM_ORDER_TYPE order_type)
  {
   switch(order_type)
     {
      case ORDER_TYPE_BUY              :  return("Buy");
      case ORDER_TYPE_SELL             :  return("Sell");
      default                          :  return("Unknown order type");
     }
  }

Ayrıca Bakınız

OrderSend(), Emir Özellikleri, Alım-Satım İşlem Tipleri