Kitaplıklar: MovingAverages

 

MovingAverages:

MovingAverages kütüphanesi, farklı hareketli ortalama türlerinin hesaplanması için fonksiyonlar içerir.

Yazar: MetaQuotes

 

Satır:

   if(period<=1 || rates_total-begin<period) return(0);

katı olmayan bir eşitlik olmalıdır:

   if(period<1 || rates_total-begin<period) return(0);
Aksi takdirde, örneğin MACD.mq5 teslim kodunu derlerseniz ve InpSignalSMA=1 olarak ayarlarsanız, MACD çizgisine eşit olması gerekirken Sinyal çizgisi sıfıra eşit olacaktır.
 
ExponentiaMA fonksiyonunda prev_value 3. parametresinin girilmesinin anlamını tam olarak anlamıyorum. Ortalamayı hesaplamak için saf bir formülde önceki dönemin değerine ihtiyacınız olduğu açıktır, ancak bence işlev bu değeri dahili olarak saysaydı ve SimpleMA'da olduğu gibi işleve yalnızca 3 veri girilmesi gerekseydi ortalama bir kişi için daha net olurdu.
 

Neden son parametre weightsum'a ihtiyacınız var?

int LinearWeightedMAOnBuffer(const int rates_total,const int prev_calculated,const int begin,const int period,const double& price[],double& buffer[],int &weightsum)

diğer 3 fonksiyonda ise yoktur. Eğer hala ihtiyaç duyuluyorsa, weightsum=0 harici değişkenini başlatırken nasıl kullanılacağı, diğer fonksiyonlar çarpık çalışır ve sıfıra bölme hatası üretir.

 
elibrarius:

Bu nedenle, her LWMA için LinearWeightedMAOnBuffer() fonksiyonuna aktaracağımız global bir değişkene ihtiyacımız var,

Örneğin, eğer 2 LWMA varsa, o zaman küresel olarak aşağıdakiler beyan edilmelidir

int weightsum1;
int weightsum2;

ve sonra bunları fonksiyona geçirmeniz gerekir.

int weightsum1; int weightsum2; ... bildirilerek kontrol edilir. global seviyede. Hesaplamaları doğru şekilde yapar.
 
Maxim Khrolenko #:
ExponentiaMA fonksiyonunda 3. parametre prev_value girmenin anlamını tam olarak anlamıyorum. Ortalamayı hesaplamak için saf bir formülde önceki dönemin değerine ihtiyacınız olduğu açıktır, ancak bence işlev bu değeri dahili olarak sayarsa ortalama bir kişi için daha net olur ve SimpleMA'da olduğu gibi işleve yalnızca 3 veri girilmelidir.

Kesinlikle katılıyorum! Nasıl kullanılacağı net değil. Sonunda ExponentialMAOnBuffer'ı seçtim çünkü prev_value'yu nereden alacağımı anlamadım. Bu işlevler, Uzman Danışmandan harici bir gösterge çağırmak için değil, içindeki her şeyi okumak için gereklidir. Geliştirici ne önerdi?

Bana "Prostokvashino" karikatüründen bir alıntıyı hatırlatıyor - "İhtiyacınız olmayan bir şeyi satmak için önce ihtiyacınız olmayan bir şeyi satın almalısınız ve paramız yok".

 
Konstantin Efremov #:

Kesinlikle katılıyorum! Nasıl kullanılacağı açık değil. Sonunda, ExponentialMAOnBuffer'ı seçtim çünkü prev_value'yu nereden alacağımı anlamadım. Bu işlevler, Uzman Danışmandan harici bir gösterge çağırmak için değil, içindeki her şeyi okumak için gereklidir. Geliştirici ne önerdi?

Bu bana "Prostokvashino" çizgi filminden bir alıntıyı hatırlatıyor: "İhtiyacınız olmayan bir şeyi satmak için önce ihtiyacınız olmayan bir şeyi satın almalısınız ve bizim paramız yok".

Evet, katılıyorum. Aynısı için de geçerli:

//+------------------------------------------------------------------+
//| Düzeltilmiş Hareketli Ortalama|
//+------------------------------------------------------------------+
double SmoothedMA(const int position,const int period,const double prev_value,const double &price[])
  {
   double result=0.0;
//--- kontrol süresi
   if(period>0 && period<=(position+1))
     {
      if(position==period-1)
        {
         for(int i=0; i<period; i++)
            result+=price[position-i];

         result/=period;
        }

      result=(prev_value*(period-1)+price[position])/period;
     }

   return(result);
  }

Sarı renkteki kodun nasıl hesaplandığı önemli değildir. Sonuç yine de yeşil bir dize olacaktır. Ve bu standart MT5 kütüphanelerinde! Evet!

İşlevi geliştirin, aksi takdirde işe yaramaz. MQL5'te, birkaç enstrümanda MA değerlerini hesaplamanız gerektiğinde çok kullanışlıdır. Ve hangilerinin olduğu önceden bilinmemektedir. Piyasaya genel bakıştan tüm enstrümanların MA tutamaçlarını oluşturamazsınız!

 
Konstantin Efremov #:

Kesinlikle katılıyorum! Nasıl kullanılacağı açık değil. Sonunda, ExponentialMAOnBuffer'ı seçtim çünkü prev_value'yu nereden alacağımı anlamadım. Bu işlevler, Uzman Danışmandan harici bir gösterge çağırmak için değil, içindeki her şeyi okumak için gereklidir. Geliştirici ne önerdi?

Bu bana "Prostokvashino" çizgi filminden bir alıntıyı hatırlatıyor: "İhtiyacınız olmayan bir şeyi satmak için önce ihtiyacınız olmayan bir şeyi satın almalısınız ve bizim paramız yok".

Andrey Kaunov #:

Evet, size katılıyorum. Aynı durum aşağıdakiler için de geçerlidir:

Sarı renkle vurgulanan kodun nasıl hesaplandığı önemli değildir. Sonuç yine de yeşil bir dize olacaktır. Ve bu standart MT5 kütüphanelerinde! Evet!

İşlevi geliştirin, aksi takdirde işe yaramaz. MQL5'te, birkaç enstrümanda MA değerlerini hesaplamanız gerektiğinde çok kullanışlıdır. Ve hangilerinin olduğu önceden bilinmemektedir. Piyasaya genel bakıştan tüm enstrümanların MA kollarını oluşturamazsınız!

CodeBase'de arama yapabilir ve oraya bakabilirsiniz. Bu kütüphaneyi kullanan tek kişi ben değilim...

MA on ATR
MA on ATR
  • www.mql5.com
Индикатор Moving Average по значениям индикатора Average True Range
 

Affedersiniz, "pozisyon" değişkeni nedir?

double SimpleMA(const int position,const int period,const double &price[])
 
double SimpleMA( const int position, const int period, const double &price[])
  {
   double result= 0.0 ;
 //--- kontrol süresi 
   if (period> 0 && period<=(position+ 1 ))
     {
       for ( int i= 0 ; i<period; i++)
         result+=price[position-i];

      result/=period;
     }

   return (result);
  }

Günaydın

Böyle daha mı net?

 
Gerard Willia G J B M Dinh Sy #:

Günaydın

Böyle daha mı net?

Hayır, pozisyonun 20 periyot istersem örnek 20 olarak hesaplanacak ilk çubuk olduğunu düşünerek zaten gördüm ama emin değilim.

fiyat [pozisyon - 1] (ve +1 değil) çünkü mql5 varsayılan olarak seri olarak ayarlanmıyor mu?