Fark hesabı, örnekler.

 

Bu iş parçacığında, açık kaynakta fark hesaplamasına dayalı göstergeleri ve uzmanları toplamayı öneriyorum.

Zaman içinde ilgi olursa, değerli bir şey toplayacağız veya çizeceğiz. :)

Örneğin, göstergeyi daha görsel bir versiyonda yeniden yazdım:

 //|                                Copyright 2016, Aleksey Panfilov. |
//|                                                filpan1@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Aleksei Panfilov. filpan1@yandex.ru"
#property link        "filpan1@yandex.ru"
#property version    "1.2"
#property description      "2018_01_10_Polynom_s4_s2_p72"
#property strict

#include <MovingAverages.mqh>


#property indicator_chart_window
#property indicator_buffers 6
#property indicator_plots    2
//--- plot a1_
#property indicator_label1    "MACD"
#property indicator_type1    DRAW_LINE
#property indicator_color1    clrSilver
#property indicator_style1    STYLE_SOLID
#property indicator_width1    2
//--- plot a2_
#property indicator_label2    "Signal"
#property indicator_type2    DRAW_LINE
#property indicator_color2    clrRed
#property indicator_style2    STYLE_SOLID
#property indicator_width2    1
//--- plot a3_
#property indicator_label3    "Fast_line_1"
#property indicator_type3    DRAW_LINE
#property indicator_color3    clrBlueViolet
#property indicator_style3    STYLE_SOLID
#property indicator_width3    6
//--- plot a4_
#property indicator_label4    "Fast_line_2"
#property indicator_type4    DRAW_LINE
#property indicator_color4    clrBlue
#property indicator_style4    STYLE_SOLID
#property indicator_width4    1
//--- plot a5_
#property indicator_label5    "Slow_line_1"
#property indicator_type5    DRAW_LINE
#property indicator_color5    clrDarkGreen
#property indicator_style5    STYLE_SOLID
#property indicator_width5    4
//--- plot a6_
#property indicator_label6    "Slow_line_2"
#property indicator_type6    DRAW_LINE
#property indicator_color6    clrRed
#property indicator_style6    STYLE_SOLID
#property indicator_width6    1 //--- input parameters

//         int   LIN_1_STEP    =4; //line_1_power
//input int      LIN_1_PLECHO  =72; //Fast_line_1_leverage
//         int   LIN_2_STEP    =2;//line_2_power
//input int      LIN_2_PLECHO  =78; //Fast_line_2_leverage
//         int   LIN_3_STEP    =4;//line_3_power
//input int      LIN_3_PLECHO  =72; //Slow_line_1_leverage
//         int   LIN_4_STEP    =2;//Slow_line_4_power
//input int      LIN_4_PLECHO  =72;//Slow_line_2_leverage

input          int TOCHKA_VHODA = 300 ; // start_point
//input int           base  =450;
       int    point_shift_1 = 0 ;
       int    point_shift_2 = 0 ;
//input int   Multiplikator = 10;
//input int   InpSignalSMA  = 9;  // Signal SMA Period



//--- indicator buffers

double a1_Buffer[];
double a2_Buffer[];
double a3_Buffer[];
double a4_Buffer[];
double a5_Buffer[];
double a6_Buffer[];
//double a7_Buffer[];
//double a8_Buffer[];
/**/


//===========================================================================================
   double Znach;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
 
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,a5_Buffer, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,a6_Buffer, INDICATOR_DATA );
   SetIndexBuffer ( 2 ,a1_Buffer, INDICATOR_DATA );
   SetIndexBuffer ( 3 ,a2_Buffer, INDICATOR_DATA );
   SetIndexBuffer ( 4 ,a3_Buffer, INDICATOR_DATA );
   SetIndexBuffer ( 5 ,a4_Buffer, INDICATOR_DATA );
//----
//----
   SetIndexShift ( 2 ,- 72 );
   SetIndexShift ( 5 , 20 );

//    if(TOCHKA_VHODA <= (LIN_1_PLECHO+25)*LIN_1_INTERVAL) TOCHKA_VHODA=(LIN_1_PLECHO+25)*LIN_1_INTERVAL;  
//    if(TOCHKA_VHODA <= (LIN_2_PLECHO+25)*LIN_2_INTERVAL) TOCHKA_VHODA=(LIN_2_PLECHO+25)*LIN_2_INTERVAL;  
//    if(TOCHKA_VHODA <= (LIN_3_PLECHO+25)*LIN_3_INTERVAL) TOCHKA_VHODA=(LIN_3_PLECHO+25)*LIN_3_INTERVAL;  
//    if(TOCHKA_VHODA <= (LIN_4_PLECHO+25)*LIN_4_INTERVAL) TOCHKA_VHODA=(LIN_4_PLECHO+25)*LIN_4_INTERVAL;  
//    if(TOCHKA_VHODA <= (base*2+25))                      TOCHKA_VHODA=(base*2+25);  

//------
//===========================================================================================
//===========================================================================================

   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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,z,limit;
//   int Bars=Bars(_Symbol,_Period);

   if (prev_calculated== 0 ) // first calculation    
     {
      limit=rates_total-TOCHKA_VHODA;
       //--- set empty value for first limit bars
//Print("Bars=",Bars," rates_total=",rates_total," TOCHKA=",TOCHKA_VHODA," limit=",limit);
       if (limit< 1 ) return ( 0 );
       for (i=rates_total- 1 ;i>=limit;i--)
      {
       a1_Buffer[i]=open[limit+ 1 ];
       a2_Buffer[i]=open[limit+ 1 ];
       a3_Buffer[i]=open[limit+ 1 ];
       a4_Buffer[i]=open[limit+ 1 ];
       a5_Buffer[i]=open[limit+ 1 ];
       a6_Buffer[i]=open[limit+ 1 ];
      }

     }
   else limit=rates_total-prev_calculated;
//--- main loop
   for (i=limit;i>= 0 && ! IsStopped ();i--)
   {
//===========================================================================================
   Znach = 0 ; //iMA(NULL,0,base*2,0,MODE_SMA,PRICE_OPEN,i);
//===========================================================================================

 
      a1_Buffer[i]=((open[i] - Znach)    + 5061600 *a1_Buffer[i+ 1 ]- 7489800    *a1_Buffer[i+ 2 ]+ 4926624 *a1_Buffer[i+ 3 ]- 1215450 *a1_Buffer[i+ 4 ])/ 1282975 ;

      a2_Buffer[i]=   3160 *a1_Buffer[i]   - 6240    *a1_Buffer[i+ 1 ]    +   3081 *a1_Buffer[i+ 2 ];

      a4_Buffer[i+ 92 ]=a1_Buffer[i];   if (i<= 10 ) { for (z= 92 - 1 ;z>= 0 ;z--){        a4_Buffer[i+ 0 +z]=   5 *a4_Buffer[i+ 1 +z]  -   10 *a4_Buffer[i+ 2 +z]   +   10 *a4_Buffer[i+ 3 +z]  -   5 *a4_Buffer[i+ 4 +z]  +   1 *a4_Buffer[i+ 5 +z];  }}


//      a3_Buffer[i]=((open[i] - Znach)    +5061600*a3_Buffer[i+1 ]-7489800    *a3_Buffer[i+2 ]+4926624*a3_Buffer[i+3 ]-1215450*a3_Buffer[i+4 ])/1282975;

//      a4_Buffer[i]=  2701*a3_Buffer[i]   -5328   *a3_Buffer[i+1 ]    +  2628 *a3_Buffer[i+2 ];



//================================================================================================================================================================================================
//================================================================================================================================================================================================

//   a5_Buffer[i] = (a2_Buffer[i+point_shift_1] - a4_Buffer[i+point_shift_2])* Multiplikator;

   } 
//----
//--- signal line counted in the 2-nd buffer

//     SimpleMAOnBuffer(rates_total,prev_calculated,0,InpSignalSMA,a5_Buffer,a6_Buffer);

//--- done

//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
 

Fark hesabı nedir?

Bu:

Δ f (x k ) \u003d f (x k+1 ) - f (x k )

 
Alexey Panfilov :

Bu dalda, fark hesaplamasına dayalı göstergeleri ve uzmanları açık kaynakta toplamayı öneriyorum.

Örneğin, göstergeyi daha görsel bir versiyonda yeniden yazdım:

Grafikte şöyle görünüyor:



72'lik bir omuz ile 4. dereceden bir polinom ile mavi-kırmızı çizgi enterpolasyonu (aralık içinde bir nokta bulma).

      a1_Buffer[i]=((open[i] - Znach)    + 5061600 *a1_Buffer[i+ 1 ]- 7489800    *a1_Buffer[i+ 2 ]+ 4926624 *a1_Buffer[i+ 3 ]- 1215450 *a1_Buffer[i+ 4 ])/ 1282975 ;

İnce mavi çizgi, 78'lik bir omuza sahip 2. derece bir polinom tarafından bir ekstrapolasyondur (aralığın dışında bir nokta bulma).

 a2_Buffer[i]=   3160 *a1_Buffer[i]   - 6240    *a1_Buffer[i+ 1 ]    +   3081 *a1_Buffer[i+ 2 ];

Kırmızı, bu 4. dereceden bir polinom oluşturma çizgisidir. Yeniden çizilir ve son çubuğun açılış noktasına göre yapılır.

 a4_Buffer[i+ 92 ]=a1_Buffer[i];   if (i<= 10 ) { for (z= 92 - 1 ;z>= 0 ;z--){        a4_Buffer[i+ 0 +z]=   5 *a4_Buffer[i+ 1 +z]  -   10 *a4_Buffer[i+ 2 +z]   +   10 *a4_Buffer[i+ 3 +z]  -   5 *a4_Buffer[i+ 4 +z]  +   1 *a4_Buffer[i+ 5 +z];  }}

 
Evgeni Belyaev :

Fark hesabı nedir?

Bu:

Δ f (x k ) \u003d f (x k+1 ) - f (x k )


Evet.

Newton'un iki terimlisiyle doğrudan ilişkilidir.

Eşit uzaklıktaki noktalar için doğrudur:

1 *Y1- 2 *Y2+ 1 *Y3=0 - bir doğrunun fark denklemi.

1 *Y1- 3 *Y2+ 3 *Y3- 1 *Y4 =0 - ikinci dereceden parabolün fark denklemi.

1 *Y1- 4 *Y2+ 6 *Y3- 4 *Y4 + 1 *Y5 =0 - üçüncü dereceden parabolün fark denklemi.

Ayrıca temalarla kesişir:

https://www.mql5.com/ru/forum/61389/page48#comment_5633264

https://www.mql5.com/en/forum/211220/page2#comment_5632736 .

Как измерить скорость цены
Как измерить скорость цены
  • 2017.07.20
  • www.mql5.com
Всем привет, тут такая тема Хочу использовать "ускорение" цены на тиковых интервалах, но не пойму как вообще посчитать скорость цены...
 
Alexey Panfilov :

Evet.


Herkes bunu yaptı ... yazdılar ...

Gelecek geçmişe mi bağlı?

 
Evgeni Belyaev :

Herkes bunu yaptı ... yazdılar ...

Gelecek geçmişe mi bağlı?


Her eylem için şimdide bir iz ortaya çıkar ve bu da elbette geleceği etkiler. :))))

Bu başlıkta felsefe olmadan öneriyorum, hadi sadece matematik, programlama, test etme, optimizasyon.

 
Alexey Panfilov :

Evet.

Newton'un iki terimlisiyle doğrudan ilişkilidir.

Eşit uzaklıktaki noktalar için doğrudur:

Y1-2*Y2+Y3=0 - düz bir çizginin fark denklemi.

Y1-3*Y2+3*Y3-Y4 =0 - ikinci derece parabolün fark denklemi.

Y1-4*Y2+6*Y3-4*Y4 + Y5 =0 - üçüncü derece parabolün fark denklemi.

Bu formülü denediniz mi?

Y = a0 + a1X + a2X^2 + a3X^3 + a4X^4

nerede:

X - önceki çubuğun fiyatı;

Y - mevcut çubuğun fiyatı.


Bu resim ortaya çıkıyor:


 
Yousufkhodja Sultonov :

Bu formülü denediniz mi?

Y = a + bX + cX^2 + dX^3 + eX^4


Tabii ki, bu formda X ve Y vardır, ancak özyinelemeli denklemde sadece Y ve tüm katsayılar ( a + b X + c X ^ 2 + d X ^ 3 + e X ^ 4) bunları beş ile değiştirir Y'nin kendisinin değerleri.

 

Koda baktım, doğru anladım, bu geri bildirimli bir tür filtre mi? Ve 5061600, 4926624 ve diğerleri katsayıları nereden geldi?

Genel olarak, hindi nereden geliyor, tyrnet'ten? ))

 
Alexey Volchanskiy :

1. Koda baktım, doğru mu anladım, bu geri beslemeli bir filtre mi?

2. Ve 5061600, 4926624 ve diğerleri katsayıları nereden geldi?

3. Genel olarak hindi nereden geliyor, tyrnet'ten? ))

1. Evet. Bu filtre 400 yaşında, sadece yazılı kaynaklara sahip hikayeler: Descartes, Newton, Pascal, Taylor, Lagrange.

2. Oranlar hesaplanır. Görünüşe göre ikinci yılda Lagrange ve Taylor'ın yöntemleriyle tanıştılar. Katsayıları hesaplamak için birçok seçenek vardır.

3. Özellikle bunu, bugün çizdim. :)))))

 

Örnek N=100'e yükseltildiğinde, 4. derece denklem aşağıdaki sonucu verir: