Sultonov의 미분 표시기 - 페이지 41

 
Dmitry Fedoseev :

5분 안에 코드가 나옵니다. RSI는 와일더 스무딩을 사용하며 지수와 동일하지만 기간이 길면 눈에 띄는 불일치가 발생할 수 있습니다.


왜 거기에서 요리를 합니까? 우리는 RSI에서 메인 버퍼를 버리고 기존의 두 버퍼를 그 자리에 넣습니다.

 //+------------------------------------------------------------------+
//|                                                          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);
  }
//+------------------------------------------------------------------+
거기에는 평활화가 없습니다. 그리고 도지 역시 곰의 힘에 속한다는 점에서 계산이 다릅니다. 그것이 모든 차이점입니다. DA에서는 이 순간이 고려됩니다.
 
Dmitry Fedoseev :

5분 안에 코드가 나옵니다. RSI는 와일더 스무딩을 사용하며 지수와 동일하지만 기간이 길면 눈에 띄는 불일치가 발생할 수 있습니다.

지금 백업 중이신가요?
 

응용 프로그램 표시기에서.

옵션:

마침표 - 마침표(막대)

구성품 - 구성품 계산 옵션:

  • c_rsi - RSI와 유사
  • c_adx - ADX와 유사
  • c_x - RSI와 같지만 나눗셈은 마침표가 아니라 실제 증분 수입니다.

스무딩 - 스무딩 방법:

  • s_wilder - 더 와일드한 방법
  • s_ema - 지수 평활화.
RSI 구성 요소는 Wilder에 의해 평활화되는 반면 ADC 구성 요소는 일반적인 지수 방법으로 평활화됩니다(즉, RSI의 기간 14는 ADC의 기간 27에 해당).

전력 - 최종 라인이 계산되는 방식:

  • f_off - 구성 요소를 더 잘 보기 위해 표시되지 않음
  • f_rsi - RSI와 동일
  • f_adx - ADX와 동일합니다.

정보: RSI의 경우 최종 라인이 매끄럽게 처리되지 않고 ADC의 경우 매끄럽게 처리됩니다.

***

이 인디케이터를 통해 설정을 통해 RSI와 ADC, 그리고 다양한 하이브리드를 얻을 수 있습니다.

RSI를 얻으려면:

  • 구성 요소 - c_rsi
  • 부드러운 - s_wilder
  • 전원 - f_rsi;

ADC를 얻으려면:

  • 구성 요소 - c_adx
  • 부드러운 - s_ema
  • 전원 - f_adx

전원 - 구성 요소가 간섭하지 않도록 켜고 끕니다.

***

게시물의 이미지와 같이 두 개의 지표가 있는 템플릿도 첨부되어 있습니다.

파일:
qwerty.mq5  6 kb
2ind.tpl  201 kb
 
Yousufkhodja Sultonov :
지금 백업 중이신가요?

반전이 어디있나요? 글을 쓰는 데 5분이 긴 시간인가요?

 
Ihor Herasko :

...

평활화가 없다...

그리고 그게 뭐야? -

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;
이것은 와일더 스무딩입니다. 기본적으로 지수와 동일하지만 더 느립니다.
 
Dmitry Fedoseev :

반전이 어디있나요? 글을 쓰는 데 5분이 긴 시간인가요?

DA에는 앤티 앨리어싱이 없으며 필요하지 않습니다. 그걸 뭐라고 합니까?
 
Yousufkhodja Sultonov :
DA에는 앤티 앨리어싱이 없으며 필요하지 않습니다. 그걸 뭐라고 합니까?

RSI에서처럼 평활화하지 않을 수 있지만 구성 요소 자체는 이미 단순 평균 입니다. 위의 범용 지표를 수정하여 스무딩을 활성화/비활성화할 수 있습니다. 그러나 개념적으로는 아무것도 변경되지 않습니다.

게다가 무엇을 말해야 하는지 보여줘야 한다. 그리고는 나에게 엄격하게 요구하지만 너 자신은 blah blah blah

 
Dmitry Fedoseev :

반전이 어디있나요? 글을 쓰는 데 5분이 긴 시간인가요?

" RSI는 Wilder smoothing을 사용한다는 점을 명심하세요. 이것은 exponential 과 동일하지만 더 긴 기간을 사용하면 눈에 띄는 불일치가 발생할 수 있습니다. "

더 크거나 더 작은 기간, 지수 또는 규칙적인 평활이 있는 일부 규칙 - 이 모든 것이 무엇을 위한 것입니까? DA는 뿔로 황소를, 발과 다리로 곰을 잡습니다.

 
Dmitry Fedoseev :
RSI에서처럼 평활화하지 않을 수 있지만 구성 요소 자체는 이미 단순 평균입니다. 위의 범용 지표를 수정하여 스무딩을 활성화/비활성화할 수 있습니다. 그러나 개념적으로는 아무것도 변경되지 않습니다.
물론 이제 할 수 있습니다.
 
Dmitry Fedoseev :
RSI에서처럼 평활화하지 않을 수 있지만 구성 요소 자체는 이미 단순 평균입니다. 위의 범용 지표를 수정하여 스무딩을 활성화/비활성화할 수 있습니다. 그러나 개념적으로는 아무것도 변경되지 않습니다.

당신은 시의 언어를 구사하는 사람과 공식으로 논쟁을 벌이려고 합니다.