Warum len1 = 3 oder len1 = 5 oder (2*n-1) ... | |
...für alle 1 < n oo nicht funktionieren kann
Hallo stockoperator!
Schönen Dank für Deinen Hinweis, der mir Gelegenheit gibt, zu betonen, daß ich nur den Quellcode aus der Literaturquelle wiedergegeben habe.
Die Interpretation der Umsetzung bedingt jedoch, daß man versucht, zu verstehen, was eigentlich programmiert wurde und da fällt auf, daß die Variable len1 keine Länge (Zeiteinheit) darstellt, wie bei einer Auswertung einer Zeitreihe zu erwarten wäre, sondern als Variable für den Exponent einer Potenz eingesetzt wird!
Der "Ausgangswert" von PFE bei jedem erneuten Berechnungsdurchlauf, ergibt sich nach der Formel
[1]PFE = SquareRoot( Power(Close - Close[back]), len1) + 100)
berechnet, wo u.a. die Variable len1 Verwendung findet. Die Anweisung in Worten gefaßt bedeutet dies:
[Gleichung eins]
- berechne die Differenz zwischen dem letzten Schlußkurs und dem Schlußkurs vor back-Bars: RateOfChange(Close,back) oder eben Close-Close[back]
- Potenziere das Ergebnis, also die Differenz (ROC) und verwende dabei als Exponent den Wert Len1
- addiere hierzu den Wert 100
- Berechne die Quadratwurzel aus der Summe
An dieser Stelle wird deutlich, warum jeder ungerade Wert für Len1 die Gefahr birgt, mit Fehlermeldung abzubrechen.
Wenn Dein Rechner mit Systemabsturz reagiert dann ist es ein sehr feinfühlender Rechner, der Dir verdeutlichen will, daß man aus einer negativen Zahl, keinen rationallen Zahlwert allein als Läsung angeben kann, was natürlich auch der Grund der Fehlermeldung ist.
Für alle, die es hier im Detail interessiert, ein wenig tiefergehend erläutert: Die ermittelelte Differenz Close-Close[back] kann sowohl positive als auch negative Werte annehmen. Mit der Potenzierung hängt nun das Vorzeichen des Ergebnisses von dem Exponenten ab.
mit Close = 15 und Close[back] = 20 erhält man:
Power(15-20,len1) = (15-20)len1 = (-5)len1
len1=1:(-5)1 = -5 len1=2:(-5)2 = (-5)*(-5) = +25 len1=3:(-5)3 = (-5)*(-5)*(-5) = -125 len1=4:(-5)4 = (-5)*(-5)*(-5)*(-5) = +625 len1=5:(-5)5 = (-5)*(-5)*(-5)*(-5)*(-5) = -3125
Da zu diesen Zahl der Wert 100 addiert wird, ergibt sich solange ein positiver Wert aus dem dann die Quadratwurzel gezogen werden soll, wie die potenzierte Differenz (ROC)len1 mathematisch größer als -100 bleibt (Ergebnis Null zu den positiven Werten gezählt).
Ist die potenzierte Differenz jedoch kleiner als -100, so führt die Addition von 100 zu dem Wert, der kleiner als 0 bleibt (negativer Wert), aus dem eine Quadratwurzel mit rationalem Ergebniswert nicht gezogen werden kann.
Nach soviel Erläuterung bleibt die Frage, warum für Len1 eine Varible verwendet wurde, ohne den Gültigkeitsbereich aufzuzeigen.
In der Formel aus MetaStock ist dieser Wert als konstante mit einer 2 versehen, so daß immer der Quadratwert ermittel wird, der ja immer zu einem positiven Wert führt, aus dem sich dann auch immer eine Wurzel ziehen läßt.
Ein Expiremtieren mit der Potenz sollte erst dann erwogen werden, wenn man sich über das: "Was will uns der Indikator sagen", Klarheit verschafft hat.
Daher mein Tipp: len1 durch 2 ersetzen.
Ich habe sogar den ersten Eindruck, daß mit der Einführung von back als Variable, ebenso der Term +100 im Ansatz für PFE angepaßt werden muß. Doch dazu müßte ich die Formel erst von ihrem "Gedanken" her untersuchen.
Gruß Uwe
Formelbeschreibung (Quelle: equis: Polarized Fractal Efficiency Rev. 03/20/97 The January 1994 issue of Stocks & Commodities featured an article by Hans Hannula on Polarized Fractal Efficiency. Here is the custom formula for creating the five-period smoothed 10-day PFE using MetaStock:
Polarized Fractal Efficiency
Mov(If(C,>,Ref(C,-9),Sqr(Pwr(Roc(C,9,$),2) + Pwr(10,2)) / Sum(Sqr(Pwr(Roc(C,1,$),2)+1),9),- Sqr(Pwr(Roc(C,9,$),2) + Pwr(10,2)) / Sum(Sqr(Pwr(Roc(C,1,$),2)+1),9))*100,5,E)
|