Fiyat Sabitleri

Teknik göstergelerin hesaplanması, hesaplamada kullanılacak fiyat ve/veya hacim değerlerini gerektirir. Hesaplamada kullanılacak fiyat temelinin belirlenmesi için, ENUM_APPLIED_PRICE sayımı içinde 7 adet hazır tanıtıcı bulunmaktadır.

ENUM_APPLIED_PRICE

Tanıtıcı

Açıklama

PRICE_CLOSE

Kapanış fiyatı

PRICE_OPEN

Açılış fiyatı

PRICE_HIGH

Periyot içi maksimum fiyat

PRICE_LOW

Periyot içi maksimum fiyat

PRICE_MEDIAN

Medyan fiyat, (high + low)/2

PRICE_TYPICAL

Tipik fiyat, (high + low + close)/3

PRICE_WEIGHTED

Ağırlıklı ortalama fiyat, (high + low + close + close)/4

Eğer hesaplama için hacim değerleri kullanılacaksa, ENUM_APPLIED_VOLUME sayımındaki iki değerden birinin belirtilmesi gereklidir.

ENUM_APPLIED_VOLUME

Tanıtıcı

Açıklama

VOLUME_TICK

Tik hacmi

VOLUME_REAL

Alım-satım hacmi

iStochastic() teknik göstergesi şu iki yoldan biri ile hesaplanabilir:

  • ya sadece Close fiyatları;
  • ya da High ve Low fiyatları.

Hesaplamada kullanılmak istenilen gerekli bir varyantın seçilebilmesi için, ENUM_STO_PRICE sayımının değerlerinden biri belirtilmelidir.

ENUM_STO_PRICE

Tanıtıcı

Açıklama

STO_LOWHIGH

Low/High fiyatları temelinde hesaplama

STO_CLOSECLOSE

Close/Close fiyatları temelinde hesaplama

Eğer bir teknik gösterge, hesaplamalar için, tipi ENUM_APPLIED_PRICE ile ayarlanmış fiyat verisini kullanıyorsa, o zaman (terminalde kurulu veya bir kullanıcı tarafından yazılmış) herhangi bir göstergenin tanıtıcı değeri, giriş fiyat serisi olarak kullanılabilir. Bu durumda, hesaplamalar için sıfır tamponunun değerleri kullanılacaktır. Bu şekilde, bir göstergenin değerleri ile başka bir göstergenin kurulması kolaylaşır. Özel bir göstergenin tanıtıcı değeri iCustom() fonksiyonu kullanılarak oluşturulur.

Örnek:

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
//--- giriş parametreleri
input int      RSIperiod=14;         // RSI hesabı için periyot
input int      Smooth=8;             // RSI düzleştirme periyodu
input ENUM_MA_METHOD meth=MODE_SMMA// Düzleştirme yöntemi
//---- plot RSI
#property indicator_label1  "RSI"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//---- plot RSI_Smoothed
#property indicator_label2  "RSI_Smoothed"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrNavy
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
//--- gösterge tamponları
double         RSIBuffer[];          // Buraya RSI değerlerini depolayacağız
double         RSI_SmoothedBuffer[]; // Burada düzgünleştirilmiş RSI değerleri yer alacak
int            RSIhandle;            // RSI göstergesinin tanıtıcı değeri
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- gösterge tamponlarının eşlenmesi
   SetIndexBuffer(0,RSIBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,RSI_SmoothedBuffer,INDICATOR_DATA);
   IndicatorSetString(INDICATOR_SHORTNAME,"iRSI");
   IndicatorSetInteger(INDICATOR_DIGITS,2);
//--- 
   RSIhandle=iRSI(NULL,0,RSIperiod,PRICE_CLOSE);
//---
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                 const int prev_calculated,
                 const int begin,
                 const double &price[]
                 )
 
  {
//--- Son hata değerini sıfırla
   ResetLastError();
//--- RSI gösterge verisini, RSIBuffer[] dizisinden al
   int copied=CopyBuffer(RSIhandle,0,0,rates_total,RSIBuffer);
   if(copied<=0)
     {
      Print("RSI göstergesinin değerleri kopyalanamıyor. Hata = ",
            GetLastError(),",  kopyalanan =",copied);
      return(0);
     }
//--- RSI değerlerini kullanarak, ortalama değerli göstergeyi oluştur
   int RSI_MA_handle=iMA(NULL,0,Smooth,0,meth,RSIhandle);
   copied=CopyBuffer(RSI_MA_handle,0,0,rates_total,RSI_SmoothedBuffer);
   if(copied<=0)
     {
      Print("Düzleştirilmiş RSI göstergesi kopyalanamıyor. Hata = ",
            GetLastError(),",  kopyalanan =",copied);
      return(0);
     }
//--- bir sonraki çağrı için prev_calculated değerine dönüş yap
   return(rates_total);
  }