| Benutzung der Option der Bildung eigener Indicatoren erfordert vorrangig Aktivierung ihrer Bedienung im Applikationskonfigurator. Schalte dort Option ein "Obsługa własnych oscylatorów". Klick die rechte Maustaste über dem Menü mit der Indicatorenliste in der Applikation der Technischen Analyse, um den eigenen Indicator zu bilden, editieren oder beseitigen. Vordefinierte Funktionen Eigene Indicatoren kann man mit Hilfe der Javascript-Sprache konstruieren Zum Konstruieren kann man elf bis neunzehn vordefinierte Funktionen benutzen:Open() - Eröffnungskurs High() - Höchstkurs Low() - Mindestkurs Close() - Schlußkurs oder ein letzter Kurs Volume() - Volumenswert OpenInt() - Open Interest-Wert Max(array, period) - Höchstwert von Werten der Tabelle array für die fragliche period, das heißt Periode Min(array, period) - Mindestwert von Werten der Tabelle array für die fragliche period, das heißt Periode SimpleAvg(array, period) - Arithmetischer Mittelwert aus Werten der Tabelle array für die fragliche period, das heißt Periode ExpAvg(array, period) - Exponentialer Mittelwert aus Werten der Tabelle array für die fragliche period, das heißt Periode StdDev(array, period) - Standardabweichung aus Werten der Tabelle array für die fragliche period, das heißt Periode CreateArray(length) - Sie führt die Tabellen mit der Elementenzahl ein, die length gleich ist Param(n) - Parameterwert n, das heißt Werte aus dem ersten, zweiten oder dritten Parameterfeld AddGraph(array, index) - Sie zeichnet die Linien aus Werten der Tabelle array, vom Element Nummer index ab (der Wert index ist übereinstimmend mit Option) AddHorizLine(value) - Sie zeichnet eine waagerechte Linie auf Höhe des Wertes value AddBuySignal(index) - Sie stellt das Einkaufssignal aufs Tabellenelement Nummer index AddSellSignal(index) - Sie stellt das Verkaufssignal aufs Tabellenelement Nummer index Wie konstruiert man eigene Indicatoren?Change%Beispiel eines Indicators, der die Prozentpreisänderungen der vorigen Session gegenüber darstellt var close = Close(); var chng = CreateArray(close.length); for(var i = 0;i < close.length; i++) chng[i] = (close[i] - close[i-1]) / close[i-1] * 100; AddGraph(chng, 1); AddHorizLine(0);
|
... der Reihe nach... Den Ausdruck var muß man vor jede definierte Variable stellen, was garantiert, dass sie keine globale Variable sein wird, das heißt, dass sie mit keinen Definitionen anderer Indicatoren kollidieren wird. close ist unser Name einer Variable, der wir die Tabellen mit Werten des Kursschlusses (Close()) geben. Das Semikolon am Versende bedeutet das Ende der Kodeslinie. var chng = CreateArray(close.length);
|
Der Variable chng geben wir mit der Funktion CreateArray den Typus ,,Tabelle" (array) und wir bestimmen ihre Elementenzahl. Die Zahl bekommen wir aus der Länge (length) der Tabelle close, die wir vorher definiert haben. Der ganze Ausdruck close.length wird also die Elementenzahl der Tabelle close zurückgeben. for(var i=0; i < close.length; i++) chng[i] = (close[i] - close[i-1]) / close[i-1] * 100;
|
for ist eine Schleife,die sovielmal gemacht wird, bis die Bedingung "i < close.length" erfüllt wird. Am Anfang der Schleife geben wir der Variable i den Wert 0. Mit jedem Durchgang der Schleife wird die Variable um eins inkrementiert (vergrößert) (der Ausdruck "i++" ist mit Aufzeichnung "i+=1" identisch). Jeder Durchgang der Schleife realisiert die mit der Formel "chng[i] = (close[i] - close[i-1]) / close[i-1] * 100" beschriebenen Anweisungen, das heißt diejenigen der schon vorher gebildeten Variable chng des Types array. Mit dem folgenden Index i wird das Ergebnis des Quotienten der Differenz des aktuellen Wertes close (close[i] und des vorigen Wertes close (close[i-1]) sowie des Produktes des vorigen Wertes close (close[i-1]) und der Zahl 100 gegeben. Die ganze Operation wird die Werte der Tabelle chng zurückgeben, die den täglichen Prozentpreisänderungen entsprechen. Zeit für Linienzeichnung aus den Elementen der Tabelle chng mit Benutzung der vordefinierten Funktion AddGraph. Der Wert 1, der als die zweite unabhängige Veränderliche angegeben ist, bedeutet, dass wir vom zweiten Element ab zu zeichnen beginnen. Zum Schluß zeichnen wir eine waagerechte Linie auf Höhe des Punktes 0 mit Hilfe der vordefinierten Funktion AddHorizLine. Rate of Change var close = Close(); var roc = CreateArray(close.length); var n = Param(1); for(var i = 0; i < close.length; i++) roc[i] = (close[i] - close[i-n]) / close[i-n] * 100; AddGraph(roc, n); AddHorizLine(0); AddHorizLine(10); AddHorizLine(-10);
|
Das obige Beispiel ist Modifikation des schon vorher beschriebenen Indicators Change%. Hier, mit Hilfe des ersten Parameterfeldes, ... ...können wir die Zahl von Sessionen bestimmen, die man beim Berechnen der Prozentpreisänderung beachten wird (beim Parameterfelderbenutzen darf man nicht vergessen, einen vermutlichen Wert für ein passendes Feld ins rechte Oberteil des Fensters der Indicatorenedition einzuschreiben). Darüber hinaus wurden zwei waagerechte Linien in 10 und -10 Punkte Höhe zugegeben. AddHorizLine(10); AddHorizLine(-10);
|
MACD var close = Close(); var avg1 = ExpAvg(close, Param(1)); var avg2 = ExpAvg(close, Param(2)); var macd = CreateArray(avg1.length); for(var i = 0; i < avg1.length; i++) macd[i] = avg1[i] - avg2[i]; AddGraph(macd, Param(2)); var signal = ExpAvg(macd, Param(3)); AddGraph(signal, Param(2) + Param(3)); AddHorizLine(0);
|
Die obige Funktion konstruiert den Indicator MACD, wozu die Benutzung der exponentialen Mittelwerte erforderlich ist. var avg1 = ExpAvg(close, Param(1)); var avg2 = ExpAvg(close, Param(2));
|
Die Funktion ExpAvg bildet die Tabelle mit Werten des exponentialen Mittels der Kurse close für die Periode, die dem Wert der Felder Param(1) und Param(2) entspricht. var signal = ExpAvg(macd, Param(3));
|
Der Variable signal geben wir in der Folge die Tabelle mit Werten des exponentialen Mittelwertes des Verlaufs macd (er wurde zwei Zeilen zuvor ausgerechnet) für die Periode, die dem Wert des Feldes Param(3) entspricht. MACD mit den Einkaufs/Verkaufssignalen var close = Close(); var avg1 = ExpAvg(close, Param(1)); var avg2 = ExpAvg(close, Param(2)); var macd = CreateArray(avg1.length); for(var i = 0; i < avg1.length; i++) macd[i] = avg1[i] - avg2[i]; AddGraph(macd, Param(2)); var signal = ExpAvg(macd, Param(3)); AddGraph(signal, Param(2) + Param(3)); AddHorizLine(0); for(var i = Param(2) + Param(3); i < macd.length; i++) { if((macd[i-1] < signal[i-1]) && (macd[i] > signal[i])) AddBuySignal(i); else if((macd[i-1] > signal[i-1]) && (macd[i] < signal[i])) AddSellSignal(i); }
|
Im obigen Beispiel wurde eine Sequenz zugegeben, in der die Schleife for ... for(var i = Param(2) + Param(3); i < macd.length; i++) { ... }
|
... die Voraussetzungen der Gegenübereinanderlage der Linie macd und ihres Mittelwertes, das heißt der Linie signal, prüft. if((macd[i-1] < signal[i-1]) && (macd[i] > signal[i])) AddBuySignal(i); else if((macd[i-1] > signal[i-1]) && (macd[i] < signal[i])) AddSellSignal(i);
|
Wenn der vorige Wert macd (macd[i-1]) kleiner als der vorige Wert signal (signal[i-1]) und der aktuelle Wert macd (macd[i]) größer als der aktuelle Wert signal (signal[i]) ist, wird das Einkaufssignal mit der Funktion AddBuySignal generiert und es ist auf den Verlauf der Tabelle macd auf den Ort gestellt, in dem der Index i die obigen Bedingungen erfüllt. Es ist analog mit dem Verkaufssignal AddSellSignal, aber selbstverständlich für umgekehrte Voraussetzungen. Eventuelle ProblemeWenn nach der Bildung des eigenen Indicators sein Verlauf nicht belichtet wird, soll man zwecks Datenauffrischung das Diagrammintervall, z.B: aus dem täglichen aufs wöchentliche, wechseln. Nach dieser Maßnahme müßte sich der Indicator richtig belichten lassen. |