Canal de régression linéaire - page 13

 
Задача: Подсчет среднего значения и дисперсии числового ряда
Задача: Подсчет среднего значения и дисперсии числового ряда
  • votes : 2
  • 2015.10.16
  • Google+
  • purecodecpp.com
Эта задача имеет очень большое практическое применение: в статистической обработке данных, обработке временных рядов, в цифровой обработке сигналов применительно к цифровым отсчётам сигнала. Постановка задачи такая: – вводится последовательность (вещественных) чисел … – нужно просчитать, в итоге, среднее значение и дисперсию (или СКО...
 

Je vais essayer.

 

Voici 1

Voici le calcul :

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 start;
   if(prev_calculated==0){
      start=period;
      double ms=0;
      for(int i=0;i<period;i++){
         ms+=close[i];
      }
      ma[period-1]=ms/period;
   }
   else{
      start=prev_calculated-1;
   }

   for(int i=start;i<rates_total;i++){      
      //ma[i]=ma[i-1]+(-close[i-period]+close[i])/period;      
      double s1=0;
      double s2=0;
      for(int j=i-period+1;j<=i;j++){
         s1+=close[j];
         s2+=close[j]*close[j];
      }
      s1/=period;
      s2=s2/period-s1*s1;
      Label1Buffer[i]=s2;
   }

   return(rates_total);
  }

Pas un algorithme accéléré pour vérifier la formule. Peut-être que j'ai fait quelque chose de mal ?

Dossiers :
stdX4.mq5  6 kb
 
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
input int      period=14;
//--- indicator buffers
double         Label1Buffer[];

int OnInit()
  {
   SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);


//---
   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[])
  {
   static double ms,ms2;
   int start;
   if(prev_calculated==0)
     {
      start=period;
      ms=0; ms2=0;
      for(int i=0;i<period;i++)
        {
         ms +=close[i];
         ms2+=close[i]*close[i];
        }
     }
   else
     {
      start=prev_calculated-1;
     }

   for(int i=start;i<rates_total;i++)
     {
      double Ms =ms +(-close[i-period]+close[i]);
      double Ms2=ms2+(-close[i-period]*close[i-period]+close[i]*close[i]);
      double s=Ms/period;
      Label1Buffer[i]=sqrt(s*s+(Ms2-2*Ms*s)/period);
      ms=Ms;
      ms2=Ms2;
     }
   return(rates_total);
  }
 
Yuriy Asaulenko:
Pas avec vous qui pariez. 2. jours de silence, s'il vous plaît.
Vous ne recevrez pas d'Hennessy de toute façon.) Mais tu vas gâcher mon dîner.

Boire est mauvais pour vous. Désolé. J'étais là avant. ))

 

Google " Écart-type mobile"

https://www.johndcook.com/blog/standard_deviation/

Accurately computing running variance
  • www.johndcook.com
The most direct way of computing sample variance or standard deviation can have severe numerical problems. Mathematically, sample variance can be computed as follows. The most obvious way to compute variance then would be to have two sums: one to accumulate the sum of the x‘s and another to accumulate the sums of the squares of the x‘s. If the...
 
Dmitry Fedoseev:

Voici

Voici le calcul :

Pas un algorithme accéléré pour vérifier la formule. Peut-être que tu as fait quelque chose de mal ?

vous ne tenez pas compte de l'arrivée de nouvelles données et de la nécessité de supprimer les anciennes (par la fenêtre).

Nikolaï le fait. Voir le code sous votre message.

 

Alors... mon dernier message.

Dites à Yuri de m'indiquer en personne où le livrer, ou acheter un certificat, ou autre.

Je vous verrai. Je serai de retour dans un mois.

 
Nikolai Semko:

ce n'est pas sain à boire. Désolé. J'étais le premier. ))

Vous êtes les bienvenus. Je n'allais pas faire la course. J'ai juste demandé de ne pas interférer, et que ceux qui savent, se taisent.
L'algorithme, oui, est pratiquement équivalent, je l'ai écrit sur la page 1-2 du fil.
Dimitri, désolé, bien que prouvé, je ne peux pas accepter Hennessy, à mon grand regret.
Le code, je suppose, n'a aucun sens à écrire. Venez Semko, et c'est tout... Prioritairement souhaité)). Comme si quelqu'un d'autre que Dimitri avait des doutes.
Je vais devoir aller au magasin moi-même.
 
Dmitry Fedoseev:

Alors... mon dernier message.

Dites à Yuri de m'indiquer en personne où le livrer, ou acheter un certificat, ou autre.

Je vous verrai. Je serai de retour dans un mois.

Je l'envie. Un travail fructueux !
Mon message était que cela peut être fait non seulement avec RMS pour une machine à onduler simple, mais aussi pour un polynôme de n'importe quel degré.
C'est vrai, la formule croît de manière exponentielle lorsque le degré du polynôme augmente.

Raison: