Die Idee war, herauszufinden, ob die von Devavrat Shah und Kang Zhang im Laboratory for Information and Decision Systems, Department of EECS Massachusetts Institute of Technology vorgestellte reale Handelsstrategie für den Devisenhandel geeignet ist.
lilita bogachkova: Die Idee war, zu sehen, ob die vorgestellte reale Handelsstrategie für den Devisenhandel geeignet ist.
Ich dachte, ich hätte mich klar ausgedrückt, dass es nicht so ist. Aber die gute Nachricht ist, dass die Märkte nicht auf Devisen beschränkt sind. Kryptowährungen haben eine Einstiegsschwelle von ein paar Pfund.
lilita bogachkova: Die Idee war, herauszufinden, ob die von Devavrat Shah und Kang Zhang im Laboratory for Information and Decision Systems, Department of EECS Massachusetts Institute of Technology vorgestellte reale Handelsstrategie für den Devisenhandel geeignet ist.
Ich sagte nein, das funktioniert nicht.
In der russischen Version des Links wird das Berechnungsprinzip beschrieben.
"6. DieBayes'sche Regression ähnelt der Ridge-Regression, basiert aber auf der Annahme, dass das Rauschen (der Fehler) in den Daten normalverteilt ist - es wird also davon ausgegangen, dass es bereits ein allgemeines Verständnis der Struktur der Daten gibt.
Im Devisenhandel gibt es kein Rauschen, geschweige denn eine Normalverteilung. Wäre dies der Fall, gäbe es keine Grenzlinie zwischen einer Flaute und einem Trend, es gäbe keine Trendumkehr, d. h. eine Normalverteilung. Bei einer Normalverteilung würde der Preis mit dem Rauschen in einem bestimmten Winkel zu einer Seite wandern und dann wäre er weg.
In der russischen Version des Links wird das Berechnungsprinzip beschrieben.
"6. DieBayes'sche Regression ähnelt der Ridge-Regression, basiert aber auf der Annahme, dass das Rauschen (der Fehler) in den Daten normalverteilt ist - es wird also davon ausgegangen, dass bereits ein allgemeines Verständnis der Datenstruktur vorhanden ist".
Im Devisenhandel gibt es kein Rauschen, geschweige denn eine Normalverteilung. Wäre dies der Fall, gäbe es keine Grenzlinie zwischen Flachland und Trend, es gäbe keine Trendumkehr, d.h. bei einer Normalverteilung. Bei einer Normalverteilung würde der Preis mit dem Rauschen in einem bestimmten Winkel zur Seite gehen, und dann wären wir aufgeschmissen.
Man könnte meinen, dass "Bitcoin" mit Lärm in einem bestimmten Winkel in dieselbe Richtung geht und piept.
Wenn es ein Thema gibt, dann wird erwartet, dass das Thema das Gesprächsthema ist. Das Thema ist die vorgestellte Strategie(Bayessche Regression - Hat jemand einen EA mit diesem Algorithmus gemacht?), aber nicht als Wahl zwischen Regressionsberechnungsmethoden.
Es scheint, dass alles von mql implementiert wird - es ist ALGLIB- k-mean und multivariate lineare Anpassung - verfügbar. Bleibt noch herauszufinden, wie der Algorithmus funktioniert (und das interessiert niemanden - die einen loben R, die anderen stecken in der Regression fest, wen interessiert das überhaupt). Hat jemand Lust, den Algorithmus zu diskutieren?
Es scheint, dass alles von mql implementiert wird - es ist ALGLIB- k-mean und multivariate lineare Anpassung - verfügbar. Bleibt noch herauszufinden, wie der Algorithmus funktioniert (und das interessiert niemanden - die einen loben R, die anderen stecken in der Regression fest, wen interessiert das überhaupt). Möchte jemand den Algorithmus diskutieren?
Dazu müssen Sie alle in die richtige Richtung schicken. k-mean wird durch die KlasseCKMeans in der Dateidataanalysis.mqh implementiert.
Hier ist die Klasse selbst:
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);
}
Man sollte meinen, dass "Bitcoin" und Lärm in einem bestimmten Winkel in dieselbe Richtung gehen würden.
Wenn es ein Thema gibt, dann wird erwartet, dass das Thema ein Thema ist. Das Thema bezieht sich auf die vorgestellte Strategie(Bayes'sche Regression - hat jemand einen EA mit diesem Algorithmus erstellt?), aber nicht auf die Wahl der Regressionsberechnungsmethoden.
Valerii Mazurenko:
Scheint von mql implementiert zu werden - es gibt ALGLIB- k-mean und multivariate lineare Anpassung - verfügbar. Bleibt noch herauszufinden, wie der Algorithmus funktioniert (und das interessiert niemanden - die einen loben R, die anderen stecken in der Regression fest, wen interessiert das überhaupt). Hat jemand Interesse an einer Diskussion über den Algorithmus?
Gut.
Die praktische Umsetzung beginnt immer mit einem Projekt, vorausgesetzt, das Projekt ist sinnvoll.
Warum haben Sie beschlossen, dass diese Methode für den Devisenhandel geeignet ist?
Die praktische Umsetzung beginnt immer mit einem Projekt, vorausgesetzt, das Projekt ist sinnvoll.
Wie kommen Sie darauf, dass diese Methode auf Devisen anwendbar ist?
Jetzt geht es darum, wie der Algorithmus funktioniert.
Was die Anwendbarkeit anbelangt, so wird es einige Aufgaben geben, bei denen es sich als nützlich erweisen wird. Clustering-Preise werden nicht funktionieren.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Ich würde wahrscheinlich 10 von 10 versuchen... //Bayesian scheint überhaupt nicht zu funktionieren.
http://datareview.info/article/10-tipov-regressii-kakoy-vyibrat/
Was meinen Sie dazu?
Die Idee war, zu sehen, ob die vorgestellte reale Handelsstrategie für den Devisenhandel geeignet ist.
Die Idee war, herauszufinden, ob die von Devavrat Shah und Kang Zhang im Laboratory for Information and Decision Systems, Department of EECS Massachusetts Institute of Technology vorgestellte reale Handelsstrategie für den Devisenhandel geeignet ist.
Ich sagte nein, das funktioniert nicht.
In der russischen Version des Links wird das Berechnungsprinzip beschrieben.
"6. DieBayes'sche Regression ähnelt der Ridge-Regression, basiert aber auf der Annahme, dass das Rauschen (der Fehler) in den Daten normalverteilt ist - es wird also davon ausgegangen, dass es bereits ein allgemeines Verständnis der Struktur der Daten gibt.
Im Devisenhandel gibt es kein Rauschen, geschweige denn eine Normalverteilung. Wäre dies der Fall, gäbe es keine Grenzlinie zwischen einer Flaute und einem Trend, es gäbe keine Trendumkehr, d. h. eine Normalverteilung. Bei einer Normalverteilung würde der Preis mit dem Rauschen in einem bestimmten Winkel zu einer Seite wandern und dann wäre er weg.
Ich sagte nein, das funktioniert nicht.
In der russischen Version des Links wird das Berechnungsprinzip beschrieben.
"6. DieBayes'sche Regression ähnelt der Ridge-Regression, basiert aber auf der Annahme, dass das Rauschen (der Fehler) in den Daten normalverteilt ist - es wird also davon ausgegangen, dass bereits ein allgemeines Verständnis der Datenstruktur vorhanden ist".
Im Devisenhandel gibt es kein Rauschen, geschweige denn eine Normalverteilung. Wäre dies der Fall, gäbe es keine Grenzlinie zwischen Flachland und Trend, es gäbe keine Trendumkehr, d.h. bei einer Normalverteilung. Bei einer Normalverteilung würde der Preis mit dem Rauschen in einem bestimmten Winkel zur Seite gehen, und dann wären wir aufgeschmissen.
Man könnte meinen, dass "Bitcoin" mit Lärm in einem bestimmten Winkel in dieselbe Richtung geht und piept.
Wenn es ein Thema gibt, dann wird erwartet, dass das Thema das Gesprächsthema ist. Das Thema ist die vorgestellte Strategie(Bayessche Regression - Hat jemand einen EA mit diesem Algorithmus gemacht?), aber nicht als Wahl zwischen Regressionsberechnungsmethoden.
Es scheint, dass alles von mql implementiert wird - es ist ALGLIB- k-mean und multivariate lineare Anpassung - verfügbar. Bleibt noch herauszufinden, wie der Algorithmus funktioniert (und das interessiert niemanden - die einen loben R, die anderen stecken in der Regression fest, wen interessiert das überhaupt). Hat jemand Lust, den Algorithmus zu diskutieren?
Es scheint, dass alles von mql implementiert wird - es ist ALGLIB- k-mean und multivariate lineare Anpassung - verfügbar. Bleibt noch herauszufinden, wie der Algorithmus funktioniert (und das interessiert niemanden - die einen loben R, die anderen stecken in der Regression fest, wen interessiert das überhaupt). Möchte jemand den Algorithmus diskutieren?
Dazu müssen Sie alle in die richtige Richtung schicken. k-mean wird durch die KlasseCKMeans in der Dateidataanalysis.mqh implementiert.
Hier ist die Klasse selbst:
Beachten Sie den Parameter:
K - desired number of clusters, K>=1
Sie müssen also die gewünschte Anzahl von Zentren selbst festlegen.
Man sollte meinen, dass "Bitcoin" und Lärm in einem bestimmten Winkel in dieselbe Richtung gehen würden.
Wenn es ein Thema gibt, dann wird erwartet, dass das Thema ein Thema ist. Das Thema bezieht sich auf die vorgestellte Strategie(Bayes'sche Regression - hat jemand einen EA mit diesem Algorithmus erstellt?), aber nicht auf die Wahl der Regressionsberechnungsmethoden.
Scheint von mql implementiert zu werden - es gibt ALGLIB- k-mean und multivariate lineare Anpassung - verfügbar. Bleibt noch herauszufinden, wie der Algorithmus funktioniert (und das interessiert niemanden - die einen loben R, die anderen stecken in der Regression fest, wen interessiert das überhaupt). Hat jemand Interesse an einer Diskussion über den Algorithmus?
Gut.
Die praktische Umsetzung beginnt immer mit einem Projekt, vorausgesetzt, das Projekt ist sinnvoll.
Warum haben Sie beschlossen, dass diese Methode für den Devisenhandel geeignet ist?
GUT.
Die praktische Umsetzung beginnt immer mit einem Projekt, vorausgesetzt, das Projekt ist sinnvoll.
Wie kommen Sie darauf, dass diese Methode auf Devisen anwendbar ist?
Jetzt geht es darum, wie der Algorithmus funktioniert.
Was die Anwendbarkeit anbelangt, so wird es einige Aufgaben geben, bei denen es sich als nützlich erweisen wird. Clustering-Preise werden nicht funktionieren.
Wir sprechen jetzt darüber, wie der Algorithmus funktioniert.
Das ist es, worüber wir sprechen.
Ja.
Die praktische Umsetzung beginnt immer mit einem Projekt, vorausgesetzt, das Projekt ist sinnvoll.
Warum haben Sie beschlossen, dass diese Methode für den Devisenhandel geeignet ist?
Die Forscher wählten einen Zeitraum ohne ausgeprägten Trend, weshalb die Ergebnisse interessant sind.