Dein Schwierigkeit wird mit der "Forderung" eintreten, den Kreuzungspunkt Trendlinie mit der Preiskurve als neuen Endpunkt der bisherigen Trendlinie und als Startpunkt der neuen Linie einzusetzen, da es eher die Regel sein dürfte, daß der analytische Schnittpunkt zwischen den Bars liegen wird.
Hier hängt die Lösung also an der Funktion des Gewollten.
Wenn eine Trendlinie mit TL_ID beobachtet wird, kann das Ereignis, ob die Preiskurve die Trendlinie kreuzt, mit der Abfrage
IF (close crosses over TL_GetValue(TL_ID, Date, Time)) or (close crosses below TL_Get Value(TL_ID, Date, Time) then...
gemeldet werden.
Die Entscheidung, den Preis des Schnittpunkts zu ermittlen, führt nun zu einer weiteren Berechnung, die aus den beiden Wertepaaren {Price[1];Price[0]} bzw. {TLValue[1];TLValue[0]} durch lineare Interpolation, den Schnittpunktspreis bestimmt. Die Zeitlinie des Schnittpunktes unterteilt die Darstellungslänge zwischen zwei Bars, wie Eingangs bereits erwähnt, in der Regel in einem bestimmten Verhältnis, das als Zwhlenwert zwischen 0 und 1 liegt. In diesem Maße würde die Verschiebung dieses Punktes auf einen der unmittelbar benachbarten Barzeitachsen [1] oder [0] zu einer verschiebung der Neigung der zu zeichnenden Trendlinien führen.
Für die Trendlinie TL_ID, deren Durchschneidung beobachtet wurde, läßt sich nun der neue Endpunkt setzen, je nach Wahl vor oder nach dem Kreuzungspunkt:
{vor:} if Date[1]=Date then TL_SetEnd(TL_ID, Date,Time[1], TL_GetValue(TL_ID, Date, Time[1]))else TL_SetEnd(TL_ID, Date[1],Time[1), TL_GetValue(TL_ID, Date[1], Time[1]));
{nach:} TL_SetEnd(TL_ID, Date,Time, TL_GetValue(TL_ID, Date, Time));
(Programmcode nicht geprüft. Insbesondere die Funktion in der Funktion kann möglicherweise dazu führen, daß hier zuvor eine zusatzvariable definiert werden muß, was durchaus auch Sinn für weiter Operationen mit den Werten macht (interpolationen): vars:TLValue(0); TLValue=TL_GetValue(TL_ID, Date, Time) ) Abschließend ist noch die Ausdehnung der Geraden auf die Begrenzungpunkte einzuschränken:
TL_SetExRight(TL_ID, false);
Problematisch wird nun die Definition des Startpunktes für die neu aufzubauende Trendlinie, da sie eben die zwei Begrenzungspunkte benötigt, die auf diskreten Zeitpunkten von Bars liegen müsssen. Dazu mußt Du Dir also ersteinmal überlegen was gewollt ist.
TL_ID=TL_New(A1_BarDate, A1_BarTime, A1_Price, A2_BarDate, A2_BarTime, A2_Price); TL_SetExtRight(TL_ID, true);
erfordert mit den Zeitvariablen des Punktes A1 die Werte vor oder nach dem Schnittpunkt. Da der exakte Schnittpunkt analytisch bestimmbar ist, bedarf es zusätzlich der definition des Punktes A2 mit all seinen Bestimmungsgrößen um damit den Preiswert von A1 (vor oder nach den Schnittpunkt) zu ermitteln, so daß der Kreuzungspunkt der vorherigen Trendlinie mit der Schlußpreiskurve deckungsgleich liegt.
|