線形回帰チャネル - ページ 13

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

試してみます。

 

以下は 1

こんな計算です。

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

数式を確認するための加速度的なアルゴリズムではない。もしかしたら、私が何か間違ったことをしたのでしょうか?

ファイル:
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:
あなたが賭けているのではありません。2.沈黙の日々、お願いします。
どうせヘネシーは手に入らないし...)でも、私の夕食が台無しになるわよ。

お酒は体に悪いですからね。すみません。私が最初に来たんです。))

 

グーグル "移動標準偏差"

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:

以下は

こんな計算です。

数式を確認するための加速度的なアルゴリズムではない。何か悪いことをしたのでは?

新しいデータの到着と古いデータの削除を考慮していない(窓の外)。

ニコライは、あなたのメッセージの下にあるコードを見てください。

 

それで...私からの最後のメッセージです。

どこに届けるか、証明書を買うか、ユーリに直接メッセージで伝えてくれ。

また、お会いしましょう。1ヵ月後にまた来るよ。

 
Nikolai Semko:

飲むと健康に悪いすみません。私が最初です。))

どういたしまして。レースに出るつもりはなかった。ただ、邪魔をしないように、知ってる人は黙っててくださいということです。
アルゴリズムは、そうですね、実質的に同等です、このスレッドの1-2ページ目に書きました。
ディミトリ、実績があるとはいえ、申し訳ないがヘネシーは受け取れない。
コードは、書いても意味がないのでしょう。まるでディミトリ以外が疑っているかのように。
自分でショップに行くしかないでしょう。
 
Dmitry Fedoseev:

それで...私からの最後のメッセージです。

どこに届けるか、証明書を買うか、ユーリに直接メッセージで伝えてくれ。

また、お会いしましょう。1ヵ月後にまた来るよ。

うらやましいです。実りある仕事を!
私が伝えたかったのは、これは単純な波動機械のRMSだけでなく、任意の次数の多項式に対しても可能であるということです。
確かに、この式は多項式の次数が増えるにつれて指数関数的に 大きくなる。