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

 
mql4で放物線回帰と線形回帰 をコンパクトに高速化したものがこちらですが、sxxy値を計算するときに1サイクルをなくす方法がまだ分かっていません。
#property strict
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 clrDeepSkyBlue
#property indicator_color2 clrRed
#property indicator_width1 2
#property indicator_width2 2
#property indicator_type1 DRAW_LINE
#property indicator_type2 DRAW_LINE
//================================
extern int p = 2 4;
//================================
double lr[],qr[];
double lwi,mai,fxi;
double ci,cp,sy,sxy,sxxy,lri,qri;
double a1,a2;
int w,n;
//*************************************************
int init()
{
   SetIndexBuffer(0,qr);
   SetIndexBuffer(1,lr);
   //-----------------------
   if (p<3) p=3;
   
   return(0);
}
//*******************************************************************
int start()
{
   int cbi=Bars-IndicatorCounted()-1; if (cbi<0) return(-1);
   if (cbi==0) return(0); if (cbi==1) cbi=0; 
   if (cbi>1)
   { 
      cbi=Bars-p-1;
     
      sy=0; sxy=0; w=0;  
      for(int j=1; j<=p; j++) 
      {
         ci=Open[cbi+p-j];
         sy+=ci; 
         sxy+=j*ci;
         w+=j; 
      }
      cbi--;
      
      a1=6.0/(p*(p+1)*(2*p+1))*(10-15.0/(p+2)); 
      a2=12-15.0/(p+2);
   }
   //----------------------------------------
   for (int i=cbi; i>=0; i--) 
   {
      sxxy=0;
      for (int j=1; j<=p; j++)
         sxxy+=j*j*Open[i+p-j];
      
      ci=Open[i]; 
      cp=Open[i+p];
      
      sxy+=ci*p-sy;
      sy+=ci-cp;
      
      mai=sy/p;
      lwi=sxy/w;
      
      lri=3*lwi-2*mai;
      
      qri=3*mai+a1*sxxy-lwi*a2;
      
      qr[i]=qri;
      lr[i]=lri;
   }
   //----------------------------------------
   return(0);
}
//*********************************************************



 
Yousufkhodja Sultonov:

インジケーターの働き

そして、今どこに幸せを求めるかというと、また天井から何か(採掘のような)?
 
ANG3110:
mql4で放物線回帰と線形回帰 をコンパクトに高速化したものですが、sxxy値の計算時に1サイクルをなくす方法がまだわかっていません。

何が言いたいんだ?

このコードを応用して、例えば、値の配列がある場合、他の場所で回帰計算をしてみてください - このコードの仕組みにかなり深く入り込む必要があります。また、なぜかというと、逆にした方が合理的な場合、コードの効率は悪いかもしれませんが、修正がしやすいからです。

個人的には、私の回帰クラスは3つの仮想関数を持っています - 点の数とその座標を得るため、回帰を適用するため - これらの関数を必要なものにオーバーロードするクラスを宣言する必要があります - そしてすぐにゼロから3次までの任意の回帰多項式の係数を得ることができます。また、重みを求める関数と「極点」(多項式が必ず通る点)を求める関数がありますが、これらの関数は省略可能で、重みは1に等しくなり、極点を除いた多項式が計算されます。効率は悪いかもしれませんが(内部ループも仮想関数も犠牲にして)、非常に柔軟性があり、それを理解する必要はありません。

 
Georgiy Merts:

何が言いたいんだ?

このコードを応用して、例えば、値の配列がある場合、他の場所で回帰計算をしてみてください - このコードの仕組みにかなり深く入り込む必要があります。また、その逆をやる方が合理的なのに、なぜ、コードはあまり効果的でなく、簡単に修正できるようにするのでしょう。

個人的には、私の回帰クラスは、回帰を適用するために、点の数とその座標という3つの仮想関数を持っています。これらの関数がオーバーロードされなければならないクラスを宣言すると、ゼロから3番目までの任意の次数の回帰多項式係数が直ちに得られます。また、重みを求める関数と「極点」(多項式が必ず通る点)を求める関数がありますが、これらの関数は省略可能で、重みは1に等しくなり、極点を除いた多項式が計算されます。効率は悪いかもしれませんが(内部ループも仮想関数も犠牲にして)、非常に柔軟性があり、それを理解する必要はありません。

これらの高速バリアントは、特定の目的のために、正確に速度が必要とされるもの、テストと回帰の終わりの位置のとき。あなたは係数と多項式の異なる次数が必要な場合は、私はこのバリアントを適用します。ここで、コード内の係数の配列 - X[]。つまり、あらゆる深さのカーブを描くための情報が網羅されているのです。何かの都合ということであれば、誰がそれを必要としているかということになるのでしょう。トレードでは使わず、今のところ特定の研究目的にのみ使用しています。
#property strict
//********************************************************************
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 clrMediumSlateBlue
#property indicator_width1 2
#property indicator_type1 DRAW_LINE
//================================
extern int p = 120;
extern int m = 2;
//================================
double fx[];
double a[],b[],sx[],x[];
double ci,sum;
int N;
//********************************************************************
int init()
{
   SetIndexBuffer(0,fx);
   //------------------------------------------------
   N=m+1;
  
   if (p<N+2) p=N+2;
  
   ArrayResize(sx,2*N);
   ArrayResize(a,N*N);
   ArrayResize(b,N);
   ArrayResize(x,N);
  
   return(0);
}
//********************************************************************
int start()
{
   int cbi=Bars-IndicatorCounted()-1; if (cbi<0) return(-1);
   if (cbi==0) return(0);
  
   //--------sx-------
   sx[0]=p;
   for(int n=1; n<N*2; n++)
   {
      sum=0;
      for(int j=0; j<p; j++)
         sum+=MathPow(j,n);
      sx[n]=sum;
   } 
   //-------syx--------
   for(int n=0; n<N; n++)
   {
      sum=0;
      for(int j=0; j<p; j++)
      {
         ci=Open[j];
         if (n==0) sum+=ci; else
         sum+=ci*MathPow(j,n);
      }
      b[n]=sum;
   }
   //------Matrix------
   for(int j=0; j<N; j++)
   for(int n=0; n<N; n++)
      a[n+j*N]=sx[n+j];
   //------Gauss-------
   af_Gauss(N,a,b,x);
   //------------------
   for (int j=0; j<p; j++)
   {
      sum=x[0];
      for(int n=1; n<N; n++)
         sum+=x[n]*MathPow(j,n);
        
      fx[j]=sum;
   }
  
   SetIndexDrawBegin(0,Bars-p);
  
   return(0);
}
//***************************************************************
void af_Gauss(int M, double& A[],double& B[], double& X[])
{
   double r,s;
   for(int k=0; k<M-1; k++)
   for(int i=k+1; i<M; i++)
   {
      r=0; if (A[k+k*M]!=0) r=A[k+i*M]/A[k+k*M];
      for(int j=k; j<M; j++)
         A[j+i*M]-=A[j+k*M]*r;
      B[i]-= B[k]*r;
   }
   if (A[M-1+(M-1)*M]!=0) X[M-1]=B[M-1]/A[M-1+(M-1)*M]; else X[M-1]=0;

   for(int i=M-2; i>=0; i--)
   {
      s=0;
      for(int j=i+1; j<M; j++)
         s+=A[j+i*M]*X[j];
      if (A[i+i*M]!=0) X[i]=(B[i]-s)/A[i+i*M]; else X[i]=0;
   }
}
//***************************************************************
 
どんな次数の多項式でもラッキーで代えがたい、という染み付いた意見に反論する準備はできています。参加者の実例をもとに、多項式がURMの回帰のほぼすべての指標で負けることを証明し、多項式の不沈性を永遠に忘れるようにします(上にリンクをあげました)。
 
Yousufkhodja Sultonov:
どんな次数の多項式も不可欠であり、かけがえのないものであるという染み付いた意見に反論する用意があるのです。参加者の実例をもとに、URM回帰のほぼすべての指標で多項式が負けることを証明し、多項式の不沈性を永遠に忘れるようにします(上にリンクを貼りました)。

必要ない、あなたはずっと前に証明した、我々はそれを信じている。

 
TheXpert:

見返りは?技術系のスレッド、特にプロに関するスレッドで、「クラブ」に言及したり、無意味な話をしてメンバーを荒らしたりしなければ、彼のことはどうでもいいんです。

ただ、このスレッドでは彼の荒らしは見事に自爆に変換され、私は彼に感謝しました。

どうしたら、そんなことを乗り越えられるのか?ここにもクラブが あります。11ページにわたってくだらないことが書かれていて、お互いにけなし合っていますが、誰も普通のテストを書くだけの根性がありません - 自分の立場を確認し主張するために。そして、ただ力を合わせて、少なくとも自分たちのために解決するのがベターだ。プロにスーパーテクニカルエキスパートと呼ばれる...プラスアルファで何を書いているのか想像がつく。

もうひとつ、OOP被害者 クラブという新しいコンセプトのクラブがあります。そして、彼らもまた、テストを書いて、いつがより速いのか-いつがポリモーフィズムで、いつがピギーバックなのかなどをチェックする勇気に欠けている...そして、私たちがC++の犠牲者のクラブで知っているのと同じ顔ばかりである。

 
Vladimir Baskakov:
また、今の幸せはどこに求めるのか、また天井から何か(マイニングのような)?

幸せ」のレシピはどこにもない、探しても無駄だ。達成されたことに満足しています。SDMhttps://www.mql5.com/ru/articles/250 と「市場原理」https://www.mql5.com/ru/articles/1825 をなんとか開発できたと自負していますが、、、100年以上経てば理解されるでしょう。先ほど、https://www.mql5.com/ru/forum/318795/page17#comment_13020163 インジケータはしつこくその時を待っていると言いましたが、その時がやってきました。


Канал линейной регрессии
Канал линейной регрессии
  • 2019.08.29
  • www.mql5.com
Есть индикатор линейной регрессии. Как встроить его расчет в советник и получить данные на 0 баре или на 1...
 
Yousufkhodja Sultonov:

幸せ」のレシピはどこにもない

学生がかわいそうだ。セムコはこの考えが通用しないことをずっと前に証明した。
 
Dmitry Fedoseev:

もし、再帰を使わないで解決策が見つかるなら、再帰を使うより良い。

いいんです。