lilita bogachkova : 아이디어는 EECS Massachusetts Institute of Technology의 Devavrat Shah 및 Kang Zhang 정보 및 의사 결정 시스템 연구소가 제시한 실제 거래 전략이 Forex에 적합한지 이해하는 것이었습니다.
글쎄, 나는 대답했다 - 아니오, 그것은 굴러 가지 않습니다.
러시아어에서는 계산 원리가 참조로 설명됩니다.
" 6. 베이지안 회귀 는 릿지 회귀와 유사하지만 데이터에 노이즈(오차)가 정규 분포되어 있다는 가정을 기반으로 하므로 데이터 구조에 대한 공통적인 이해가 이미 있다고 가정합니다."
Forex에는 정규 분포는 고사하고 노이즈가 없습니다. 그렇다면 플랫과 추세 사이에 경계가 없고 추세 반전이 없을 것입니다. 즉, 정규 분포를 의미합니다. 정규 분포에서 가격은 어떤 각도에서 한 방향으로 노이즈와 PPC로 이동합니다.
모든 것이 mql 도구를 사용하여 구현되는 것 같습니다. ALGLIB (k-mean 및 multidimensional linear-fit)를 사용할 수 있습니다. 알고리즘이 여전히 어떻게 작동하는지 알아내는 것이 남아 있습니다(그리고 이것은 누구에게도 관심이 없습니다. 일부는 R을 칭찬하고, 다른 일부는 회귀에 집착하고, 누가 일반적으로 무엇에 대해 이야기하는지). 알고리즘에 대해 논의할 의사가 있습니까?
모든 것이 mql 도구를 사용하여 구현되는 것 같습니다. ALGLIB (k-mean 및 multidimensional linear-fit)를 사용할 수 있습니다. 알고리즘이 여전히 어떻게 작동하는지 알아내는 것이 남아 있습니다(그리고 이것은 누구에게도 관심이 없습니다. 일부는 R을 칭찬하고, 다른 일부는 회귀에 집착하고, 누가 일반적으로 무엇에 대해 이야기하는지). 알고리즘에 대해 논의할 의사가 있습니까?
이렇게 하려면 모든 사람을 올바른 방향으로 보내야 합니다. k-mean은 dataanalysis.mqh 파일에 있는 CKMeans 클래스에 의해 수행됩니다.
다음은 클래스 자체입니다.
class CKMeans
{
private :
//--- private methodstaticbool SelectCenterPP(CMatrixDouble &xy, constint npoints, constint nvars,CMatrixDouble ¢ers, bool &cbusycenters[], constint ccnt, double &d2[], double &p[], double &tmp[]);
public :
//--- constructor, destructor
CKMeans( void );
~CKMeans( void );
//--- public methodstaticvoid KMeansGenerate(CMatrixDouble &xy, constint npoints, constint nvars, constint k, constint 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 |//+------------------------------------------------------------------+staticvoid CKMeans::KMeansGenerate(CMatrixDouble &xy, constint npoints,
constint nvars, constint k,
constint restarts, int &info,
CMatrixDouble &c, int &xyc[])
{
//--- create variablesint 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 arraysint 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 parametersif (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;
//--- calculationfor (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 ;
//--- checkif (!SelectCenterPP(xy,npoints,nvars,ct,cbusy,k,d2,p,tmp))
{
info=- 3 ;
return ;
}
//--- Update centers://--- 2. update center positionsfor (i= 0 ;i<=npoints- 1 ;i++)
xyc[i]=- 1 ;
//--- cyclewhile ( 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++)
{
//--- calculationfor (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_];
//--- checkif (v<dclosest)
{
cclosest=j;
dclosest=v;
}
}
//--- checkif (xyc[i]!=cclosest)
waschanges= true ;
//--- change value
xyc[i]=cclosest;
}
//--- Update centersfor (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 valuesfor (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 ;
}
//--- checkif (zerosizeclusters)
{
//--- Some clusters have zero size - rare,but possible.//--- We'll choose new centers for such clusters using k-means++ rule//--- and restart algorithmif (!SelectCenterPP(xy,npoints,nvars,ct,cbusy,k,d2,p,tmp))
{
info=- 3 ;
return ;
}
continue ;
}
//--- copyfor (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 iterationif (!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;
}
//--- checkif (e<ebest)
{
//--- store partition.
ebest=e;
//--- function call
CBlas::CopyMatrix(ct, 0 ,k- 1 , 0 ,nvars- 1 ,ctbest, 0 ,k- 1 , 0 ,nvars- 1 );
//--- copyfor (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 );
//--- copyfor (i= 0 ;i<=npoints- 1 ;i++)
xyc[i]=xycbest[i];
}
//+------------------------------------------------------------------+//| Select center for a new cluster using k-means++ rule |//+------------------------------------------------------------------+staticbool CKMeans::SelectCenterPP(CMatrixDouble &xy, constint npoints,
constint nvars,CMatrixDouble ¢ers,
bool &cbusycenters[], constint ccnt,
double &d2[], double &p[], double &tmp[])
{
//--- create variablesbool result;
int i= 0 ;
int j= 0 ;
int cc= 0 ;
double v= 0 ;
double s= 0 ;
int i_= 0 ;
//--- create arraydouble busycenters[];
//--- copyArrayCopy (busycenters,cbusycenters);
//--- initialization
result= true ;
//--- calculationfor (cc= 0 ;cc<=ccnt- 1 ;cc++)
{
//--- checkif (!busycenters[cc])
{
//--- fill D2for (i= 0 ;i<=npoints- 1 ;i++)
{
d2[i]=CMath::m_maxrealnumber;
for (j= 0 ;j<=ccnt- 1 ;j++)
{
//--- checkif (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_];
//--- checkif (v<d2[i])
d2[i]=v;
}
}
}
//--- calculate P (non-cumulative)
s= 0 ;
for (i= 0 ;i<=npoints- 1 ;i++)
s=s+d2[i];
//--- checkif (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();
//--- calculationfor (i= 0 ;i<=npoints- 1 ;i++)
{
s=s+p[i];
//--- checkif (v<=s || i==npoints- 1 )
{
for (i_= 0 ;i_<=nvars- 1 ;i_++)
centers[cc].Set(i_,xy[i][i_]);
busycenters[cc]= true ;
//--- break the cyclebreak ;
}
}
}
}
//--- return resultreturn (result);
}
노이즈가 있는 '비트코인'은 어느 각도에서나 PPC가 한 방향으로 간다고 생각할 수 있습니다.
토픽이 있다면 토픽이 나올 것으로 예상된다. 주제는 제시된 전략( 베이지안 회귀 - 이 알고리즘을 사용하여 어드바이저를 수행한 사람이 있습니까? )에 관한 것이지만 회귀 계산 방법 중에서 선택하는 것은 아닙니다.
발레리 마주렌코 :
모든 것이 mql 도구를 사용하여 구현되는 것 같습니다. ALGLIB (k-mean 및 multidimensional linear-fit)를 사용할 수 있습니다. 알고리즘이 여전히 어떻게 작동하는지 알아내는 것이 남아 있습니다(그리고 이것은 누구에게도 관심이 없습니다. 일부는 R을 칭찬하고, 다른 일부는 회귀에 매달리고, 일반적으로 무엇에 대해 이야기하는지). 알고리즘에 대해 논의할 의사가 있습니까?
나는 아마도 10개 중 10개를 시도할 것입니다... //베이지안은 제 생각에는 전혀 굴러가지 않습니다
http://datareview.info/article/10-tipov-regressii-kakoy-vyibrat/
당신의 의견?
제시된 실제 거래 전략이 Forex에 적합한지 여부를 이해하는 것이 아이디어였습니다.
아이디어는 EECS Massachusetts Institute of Technology의 Devavrat Shah 및 Kang Zhang 정보 및 의사 결정 시스템 연구소가 제시한 실제 거래 전략이 Forex에 적합한지 이해하는 것이었습니다.
글쎄, 나는 대답했다 - 아니오, 그것은 굴러 가지 않습니다.
러시아어에서는 계산 원리가 참조로 설명됩니다.
" 6. 베이지안 회귀 는 릿지 회귀와 유사하지만 데이터에 노이즈(오차)가 정규 분포되어 있다는 가정을 기반으로 하므로 데이터 구조에 대한 공통적인 이해가 이미 있다고 가정합니다."
Forex에는 정규 분포는 고사하고 노이즈가 없습니다. 그렇다면 플랫과 추세 사이에 경계가 없고 추세 반전이 없을 것입니다. 즉, 정규 분포를 의미합니다. 정규 분포에서 가격은 어떤 각도에서 한 방향으로 노이즈와 PPC로 이동합니다.
글쎄, 나는 대답했다 - 아니오, 그것은 굴러 가지 않습니다.
러시아어에서는 계산 원리가 참조로 설명됩니다.
" 6. 베이지안 회귀 는 릿지 회귀와 유사하지만 데이터에 노이즈(오차)가 정규 분포되어 있다는 가정을 기반으로 하므로 데이터의 구조에 대한 공통적인 이해가 이미 있다고 가정합니다."
Forex에는 정규 분포는 고사하고 노이즈가 없습니다. 그렇다면 플랫과 추세 사이에 경계가 없고 추세 반전이 없을 것입니다. 즉, 정규 분포를 의미합니다. 정규 분포에서 가격은 어느 각도에서 한 방향으로 노이즈와 PPC로 이동합니다.
노이즈가 있는 '비트코인'은 어느 각도에서나 PPC가 한 방향으로 간다고 생각할 수 있습니다.
토픽이 있다면 토픽이 나올 것으로 예상된다. 주제는 제시된 전략( 베이지안 회귀 - 이 알고리즘을 사용하여 어드바이저를 수행한 사람이 있습니까? )에 관한 것이지만 회귀 계산 방법 중에서 선택하는 것은 아닙니다.
모든 것이 mql 도구를 사용하여 구현되는 것 같습니다. ALGLIB (k-mean 및 multidimensional linear-fit)를 사용할 수 있습니다. 알고리즘이 여전히 어떻게 작동하는지 알아내는 것이 남아 있습니다(그리고 이것은 누구에게도 관심이 없습니다. 일부는 R을 칭찬하고, 다른 일부는 회귀에 집착하고, 누가 일반적으로 무엇에 대해 이야기하는지). 알고리즘에 대해 논의할 의사가 있습니까?
모든 것이 mql 도구를 사용하여 구현되는 것 같습니다. ALGLIB (k-mean 및 multidimensional linear-fit)를 사용할 수 있습니다. 알고리즘이 여전히 어떻게 작동하는지 알아내는 것이 남아 있습니다(그리고 이것은 누구에게도 관심이 없습니다. 일부는 R을 칭찬하고, 다른 일부는 회귀에 집착하고, 누가 일반적으로 무엇에 대해 이야기하는지). 알고리즘에 대해 논의할 의사가 있습니까?
이렇게 하려면 모든 사람을 올바른 방향으로 보내야 합니다. k-mean은 dataanalysis.mqh 파일에 있는 CKMeans 클래스에 의해 수행됩니다.
다음은 클래스 자체입니다.
매개변수에 주의하십시오.
K - desired number of clusters, K>=1
따라서 원하는 수의 센터를 독립적으로 설정해야합니다.
노이즈가 있는 '비트코인'은 어느 각도에서나 PPC가 한 방향으로 간다고 생각할 수 있습니다.
토픽이 있다면 토픽이 나올 것으로 예상된다. 주제는 제시된 전략( 베이지안 회귀 - 이 알고리즘을 사용하여 어드바이저를 수행한 사람이 있습니까? )에 관한 것이지만 회귀 계산 방법 중에서 선택하는 것은 아닙니다.
모든 것이 mql 도구를 사용하여 구현되는 것 같습니다. ALGLIB (k-mean 및 multidimensional linear-fit)를 사용할 수 있습니다. 알고리즘이 여전히 어떻게 작동하는지 알아내는 것이 남아 있습니다(그리고 이것은 누구에게도 관심이 없습니다. 일부는 R을 칭찬하고, 다른 일부는 회귀에 매달리고, 일반적으로 무엇에 대해 이야기하는지). 알고리즘에 대해 논의할 의사가 있습니까?
확인.
실제 구현은 프로젝트가 가치가 있는 한 항상 프로젝트에서 시작됩니다.
이 방법을 외환에 적용할 수 있다고 결정한 이유는 무엇입니까?
확인.
실제 구현은 프로젝트가 가치가 있는 한 항상 프로젝트에서 시작됩니다.
이 방법을 외환에 적용할 수 있다고 결정한 이유는 무엇입니까?
이제 그것에 대한 대화가 있습니다. 알고리즘이 작동하는 방식.
적용 가능성에 관해서는 유용한 작업이 있습니다. 가격은 클러스터링되지 않습니다.
이제 그것에 대한 대화가 있습니다. 알고리즘이 작동하는 방식.
그것이 무엇인지에 관한 것입니다.
확인.
실제 구현은 프로젝트가 가치가 있는 한 항상 프로젝트에서 시작됩니다.
이 방법을 외환에 적용할 수 있다고 결정한 이유는 무엇입니까?
연구자들은 뚜렷한 경향이 없는 기간을 선택했기 때문에 달성된 결과가 흥미롭습니다.