Canal de regressão linear - página 13

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

Vou tentar.

 

Aqui está 1

Aqui está o 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);
  }

Não é um algoritmo acelerado para verificar a fórmula. Talvez eu tenha feito algo errado?

Arquivos anexados:
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:
Não com você apostando. 2.dias de silêncio, por favor.
Você não receberá nenhum Hennessy de qualquer maneira). Mas você vai estragar meu jantar.

A bebida é ruim para você. Desculpe. Eu estava aqui primeiro. ))

 

Google "Moving Standard Deviation" ( Desvio padrão em movimento)

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:

Aqui está

Aqui está o cálculo:

Não é um algoritmo acelerado para verificar a fórmula. Talvez você tenha feito algo errado?

Você não leva em conta a chegada de novos dados e a necessidade de apagar dados antigos (fora da janela).

Nikolai faz. veja o código abaixo de sua mensagem.

 

Então... minha mensagem final.

Diga ao Yuri para me informar pessoalmente onde entregá-lo, ou comprar um certificado, ou o que quer que seja.

Vejo você. Voltarei dentro de um mês.

 
Nikolai Semko:

não é saudável beber. Desculpe. Eu fui o primeiro. ))

Seja bem-vindo. Eu não ia correr. Apenas pediu para não interferir, e aqueles que sabem, calem-se.
O algoritmo, sim, é praticamente equivalente, escrevi sobre isso na página 1-2 do tópico.
Dimitri, desculpe, embora comprovado, não posso aceitar Hennessy, para meu pesar.
O código, eu suponho, não faz sentido escrever. Vem Semko, e é isso... Prioridade desejada)). Como se alguém, exceto Dimitri, tivesse alguma dúvida.
Eu mesmo terei que ir à loja.
 
Dmitry Fedoseev:

Então... minha mensagem final.

Diga ao Yuri para me informar pessoalmente onde entregá-lo, ou comprar um certificado, ou o que quer que seja.

Vejo você. Voltarei dentro de um mês.

Eu o invejo. Trabalho frutífero!
Minha mensagem foi que isto pode ser feito não apenas com RMS para uma simples máquina onduladora, mas também para um polinômio de qualquer grau.
É verdade que a fórmula cresce exponencialmente à medida que o grau de polinômio aumenta.