Canal de regresión lineal - página 13

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

Lo intentaré.

 

Aquí está 1

Este es el cálculo:

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);
  }

No es un algoritmo acelerado para comprobar la fórmula. ¿Tal vez hice algo mal?

Archivos adjuntos:
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:
No con usted apostando. 2.días de silencio, por favor.
De todos modos, no vas a conseguir ningún Hennessy). Pero me vas a estropear la cena.

Beber es malo para ti. Lo siento. Yo estaba aquí primero. ))

 

Google " Desviación estándar en movimiento"

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:

Aquí está

Este es el cálculo:

No es un algoritmo acelerado para comprobar la fórmula. ¿Quizás hiciste algo mal?

no se tiene en cuenta la llegada de nuevos datos y la necesidad de eliminar los antiguos (fuera de la ventana).

Nikolai lo hace. Ver el código debajo de su mensaje.

 

Así que... mi mensaje final.

Dile a Yuri que me mande un mensaje en persona donde entregarlo, o que compre un certificado, o lo que sea.

Nos vemos. Volveré en un mes.

 
Nikolai Semko:

no es saludable beber. Lo siento. Yo fui el primero. ))

De nada. No iba a correr. Sólo se pide que no se interfiera, y los que saben, que se callen.
El algoritmo, sí, es prácticamente equivalente, lo escribí en la página 1-2 del hilo.
Dimitri, lo siento, aunque probado, no puedo aceptar Hennessy, a mi pesar.
El código, supongo, no tiene sentido escribirlo. Ven Semko, y eso es todo... Se busca la prioridad)). Como si alguien, excepto Dimitri, tuviera alguna duda.
Tendré que ir a la tienda yo mismo.
 
Dmitry Fedoseev:

Así que... mi mensaje final.

Dile a Yuri que me mande un mensaje en persona donde entregarlo, o que compre un certificado, o lo que sea.

Nos vemos. Volveré en un mes.

Te envidio. ¡Un trabajo fructífero!
Mi mensaje era que esto se puede hacer no sólo con RMS para una máquina de ondulación simple, sino también para un polinomio de cualquier grado.
Es cierto que la fórmula crece exponencialmente a medida que aumenta el grado del polinomio.

Razón de la queja: