Canale di regressione lineare - pagina 13

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

Farò un tentativo.

 

Ecco 1

Ecco il calcolo:

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

Non un algoritmo accelerato per controllare la formula. Forse ho fatto qualcosa di sbagliato?

File:
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:
Non con le tue scommesse. 2.giorni di silenzio, per favore.
Non avrai comunque nessun Hennessy). Ma mi rovinerai la cena.

Bere fa male. Mi dispiace. C'ero prima io. ))

 

Google " Deviazione standard 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:

Ecco

Ecco il calcolo:

Non un algoritmo accelerato per controllare la formula. Forse hai fatto qualcosa di sbagliato?

non si tiene conto dell'arrivo di nuovi dati e della necessità di cancellare i vecchi dati (fuori dalla finestra).

Nikolai lo fa. vedi il codice sotto il tuo messaggio.

 

Quindi... il mio messaggio finale.

Dite a Yuri di mandarmi un messaggio di persona dove consegnarlo, o di comprare un certificato, o qualsiasi altra cosa.

Ci vediamo. Tornerò tra un mese.

 
Nikolai Semko:

non è salutare da bere. Mi dispiace. Sono stato il primo. ))

Non c'è di che. Non avevo intenzione di correre. Solo chiesto di non interferire, e quelli che sanno, zitto.
L'algoritmo, sì, è praticamente equivalente, ne ho scritto a pagina 1-2 del thread.
Dimitri, mi dispiace, anche se provato, non posso accettare Hennessy, con mio rammarico.
Il codice, suppongo, non ha senso da scrivere. Vieni Semko, e questo è tutto... Priorità cercasi)). Come se qualcuno tranne Dimitri avesse dei dubbi.
Dovrò andare io stesso al negozio.
 
Dmitry Fedoseev:

Quindi... il mio messaggio finale.

Dite a Yuri di mandarmi un messaggio di persona dove consegnarlo, o di comprare un certificato, o qualsiasi altra cosa.

Ci vediamo. Tornerò tra un mese.

Lo invidio. Lavoro fruttuoso!
Il mio messaggio era che questo può essere fatto non solo con RMS per una semplice macchina ondulatoria, ma anche per un polinomio di qualsiasi grado.
Vero, la formula cresce esponenzialmente all'aumentare del grado del polinomio.