gautama2
Mitglied seit 11 Jahre 2 Monate

* Metastock: Eigene Trendlinie

Hallo,

ich möchte mir eine eigene Trendlinie als Indikator bauen, damit ich Signale für das Unter- bzw. Überschreiten mit dem Expert bekommen kann.

Mein Ergebnis weicht aber bereits nach kurzer Zeit von den MS Linien ab. Dabei ist es egal, ob ich eine Semilog-Skala habe oder nicht.

Weiß vielleicht jemand warum?

Hier meine Formel:
Peak1:=2930.54;{Endwert}
Peak2:=2937.42;{Anfangswert}

dd1:=13; {Endtag}
hh1:=13; {Endstunde}
mm1:=0; {Endminute}

dd2:=13; {Anfangstag}
hh2:=12; {Anfangsstunde}
mm2:=25; {Anfangsminute}

PeakBars1:=BarsSince(DayOfMonth()=dd1 AND Hour()=hh1 AND Minute()=mm1);
PeakBars2:=BarsSince(DayOfMonth()=dd2 AND Hour()=hh2 AND Minute()=mm2);

Steigung:=(Peak2-Peak1)/(PeakBars2-PeakBars1);
Peak1-PeakBars1*Steigung;

Viele Grüße

Geschrieben von gautama2 am
metatrader
Mitglied seit 11 Jahre 2 Monate

Hallo,

mit dem Pivot Plugin kann man mit der unten stehenden Formel eigene Trendlinien, sich selbständig aktualisierende Trendlinien erstellen. Falls du die Formel nicht mit Peak/Trough umsetzen kannst, helfe ich dir.

PPivot:=Input("P 1=minor 2=intermediate 3=major 4=primary",1,4,2);
TPivot:=Input("T -1=minor -2=intermediate -3=major -4=primary",-4,-
1,-2);
FTrough := LastValue( ExtFml("Powerpivots.NthPivotPrice",Tpivot,0,1));
STrough := LastValue( ExtFml("Powerpivots.NthPivotPrice",Tpivot,1,1));
DeltaVerticalU := FTrough - STrough;
DeltaHorizontalU :=
LastValue(ExtFml("Powerpivots.BarsSinceNthPivot",Tpivot,1)) -
LastValue(ExtFml("Powerpivots.BarsSinceNthPivot",Tpivot,0));
DeltaPerBarU := DeltaVerticalU / DeltaHorizontalU;
BarNoSecondTrough := LastValue(
Cum(1) - ExtFml("Powerpivots.BarsSinceNthPivot",Tpivot,1));
TrendD := If(Cum(1) < BarNoSecondTrough,
BarsSince(Cum(1) >= BarNoSecondTrough),
STrough +
(DeltaPerBarU * (Cum(1) - BarNoSecondTrough)));
Up:=If(FTrough >= STrough,
TrendD,
BarsSince(FTrough >= STrough));
FPeak := LastValue( ExtFml("Powerpivots.NthPivotPrice",Ppivot,0,1));
SPeak := LastValue( ExtFml("Powerpivots.NthPivotPrice",Ppivot,1,1));
DeltaVerticalD := FPeak - SPeak;
DeltaHorizontalD :=
LastValue(ExtFml("Powerpivots.BarsSinceNthPivot",Ppivot,1)) -
LastValue(ExtFml("Powerpivots.BarsSinceNthPivot",Ppivot,0));
DeltaPerBarD := DeltaVerticalD / DeltaHorizontalD;
BarNoSecondPeak := LastValue(
Cum(1) - ExtFml("Powerpivots.BarsSinceNthPivot",Ppivot,1));
TrendU := If(Cum(1) < BarNoSecondPeak,
BarsSince(Cum(1) >= BarNoSecondPeak),
SPeak +
(DeltaPerBarD * (Cum(1) - BarNoSecondPeak)));
Dn:=If(FPeak <= SPeak,
TrendU,
BarsSince(FPeak <= SPeak));
Up;Dn;

gautama2
Mitglied seit 11 Jahre 2 Monate

Hallo metatrader,

vielen Dank für die Antwort.

Momentan sieht es so aus, daß ich die Trendlinie nach eigener Inspektion von einem High zum anderen ziehe und dann eigentlich Däumchen drehe, bis der Kurs die Linie überschreitet, weil dies Teil meines Buy-Setups ist. Daher wollte ich nur eine Linie als Indikator zwischen zwei definierten Punkten ziehen, um ein Signal kreieren zu können, weil ich sonst am Schreibtisch nichts nebenher machen kann, da die Aufmerksamkeit zu sehr auf dem Durchbruch liegt.

Die Highs berechne ich jetzt automatisch, weil ich ja die Zeitpunkte der Kerzen habe, mit Valuewhen. Jetzt ist es komfortabler, aber komischerweise weicht meine Linie von den MS Linien ab, obwohl ich Naivling glaubte, daß ich mit der Berechnung der Steigung eigentlich nichts verkehrt machen könnte.

Das ist mein Hauptproblem. Ein Plug-In mag ich deshalb aber nicht kaufen und Peak/Trough bräuchte ich auch nicht, weil ich ja genau weiß wo meine Linie durchgehen soll. Vielleicht ist es auch Rechenungenauigkeit, die zu Unterschieden führt?

Die Formel ist jetzt komfortabler, aber immer noch abweichend.
dd2:=Input("Anfangstag",1,31,7);
hh2:=Input("Anfangsstunde",9,22,9);
mm2:=Input("AnfangsMinute",0,59,5);

dd1:=Input("Endtag",1,31,8);
hh1:=Input("Endstunde",9,22,9);
mm1:=Input("EndMinute",0,59,5);

Peak1:=ValueWhen(1,DayOfMonth()=dd1 AND Hour()=hh1 AND Minute()=mm1,H);{Endwert}
Peak2:=ValueWhen(1,DayOfMonth()=dd2 AND Hour()=hh2 AND Minute()=mm2,H);{Anfangswert}

PeakBars1:=BarsSince(DayOfMonth()=dd1 AND Hour()=hh1 AND Minute()=mm1);
PeakBars2:=BarsSince(DayOfMonth()=dd2 AND Hour()=hh2 AND Minute()=mm2);

Steigung:=(Peak2-Peak1)/(PeakBars2-PeakBars1);
Peak1-PeakBars1*Steigung;

Viele Grüße

Global_2
Mitglied seit 11 Jahre 2 Monate

Hallo Gautama,

ich habe Deinen zweiten Trendlinien-Indikator mal auf EoD-umgeändert, indem ich die Abfrage der Anfangsminute/-stunde durch Anfangsmonat und -jahr ersetzt habe, analog das gleiche für den Endpunkt der Linie.

Dass es zu auffälligen Abweichungen zwischen dem Trendlinienindikator und den in Metastock per Hand eingezeichneten Trendlinien kommt, kann ich so nicht bestätigen, vorausgesetzt die Endpunkte der manuellen Trendlinie werden auf die gleichen Werte gesetzt, mit denen der Trendlinienindikator arbeitet. Bei mir ist das Resultat dann nahezu deckungsgleich. Nahezu bedeutet dabei, dass ab und zu aber Pixel der via Trendlinienindikator gezeichneten Linien unmittelbar neben der manuell gezeichneten Trendlinie liegen.

Grund dafür ist hier wohl tatsächlich die Rechengenauigkeit, da die manuellen Trendlinien und Dein Trendlinienindikator offenbar auf verschiedenem Wege berechnet werden. Metastock rechnet intern zudem vermutlich mit 32-Bit Float-Variablen (Single Precision) anstatt 64-Bit Double-Precision-Variablen. Zumindest die Werte für die Quotedaten und Indikatoren werden in Metastock alle nur als Float-Werte anstatt als Double-Precision-Werte gespeichert.

Global_2
Mitglied seit 11 Jahre 2 Monate

Hier noch ein Bild:

Die blaue, dünne Linie ist eine von Hand eingezeichnete Trendlinie. Die rote Linie wurde via Indikator gezeichnet.

gautama2
Mitglied seit 11 Jahre 2 Monate

Hallo Global_2,

vielen Dank für Deine Mühe.

Ich denke, es braucht eine Weile, bis man die Abweichung sieht. Im 5 Minuten Chart geht es wohl schneller, weil man viele Kerzen in kurzer Zeit bekommt. Allerdings hat sich das Ergebnis wesentlich verbessert, seit ich die Highs nicht mehr von Hand eingebe. Es war wohl wirklich Rechenungenauigkeit, weil intern mit unterschiedlich vielen Stellen gerechnet wird.

Wie auch immer, mit den automatischen Highs ist nur noch minimal. Ich hatte die Formel dann auch ungeprüft gepostet, weil ich nicht dachte, daß sich dadurch etwas ändert.

So wie es jetzt ist, ist es komfortabel genug und genau genug. Ich finde es gut, daß man jetzt auch Trendlinien überwachen kann.

Viele Grüße

gautama2
Mitglied seit 11 Jahre 2 Monate

Hallo,

mit Hilfe des stockcentral Forums hier die Formel, die die Koordinaten korrigiert und die Linie von ersten Punkt an zeichnet. Ich habe jetzt keine Abweichung mehr von der Metastock Linie.

dd2:=Input("Anfangstag",1,31,7);
hh2:=Input("Anfangsstunde",9,22,9);
mm2:=Input("AnfangsMinute",0,59,5);

dd1:=Input("Endtag",1,31,8);
hh1:=Input("Endstunde",9,22,9);
mm1:=Input("EndMinute",0,59,5);

{define events}
time2:= DayOfMonth()=dd2 AND Hour()=hh2 AND Minute()=mm2 ;
time1:= DayOfMonth()=dd1 AND Hour()=hh1 AND Minute()=mm1 ;
price1:=H;
price2:=H;

{restrict to last events}
time1:=time1 AND Cum(time1)=LastValue(Cum(time1));
time2:=time2 AND Cum(time2)=LastValue(Cum(time2));

{sort events}
e1pds:=LastValue(BarsSince(time1));
e2pds:=LastValue(BarsSince(time2));
x1:=If(e1pds>e2pds,time1,time2);
x2:=If(e1pds>e2pds,time2,time1);
y1:=If(e1pds>e2pds,price1,price2);
y2:=If(e1pds>e2pds,price2,price1);

{fix coordinates}
y1:=ValueWhen(1,x1,y1);
y2:=LastValue(ValueWhen(1,x2,y2));
b1:=LastValue(BarsSince(x1));
b2:=LastValue(BarsSince(x2));

plot:=y1+BarsSince(x1)*(y2-y1)/(b1-b2);
{Klammern entfernen wenn die Linie nur zwischen den Punkten gezeichnet werden soll, also ohne automatische Weiterführung
plot:=Ref(Ref(plot,-b2),b2);}
plot

Viele Grüße

Rückrufservice
Beschreiben Sie bitte Ihr Anliegen, damit wir uns auf den Rückruf vorbereiten können.
Ja, ich habe die Datenschutzerklärung zur Kenntnis genommen und willige ein, dass die von mir angegebenen Daten inklusive der Kontaktdaten zwecks Bearbeitung der Anfrage und für den Fall von Anschlussfragen elektronisch erhoben und gespeichert werden. Meine Daten werden dabei nur streng zweckgebunden zur Bearbeitung meiner Anfrage genutzt und nicht ohne Einwilligung weitergegeben. Diese Einwilligung kann jederzeit mit Wirkung für die Zukunft widerrufen werden.
Fragen?

Sie haben Fragen zu ZMP Live? Unser Team steht gerne hilfsbereit zu Ihrer Verfügung. Senden Sie uns gerne eine Nachricht:

Es gilt unsere Datenschutzerklärung

Jetzt registrieren

Jetzt registrieren und ZMP Live+ 14 Tage kostenlos testen!
  • Dauerhaft kostenfrei
  • Keine Zahlungsinformationen erforderlich