Hallo,
leider konnte ich das Kalman-Filter als Investox-Indikator nicht finden.
Habe den Kalman-Filter als MT4-Code gefunden:
http://codebase.mql4.com/ru/source/3310
Die 4 Inputwerte für das Kalman-Filter sind:
extern int
Mode=6; --> in Investox: Name=kurse, Typ=Datenreihe, Standard=z.B. Close
extern double
K=1;
extern double
Sharpness=1;
extern int
draw_begin=500;
Der Rückgabewerte des Investox-KalmanIndis könnte so aussehen:
a)
+1...weiter steigende Kurse (entspricht "grün" im Bild)
-1 ... weiter fallende Kurse (entspricht "rot" im Bild)
b) der geglättete Kalman-Kurswert
--> zwei Rückgabewerte bei einem Indikator, könnte schwierig werden
double iValue(int mode, int shift){
switch (mode) {
case 0:
return (iClose(NULL,0,shift));
case 1:
return (iOpen(NULL,0,shift));
case 2:
return (iHigh(NULL,0,shift));
case 3:
return (iLow(NULL,0,shift));
case 4:
return ((iHigh(NULL,0,shift)+iLow(NULL,0,shift))/2);
case 5:
return ((iHigh(NULL,0,shift)+iLow(NULL,0,shift)+iClose(NULL,0,shift))/3);
case 6:
return ((iHigh(NULL,0,shift)+iLow(NULL,0,shift)+iClose(NULL,0,shift)+iClose(NULL,0,shift))/4);
default:
return (0);
}
}
Den Codeteil kann man stark vereinfachen, indem man einfach in Investox eine Datenreihe einsetzt. Dann kann Close, Open, usw. übergeben.
int start()
{
if(Bars<=draw_begin) return(0);
int i;
double Velocity=0;
double Distance=0;
double Error=0;
double value = iValue(Mode,draw_begin+1);
for(i=draw_begin;i>=0;i--) {
Distance = iValue(Mode,i) - value;
Error = value + Distance * MathSqrt(Sharpness*K/100);
Velocity = Velocity + Distance*K/100;
value = Error+Velocity;
//color lines
if (Velocity>0) {
ExtMapBufferUp = value;
//ExtMapBufferUp[i] = S;
ExtMapBufferDown[i] = EMPTY_VALUE;
if (ExtMapBufferUp[i+1] == EMPTY_VALUE) ExtMapBufferUp[i+1] = ExtMapBufferDown[i+1];
} else {
ExtMapBufferUp[i] = EMPTY_VALUE;
ExtMapBufferDown[i] = value;
//ExtMapBufferDown[i] = S;
if (ExtMapBufferDown[i+1] == EMPTY_VALUE) ExtMapBufferDown[i+1] = ExtMapBufferUp[i+1];
}
}
//---- done
return(0);
}
Die eigentliche Kalman-Berechnung findet hier statt. Die Formatierung geht verloren, deshalb habe ich es auch als Bild angehängt. Leider reicht mein MQL4-Codewissen nicht aus, um die Berechnung in die Investox-Formelsprache zu überführen.
Sehr Ihr hier eine Chance?
Viele Grüße
Sten
PS:
Das Kalman-Filter wirkt dann so, siehe Bild.
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »sten« (9. April 2012, 20:54)