Metastock Power Pivot Plug In: Fragen, Probleme, Beispiele
Power Pivot Plug In (PPP)
Das PPP ist ein sehr leistungsfähiges Plug In für MetaStock, die praktische Anwendung ist mitunter etwas schwierig.
Daher möchte ich diesen Beitrag dazu benutzen, um interessante Indikatoren vorzustellen aber auch Benutzern von PPP die Möglichkeit geben, Fragen zu stellen
Zunächst einmal zur Definition eines Pivot Punktes (im Sinne von PPP):
Annahme: Märkte/Aktien steigen genau dann, wenn mehr Käufer den Markt dominieren und fallen, wenn es mehr Verkäufer als Käufer gibt.
Unter einem Pivot Punkt versteht man einen möglichen Trend Wendepunkt (in Bezug auf Preis und Zeit).
Ein Pivot Hoch entsteht, falls die Verkäufer die Kontrolle gewinnen, ein Pivot Tief, falls die Käufer die Oberhand haben.
PPP klassifiziert Pivot Punkte nach der Signifikanz, es wird unterschieden zwischen
Minor Pivot Down
ExtFml( "PowerPivots.Pivots")=-1
Mayor Pivot Down
ExtFml( "PowerPivots.Pivots")=-2
Intermediate Pivot Down
ExtFml( "PowerPivots.Pivots")=-3
Primary Pivot Down
ExtFml( "PowerPivots.Pivots")=-4 or ExtFml( "PowerPivots.Pivots")=-5
Minor Pivot Up
ExtFml( "PowerPivots.Pivots")=1
Mayor Pivot Up
ExtFml( "PowerPivots.Pivots")=2
Intermediate Pivot Up
ExtFml( "PowerPivots.Pivots")=3
Primary Pivot Up
ExtFml( "PowerPivots.Pivots")=4 or ExtFml( "PowerPivots.Pivots")=5
Die Bestimmung eines Pivot Punktes erfolgt nach einem propreritären Algorithmus, dies bedeutet zunächst einmal, dass es nicht bekannt ist, wie der Programmierer diesen Punkt bestimmt hat. Daher muss man zunächst einmal die Grundlagen verstehen.
Ein Minor Pivot Punkt benötigt wenigstens 3 Bars, bis er als bestätigt gilt.
Hilfsindikatoren:
Pivot
ExtFml( "PowerPivots.Pivots")
Pivot Trigger
ExtFml( "PowerPivots.Pivottrigger")
Ein Pivot Punkt kann sich daher erst im Nachhinein bestätigen, man sieht im Indikator Pivot, das dieser sich geändert hat, der Bestätigungs-Indikator Pivot Trigger jedoch nicht.
Merke: Erst wenn ExtFml( "PowerPivots.Pivottrigger") = 1 oder ExtFml( "PowerPivots.Pivottrigger") - 1 hat der Pivot Gültigkeit.
Die Herausbildung eines Intermediate, Mayor oder Primary Pivots dauert wesentlich länger, auch hier ändert sich der Wert der Formel ExtFml( "PowerPivots.Pivots") noch.
Folgende Aspekte müssen beachtet werden:
Wer mit längerfristigen Charts arbeitet, kann durch die 3 Bar Validierung des Pivots mitunter etwas unter Druck kommen, daher arbeitet PPP mit einem dynamischen Pivot. Das im Chart eingezeichnete Fragezeichen ist ein dynamischer Pivot Punkt, alle aktuellen Berechnungen (z.B. Retracements) beruhen auf diesem (dynamischen) Wert.
Wichtig: Im "richtigen" Handel kann man mit natürlich mit diesem Punkt arbeiten, er darf jedoch in dieser Form nicht im Systemtester verwendet werden. Sollte sich dieser Punkte später bestätigen, war eben alles richtig.
Nahezu unerlässlich ist es, mit verschiedenen Time Frames zu arbeiten, damit der Punkt vorher nicht zu einem Glücksspiel ausartet.
Einfaches Beispiel: Gehandelt wird auf Daily Basis, dann sollten wenigstens 60 Minuten Charts als Signalgeber verwendet werden.
Als zusätzliches Hilfsmittel kann man z.B. auch sehr einfach die Hoch/Tiefpunkte aus höheren Zeiteinheiten benutzen:
ExtFml( "PowerPivots.TimeCapsules", H, 30, 0);
ExtFml( "PowerPivots.TimeCapsules", H, 60, 0);
ExtFml( "PowerPivots.TimeCapsules", L, 30, 0);
ExtFml( "PowerPivots.TimeCapsules", L, 60, 0)
----------------------------------------------------------
Ein weiteres Sorgenkind ist die externe Funktion Pivot Breakout ExtFml( "PowerPivots.PivotBreakout", 1,1)
Eigentlich gibt die Funktion ein Signal, wenn der Schlusskurs über einen Pivot Punkt ausbricht. In der Graphik sind dies die Schnittpunkte der grünen oder roten Geraden.
Leider hat die Funktion zum einen ein Delay von einer Bar
und zum anderen ist der Indikator teilweise völlig verkehrt noch auf einem Breakout "Trip" (siehe rote Kringel).
Man könnte somit sagen, dass die Anwendung der Formel ExtFml( "PowerPivots.PivotBreakout", 1,1) in einem Desaster ändern könnte (dies sieht man auch teilweise an den mitgelieferten Systemen).
Anregungen zur Verbesserung:
Pivot Breakout modifiziert
PH:=(ExtFml("Powerpivots.NthPivotPrice",1,1,1));
PL:=(ExtFml("Powerpivots.NthPivotPrice",-1,1,1));
PB:=ExtFml( "PowerPivots.PivotBreakout", 1,1);
If((pb AND (C>ph)),1,If((pb AND (pl>C)),-1,0))
Oder
Pivot Breakout (cross)
PH:=(ExtFml("Powerpivots.NthPivotPrice",1,1,1));
PL:=(ExtFml("Powerpivots.NthPivotPrice",-1,1,1));
If(Cross(ph,C),1,If(Cross(C,pl),-1,0))
Oder (ohne Graphik)
a:=ExtFml("PowerPivots.Pivots");
Pivot:=1;
PA:=If(BarsSince(A>=Pivot)=Pivot,H), ValueWhen(2,a=-Pivot,L));
PB:=If(BarsSince(A>=Pivot)=pivot,H));
PC:=If(BarsSince(A>=pivot)=pivot,H), ValueWhen(1,a=-pivot,L));
PC:=If(BarsSince(A>=pivot)=pivot,H), ValueWhen(1,a=-pivot,L));
HP:= Max(pa,Max(pb,pc));
LP:= Min(pa,Min(pb,pc));
If(Cross(C,hp)=1, 1,If(Cross(lp,C)=1,-1,0))
-----------------------------------------
Nützliche Funktionen
Automatische Retracements
i1:=Input("Pivot (1=Minor 2=Interm 3=Major 4=Primary)", 1, 4, 2);
i2:=Input("Trend Direction",1,4,1);
fib2:=Input("Retrace % 2", -300, 300, .382);
fib3:=Input("Retrace % 3", -300, 300, .5);
fib4:=Input("Retrace % 4", -300, 300, .618);
aPivots:= ExtFml("PowerPivots.Pivots");
aTrend:= ExtFml("PowerPivots.TrendDirection",i1,i2);
ExtFml("PowerPivots.RetInd",0,aPivots,aTrend,i1,fib2);
ExtFml("PowerPivots.RetInd",0,aPivots,aTrend,i1,fib3);
ExtFml("PowerPivots.RetInd",0,aPivots,aTrend,i1,fib4);
ExtFml("PowerPivots.RetInd",1,aPivots,aTrend,i1,fib2);
Automatische Jackson Zonen
TP:=Input("Berechnung vom Trough = -1 oder Peak = 1",-1,1,1);
Pivot:=Input("P 1=minor 2=intermediate 3=major 4=primary",1,4,2);
PH:=LastValue(ExtFml("Powerpivots.NthPivotPrice",Pivot,0,1));
PL:=LastValue(ExtFml("Powerpivots.NthPivotPrice",-Pivot,0,1));
nw:=ExtFml("Powerpivots.BarssinceNthPivot",Pivot*tp,0)=0;
A1:=Cum(1);
A2:=LastValue(A1-BarsSince(NW>0));
{Calculate Balance Point}
BP:= LastValue((PH + PL + C) / 3);
{Todays Range ==> Pivot Range}
TR:= LastValue(Max(ph,pl)-Min(ph,pl));
{Creating the zones}
PD:= BP + TR*0.5;
PB:= BP - TR*0.5;
PA:= BP - TR;
PE:= BP + TR;
{Support Bands}
PB1:= BP - (0.618 * TR);
PA1:= BP - (1.382 * TR);
{Resistance Bands}
PD1:= BP + (0.618 * TR);
PE1:= BP + (1.382 * TR);
If(A1=A2), LastValue(PA));
If(A1=A2), LastValue(PA1));
If(A1=A2), LastValue(PB1));
If(A1=A2), LastValue(PB));
If(A1=A2), LastValue(BP));
If(A1=A2), LastValue(PD));
If(A1=A2), LastValue(PD1));
If(A1=A2), LastValue(PE));
If(A1=A2), LastValue(PE1))
Sollten noch Fragen bestehen, bitte in diesem Beitrag stellen.
Die Bestimmung eines Pivot Punktes erfolgt nach einem propreritären Algorithmus, dies bedeutet zunächst einmal, dass es nicht bekannt ist, wie der Programmierer diesen Punkt bestimmt hat. Daher muss man zunächst einmal die Grundlagen verstehen. Ein Minor Pivot Punkt benötigt wenigstens 3 Bars, bis er als bestätigt gilt.
Ist es bekannt, wieviel Bars die höherwertigen Pivotpunkte als Bestätigung brauchen? Für den Einsatz in Handelssystemen wäre diese Information hilfreich.
Gruss, Ingo
Ingo,
diese Information wird man nicht so leicht erhalten. Ein Intermediate Pivot kann sehr schnell entstehen (siehe Graphik), er benötigt aber wenigstens zwei Minor Pivots (Top + Bottom bzw. Bottom + Top), zudem muss eine gewisse Kursänderung vorliegen. Mir ist jedenfalls bislang noch keine saubere Lösung eingefallen.