Tradestation User Group Germany (http://www.tradernet.org/wbb/index.php)
|- Posts aus dem alten Userforum (http://www.tradernet.org/wbb/board.php?boardid=15)
|-- an die Profis: Frage zu PFE Indikator (http://www.tradernet.org/wbb/threadid.php?boardid=15&threadid=815)


Geschrieben von _jojo am 01.02.2001, 15:10:

  an die Profis: Frage zu PFE Indikator

habe aus dem Florek buch den Polarized Fraktal...(PFE) fein säuberlich abgetippt.
Leider ist am Ende ein Fehler in der Formel.
(plot1...)
FRAGE:
Hat jeman den richtigen code da??
es wäre mir seeehr geholfen!
Danke
jojo


Geschrieben von _Uwe am 01.02.2001, 16:10:

  zu PFE Indikator

Hallo jojo!

Da liegt vermutlich ein Tippfehler bei Dir bei Deiner Fleißarbeit vor. In der Anweisung Plot1(EMA,"EMA"); ist defintiv kein Fehler, wenn zuvor alles richtig abgetippt wurde.

Wie lautet die Fehlermeldung? Ich vermute den Fehler in der Variablendefintionszeile, wo ..., EMA(0); vielleicht nicht richtig geschrieben steht.

Denoch hier das gesamte, lauffähige Programm als Indicator:

Inputs: back(9), len1(2), Multi(0.333), Buyzone(62), Sellzone(-62);
Vars: PFE(0), C2C(0), Counter(0), Frac(0), EMA(0);

PFE = 0;
C2c = 0;
Counter = 0;
Frac = 0;
EMA = 0;

PFE = SquareRoot(Power(close-Close[back], len1)+100);

For Counter = 1 to 9 begin
C2C = C2C + SquareRoot(Power((close[Counter-1]-Close[counter]),len1)+1);
End;

if (close-Close[9]) > 0 then
Frac = Round((PFE/C2C)*100,0)
else
Frac = Round(-(PFE/C2C)*100,0);

If Currentbar = 1 then
EMA = Frac
else
EMA = Round((Frac*Multi)+(EMA[1]*(1-Multi)),0);

Plot1(EMA,"EMA");
Plot2(Buyzone,"Buyzone");
Plot3(Sellzone,"Sellzone");


Viel Erfolg
Uwe


Geschrieben von _Stockoperator am 06.02.2001, 09:10:

  Bemerkung: schon mal mit len1 = 3 oder len1 = 5 probiert ? ;-))

Ich halte den Code in der angegebenen Form für "nicht wasserdicht" !!
Der Indikator ist so nicht vor Abstürzen sicher.


Geschrieben von _Uwe am 06.02.2001, 22:10:

  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]

  1. berechne die Differenz zwischen dem letzten Schlußkurs und dem Schlußkurs vor back-Bars: RateOfChange(Close,back) oder eben Close-Close[back]
  2. Potenziere das Ergebnis, also die Differenz (ROC) und verwende dabei als Exponent den Wert Len1
  3. addiere hierzu den Wert 100
  4. 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)

  • Powered by: Burning Board 1.1.1 © 2001 by WoltLab