Donnerstag, 18. April 2024, 06:32 UTC+2

Sie sind nicht angemeldet.

  • Anmelden
  • Registrieren

Lieber Besucher, herzlich willkommen bei: INVESTOX-Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

sten

Experte

Registrierungsdatum: 6. September 2002

Beiträge: 2 879

1

Sonntag, 8. April 2012, 14:33

suche Kalman-Filter zur Trenderkennung

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

Zitat


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.

Zitat


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.
»sten« hat folgende Bilder angehängt:
  • 120408_chartbild_mitKalmanFilter.GIF
  • 120408_KalmanFilter-Berechnung.GIF

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »sten« (9. April 2012, 20:54)


Registrierungsdatum: 4. September 2007

Beiträge: 311

Wohnort: Stuttgart

2

Dienstag, 10. April 2012, 13:19

Hi Sten,

weis nicht ob es Dir was bringen könnte aber hier mal der Code für Tradestation und Metastock, ohne das ich natürlich weis ob sie funktionieren.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{Function name= KF}
INPUT:
   K1(Numeric),
   BP(NumericSeries);
VARS:
   Pred(BP),
   Smooth(0),
   Velo(0),
   DeltaK(0),
   stderr(0),
   error(0),
   sumerr(0)  ; 
IF currentbar > 1 then BEGIN

DeltaK = BP -Pred;
Smooth = Pred + DeltaK* SquareRoot( (K1/10000)*2 ) ;
Velo= Velo + ((K1/10000)*Deltak) ;
Pred =  Smooth + Velo ;

KF=Pred;
END;


Quellcode

1
2
3
4
5
6
7
8
9
10
PRICEE:=C;
Smooth:=.13785*(2*PriceE - Ref(PriceE,-1)) + .0007*(2*Ref(PriceE,-1) - Ref(PriceE,-2)) + .13785*(2*Ref(PriceE,-2) -Ref(PriceE,-3)) + 
1.2103*PREV - .4867*Ref(PREV,-1);

SMOOTH;

ti:= 15;
pr:= MP();
coef:= Abs(pr - Ref(pr,-5));
Sum(coef*pr,ti)/Sum(coef,ti)
Bei dem Metastock-Code irritieren mich die vorgegebenen Zahlen!


Hier noch ein Link zu tradesignal: [url]http://www.tradesignalonline.com/l…d=Kalman+Filter[/url] (hoffe ich darf den Posten)
Grüße aus dem Schwabenland
Arend

sten

Experte

Registrierungsdatum: 6. September 2002

Beiträge: 2 879

3

Sonntag, 15. April 2012, 20:31

Hallo trader-hawk,

Danke, für das Zusammensuchen der Kalman-Codestücke für Tradestation und Metastock. Hmm, ist jetzt aber auch nicht so meine Welt.

Denke in Investox müsste sich die for-Schleife für das Kalman-Filter am leichtesten mit VBScript innerhalb eines ganz normalen Inv-Indikators umsetzen.

einfacher Beispielcode mit einer for-Schleife:

Zitat


dim i
dim myfeld
getdaten "High",myfeld
for i= 1 to alleperioden
ergebnis(i)=myfeld(i)
next


Habe jetzt alle Puzzels zusammen gesucht. Mal sehen wann ich dazu komme die Puzzels zusammenzusetzen.
Danke.

Viele Grüße
Sten

Investox

Administrator

Registrierungsdatum: 31. August 2002

Beiträge: 5 680

4

Montag, 16. April 2012, 08:39

Hallo,

hier eine mögliche Umsetzung mit einem VBScript-Indikator:
http://www.investoxforum.de/index.php?pa…BData&dataID=83

Zu beachten ist die lange "Einschwingphase" des Indikators.

Viele Grüße
Andreas Knöpfel

sten

Experte

Registrierungsdatum: 6. September 2002

Beiträge: 2 879

5

Montag, 16. April 2012, 14:06

Hallo Hr. Knöpfel,

vielen Dank für die Umsetzung. Super.

Viele Grüße
Sten