|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
VIX Indikator
Ich habe einen interessanten Indikator gefunden und versucht den auf MQL4 umzuschreiben: https://www.mql5.com/de/code/20906
Erstens würde mich interessieren, ob ich das richtig gemacht habe und zweitens, weshalb ich beim iCustom() Aufruf fast nur EMPTY_VALUE zurück bekomme. Leider verstehe ich den Anfang der OnCalculate() bisher nicht: wie hängt die Berechnung mit dem was man sieht zusammen? Denn die Anzeige ist wunderbar in Ordnung und ich finde es nicht tragisch, statt einer Farbe eine zweite Linie zu haben, da ich ja sowieso die Richtung auswerten möchte. Code:
double vix = iCustom(NULL,0,"VIX",20,0,1); double vixDirection = iCustom(NULL,0,"VIX",20,1,1); Code:
//+------------------------------------------------------------------ #property copyright "mladen" #property link "mladenfx@gmail.com" #property description "Synthetic VIX" #property strict //+------------------------------------------------------------------ #property indicator_separate_window #property indicator_buffers 2 #property indicator_label1 "Synthetic VIX" #property indicator_type1 DRAW_LINE #property indicator_color1 clrYellow #property indicator_width1 2 #property indicator_label2 "Color VIX" #property indicator_type2 DRAW_LINE #property indicator_color2 clrDarkGray #property indicator_width2 1 //--- input parameters input int inpVixPeriod = 20; // Synthetic VIX period //--- buffers and global variables declarations double val[],valc[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { IndicatorBuffers(2); //--- indicator buffers mapping SetIndexBuffer(0,val); SetIndexBuffer(1,valc); //--- indicator short name assignement IndicatorSetString(INDICATOR_SHORTNAME,"Synthetic VIX ("+(string)inpVixPeriod+")"); return (INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator de-initialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { if(Bars(_Symbol,_Period)<rates_total) return(prev_calculated); int i=(int)MathMax(prev_calculated-1,0); for(; i<rates_total && !_StopFlag; i++) { int _start = MathMax(i-inpVixPeriod+1,0); double _highest = high[ArrayMaximum(high,_start,inpVixPeriod)]; val[i] = 100.0*(_highest-low[i])/_highest; valc[i] = (i>0) ?(val[i]>val[i-1]) ? 1 :(val[i]<val[i-1]) ? 2 : valc[i-1]: 0; } return (i); } |
|
||||
Ich sehe allerdings für den VIX noch keinen sinnvollen Anwendungsvorteil gegenüber anderen Indikatoren.
Er berechnet ja nichts anderes als die Abstand vom aktuellen Kurz zum höchsten Close in der gegebenen Periode. D.h. steigt der VIX, singt also der Kurz. Somit entfernt sich der Kurz vom letzten Hoch innerhalb der Periodenlänge. Vice versa, wenn der VIX singt. Dabei bleibt der Abstand zum höchsten Hoch in der Periodenlänge allerdings unberücksichtigt. |
|
|||
Vielen Dank.
Hintergrund ist ein Video von Mario Lüddemann, wo er den VDAX-NEW mit hohen bzw. steigenden Werten mit fallenden Märkte in Bezug setzt: https://www.youtube.com/watch?v=CIKL7tEOuP0 Ob das für diesen Synthetic VIX auch gilt, weiß ich nicht, aber dieser Indikator macht derzeit Sprünge nach oben, was ich im ATR nicht so sehe. Wie und ob ich den einsetze, weiß ich auch noch nicht, aber interessant. |
|
|||
Hallo Timo,
irgendwie ist das eine ganz andere Kurve. Habe mal einen Screenshot gemacht, wo man auch den merkwürdigen Sprung im Synthetic VIX sieht. Der Rest der Kurve sieht ja relativ gespiegelt zum DAX aus. Viele Grüße Anja |
|
|||
Zitat:
VDAXnew (in % p.a.) x Wurzel aus ( 30 Tage / 365 Tage) x DAX ( in Punkten) Heraus kommt die Schwankungsbreite für die nächsten 30 Tage. Das sind 2 unterschiedliche Paar Schuhe. AVT |
|
||||
Zitat:
hier ein Screenshot mit 3 Varianten: 1) MQL4 von mir 2) MQL4 von dir mit Fehlern in der Berechnung 3) MQL5 Originalversion, welche du ja umprogrammiert haben wolltest. 1 und 3 sind vom Verlauf identisch, auch macht dieser große Sprung bei der zweiten Variante keinen Sinn, wenn man sich die Berechnungsgrundlage von diesem Indikator anschaut. Ich sehe es aber auch wie AVT, das dieser Indikator nichts mit dem aus dem Video und auch nicht mit dem der etwas später gezeigt wird (welcher auch VIX heißt) zutun hat. Gruß Timo |
|
|||
OK, ich denke Indikator-Programmierung habe ich definitiv noch nicht verstanden. Im Bereich der Berechnung hatte ich ja nichts geändert.
Und die Beschreibung zum Indikator ist Quatsch und unbrauchbar? Speziell der letzte Satz? Zitat:
|
|
||||
Zitat:
Hier der Hauptcode zur Berechnung im aktuellen hier programmierten Indikator, der so funktioniert, wie ich es weiter oben schon beschrieben habe: Code:
Max=Close[iHighest(NULL, 0, MODE_CLOSE, InpVixPeriod, i)]; val[i]=100*(Max-Low[i])/Max; Im Anhang ist die Berechnung des VIX, welche ich nach kurzer Googlesuche gefunden habe und sich explizit auf dem "CBOE Volatility Index" gezeiht. Ist das genau das was du suchst? -> Keine Ahnung. Wird die Berechnung der Volatilität bestimmt komplexer aussehen als das was in dem Indikator passiert, welchen du hier geteilt hast? -> Ganz bestimmt! |
Lesezeichen |
|
|