Hallo Roland,
danke, dass Du hier postest und die Gemeinde der aktiven Teilnehmer vergrößerst.
Nun zu Deinem Beitrag noch ein paar Erklärungen für die übrigen Forumsteilnehmer.
Bei den Bollinger Bändern addiert bzw. subtrahiert man die Standardabweichung von dem Mittelwert des Kurses und erhält somit ein Band, das den Kurs einkleidet. Dies nur zur Erklärung für die anderen Teilnehmer, damit der Hinweis auf die Bollinger Bänder sie nicht verwirrt, denn Deine Darstellung ist eine andere.
Du hast recht, dass die Berechnungsgrundlage von ZScore und den Bollingerbändern, die Gleiche ist, die Standardabweichung. Sie ist eine Messgröße aus der Statistik und der Wahrscheinlichkeitsrechnung.
Übertragen wir das jetzt auf die Börsenkurse. Eine der ältesten Analysemethoden ist der gleitende Durchschnitt. Legt man einen solchen Durchschnitt in ein Chart mit dem Kurs, so sieht man, dass sich der Kurs um diesen Durchschnitt bewegt, von ihm entfernt, aber immer wieder zu dem Durchschnitt zurück kommt und zur anderen Seite ausschlägt. Der Abstand des Kurses vom Durchschnitt ist nicht beliebig groß, sondern die Kurswerte bewegen sich hauptsächlich in einem Band um den Durchschnittswert.
Und hier kommt jetzt die Statistik und Wahrscheinlichkeitsrechnung ins Spiel.
Bei normal verteilten Zufallswerten befinden sich 68,3 % der Werte im Bereich +- eine Standardabweichung um den Erwartungswert (hier Mittelwert des Close (GD)) und 95,4 % der Werte im Bereich +- 2 Standardabweichungen um den Erwartungswert. Werte die außerhalb des Bandes +- 2 Standardabweichungen liegen, sind nur mit einer niedrigen Wahrscheinlichkeit zu erwarten.
Da Kurse immer wieder zu dem Mittelwert zurückkommen bedeutet dies, dass je weiter ein Kurs von diesem Mittelwert abweicht, die Wahrscheinlichkeit um so größer wird, dass er wieder zum Mittelwert bzw. sogar zu einem Punkt jenseits des Mittelwertes sich bewegen wird, also es zu einer Korrektur in der Kursbewegungsrichtung kommt. Diese hat nichts mit einer Trendwende zu tun, sondern es ist nur eine Korrektur der Abweichung vom Mittelwert (Erwartungswert).
Wenn also der Kurswert in den Bereich von 2 Standardabweichungen kommt, oder sie sogar überschreitet spekuliert (im Sinne von erwarten) man auf so eine Richtungskorrektur.
Jetzt zu Deiner Formel:
Deine Berechnung und der Chart ist damit die Darstellung der Standardabweichung. Den Term "/2*100" kannst Du getrost weglassen, da es sich nur um eine Spreizung des ZScore handelt, der sich, wie in der Literatur angegeben, im Bereich +- 2 (= vielfaches der Standardabweichung) bewegt.
Wenn Du Dir Deine Formel ansiehst, verwendest Du nur den Close Kurs zur Berechnung des ZScore. Den Open, Low und High, den Du aus der Datenbank in Variable einliest, verwendest Du in der Berechnung nicht. Lass sie weg, dies kostet nur Rechnerzeit. Ansonsten ist alles für die Ermittlung des ZScores korrekt.
Wie ich Dich verstehe, hast Du im Menü unter "Extras / Chart-Formelelemente konfigurieren ..." den Typ Zeitreihe verwendet und dort diese Formel eingetragen. Wenn Du dann in der Chart spezifischen Symbolleiste auf das Symbol ganz links ("Neue Zeitreihe einblenden") drückst, wird Dir dann Dein ZScore angezeigt.
Formeln die Du unter dem Typ Zeitreihe eingibst erwarten kein Eingangsobjekt. Deshalb wird nur dargestellt, was Du in der Formel eingegeben hast. Bei Dir also nur der ZScore auf den Close-Kurs.
Für das was Du möchtest, musst Du den Typ "Zeitreihenfunktionen" verwenden und Deine Formel (mit kleinen Abwandlungen) als eine Funktion (Makro) speichern.
Eine Funktion erwartet ein Eingabeobjekt, z.B. der Close-Kurs, oder wie Du es möchtest irgend eine x-beliebige Zeitreihe wie z.B. einen Indikator. Das Eingangsobjekt wird in einem Makro immer mit "object" repräsentiert und dies ist auch die Änderung, die Du in Deiner Formel machen musst.
Damit alle möglichen Zeitreihen in einem Makro ZScore verarbeitet werden können, muss das $Close in Deiner Formel durch object ersetzt werden, oder object muss zu Beginn des Makros der Variablen $Close zugewiesen werden. Die Formel lautet dann:
Code:$Close:=object; {Zuweisen des Eingangsobjektes an die Variable $Close}
{Berechnen des ZScore}
(($Close- $Close.GD[$Zeitraum1; $Methode1; $XVersatz1; $YVersatz1])/$Close.Std[$Zeitraum1])
Speichere dieses Makro unter dem Namen ZScore ab.
Dann konfigurierst Du ein neues Chart-Formelelement und verwendest aber den Typ "Zeitreihenfunktionen". Beim Klick auf Formel bearbeiten öffnet sich der Formeleditor. In der Symbolleiste klickst Du auf den Funktionsassistenten, suchst das soeben erstellte Makro ZScore und fügst das mit einem Doppelklick in die Formel ein und speicherst das Ganze.
In der Chart spezifischen Symbolleiste ist das 2. Element von links (Indikator einblenden). Es ist so lange grau ausgeblendet, bis Du eine Zeitreihe in einem Chart in der Legende angeklickt hast. Du erinnerst Dich: "Eine Funktion (Makro) benötigt ein Eingangsobjekt." Und genau diese Zeitreihe, die Du anklickst, wird das Eingangsobjekt, das dem Makro übergeben wird, welches Du aus dem sich aufklappenden Untermenü auswählst. In diesem Untermenü ist auch das von Dir definierte Makro.
Jetzt klicke die Legende des Close-Kurses an und dann über "Indikator einblenden" den ZScore. Es wird ein neuer Chart eröffnet in dem der ZScore dargestellt wird.
Bisher genau so wie Du es bisher realisiert hattest. Jetzt gehe hin und erstelle zu deinem Close über "Indikator einblenden" einen Indikator (z.B. RSL). Er erscheint in einem neuen Chart. Jetzt klicke in der Legende den RSL an. Dann klicke über "Indikator einblenden" den ZScore an. Es öffnet sich wieder ein Chart. In dessen Legende steht "ZScore von RSL27 von Close". Es ist der ZScore des Indikators RSL.
Um Dich zu überzeugen das dies stimmt, wähle die Legende von ZScore an. Dann rechte Maustaste und Formel anwählen. Im Formeleditor siehst Du dann.
Code:Close[]
.RSL[$Zeitraum; $Methode; $XVersatz; $YVersatz]
.ZScore[$Zeitraum; $Methode]
Genau das was Du haben wolltest. Eine Realisierung des ZScore, den Du auf jede Zeitreihe anwenden kannst.
Ich hoffe Du und die anderen Mitglieder im Forum konnten meinen Erklärungen folgen.
Ich wünsche allen und auch dem L+P Team ein paar besinnliche Festtage und einen guten Rutsch ins neue Jahr.
Chuck