Bayesian regresyon - Bu algoritmayı kullanarak Uzman Danışman yapan var mı? - sayfa 3

 
new-rena :

Büyük ihtimalle 10'dan 10'unu denerdim... //Bayesian, bence, hiç yuvarlanmıyor

http://datareview.info/article/10-tipov-regressii-kakoy-vyibrat/

Senin görüşün?

Buradaki fikir, Devavrat Shah ve Kang Zhang Laboratuvarı Bilgi ve Karar Sistemleri, EECS Massachusetts Teknoloji Enstitüsü tarafından sunulan gerçek ticaret stratejisinin Forex için uygun olup olmadığını anlamaktı.
 
lilita bogachkova :
Buradaki fikir, sunulan gerçek ticaret stratejisinin Forex için uygun olup olmadığını anlamaktı.
Yapmadığımı açıkça belirttim. Ancak iyi haberler var - piyasalar forex ile sınırlı değil. Kripto para birimlerinde giriş eşiği birkaç dolar.
 
lilita bogachkova :
Fikir, Devavrat Shah ve Kang Zhang Bilgi ve Karar Sistemleri Laboratuvarı, EECS Massachusetts Teknoloji Enstitüsü tarafından sunulan gerçek ticaret stratejisinin Forex için uygun olup olmadığını anlamaktı.

Cevap verdim - hayır, yuvarlanmıyor.

Rusça'da hesaplama ilkesi referans olarak açıklanmaktadır.

" 6. Bayes regresyonu , ridge regresyonuna benzer, ancak verilerde gürültünün (hata) normal olarak dağıldığı varsayımına dayanır - bu nedenle, verilerin yapısı hakkında zaten ortak bir anlayışın olduğu varsayılır "

Forex'te bırakın normal dağılımını, gürültü bile yok. Öyle olsaydı, o zaman bir düz ile bir trend arasında sınır olmayacaktı, yani normal bir dağılımla trend dönüşleri olmayacaktı. Normal bir dağılımla, fiyat, belirli bir açıda ve PPC'de bir yönde gürültü ile gidecektir.

 
new-rena :

Cevap verdim - hayır, yuvarlanmıyor.

Rusça'da hesaplama ilkesi referans olarak açıklanmaktadır.

" 6. Bayes regresyonu , ridge regresyonuna benzer, ancak verilerde gürültünün (hata) normal olarak dağıldığı varsayımına dayanır - bu nedenle, verilerin yapısı hakkında zaten ortak bir anlayışın olduğu varsayılır "

Forex'te bırakın normal dağılımını, gürültü bile yok. Öyle olsaydı, o zaman bir düz ile bir trend arasında sınır olmayacaktı, yani normal bir dağılımla trend dönüşleri olmayacaktı. Normal bir dağılımla, fiyat, belirli bir açıda ve PPC'de bir yönde gürültü ile gidecektir.

Gürültülü 'Bitcoin'in bir açıda ve PPC'de bir yöne gittiğini düşünebilirsiniz.

Bir konu varsa, o konunun tartışılması beklenir. Konu, sunulan strateji ile ilgilidir ( Bayesian regresyon - Bu algoritmayı kullanan bir danışman yaptı mı? ) ancak regresyon hesaplama yöntemleri arasında bir seçim olarak değil.

 

Görünüşe göre her şey mql araçları kullanılarak uygulanıyor - ALGLIB var - k-ortalama ve çok boyutlu doğrusal uyum - mevcut. Algoritmanın hala nasıl çalıştığını bulmak için kalır (ve bu kimseyi ilgilendirmiyor - bazıları R'yi övüyor, diğerleri genel olarak ne hakkında konuştuğunu söyleyen gerilemeye sarıldı). Algoritmayı tartışmak isteyen var mı?

 
Valerii Mazurenko :

Görünüşe göre her şey mql araçları kullanılarak uygulanıyor - ALGLIB var - k-ortalama ve çok boyutlu doğrusal uyum - mevcut. Algoritmanın hala nasıl çalıştığını bulmak için kalır (ve bu kimseyi ilgilendirmiyor - bazıları R'yi övüyor, diğerleri genel olarak ne hakkında konuştuğunu söyleyen gerilemeye sarıldı). Algoritmayı tartışmak isteyen var mı?

Bunu yapmak için herkesi doğru yöne göndermeniz gerekir. k-mean, dataanalysis.mqh dosyasında bulunan CKMeans sınıfı tarafından yapılır.

İşte sınıfın kendisi:

 class CKMeans
  {
private :
   //--- private method
   static bool        SelectCenterPP(CMatrixDouble &xy, const int npoints, const int nvars,CMatrixDouble &centers, bool &cbusycenters[], const int ccnt, double &d2[], double &p[], double &tmp[]);
public :
   //--- constructor, destructor
                     CKMeans( void );
                    ~CKMeans( void );
   //--- public method
   static void        KMeansGenerate(CMatrixDouble &xy, const int npoints, const int nvars, const int k, const int restarts, int &info,CMatrixDouble &c, int &xyc[]);
  };
//+------------------------------------------------------------------+
//| Constructor without parameters                                   |
//+------------------------------------------------------------------+
CKMeans::CKMeans( void )
  {

  }
//+------------------------------------------------------------------+
//| Destructor                                                       |
//+------------------------------------------------------------------+
CKMeans::~CKMeans( void )
  {

  }
//+------------------------------------------------------------------+
//| k-means++ clusterization                                         |
//| INPUT PARAMETERS:                                                |
//|     XY          -   dataset, array [0..NPoints-1,0..NVars-1].    |
//|     NPoints     -   dataset size, NPoints>=K                     |
//|     NVars       -   number of variables, NVars>=1                |
//|     K           -   desired number of clusters, K>=1             |
//|     Restarts    -   number of restarts, Restarts>=1              |
//| OUTPUT PARAMETERS:                                               |
//|     Info        -   return code:                                 |
//|                     * -3, if task is degenerate (number of       |
//|                           distinct points is less than K)        |
//|                     * -1, if incorrect                           |
//|                           NPoints/NFeatures/K/Restarts was passed|
//|                     *  1, if subroutine finished successfully    |
//|     C           -   array[0..NVars-1,0..K-1].matrix whose columns|
//|                     store cluster's centers                      |
//|     XYC         -   array[NPoints], which contains cluster       |
//|                     indexes                                      |
//+------------------------------------------------------------------+
static void CKMeans::KMeansGenerate(CMatrixDouble &xy, const int npoints,
                                     const int nvars, const int k,
                                     const int restarts, int &info,
                                    CMatrixDouble &c, int &xyc[])
  {
//--- create variables
   int     i= 0 ;
   int     j= 0 ;
   double e= 0 ;
   double ebest= 0 ;
   double v= 0 ;
   int     cclosest= 0 ;
   bool    waschanges;
   bool    zerosizeclusters;
   int     pass= 0 ;
   int     i_= 0 ;
   double dclosest= 0 ;
//--- creating arrays
   int     xycbest[];
   double x[];
   double tmp[];
   double d2[];
   double p[];
   int     csizes[];
   bool    cbusy[];
   double work[];
//--- create matrix
   CMatrixDouble ct;
   CMatrixDouble ctbest;
//--- initialization
   info= 0 ;
//--- Test parameters
   if (npoints<k || nvars< 1 || k< 1 || restarts< 1 )
     {
      info=- 1 ;
       return ;
     }
//--- TODO: special case K=1
//--- TODO: special case K=NPoints
   info= 1 ;
//--- Multiple passes of k-means++ algorithm
   ct.Resize(k,nvars);
   ctbest.Resize(k,nvars);
   ArrayResizeAL(xyc,npoints);
   ArrayResizeAL(xycbest,npoints);
   ArrayResizeAL(d2,npoints);
   ArrayResizeAL(p,npoints);
   ArrayResizeAL(tmp,nvars);
   ArrayResizeAL(csizes,k);
   ArrayResizeAL(cbusy,k);
//--- change value
   ebest=CMath::m_maxrealnumber;
//--- calculation
   for (pass= 1 ;pass<=restarts;pass++)
     {
       //--- Select initial centers  using k-means++ algorithm
       //--- 1. Choose first center at random
       //--- 2. Choose next centers using their distance from centers already chosen
       //--- Note that for performance reasons centers are stored in ROWS of CT,not
       //--- in columns. We'll transpose CT in the end and store it in the C.
      i=CMath::RandomInteger(npoints);
       for (i_= 0 ;i_<=nvars- 1 ;i_++)
         ct[ 0 ].Set(i_,xy[i][i_]);
      cbusy[ 0 ]= true ;
       for (i= 1 ;i<=k- 1 ;i++)
         cbusy[i]= false ;
       //--- check
       if (!SelectCenterPP(xy,npoints,nvars,ct,cbusy,k,d2,p,tmp))
        {
         info=- 3 ;
         return ;
        }
       //--- Update centers:
       //--- 2. update center positions
       for (i= 0 ;i<=npoints- 1 ;i++)
         xyc[i]=- 1 ;
       //--- cycle
       while ( true )
        {
         //--- fill XYC with center numbers
         waschanges= false ;
         for (i= 0 ;i<=npoints- 1 ;i++)
           {
             //--- change values
            cclosest=- 1 ;
            dclosest=CMath::m_maxrealnumber;
             for (j= 0 ;j<=k- 1 ;j++)
              {
               //--- calculation
               for (i_= 0 ;i_<=nvars- 1 ;i_++)
                  tmp[i_]=xy[i][i_];
               for (i_= 0 ;i_<=nvars- 1 ;i_++)
                  tmp[i_]=tmp[i_]-ct[j][i_];
               v= 0.0 ;
               for (i_= 0 ;i_<=nvars- 1 ;i_++)
                  v+=tmp[i_]*tmp[i_];
               //--- check
               if (v<dclosest)
                 {
                  cclosest=j;
                  dclosest=v;
                 }
              }
             //--- check
             if (xyc[i]!=cclosest)
               waschanges= true ;
             //--- change value
            xyc[i]=cclosest;
           }
         //--- Update centers
         for (j= 0 ;j<=k- 1 ;j++)
            csizes[j]= 0 ;
         for (i= 0 ;i<=k- 1 ;i++)
           {
             for (j= 0 ;j<=nvars- 1 ;j++)
               ct[i].Set(j, 0 );
           }
         //--- change values
         for (i= 0 ;i<=npoints- 1 ;i++)
           {
            csizes[xyc[i]]=csizes[xyc[i]]+ 1 ;
             for (i_= 0 ;i_<=nvars- 1 ;i_++)
               ct[xyc[i]].Set(i_,ct[xyc[i]][i_]+xy[i][i_]);
           }
         zerosizeclusters= false ;
         for (i= 0 ;i<=k- 1 ;i++)
           {
            cbusy[i]=csizes[i]!= 0 ;
            zerosizeclusters=zerosizeclusters || csizes[i]== 0 ;
           }
         //--- check
         if (zerosizeclusters)
           {
             //--- Some clusters have zero size - rare,but possible.
             //--- We'll choose new centers for such clusters using k-means++ rule
             //--- and restart algorithm
             if (!SelectCenterPP(xy,npoints,nvars,ct,cbusy,k,d2,p,tmp))
              {
               info=- 3 ;
               return ;
              }
             continue ;
           }
         //--- copy
         for (j= 0 ;j<=k- 1 ;j++)
           {
            v= 1.0 /( double )csizes[j];
             for (i_= 0 ;i_<=nvars- 1 ;i_++)
               ct[j].Set(i_,v*ct[j][i_]);
           }
         //--- if nothing has changed during iteration
         if (!waschanges)
             break ;
        }
       //--- 3. Calculate E,compare with best centers found so far
      e= 0 ;
       for (i= 0 ;i<=npoints- 1 ;i++)
        {
         for (i_= 0 ;i_<=nvars- 1 ;i_++)
            tmp[i_]=xy[i][i_];
         for (i_= 0 ;i_<=nvars- 1 ;i_++)
            tmp[i_]=tmp[i_]-ct[xyc[i]][i_];
         //--- calculation
         v= 0.0 ;
         for (i_= 0 ;i_<=nvars- 1 ;i_++)
            v+=tmp[i_]*tmp[i_];
         e=e+v;
        }
       //--- check
       if (e<ebest)
        {
         //--- store partition.
         ebest=e;
         //--- function call
         CBlas::CopyMatrix(ct, 0 ,k- 1 , 0 ,nvars- 1 ,ctbest, 0 ,k- 1 , 0 ,nvars- 1 );
         //--- copy
         for (i= 0 ;i<=npoints- 1 ;i++)
            xycbest[i]=xyc[i];
        }
     }
//--- Copy and transpose
   c.Resize(nvars,k);
//--- function call
   CBlas::CopyAndTranspose(ctbest, 0 ,k- 1 , 0 ,nvars- 1 ,c, 0 ,nvars- 1 , 0 ,k- 1 );
//--- copy
   for (i= 0 ;i<=npoints- 1 ;i++)
      xyc[i]=xycbest[i];
  }
//+------------------------------------------------------------------+
//| Select center for a new cluster using k-means++ rule             |
//+------------------------------------------------------------------+
static bool CKMeans::SelectCenterPP(CMatrixDouble &xy, const int npoints,
                                     const int nvars,CMatrixDouble &centers,
                                     bool &cbusycenters[], const int ccnt,
                                     double &d2[], double &p[], double &tmp[])
  {
//--- create variables
   bool    result;
   int     i= 0 ;
   int     j= 0 ;
   int     cc= 0 ;
   double v= 0 ;
   double s= 0 ;
   int     i_= 0 ;
//--- create array
   double busycenters[];
//--- copy
   ArrayCopy (busycenters,cbusycenters);
//--- initialization
   result= true ;
//--- calculation
   for (cc= 0 ;cc<=ccnt- 1 ;cc++)
     {
       //--- check
       if (!busycenters[cc])
        {
         //--- fill D2
         for (i= 0 ;i<=npoints- 1 ;i++)
           {
            d2[i]=CMath::m_maxrealnumber;
             for (j= 0 ;j<=ccnt- 1 ;j++)
              {
               //--- check
               if (busycenters[j])
                 {
                   for (i_= 0 ;i_<=nvars- 1 ;i_++)
                     tmp[i_]=xy[i][i_];
                   for (i_= 0 ;i_<=nvars- 1 ;i_++)
                     tmp[i_]=tmp[i_]-centers[j][i_];
                   //--- calculation
                  v= 0.0 ;
                   for (i_= 0 ;i_<=nvars- 1 ;i_++)
                     v+=tmp[i_]*tmp[i_];
                   //--- check
                   if (v<d2[i])
                     d2[i]=v;
                 }
              }
           }
         //--- calculate P (non-cumulative)
         s= 0 ;
         for (i= 0 ;i<=npoints- 1 ;i++)
            s=s+d2[i];
         //--- check
         if (s== 0.0 )
             return ( false );
         //--- change value
         s= 1 /s;
         for (i_= 0 ;i_<=npoints- 1 ;i_++)
            p[i_]=s*d2[i_];
         //--- choose one of points with probability P
         //--- random number within (0,1) is generated and
         //--- inverse empirical CDF is used to randomly choose a point.
         s= 0 ;
         v=CMath::RandomReal();
         //--- calculation
         for (i= 0 ;i<=npoints- 1 ;i++)
           {
            s=s+p[i];
             //--- check
             if (v<=s || i==npoints- 1 )
              {
               for (i_= 0 ;i_<=nvars- 1 ;i_++)
                  centers[cc].Set(i_,xy[i][i_]);
               busycenters[cc]= true ;
               //--- break the cycle
               break ;
              }
           }
        }
     }
//--- return result
   return (result);
  }
 

Parametreye dikkat edin:

K           -   desired number of clusters, K>=1

Bu nedenle, istediğiniz merkez sayısını bağımsız olarak ayarlamanız gerekir.

 
lilita bogachkova :

Gürültülü 'Bitcoin'in bir açıda ve PPC'de bir yöne gittiğini düşünebilirsiniz.

Bir konu varsa, o konunun tartışılması beklenir. Konu, sunulan strateji ile ilgilidir ( Bayesian regresyon - Bu algoritmayı kullanan bir danışman var mı? ) ancak regresyon hesaplama yöntemleri arasında seçim yapmakla ilgili değil.

Valerie Mazurenko :

Görünüşe göre her şey mql araçları kullanılarak uygulanıyor - ALGLIB var - k-ortalama ve çok boyutlu doğrusal uyum - mevcut. Algoritmanın hala nasıl çalıştığını bulmak için kalır (ve bu kimseyi ilgilendirmiyor - bazıları R'yi övüyor, diğerleri genel olarak ne hakkında konuştuğunu söyleyen gerilemeye sarıldı). Algoritmayı tartışmak isteyen var mı?

TAMAM.

Pratik uygulama, projenin buna değmesi koşuluyla her zaman bir projeyle başlar.

Neden bu yöntemin forex için geçerli olduğuna karar verdiniz?

 
new-rena :

TAMAM.

Pratik uygulama, projenin buna değmesi koşuluyla her zaman bir projeyle başlar.

Neden bu yöntemin forex için geçerli olduğuna karar verdiniz?

Şimdi bununla ilgili bir konuşma var. algoritma nasıl çalışır.

Uygulanabilirliğe gelince, yararlı olduğu bazı görevler var. Fiyatlar kümelenmeyecek.

 
Dmitry Fedoseev :

Şimdi bununla ilgili bir konuşma var. algoritma nasıl çalışır.

Bununla ilgili.

yeni-rena :

TAMAM.

Pratik uygulama, projenin buna değmesi koşuluyla her zaman bir projeyle başlar.

Neden bu yöntemin forex için geçerli olduğuna karar verdiniz?

Araştırmacılar belirgin bir eğilimi olmayan bir dönem seçtiler, bu nedenle elde edilen sonuçlar ilgi çekici.

Bitcoin 2014.01 - 2014.09