Sultonow-Differentialindikator - Seite 41

 
Dmitry Fedoseev:

In 5 Minuten wird es einen Code geben. Beachten Sie, dass der RSI die Wilder-Glättung verwendet, die mit der exponentiellen Glättung identisch ist, aber eine längere Periode aufweist, so dass es zu einer deutlichen Diskrepanz kommen kann.


Was gibt es vorzubereiten? Wir werfen den Hauptpuffer aus dem RSI heraus und setzen die beiden vorhandenen Puffer an seine Stelle:

//+------------------------------------------------------------------+
//|                                                          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);
  }
//+------------------------------------------------------------------+
Dort gibt es keine Glättung. Und die Berechnung ist insofern anders, als die Stärke der Bären den Doji mit einschließt. Das ist der Unterschied. Die Staatsanwaltschaft trägt dem Rechnung.
 
Dmitry Fedoseev:

In 5 Minuten wird es einen Code geben. Denken Sie daran, dass der RSI die Wilder-Glättung verwendet, die der exponentiellen Glättung entspricht, aber eine längere Periode hat, so dass es zu einer deutlichen Diskrepanz kommen kann.

Machen Sie jetzt einen Rückzieher?
 

Beigefügt ist ein Indikator.

Parameter:

Zeitraum - Zeitraum in Takten;

Komponenten - Option Komponentenberechnung:

  • c_rsi - wie für RSI
  • c_adx - wie für ADX
  • c_x - wie bei RSI, aber Teilung nicht nach Periode, sondern nach tatsächlicher Anzahl von Inkrementen.

Glatte - glatte Methode:

  • s_wilder - Wilde Methode
  • s_ema - exponentielle Glättung.
Beachten Sie, dass die RSI-Komponenten nach der Wilder-Methode geglättet werden, während die ADX-Komponenten nach der herkömmlichen exponentiellen Methode geglättet werden (d. h. Periode 14 für den RSI entspricht Periode 27 für den ADX).

Leistung - die Art und Weise, wie die Endlinie berechnet wird:

  • f_off - nicht angezeigt, um die Komponenten besser sehen zu können
  • f_rsi - wie für RSI
  • f_adx - wie ADX.

Zur Information: Die Schlusslinie des RSI ist nicht geglättet, der ADX ist geglättet.

***

Sie können RSI und ADX und verschiedene Hybride durch diesen Indikator durch Einstellungen erhalten.

Um RSI zu bekommen:

  • Bestandteile - c_rsi
  • Glatt - s_wilder
  • Leistung - f_rsi;

Um ADX zu erhalten:

  • Bestandteile - c_adx
  • Glatt - s_ema
  • Leistung - f_adx

Strom - aktivieren/deaktivieren, um Komponenten aus dem Weg zu räumen.

***

Eine Vorlage mit zwei Indikatoren wie in der Abbildung aus diesem Beitrag ist ebenfalls beigefügt.

Dateien:
qwerty.mq5  6 kb
2ind.tpl  201 kb
 
Yousufkhodja Sultonov:
Sichern Sie sich jetzt ab?

Wo ist die Hintergrundgeschichte? Fünf Minuten, um einen Beitrag zu schreiben, sind viel?

 
Ihor Herasko:

...

Es gibt kein Antialiasing in .....

Was ist das? -

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;
Es ist wilder und glatter. Sie ist im Wesentlichen identisch mit der Exponentialkurve, aber langsamer.
 
Dmitry Fedoseev:

Wo ist die Hintergrundgeschichte? Sind 5 Minuten, um einen Beitrag zu schreiben, viel?

In der DA gibt es keine Glättung und sie ist auch nicht erforderlich. Was sagen Sie dazu?
 
Yousufkhodja Sultonov:
In DA gibt es keine Glättung und sie ist auch nicht erforderlich. Was halten Sie davon?

Es ist möglich, nicht zu glätten, wie in RSI, aber die Komponenten selbst, es ist ein einfacher Durchschnitt. Es ist möglich, meinen obigen Universalindikator zu verfeinern, um die Glättung zu aktivieren/deaktivieren. Aber konzeptionell ändert sich nichts.

Außerdem sollten Sie es lieber zeigen, bevor Sie sprechen. Warum fragen Sie mich so streng, und Sie blah blah blah

 
Dmitry Fedoseev:

Wo ist die Hintergrundgeschichte? Sind 5 Minuten, um einen Beitrag zu schreiben, viel?

Was ich meinte, war Folgendes: "Denken Siedaran, dass der RSI die Wilder-Glättung verwendet, die der exponentiellen Glättung entspricht, aber eine längere Periode hat, was zu einer deutlichen Diskrepanz führen kann. "

Irgendwelche Konventionen mit längeren oder kürzeren Zeiträumen, exponentielle oder regelmäßige Glättung - was soll das alles? DA packt den Stier bei den Hörnern und den Bären bei den Pfoten und Füßen.

 
Dmitry Fedoseev:
Es ist möglich, nicht zu glätten, wie in RSI, aber die Komponenten selbst, es ist ein einfacher Durchschnitt. Es ist möglich, meinen obigen Universalindikator zu verfeinern, um die Glättung zu aktivieren/deaktivieren. Aber konzeptionell ändert sich nichts.
Jetzt können Sie das natürlich.
 
Dmitry Fedoseev:
Es ist möglich, nicht zu glätten, wie in RSI, aber die Komponenten selbst, es ist ein einfacher Durchschnitt. Sie können meinen obigen Universalindikator verfeinern, um die Glättung zu aktivieren/deaktivieren. Aber konzeptionell ändert sich nichts.

Sie versuchen, mit Formeln mit jemandem zu argumentieren, der die Sprache der Poesie spricht.