Sultonov'un diferansiyel göstergesi - sayfa 41

 
Dmitry Fedoseev :

5 dakika içinde bir kod gelecek. RSI'nin Wilder yumuşatma kullandığını unutmayın, üstel ile aynıdır, ancak daha uzun bir süre ile bu, fark edilir bir tutarsızlığa neden olabilir.


Neden orada pişirin? Ana arabelleği RSI'dan atıyoruz ve mevcut ikisini yerine koyuyoruz:

 //+------------------------------------------------------------------+
//|                                                          RSI.mq4 |
//|                   Copyright 2005-2014, MetaQuotes Software Corp. |
//|                                              https://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright    "2005-2014, MetaQuotes Software Corp."
#property link          "https://www.mql4.com"
#property description "Relative Strength Index"
#property strict

#property indicator_separate_window
#property indicator_buffers      2
#property indicator_color1     clrBlue
#property indicator_color2     clrRed

//--- input parameters
input int InpRSIPeriod= 14 ; // RSI Period
//--- buffers
double ExtPosBuffer[];
double ExtNegBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ( void )
  {
   string short_name;
//--- 2 additional buffers are used for counting.
   SetIndexBuffer ( 0 ,ExtPosBuffer);
   SetIndexBuffer ( 1 ,ExtNegBuffer);
//--- indicator line
   SetIndexStyle ( 0 , DRAW_LINE );
   SetIndexStyle ( 1 , DRAW_LINE );
//--- name for DataWindow and indicator subwindow label
   short_name= "RSI(" + string (InpRSIPeriod)+ ")" ;
   IndicatorShortName (short_name);
   SetIndexLabel ( 0 ,short_name);
//--- check for input
   if (InpRSIPeriod< 2 )
     {
       Print ( "Incorrect value for input variable InpRSIPeriod = " ,InpRSIPeriod);
       return ( INIT_FAILED );
     }
//---
   SetIndexDrawBegin ( 0 ,InpRSIPeriod);
//--- initialization done
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Relative Strength Index                                          |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
   int     i,pos;
   double diff;
//---
   if ( Bars <=InpRSIPeriod || InpRSIPeriod< 2 )
       return ( 0 );
//--- counting from 0 to rates_total
   ArraySetAsSeries (ExtPosBuffer, false );
   ArraySetAsSeries (ExtNegBuffer, false );
   ArraySetAsSeries (close, false );
//--- preliminary calculations
   pos=prev_calculated- 1 ;
   if (pos<=InpRSIPeriod)
     {
       //--- first RSIPeriod values of the indicator are not calculated
      ExtPosBuffer[ 0 ]= 0.0 ;
      ExtNegBuffer[ 0 ]= 0.0 ;
       double sump= 0.0 ;
       double sumn= 0.0 ;
       for (i= 1 ; i<=InpRSIPeriod; i++)
        {
         ExtPosBuffer[i]= 0.0 ;
         ExtNegBuffer[i]= 0.0 ;
         diff=close[i]-close[i- 1 ];
         if (diff> 0 )
            sump+=diff;
         else
            sumn-=diff;
        }
       //--- calculate first visible value
      ExtPosBuffer[InpRSIPeriod] = sump / InpRSIPeriod;
      ExtNegBuffer[InpRSIPeriod] = sumn / InpRSIPeriod;
       //--- prepare the position value for main calculation
      pos=InpRSIPeriod+ 1 ;
     }
//--- the main loop of calculations
   for (i=pos; i<rates_total && ! IsStopped (); i++)
     {
      diff=close[i]-close[i- 1 ];
      ExtPosBuffer[i]=(ExtPosBuffer[i- 1 ]*(InpRSIPeriod- 1 )+(diff> 0.0 ?diff: 0.0 ))/InpRSIPeriod;
      ExtNegBuffer[i]=(ExtNegBuffer[i- 1 ]*(InpRSIPeriod- 1 )+(diff< 0.0 ?-diff: 0.0 ))/InpRSIPeriod;
     }
//---
   return (rates_total);
  }
//+------------------------------------------------------------------+
Orada yumuşatma yok. Ve hesaplama farklıdır ki dojiler de ayıların gücüne aittir. Bütün fark bu. DA'da bu an dikkate alınır.
 
Dmitry Fedoseev :

5 dakika içinde bir kod gelecek. RSI'nin Wilder yumuşatma kullandığını unutmayın, üstel ile aynıdır, ancak daha uzun bir süre ile bu, fark edilir bir tutarsızlığa neden olabilir.

Şimdi yedekliyor musun?
 

Uygulama göstergesinde.

Seçenekler:

dönem - barlarda dönem;

Bileşenler - bileşen hesaplama seçeneği:

  • c_rsi - RSI gibi
  • c_adx - ADX gibi
  • c_x - RSI'da olduğu gibi, ancak bölme bir nokta değil, gerçek artış sayısıdır.

Pürüzsüz - yumuşatma yöntemi:

  • s_wilder - daha vahşi yöntem
  • s_ema - üstel yumuşatma.
ADC bileşenlerinin olağan üstel yöntemle düzeltilirken RSI bileşenlerinin Wilder tarafından düzleştirildiğini unutmayın (yani, RSI için 14. periyot, ADC için 27. periyoda karşılık gelir).

Güç - son satırın nasıl hesaplandığı:

  • f_off - bileşenleri daha iyi görmek için görüntülenmez
  • f_rsi - RSI ile aynı
  • f_adx - ADX ile aynı.

Bilgi için: RSI için son satır düzleştirilmez, ADC için düzleştirilir.

***

Bu gösterge ile ayarlar aracılığıyla RSI ve ADC ve çeşitli melezler alabilirsiniz.

RSI almak için:

  • Bileşenler - c_rsi
  • Pürüzsüz - s_wilder
  • Güç - f_rsi;

ADC'yi almak için:

  • Bileşenler - c_adx
  • Pürüzsüz - s_ema
  • Güç - f_adx

Güç - bileşenlerin karışmaması için açın / kapatın.

***

Bu gönderideki resimde olduğu gibi iki göstergeli bir şablon da eklenmiştir.

Dosyalar:
qwerty.mq5  6 kb
2ind.tpl  201 kb
 
Yousufkhodja Sultonov :
Şimdi yedekliyor musun?

Tersi nerede? 5 dakika yazı yazmak uzun bir süre mi?

 
Ihor Herasko :

...

Pürüzsüzlük yok...

Ve bu nedir? -

ExtPosBuffer[i]=(ExtPosBuffer[i- 1 ]*(InpRSIPeriod- 1 )+(diff> 0.0 ?diff: 0.0 ))/InpRSIPeriod;
ExtNegBuffer[i]=(ExtNegBuffer[i- 1 ]*(InpRSIPeriod- 1 )+(diff< 0.0 ?-diff: 0.0 ))/InpRSIPeriod;
Bu Wilder yumuşatma. Temelde üstel ile aynıdır, ancak daha yavaştır.
 
Dmitry Fedoseev :

Tersi nerede? 5 dakika yazı yazmak uzun bir süre mi?

DA'da kenar yumuşatma yoktur ve gerekli değildir. Buna ne diyorsun?
 
Yousufkhodja Sultonov :
DA'da kenar yumuşatma yoktur ve gerekli değildir. Buna ne diyorsun?

RSI'daki gibi yumuşatmamak mümkün değil, ancak bileşenlerin kendileri zaten basit bir ortalama . Yumuşatmayı etkinleştirmek/devre dışı bırakmak için yukarıdaki evrensel göstergemi değiştirebilirsiniz. Ama kavramsal olarak hiçbir şey değişmez.

Ayrıca ne demeli, göstermek gerekir. Ve sonra benden çok katı bir şey istiyorsun, ama sen kendin falan filan

 
Dmitry Fedoseev :

Tersi nerede? 5 dakika yazı yazmak uzun bir süre mi?

Bunu demek istedim: " RSI'nin Wilder yumuşatma kullandığını unutmayın, bu üstel ile aynıdır, ancak daha uzun bir süre ile bu fark edilir bir tutarsızlığa neden olabilir. "

Daha büyük veya daha küçük bir dönem, üstel veya düzenli yumuşatma içeren bazı sözleşmeler - tüm bunlar ne için? DA, Boğa'yı boynuzlarından ve Ayı'yı pençelerinden ve bacaklarından alır.

 
Dmitry Fedoseev :
RSI'daki gibi yumuşatmamak mümkündür, ancak bileşenlerin kendileri zaten basit bir ortalamadır. Yumuşatmayı etkinleştirmek/devre dışı bırakmak için yukarıdaki evrensel göstergemi değiştirebilirsiniz. Ama kavramsal olarak hiçbir şey değişmez.
Şimdi, tabii ki yapabilirsiniz.
 
Dmitry Fedoseev :
RSI'daki gibi yumuşatmamak mümkündür, ancak bileşenlerin kendileri zaten basit bir ortalamadır. Yumuşatmayı etkinleştirmek/devre dışı bırakmak için yukarıdaki evrensel göstergemi değiştirebilirsiniz. Ama kavramsal olarak hiçbir şey değişmez.

Şiir dilini konuşan bir adamla formüllerle tartışmaya çalışıyorsunuz.