Programmierhandbuchs ProBuilder

Transcription

Programmierhandbuchs ProBuilder
INHALTSVERZEICHNIS
Einführung in ProBuilder_________________________________________
Kapitel I: Grundlagen____________________________________________
Zugriff auf ProBuilder.....................................................................................................2
Besonderheiten der ProBuilder-Programmiersprache..................................................6
Finanz-Bedingungen von ProBuilder............................................................................7
1) Kurs und Umsatz, angepasst an den Zeitrahmen des Charts....................................8
2) Tägliche Kursbedingungen........................................................................................9
3) Zeitliche Bedingungen.............................................................................................10
4) Vom Preis abgeleitete Begriffe.................................................................................15
5) Der unbestimmte Begriff..........................................................................................15
Wie Sie bereits vorhandene Indikatoren verwenden..................................................15
Variablen......................................................................................................................17
Kapitel II: Math. Funktionen und ProBuilder-Anweisungen_____________
Kontrollstrukturen........................................................................................................19
1) Bedingte IF-Anweisung............................................................................................19
a. Eine Bedingung, ein Ergebnis (IF THEN ENDIF).........................................................19
b. Eine Bedingung, zwei Ergebnisse (IF THEN ELSE ENDIF).........................................19
c. Sequentielle IF Bedingungen........................................................................................20
d. Mehrfach-Bedingungen (IF THEN ELSE ELSIF ENDIF)..............................................20
2) Wiederholende Schleife FOR...................................................................................22
a. Ansteigend (FOR, TO, DO, NEXT)...............................................................................22
b. Absteigende Folge (FOR, DOWNTO, DO, NEXT)........................................................24
3) Bedingte Schleife WHILE.........................................................................................25
4) BREAK.....................................................................................................................26
a. Mit WHILE....................................................................................................................26
b. Mit FOR........................................................................................................................27
5) CONTINUE..............................................................................................................28
a. Mit WHILE....................................................................................................................28
b. Mit FOR........................................................................................................................28
6) ONCE......................................................................................................................29
Mathematische Funktionen.........................................................................................30
1) Gemeinsame Unäre und Binäre Funktionen............................................................30
2) Gemeinsame mathematische Operatoren...............................................................30
3) Chart-Vergleichsfunktionen......................................................................................31
4) Summenfunktion......................................................................................................31
5) Statistische Funktionen............................................................................................31
Logische Operatoren...................................................................................................32
ProBuilder-Befehle......................................................................................................32
1) RETURN..................................................................................................................32
2) REM or //..................................................................................................................33
3) CustomClose...........................................................................................................33
4) CALL........................................................................................................................34
5) AS............................................................................................................................34
6) COLOURED............................................................................................................35
Kapitel III : Praktische Aspekte____________________________________
Erstellung eines binären oder ternären Indikators: Wie und Warum?........................37
Erstellung von STOPP-Indikatoren: Folgen der Position in Echtzeit..........................38
1) StaticTake Profit STOP............................................................................................39
2) Static STOP loss......................................................................................................40
3) Inactivity STOP........................................................................................................40
4) Trailing Stopp...........................................................................................................42
Kapitel IV: Übungen_____________________________________________
Candlestick-Muster......................................................................................................43
Indikatoren...................................................................................................................46
Index__________________________________________________________
Einführung in ProBuilder
Einführung in ProBuilder
ProBuilder ist die Programmiersprache in ProRealTime. Diese ermöglicht Ihnen individuelle technische
Indikatoren, Handelsstrategien (ProBackTest) oder Screener Programme (ProScreener) zu erstellen.
Aufgrund einiger Besonderheiten der einzelnen Module gibt es für ProBackTest und ProScreener ein
spezifisches Handbuch.
ProBuilder ist eine Art BASIC Programmiersprache, sehr leicht zu handhaben und umfangreich in Bezug auf
die verfügbaren Möglichkeiten.
Mit den Befehlen werden Sie in der Lage sein, Ihre eigenen Programme in jedem in ProRealTime
angebotenen Tool zu erstellen. Einige der einfachen Befehle sind:
Eröffnungskurs von jedem Bar: Open
Schlusskurs von jedem Bar: Close
Höchstkurs von jedem Bar: High
Tiefstkurs von jedem Bar: Low
Volumen von jedem Bar: Volume
Balken oder Candlesticks sind übliche Chartdarstellungen bei der Verwendung von Echtzeitdaten. Natürlich
haben Sie in ProRealTime auch die Möglichkeit, eine andere Chartdarstellung zu verwenden. Sie können
Renko, Kagi, Heikin-Ashi und einige andere Chartarten verwenden.
ProBuilder wertet die Daten eines jeden Balkens aus, beginnend mit dem Ältesten bis zum letzten Balken,
und führt anschließend die Formel aus, die in der Sprache entwickelt wurde, um den Wert der Indikatoren
des aktuellen Balkens zu bestimmen.
Die Indikatoren, die in der Programmiersprache ProBuilder geschrieben wurden, können entweder im
Kurschart oder in einem eigenen Chartfenster angezeigt werden.
In diesem Dokument erfahren Sie anhand eines leicht verständlichen Überblicks mit konkreten Beispielen
Schritt für Schritt, wie man die verfügbaren Befehle anwendet, die nötig sind, um ein Programm zu
schreiben.
Auf den letzten Seiten des Handbuchs finden Sie einen Index mit einer Komplettübersicht aller ProBuilder
Befehle, vorhandener Indikatoren und anderer Funktionen, die Sie in den folgenden Kapiteln kennen lernen.
Anwender, die mehr Vertrauen in ihre eigenen Programmierfähigkeiten haben, können das erste Kapitel
überspringen und direkt mit Kapitel II beginnen oder nur mit dem Index arbeiten, um schneller die benötigten
Informationen zu finden.
Einsteigern empfehlen wir, sich die Video Anleitung auf der Webseite mit dem Titel “Programmierung
einfacher und dynamischer Indikatoren” anzusehen und das komplette Handbuch zu lesen. Wenn Sie sehr
präzise dem Handbuch folgen, können Sie sicher sein, die Programmiersprache in kürzester Zeit zu
erlernen.
Wir wünschen Ihnen dabei viel Erfolg und viel Spaß beim Lesen!
1 / 56
Kapitel I: Grundlagen
Kapitel I: Grundlagen
Zugriff auf ProBuilder
Den Programmierbereich, um einen Indikator zu erstellen, finden Sie im Chartfenster in der rechten oberen
Ecke, indem Sie auf "Indikator/Backtest" klicken.
Das Indikator Management Fenster hat sich geöffnet. Damit lassen sich:
bestehende Indikatoren anzeigen,
eigene Indikatoren erstellen, die danach auf jedes Wertpapier anwendbar sind.
2 / 56
Kapitel I: Grundlagen
Wenn Sie die zweite Möglichkeit wählen, klicken Sie auf "Indikator erstellen", um Zugriff auf das
Programmierfenster zu erhalten. Dann können Sie wählen zwischen:
Programmierung eines Indikators durch Eingabe des Codes im Textfeld oder
Verwenden der Hilfe-Funktion durch Klicken auf: "Funktion einfügen". Es öffnet sich ein neues
Fenster, in dem Sie alle verfügbaren Funktionen finden. Diese Bibliothek gliedert sich in 7 Kategorien
und bietet Ihnen ständige Unterstützung während der Programmierung.
3 / 56
Kapitel I: Grundlagen
Nehmen wir z.B. das erste spezifische ProBuilder Element: die "RETURN" Funktion (Sie finden diese in der
Kategorie "Schlüsselwörter", siehe folgende Abbildung).
Wählen Sie "RETURN" aus und drücken anschließend auf "Hinzufügen". Der Befehl wird dann dem
Programmierfeld hinzugefügt.
Mit RETURN werden Ergebnisse angezeigt
4 / 56
Kapitel I: Grundlagen
Nehmen wir an, wir möchten einen den Umsatz anzeigenden Indikator erstellen. Wenn Sie bereits die
Funktion "RETURN" eingefügt haben, klicken Sie nochmals auf "Funktion einfügen". Dann klicken Sie auf
die Kategorie "Konstanten". In der rechten Spalte finden Sie die Funktion "Volume". Anschließend klicken
Sie auf "Hinzufügen".
Bevor Sie auf "Programm bestätigen" klicken, müssen Sie den Namen des Indikators eingeben. In diesem
Beispiel nennen wir den Indikator "VolumeDAX". Anschließend klicken Sie auf "Programm bestätigen" und
der Indikator wird im Kurschart angezeigt.
5 / 56
Kapitel I: Grundlagen
Besonderheiten der ProBuilder-Programmiersprache
Besonderheiten
Die ProBuilder-Sprache erlaubt Ihnen, viele klassische Befehle sowie spezielle Tools, die speziell auf die
technische Analyse zugeschnitten sind, zu verwenden. Mit diesen Befehlen lassen sich einfache und sehr
komplexe Indikatoren programmieren.
Die Grundideen der ProBuilder-Sprache sind:
Es ist nicht notwendig, Variablen zu erklären.
Es ist nicht notwendig, den Typ der Variablen anzugeben.
Es wird kein Unterschied zwischen Groß- und Kleinschreibung gemacht (jedoch gibt es eine
Ausnahme, die später erklärt wird).
Wir verwenden das Symbol "=" sowohl für mathematisch "gleich" als auch für die
Wertzuordnung von Variablen.
Was bedeutet das ?
Erklärung einer Variable X bedeutet Angabe ihres Bestehens. In ProBuilder können Sie X
verwenden, ohne vorher zu erklären, dass die Variable existiert.
Nehmen wir ein Beispiel:
Mit Erklärung: Wir erstellen die Variable X, dann ordnen wir X den Wert von 5 zu.
Ohne Erklärung: Wir ordnen der Variable X den Wert 5 zu (es wird davon ausgegangen, dass X
bereits existiert und ihr der Wert von 5 zugeordnet wird).
In ProBuilder müssen Sie lediglich schreiben: X=5
6 / 56
Kapitel I: Grundlagen
Typ einer Variable bedeutet die Festlegung der Art. Zum Beispiel: Soll es sich bei der Variable um
eine natürliche Zahl handeln (z.B.: 3; 8; 21; 643; …), eine ganze Zahl, welche positiv oder negativ sein
kann (z.B.: 3; 632; -37; …), eine Dezimalzahl (z.B.: 1.76453534535…), eine boolesche Zahl
(RICHTIG=1, FALSCH=0), …?
In ProBuilder können Sie die Befehle in großen oder in kleinen Buchstaben schreiben. Zum
Beispiel kann die Gruppe der Befehle IF / THEN / ELSE / ENDIF auch folgendermaßen geschrieben
werden: iF / tHeN / ELse / endIf (und auf andere Art und Weise!)
Ausnahme: Wenn Sie sich entschließen, eine Variable zu erstellen und diese später im Programm zu
verwenden, müssen Sie diese genau so schreiben. Wenn Sie den Variablennamen "vARiaBLe"
verwendet haben und diesen in Ihrem Programm wieder verwenden wollen, müssen Sie auch
"vARiaBLe" schreiben, nicht "variable" oder etwas anderes.
Wirkt ein Wert auf eine Variable bedeutet dies, dass der Variable ein Wert zugeordnet wird. Um
dieses Prinzip zu verstehen, müssen Sie eine Variable mit einem leeren Feld assimilieren, die Sie mit
einem Ausdruck (z.B.: einer Zahl) belegen können. Das folgende Diagramm zeigt die Wirkungsregel
mit dem Wert Umsatz bezogen auf die Variable X:
X
Volume
Wie Sie sehen können, müssen Sie von rechts nach links lesen: Umsatz wirkt auf X.
Wenn Sie dies in ProBuilder schreiben wollen, brauchen Sie nur den Pfeil durch ein Gleichheitszeichen zu
ersetzen:
X = Volume
Das Gleiche gilt für = das Symbol, welches verwendet wird:
Zur Beeinflussung einer Variable (wie im vorherigen Beispiel),
Als mathematischer binärer Operator (1+ 1= 2 ist gleich 2 = 1 + 1).
Finanz-Bedingungen von ProBuilder
Vor der Codierung Ihrer persönlichen Indikatoren müssen Sie die Elemente prüfen, die Sie benötigen, um
Ihren Code zu schreiben, wie Eröffnungskurs, Schlusskurs, usw.
Dies sind die "Grundlagen" der technischen Analyse und die wichtigsten Dinge, die Sie über die
Programmierung von Indikatoren wissen sollten.
7 / 56
Kapitel I: Grundlagen
Sie werden anschließend in der Lage sein, diese zu kombinieren, um Informationen aus den Finanzmärkten
heraus zu ziehen. Wir können diese in 5 Kategorien einordnen:
1) Kurs und Umsatz, angepasst an den Zeitrahmen des Charts
Das sind die "klassischen" und meist verwendeten Bedingungen. Sie zeigen den ursprünglichen Wert des
aktuellen Balkens an (unabhängig von der verwendeten Zeitebene).
Open: Eröffnungskurs von jedem Balken
High: Höchstkurs von jedem Balken
Low: Tiefstkurs von jedem Balken
Close: Schlusskurs von jedem Balken
OpenOfNextBar: Eröffnungskurs des nächsten Balkens
Volume: Die Anzahl der gehandelten Wertpapiere oder Kontrakte an jedem Balken
Beispiel: Spanne des aktuellen Balkens
a = High
b = Low
MyRange = a – b
RETURN MyRange
Wenn Sie wollen, können Sie anstelle des aktuellen Balkens die Informationen des vorherigen Balkens
verwenden. Sie müssen dazu die Anzahl der Balken in eckigen Klammern eingeben (die Anzahl der Balken
ab des aktuellen Balkens).
Nehmen wir als Beispiel die Schlusskursbedingung:
Wert des Schlusskurses des aktuellen Balkens:
Close
Wert des Schlusskurses vor dem aktuellen Balken:
Close[1]
Wert des Schlusskurses vor dem n-ten Balken vor dem aktuellen Balken:
Close[n]
Diese Regel ist für jede Bedingung gültig. Zum Beispiel kann der Eröffnungskurs des zweiten Balkens vor
dem aktuellen wie folgt ausgedrückt werden: Open[2].
Der ausgegebene Wert ist abhängig von der angezeigten Zeitspanne des Charts.
8 / 56
Kapitel I: Grundlagen
Schwerpunkt: OpenOfNextBar
OpenOfNextBar kann genauso wie die Open Funktion verwendet werden. Es folgt dieser Regel:
OpenOfNextBar[n+1] = Open[n]
wenn n>0
Zum Beispiel:
OpenOfNextBar[1] = Open
OpenOfNextBar[2] = Open[1]
OpenOfNextBar[3] = Open[2]
2) Tägliche Kursbedingungen
Im Gegensatz zu den Bedingungen, die sich auf den Zeitrahmen beziehen, beziehen sich die täglichen
Kursbedingungen auf den Wert eines Tages, unabhängig von dem Zeitrahmens des Charts.
Ein weiterer Unterschied zwischen den Begriffen, tägliche Kursbedingungen und den an den Zeitrahmen im
Chart angepassten Bedingungen ist, dass bei den täglichen Kursbedingungen runde Klammern und nicht
eckige Klammern verwendet werden, um den Wert der vergangenen Balken anzugeben.
Dopen(n): Eröffnungskurs des n-ten Tages vor dem aktuellen Balken
Dhigh(n): Höchstkurs des n-ten Tages vor dem aktuellen Balken
Dlow(n): Tiefstkurs des n-ten Tages vor dem aktuellen Balken
Dclose(n): Schlusskurs des n-ten Tages vor dem aktuellen Balken
Hinweis: n kann gleich 0 sein, wenn wir (wie im unteren Beispiel) den Wert von heute aufrufen wollen.
Beispiel: Täglicher Rahmen
a = Dhigh(0)
b = Dlow(0)
MyRange = a - b
RETURN MyRange
Sind die Begriffe an den zeitlichen Rahmen des Charts angepasst, verwenden Sie eckige
Klammern; während der täglichen Kursbewertung verwenden Sie normale Klammern.
Close [3]
DClose(3)
Der Schlusskurs vor 3 Zeiträumen
Der Schlusskurs vor 3 Tagen
9 / 56
Kapitel I: Grundlagen
3) Zeitliche Bedingungen
Die Zeit ist ein oft vernachlässigter Bestandteil der technischen Analyse. Allerdings wissen Händler sehr gut,
wie wichtig einige Zeiträume des Tages und einige Zeitpunkte des Jahres sind. Es ist möglich, die Zeit und
das Datum in Ihren Programmen zu berücksichtigen, um die Effizienz Ihrer Indikatoren zu verbessern. Die
zeitlichen Begriffe sind hier folgend beschrieben :
Date: zeigt das Datum des Schlusskurses der einzelnen Balken im Format YearMonthDay an
( YYYYMMDD)
Die zeitlichen Bedingungen werden von ProBuilder als ganze Zahl beschrieben. Der Begriff Date muss z.B.
als Zahl zusammengesetzt aus 8 Zeichen bestehen.
Lassen Sie uns das Programm schreiben:
RETURN Date
Angenommen heute ist der 04.07.2008. Das oben genannte Programm bringt den Wert 20080704 für den
heutigen Tag und den Wert 20080703 für gestern und so weiter für die zurückliegenden Vortage.
Das Datum unter ProBuilder gründet sich dann auf der folgenden Skala des Wertes:
Ein Jahrtausend ist mit 10 000 000 Datumsmaßeinheiten gleichwertig.
Ein Jahrhundert ist mit 1 000 000 Datumsmaßeinheiten gleichwertig.
Eine Decade ist mit 100 000 Datumsmaßeinheiten gleichwertig.
Ein Jahr ist mit 10 000 Datumsmaßeinheiten gleichwertig.
10 Monate sind mit 1 000 Datumsmaßeinheiten gleichwertig (übersteigen Sie nicht 12 Monate).
1 Monat ist mit 100 Datumsmaßeinheiten gleichwertig (übersteigen Sie nicht 12 Monate).
10 Tage sind mit 10 Datumsmaßeinheiten gleichwertig (übersteigen Sie nicht 31 Sekunden).
1 Tag ist mit 1 Datumsmaßeinheit gleichwertig (übersteigen Sie nicht 31 Sekunden).
Time : zeigt die Stunde des Schlusskurses jedes Balkens im Format StundenMinutenSekunden
(HHMMSS)
Beispiel:
RETURN Time
10 / 56
Kapitel I: Grundlagen
Dieses Diagramm zeigt uns den Schlusskurs jedes Balkens im Format HHMMSS:
Es ist auch möglich, Time und Date in dem gleichen Indikator zu verwenden, indem wir Analysen erstellen
oder uns Ergebnisse zu einer bestimmten Zeit anzeigen lassen. Im folgenden Beispiel wollen wir unseren
Indikator auf das Datum vom 1. Oktober und auf 9.00 Uhr vormittags und 1 Sekunde exakt begrenzen:
a = (Date = 20081001)
b = (Time = 090001)
RETURN (a AND b)
Ähnlich wie bei Date verwendet Time die folgenden Skalierungen die Werte:
10 Stunden sind mit 100.000 Zeiteinheiten gleichwertig (übersteigen Sie nicht 23 Stunden)
1 Stunde ist mit 10.000 Zeiteinheiten gleichwertig ( übersteigen Sie nicht 23 Stunden)
10 Minuten sind mit 1.000 Zeiteinheiten gleichwertig (übersteigen Sie nicht 59 Minuten)
1 Minute ist mit 100 Zeiteinheiten gleichwertig (übersteigen Sie nicht 59 Minuten)
10 Sekunden sind mit 10 Zeiteinheiten gleichwertig (übersteigen Sie nicht 59 Sekunden)
1 Sekunde ist mit 1 Zeiteinheit gleichwertig (übersteigen Sie nicht 59 Sekunden)
11 / 56
Kapitel I: Grundlagen
Die folgenden Begriffe funktionieren auf gleiche Weise:
Minute: Minute zeigt Schluss von jedem Balken (von 0 bis 59): Nur für intraday Charts
Hour: Stunde zeigt Schluss von jedem Balken (von 0 bis 23 ): Nur für intraday Charts
Day: Tag von Monat zeigt Schlusskurse von jedem Balken (vom 1. bis 28. oder 29. bis 30. oder 31.)
Month: Monat zeigt Schlusskurse von jeden Balken (vom 1. bis 12.)
Year: Jahr zeigt Schlusskurse von jedem Balken
DayOfWeek: Wochentage zeigt Schluss von jedem Balken (keine Wochenendtage verwenden)
(1=Montag, 2=Dienstag, 3=Mittwoch, 4=Donnerstag, 5=Freitag)
Beispiel:
a = (Hour > 170000)
b= (Day=30)
RETURN (a AND b)
CurrentHour: aktuelle Stunde (vom lokalen Markt)
CurrentMinute: aktuelle Minute (vom lokalen Markt)
CurrentMonth: aktuelle Monat (vom lokalen Markt)
CurrentSecond: aktuelle Sekunde (vom lokalen Markt)
Today: aktuelle Datum (vom lokalen Markt)
CurrentTime: aktuelle StundeMinuteSekunden (vom lokalen Markt)
CurrentYear: aktuelle Jahr (vom lokalen Markt)
CurrentDayOfWeek: Laufender Wochentag mit der Marktzeitzone als Bezugspunkt
Der Unterschied zwischen den "aktuellen" Begriffen und den "nicht aktuellen" Begriffen stellt den
"gegenwärtigen" Aspekt dar.
12 / 56
Kapitel I: Grundlagen
Das folgende Bild zeigt uns den Unterschied (angewandt auf die CurrentTime und Time Begriffe). Wir
können die Tatsache hervorheben, dass für "gegenwärtige" Begriffe, neben der Zeitachse/Zeitmittellinie, nur
der angezeigte Wert in Betrachtung gezogen werden muss (der Wert der aktuellen Uhrzeit wird über den
vollständigen Verlauf des Diagramms dargestellt).
Time zeigt die Schlusszeit von jedem Balken an.
CurrentTime zeigt die aktuelle Marktzeit an.
Wenn Sie Ihre Indikatoren mit Zählern versehen wollen (Anzahl der vergangenen Tage, Anzahl der
vergangenen Balken, usw.…), können Sie die Begriffe Days, BarIndex und IntradayBarIndex verwenden.
Days: Zähler der Tage seit 1900
Dieser Begriff ist sehr hilfreich, wenn Sie die Anzahl der vergangenen Tage kennen möchten. Dies ist
besonders wichtig, wenn Sie mit (x) minimalen Kursänderungen oder (x) Volumenansichten arbeiten.
Das folgende Beispiel zeigt Ihnen die Anzahl der vergangenen Tage seit 1900.
RETURN Days
13 / 56
Kapitel I: Grundlagen
BarIndex: Zähler der Balken seit Beginn der Historie
Der Zähler beginnt von links nach rechts und zählt jeden Balken, einschließlich der gegenwärtigen Balken.
Der erste geladene Balken gilt als Balken Nr. 0. Die meiste Zeit wird BarIndex mit IF verwendet. Diese
Anweisung wird später noch im Handbuch behandelt (siehe Seite 22 zur Verwendung des Beispiels).
IntradayBarIndex: Zähler von Intraday Balken
Der Zähler zeigt die Anzahl der Balken seit Tagesanfang an. Zu Beginn eines jeden neuen Tages wird der
Zähler auf Null zurückgesetzt. Der erste geladene Balken gilt als Balken Nr. 0.
Lassen Sie uns die beiden Zählerbegriffe mit zwei getrennten Indikatoren vergleichen:
RETURN BarIndex
und
RETURN IntradayBarIndex
Wir können den Unterschied klar erkennen: IntradayBarIndex stellt sich zu Beginn eines jeden neuen Tages
auf Null zurück.
14 / 56
Kapitel I: Grundlagen
4) Vom Preis abgeleitete Begriffe
Diese Begriffe ermöglichen Ihnen umfangreichere Informationen zu erhalten, verglichen mit Open, High,
Low und Close. Deshalb werden Preise so kombiniert, dass einige, gegenwärtig stattfindende, Aspekte der
Geldmarktpsychologie klar erkennbar werden.
Range: Spanne zwischen Hoch und Tief.
TypicalPrice: Durchschnitt zwischen Hoch-, Tief- und Schlusskurs.
WeightedClose: gewichteter Durchschnitt von Hoch (Gewicht 1), Tief (Gewicht 1).
MedianPrice: Durchschnitt zwischen Hoch und Tief.
TotalPrice: Durchschnitt zwischen Eröffnung, Hoch,Tief und Schluss.
Range zeigt die Volatilität (Preisschwankung) vom gegenwärtigen Balken und zeigt an, wie nervös die
Marktteilnehmer sind.
Sie können einen Indikator mit einem der oben genannten Begriffe erstellen, z.B. nur durch die Erstellung
eines Einlinien-Indikators "Return Range", oder Sie können die Begriffe zur Erstellung eines
umfangreicheren Indikators verwenden.
Der WeightedClose fokussiert hauptsächlich den Einfluss vom Schlusskurs-Balken (noch wichtiger, wenn
auf Tages- oder auf Wochenbalken angewandt).
Der TypicalPrice und TotalPrice betont die Tagesverlaufs-Geldmarktpsychologie, seit 3 oder 4
vorherrschende Preise vom gegenwärtigen Balken genommen und einkalkuliert werden (siehe oben).
MedianPrice verwendet das Halbwert-Konzept (die mittlere Anzahl) anstelle des Durchschnittskonzepts,
welches sehr nützlich bei der Erstellung theoretischer Modelle sein kann, die die Anlegerpsychologie nicht
berücksichtigen.
Range in % :
MyRange = Range
Calcul = (MyRange/MyRange[1]-1)*100
RETURN Calcul
5) Der unbestimmte Begriff
Das Stichwort Undefined ermöglicht Ihnen in der Softwareabbildung nicht den Wert des Indikators
anzuzeigen.
Undefined: unbestimmte Daten (gleichwertig mit einem leeren Eingabefeld)
Sie finden ein Anwendungsbeispiel auf der Seite 22.
Wie Sie bereits vorhandene Indikatoren verwenden
Bis jetzt haben wir Ihnen die Möglichkeiten von ProBuilder in Bezug auf die Begriffe beschrieben und wie die
Werte der Balken aus der Vergangenheit, unter Verwendung der Begriffe benannt wurden. Vorhandene
Indikatoren (die bereits in ProRealTime programmiert wurden) funktionieren auf gleiche Weise und so
können Sie die Indikatoren nach Belieben erstellen.
15 / 56
Kapitel I: Grundlagen
ProBuilder-Indikatoren bestehen aus drei Elementen, welche folgende Schreibweise haben:
NameOfFunction [calculated over n periods] (applied to which price or indicator)
Wenn Sie den "Funktion Einfügen"-Button verwenden, um nach einer ProBuilder-Funktion zu suchen und
diese dann entsprechend Ihrem Programm hinzuzufügen (siehe Seite 4), werden Standardwerte für beide
Perioden und das Preis oder Indikator-Argument vorgegeben.
Average[20](Close)
Wir können natürlich diese Werte nach Belieben verändern; z.B. können wir die 20 Balken durch die
Grundeinstellung von 100 Balken ersetzen. Genauso können wir das Preis-Argument "close" verändern in
"open" oder "Dopen(6)" – der Eröffnungskurs des Tagesbalkens vor 6 Tagen:
Average[100](Dopen(6))
Hier sind einige Programmbeispiele:
Das Programm berechnet den exponentiellen gleitenden Durchschnitt über 20 Perioden bezogen auf
den Schlusskurs:
RETURN ExponentialAverage[20](Close)
Das Programm berechnet den gewichteten gleitenden Durchschnitt über 20 Balken bezogen auf den
typischen Preis
mm = WeightedAverage[20](TypicalPrice)
RETURN mm
Das Programm berechnet den gleitenden Durchschnitt über 100 Balken bezogen auf den typischen
Preis
mm = WilderAverage[100](Volume)
RETURN mm
Das Programm berechnet den MACD (Diagramm) bezogen auf den Schlusskurs. Der MACD wurde mit der
Differenz zwischen dem 12 Perioden (EMA) exponentiellen gleitenden Durchschnitt minus den 26-Perioden
EMA geschrieben. Dann bilden wir eine Glättung mit einem exponentiellen gleitenden Durchschnitt über 9
Perioden und bezogen auf die MACD-Linie, um eine Signallinie zu erhalten. Schließlich ist der MACD die
Differenz zwischen der MACD-Linie und der Signallinie.
REM Berechnung der MACD-Linie
MACDLine = ExponentialAverage[12](Close) – ExponentialAverage[26](Close)
REM Berechnung der MACD Signal Linie
MACDSignalLine = ExponentialAverage[9](MACDLine)
REM Berechnung der Differenz zwischen MACD-Linie und des Signals
MACDHistogram = MACDLine – MACDSignalLine
RETURN MACDHistogram
16 / 56
Kapitel I: Grundlagen
Variablen
Bei der Programmierung Ihres Indikators möchten Sie vielleicht Variablen einarbeiten. Die Variablen-Option
in der rechten oberen Ecke des Fensters ermöglicht es Ihnen, einem unbestimmten Begriff einen
Ausgangswert zuzuschreiben und diesen im Einstellungsfenster des Indikators ohne Änderung des
Programmcodes zu beeinflussen.
Lassen Sie uns einen einfachen gleitenden Durchschnitt über 20 Perioden berechnen:
RETURN Average[20](Close)
Zur Änderung der Anzahl der Perioden für die Berechnung von der Indikator-Einstellungsschnittstelle,
ersetzen Sie 20 durch die Variable "n":
RETURN Average[n](Close)
17 / 56
Kapitel I: Grundlagen
Dann drücken Sie auf "Hinzufügen" in "Variable" und ein neues Fenster "Definition von Variable" öffnet sich.
Füllen Sie es folgendermaßen aus:
Drücken Sie auf die "OK" Taste. Danach werden Sie im Einstellungsfenster (in diesem Fall "Einstellung
MyMovingAverage") einen neuen Parameter erhalten, der es Ihnen ermöglicht, die Anzahl der Perioden in
der Berechnung des gleitenden Durchschnitts zu verändern:
Natürlich ist es möglich, das Gleiche mit vielen anderen Variablen zu tun, was Ihnen wiederum erlaubt,
mehrere Variablen für den gleichen Indikator gleichzeitig zu beeinflussen.
18 / 56
Kapitel II: Math. Funktionen und ProBuild er-Anw eisungen
Kapitel II: Math. Funktionen und ProBuilder-Anweisungen
Kontrollstrukturen
1) Bedingte IF-Anweisung
Der IF Befehl wird zur Erstellung eines konditionierten Ablaufes verwendet, d.h. diese Aktion durchzuführen,
wenn eine oder mehrere Bedingungen getroffen wurden.
Die Struktur wird durch die Anweisung IF, THEN, ELSE, ELSIF, ENDIF gebildet, die abhängig von der
Vielschichtigkeit der definierten Bedingungen verwendet werden. Wir werden diese der Reihe nach
vorstellen.
a. Eine Bedingung, ein Ergebnis (IF THEN ENDIF)
Wir können nach einer Bedingung schauen und eine Aktion bestimmen, wenn die Bedingung zutreffend
(wahr) ist. Sollte allerdings die Bedingung nicht gültig (nicht wahr) sein, dann wird nichts geschehen
(standardmäßig, Result = 0).
Das Beispiel zeigt: wenn gegenwärtiger Preis besser als der 20-Periode gleitende Durchschnitt, dann
erhalten wir: Result = 1 und sehen dies im Chart.
IF Close>Average[20](Close) THEN
Result=1
IF Preis > 20-Periode gleitender Durchschnitt
Result = 1, andernfalls Result =0
ENDIF
Ende, wenn Bedingung
RETURN Result
zeigt den Wert vom Ergebnis auf dem Chart
RETURN muss immer gemeinsam mit einer Ablagegröße, die den Messwert enthält,
dargestellt werden, damit das Ergebnis im Diagramm erscheint (Im letzten Beispiel
verwendeten wir die Variable “Result”).
b. Eine Bedingung, zwei Ergebnisse (IF THEN ELSE ENDIF)
Wir können genauso unterschiedliche Ergebnisse festlegen, wenn die Bedingung nicht zutrifft. Lassen Sie
uns zu einem früherem Beispiel zurückkehren: wenn der Preis besser ist als der gleitende Durchschnitt über
20 Perioden, dann zeige 1 andernfalls zeige -1.
IF Close>Average[20](Close) THEN
Result=1
ELSE
Result=-1
ENDIF
RETURN Result
NB: Wir haben einen binären Indikator erstellt. Für weitere Informationen, lesen Sie "Erstellung eines binären
oder ternären Indikators: Wie und Warum?"
19 / 56
Kapitel II: Math. Funktionen und ProBuild er-Anw eisungen
c. Sequentielle IF Bedingungen
Nach der Bestätigung der Hauptbedingung können wir Unter-Bedingungen erstellen, d.h. der
Bedingungsinhalt muss nacheinander für gültig erklärt werden. Dafür müssen Sie eine Reihung (Sequenz)
von IF Strukturen in der entsprechenden Reihenfolge errichten. Sie sollten darauf achten, genauso viele
Kodierungen ENDIF wie IF einzugeben. Beispiel:
Doppel-Bedingungen beim gleitenden Durchschnitt :
IF (Average[12](Close) - Average[20](Close) > 0) THEN
IF ExponentialAverage[12](Close) - ExponentialAverage[20](Close) > 0 THEN
Result = 1
ELSE
Result = -1
ENDIF
ENDIF
RETURN Result
d. Mehrfach-Bedingungen (IF THEN ELSE ELSIF ENDIF)
Sie können ein spezielles Ergebnis für eine spezielle Bedingung definieren. Der Indikator berichtet über viele
Zustände: wenn Bedingung 1 gültig ist, dann führe Aktion1 aus; andernfalls, wenn Bedingung 2 zutreffend
ist, dann führe Aktion 2 aus,… Wenn keine von den bisher genannten Bedingungen zutreffend ist, dann
führe Aktion n aus.
Diese Struktur verwendet folgende Bedingungen: IF, THEN, ELSIF, THEN.... ELSE, ENDIF.
Die Schreibweise lautet:
IF (Condition1) THEN
(Action1)
ELSIF (Condition2) THEN
(Action2)
ELSIF (Condition3) THEN
(Action3)
...
...
...
ELSE
(Action n)
ENDIF
Sie können auch Begriffe ersetzen, z.B. ELSIF mit ELSE IF. Jedoch wird Ihr Programm mehr Zeit zum
Schreiben benötigen. Natürlich müssen Sie die Schleife beenden, wie in vielen Fällen eher mit ENDIF als mit
IF. Wenn Sie mehrere Bedingungen in Ihrem Programm haben möchten, empfehlen wir Ihnen ELSIF zu
verwenden, was in diesem Fall besser ist als ELSE IF.
20 / 56
Kapitel II: Math. Funktionen und ProBuild er-Anw eisungen
Beispiel: Nachweis einer bearisch und bullisch Engulfing-Linie, verwenden den ELSIF-Befehl
Der Indikator zeigt 1, wenn ein bullisches Verhaltens-Muster bestätigt wurde, -1 wenn ein bearisches
Verhaltens-Muster bestätigt wurde und 0, wenn keines von beiden Verhaltensmustern bestätigt wurde.
//Erkennung der bullischen Engulfing Linie
Condition1 = Close[1]<Open[1]
Condition2 = Open<Close[1]
Condition3 = Close>Open[1]
Condition4 = Open<Close
//Erkennung der bearischen Engulfing Linie
Condition5 = Close[1]>Open[1]
Condition6 = Close<Open
Condition7 = Open>Close[1]
Condition8 = Close<Open[1]
IF Condition1 AND Condition2 AND Condition3 AND Condition4 THEN
a=1
ELSIF Condition5 AND Condition6 AND Condition7 AND Condition8 THEN
a=-1
ELSE
a=0
ENDIF
RETURN a
Beispiel: Widerstand Demarks pivot
IF Dclose(1) > Dopen(1) THEN
Phigh = Dhigh(1) + (Dclose(1) - Dlow(1)) / 2
Plow = (Dclose(1) + Dlow(1))/2
ELSIF Dclose(1) < Dopen(1) THEN
Phigh = (Dhigh(1) + Dclose(1)) / 2
Plow = Dlow(1) - (Dhigh(1) - Dclose(1))/2
ELSE
Phigh = Dclose(1) + (Dhigh(1) - Dlow(1)) / 2
Plow = Dclose(1) - (Dhigh(1) - Dlow(1)) / 2
ENDIF
RETURN Phigh , Plow
21 / 56
Kapitel II: Math. Funktionen und ProBuild er-Anw eisungen
Beispiel: BarIndex
Im Kapitel 1 von unserem Handbuch hatten wir Ihnen den BarIndex sowie einen Zähler der geladenen
Balken vorgestellt. BarIndex wird häufig mit IF verwendet. Wenn wir z.B. wissen möchten, ob die Zahl der
Balken in unserem Diagramm mehr als 23 Balken beträgt, dann schreiben wir:
IF BarIndex <= 23 THEN
a= 0
ELSIF BarIndex > 23 THEN
a=1
ENDIF
RETURN a
2) Wiederholende Schleife FOR
FOR wird verwendet, wenn wir eine begrenzte Reihe von Elementen ausnutzen wollen. Die Reihe muss aus
geordneten ganzen Zahlen bestehen (z.B. 1, 2, 3, usw.…).
Die Struktur wird von FOR, TO, DOWNTO, DO, NEXT gebildet. TO und DOWNTO werden, abhängig von
der Reihenfolge des Auftritts, in der Reihe von Elementen (aufsteigend oder absteigend) verwendet. Wir
heben auch die Tatsache hervor, dass zwischen FOR und DO die Extremitäten des Abstands zu scannen
sind.
a. Ansteigend (FOR, TO, DO, NEXT)
FOR (Variable = BeginningValueOfTheSeries) TO EndingValueOfTheSeries DO
(Action)
NEXT
22 / 56
Kapitel II: Math. Funktionen und ProBuild er-Anw eisungen
Beispiel: Glattstellen eines 12-Periode gleitenden Durchschnitts
Lassen Sie uns eine Speichervariable erstellen (Result), welches die Periode 11, 12 und 13 des gleitenden
Durchschnitts summiert.
Result=0
FOR Period = 11 TO 13 DO
Result= Average[Period](Close) + Result
NEXT
REM Lassen Sie uns eine Speichervariable erstellen (AverageResult), welche sich durch 3 teilt und
das Durchschnittsergebnis anzeigt. "AverageResult" ist eine Glattstellung des 12-Periode gleitenden
Durchschnitts.
AverageResult = Result/3
RETURN AverageResult
Lassen Sie uns Schritt für Schritt sehen, wie das Programm die Berechnungen erstellt:
Mathematisch gesehen wollen wir den Durchschnitt vom gleitenden Durchschnitt der 11, 12 und 13 Periode
berechnen.
Period erhält dann nacheinander den Wert 11, 12 und 13 (FOR arbeitet immer mit ganzen Zahlen).
Zuerst, Result = 0
When Period = 11: das neue Ergebnis = der 11 - Periode gleitende Durchschnitt + dem vorherigen Wert
result (0).
Der Zähler empfängt den folgenden Wert
When Period = 12: das neue Ergebnis = der 12 - Periode gleitende Durchschnitt + dem vorherigen Wert
vom Ergebnis.
Der Zähler erhält den folgenden Wert
When Period = 13: das neue Ergebnis = der 13 - Periode gleitende Durchschnitt + dem vorherigen Wert
vom Ergebnis.
13 ist der letzte Wert vom Zähler.
Wir beenden die "FOR" Schleife mit der "NEXT" Anweisung.
Wir zeigen dann AverageResult
Um es zu summieren, benötigt die Variable zuerst einmal den Anfangswert der Reihe. Dann empfängt die
Variable die folgenden Werte (der Letzte + 1) und so weiter bis zum allerletzten Wert der Reihe. Zum
Schluss vollenden wir die Schleife.
23 / 56
Kapitel II: Math. Funktionen und ProBuild er-Anw eisungen
Beispiel: der Durchschnitt vom höchsten Preis der letzten 20 Balken
MAhigh=0
SUMhigh=0
IF BarIndex < 20 THEN
MAhigh = Undefined
wenn nicht jetzt die 20 Periode gezeigt wird
dann kennzeichnen wir MAhigh Wert "unbestimmt" (nicht
gezeigt)
ELSE
andernfalls
FOR i = 0 TO 20 DO
FOR Wert von i zwischen 1 bis 20
SUMhigh = High[i]+SUMhigh wir summieren die 20 letzten "High" Werte
NEXT
ENDIF
MAhigh = SUMhigh/20
wir berechnen den Durchschnitt von der letzten 20 Periode
und speichern das Ergebnis in Mahigh
RETURN MAhigh
wir zeigen MAhigh
b. Absteigende Folge (FOR, DOWNTO, DO, NEXT)
Um eine absteigende Folge zu definieren, verwenden wir FOR, DOWNTO, DO, NEXT.
Die Schreibweise lautet:
FOR (Variable = EndingValueOfTheSeries) DOWNTO BeginningValueOfTheSeries DO
(Action)
NEXT
Lassen Sie uns nun zu einem früherem Beispiel zurückkehren, den 20-Periode gleitenden Durchschnitt vom ‘Hoch’:
Wir können erkennen, dass wir nur die Extremitäten des gescannten Abstands umgewandelt haben.
MAhigh=0
SUMhigh=0
IF BarIndex < 20 THEN
MAhigh = Undefined
ELSE
FOR i = 20 TO 0 DO
SUMhigh = High[i]+SUMhigh
NEXT
ENDIF
MAhigh = SUMhigh/20
RETURN MAhigh
24 / 56
Kapitel II: Math. Funktionen und ProBuild er-Anw eisungen
3) Bedingte Schleife WHILE
WHILE wird verwendet, um eine Tätigkeit auszuführen solange eine Bedingung zutreffend bleibt. Sie
werden sehen, dass diese Anweisung den einfachen Befehlen IF/THEN/ENDIF sehr ähnlich ist.
Diese Struktur verwendet die folgenden Befehle: WHILE, DO (beliebig), WEND (beenden Sie während)
Die Schreibweise lautet:
WHILE (Condition) DO
(Action 1)
…
(Action n)
WEND
Beispiel:
Result=0
WHILE Close> Average[20](Close) DO
Result=1
WEND
RETURN Result
Beispiel: der Indikator berechnet die Anzahl von aufeinander folgenden Steigerungen
Increase = (Close > Close[1])
Count = 0
WHILE Increase[Count] DO
Count = Count + 1
WEND
RETURN Count
Allgemeine Anmerkung zur bedingten Anweisung WHILE
Ähnlich wie bei IF wird das Programm nicht die bedingte Schleife verarbeiten, wenn die Bedingung
unbekannt ist. Zum Beispiel:
Count = 0
WHILE i <> 11 DO
i=i+1
Count = Count + 1
WEND
RETURN Count
25 / 56
Kapitel II: Math. Funktionen und ProBuild er-Anw eisungen
Der WHILE Befehl erkennt nicht den Wert von i. Folglich kann nicht getestet werden, ob i zu 10 äquivalent ist
oder nicht. Somit wird die Schleife nicht verarbeitet. Demzufolge ist der Zähler äquivalent zu 0.
Der korrekte Code lautet:
i=0
Count = 0
WHILE i <> 11 DO
i=i+1
Count = Count + 1
WEND
RETURN Count
In diesem Code ist i initialisiert. Die Schleife arbeitet nun richtig, da die Bedingung für den Beginn der
Schleife gültig ist.
4) BREAK
Der BREAK Befehl ermöglicht uns, für eine WHILE-Schleife oder FOR-Schleife einen Zwangsausgang zu
erstellen. Kombinationen sind mit der IF-Anweisung, innerhalb der WHILE-Schleife oder der FOR-Schleife
möglich.
a. Mit WHILE
Wenn wir eine bedingte WHILE-Schleife beenden möchten, ohne auf eine bestimmte Situation zu warten, in
der die Bedingung ungültig ist, verwenden wir BREAK auf folgende Weise:
WHILE (Condition) DO
(Action)
BREAK
WEND
26 / 56
Kapitel II: Math. Funktionen und ProBuild er-Anw eisungen
Nehmen wir als Beispiel einen Indikator, der einen Anstieg der Kurse anzeigt:
REM Trend Indikator: Hinweis auf einen Preisanstieg
REM Wenn der Indikator einen Wert von 1 hat, wurde ein Preisanstieg erkannt, ansonsten ist er 0.
Increase = (Close – Close[1])>0
Indicator = 0
i=0
WHILE Increase[i] DO
Indicator = Indicator + 1
i=i+1
BREAK
WEND
RETURN Indicator
Wenn in dem Code nicht der Befehl "BREAK" verwendet wird, würde die Schleife weiterlaufen und das
Ergebnis wäre ein anderer Trend-Indikator mit einem kumulierten Anstieg.
b. Mit FOR
Wir versuchen jetzt den Befehl BREAK in einer iterativen FOR-Schleife zu verwenden, ohne dass der letzte
(oder erste) Wert der Reihe erreicht wird.
FOR (Variable = BeginningValueOfTheSeries) TO EndingValueOfTheSeries DO
(Action)
BREAK
NEXT
Nehmen wir als Beispiel einen Indikator, der den Umsatz der letzten 19 Perioden kumuliert. Dieser Indikator
hat einen Wert von 0, wenn der Umsatz fällt.
Count = 0
FOR i = 0 TO 19 DO
IF (Volume[i]>Volume[i+1]) THEN
Count = Count + 1
ELSE
BREAK
ENDIF
NEXT
RETURN Count
Wenn in diesem Code der Befehl "BREAK" nicht verwendet würde, setzt sich die Schleife bis 19 (letztes
Element der Serie) fort, auch wenn die Bedingung "Count" ungültig ist.
Allerdings wird mit dem Befehl BREAK das Ergebnis 0, sobald die Bedingung erfüllt ist.
27 / 56
Kapitel II: Math. Funktionen und ProBuild er-Anw eisungen
5) CONTINUE
Mit der Anweisung CONTINUE können Sie an derjenigen Stelle das Programm fortsetzen, wo die Zeilen
WHILE oder FOR stehen, und das ohne Neustart der kompletten Schleife (mit jedem Zähler wird erhöht, der
Wert beibehalten und nicht auf 0 zurückgesetzt). Dieser Befehl wird häufig verwendet mit BREAK, entweder
um eine Schleife zu beenden (BREAK) oder um in der Schleife zu bleiben (CONTINUE).
a. Mit WHILE
Lassen Sie uns ein Programm erstellen, welches die Anzahl der Candlesticks zählt, deren Schluss- und
Eröffnungskurs über dem vorhergehenden Candlestick liegen. Wenn die Bedingung nicht erfüllt ist, wird der
Zähler auf 0 zurückgesetzt.
Increase = Close > Close[1]
Count=0
WHILE Open<Open[1] DO
IF Increase[Count] THEN
Count = Count + 1
CONTINUE
ENDIF
BREAK
WEND
RETURN Count
Solange bei der Verwendung von CONTINUE die IF-Bedingung nicht erfüllt ist, wird die WHILE-Schleife
nicht beendet. Dies ermöglicht uns, die Anzahl der Muster zu zählen, die die Bedingung erfüllen. Ohne die
CONTINUE-Anweisung, würde das Programm die Schleife verlassen, auch wenn die IF-Bedingung erfüllt
wurde. Dann würden wir nicht mehr in der Lage sein, weiterhin die erkannten Muster zu zählen und das
Ergebnis wäre Binär (1, 0).
b. Mit FOR
Lassen Sie uns ein Programm erstellen, welches die Anzahl der Candlesticks zählt, deren Schluss- und
Eröffnungskurs über dem vorhergehenden Candlestick liegen. Wenn die Bedingung nicht erfüllt ist, wird der
Zähler auf 0 zurückgesetzt.
Increase = Close > Close[1]
Count=0
FOR i = 1 TO BarIndex DO
IF Increase[Count] THEN
Count = Count + 1
CONTINUE
ENDIF
BREAK
NEXT
RETURN Count
28 / 56
Kapitel II: Math. Funktionen und ProBuild er-Anw eisungen
FOR ermöglicht den Test der Bedingung an allen geladenen Daten. Wenn wir FOR mit CONTINUE
verwenden und die IF-Bedingung erfüllt wurde, dann wird die FOR-Schleife nicht beendet und mit dem
nächsten Wert i fortgesetzt. Dies ist so, als ob die Anzahl der Muster gezählt würde, die anhand dieser
Bedingung erkannt werden.
Ohne CONTINUE würde das Programm die Schleife verlassen, auch wenn die IF-Bedingung erfüllt wurde.
Dann wären wir nicht mehr in der Lage, weiterhin die erkannten Muster zu zählen und das Ergebnis wäre
binär (1, 0).
6) ONCE
Die ONCE-Anweisung wird verwendet, um einer Variable einmalig einen bestimmten Wert zuzuweisen "NUR
EINMAL".
Da wir wissen, dass im gesamten Programm die Programmsprache vor der Ergebnislieferung den Code für
jeden in dem Chart angezeigten Balken liest, sollten Sie daran denken, dass ONCE :
Nur ein Mal vom Programm (einschließlich der zweiten Lesung) verarbeitet wird.
Während der zweiten Lesung des Programms der Bestand des Wertes anhand der
vorhergehenden Lesung berechnet wird.
Zum genauen Verstehen des Funktionierens müssen Sie erkennen, auf welche Weise die
Programmsprache den Code liest; daher das nächste Beispiel.
Diese sind zwei Programme, die auf 0 und 5 entsprechend zurückkehren und deren einziger Unterschied
darin besteht, dass der ONCE-Befehl beim zweiten Programm hinzugefügt wurde:
Programm 1
Programm 2
L1 Count = 0
L1 ONCE Count = 0
L2 i=0
L2 ONCE i=0
L3 IF i<=5 THEN
L3 IF i<=5 THEN
L4
Count = Count + i
L4
Count = Count + i
L5
i=i+1
L5
i=i+1
L6 ENDIF
L6 ENDIF
L7 RETURN Count
L7 RETURN Count
Lassen Sie uns ansehen, wie die Programmsprache den Code liest.
Programm 1: Für den ersten Balken liest die Formelsprache die Zeile 1 (L1: Count = 0; i = 0), anschließend
L2, L3, L4, L5 and L6 (Count = 0; i = 1). Für den nächsten Balken beginnt das Programm am Anfang und beide
I und Count sind auf 0 gesetzt, dadurch wird count für jeden Balken immer auf 0 zurückkehren.
Programm 2: Für den ersten Balken liest die Formelsprache die Zeile L1 (Count = 0; i = 0), anschließend
L2, L3, L4, L5, L6 (Count = 0; i = 1). Wenn die Zeile "RETURN" erreicht wird, wird die Schleife erneut
gestartet, um den Wert des nächsten, mit L3 beginnenden, Balkens zu berechnen (die Zeilen mit ONCE
werden nur einmal verarbeitet), L4, L5, L6 (Count = 1; i = 2), dann geht es wieder zurück (Count = 3; i = 3)
und so weiter zu (Count = 15; i = 6). Angekommen bei diesem Ergebnis, wird die IF-Schleife nicht mehr
verarbeitet, da die Bedingung nicht mehr erfüllt wird; die einzige, zum Lesen bleibende, Zeile ist L7, somit ist
das Ergebnis 5 für die übrigen geladenen Balken.
29 / 56
Kapitel II: Math. Funktionen und ProBuild er-Anw eisungen
Mathematische Funktionen
1) Gemeinsame Unäre und Binäre Funktionen
Lassen Sie uns jetzt die mathematischen Funktionen näher betrachten. Sie finden in ProBuilder die
wichtigsten in der Mathematik bekannten Funktionen. Bitte beachten Sie, dass a und b Beispiele sind und
Sie jede andere Zahl oder Variable anstelle verwenden können.
MIN(a, b): berechnet das Minimum von a und b
MAX(a, b): berechnet das Maximum von a und b
ROUND(a): rundet zur nächstliegenden geraden Zahl auf oder ab
ABS(a): berechnet den absoluten Wert von a
SGN(a): zeigt ein Zeichen für (1, wenn positiv, -1, wenn negativ)
SQUARE(a): berechnet ein Quadrat
SQRT(a): berechnet die Quadratwurzel von a
LOG(a): berechnet den Neperian Logarithmus von a
EXP(a): berechnet den Exponenten von a
COS(a): berechnet den Cosinus von a
SIN(a): berechnet den Sinus von a
TAN(a): berechnet den Tangens von a
ATAN(a) : berechnet den ARC-Tangens von a
Lassen Sie uns einen Code mit einem Beispiel der Normalverteilung in der Mathematik schreiben. Dies ist
interessant, weil wir hier die Quadratfunktion, die Quadratwurzelfunktion und die exponentielle Funktion
gleichzeitig verwenden:
REM Normal Law applied to x = 10, StandardDeviation = 6 and MathExpectation = 8
REM Wir definieren die folgenden Variablen in der Option Variable:
StandardDeviation = 6
MathExpectation = 8
x = 10
Indicator = EXP((1/2) * (SQUARE(x – MathExpectation) / StandardDeviation)) / (StandardDeviation *
SQRT(2/3.14))
RETURN Indicator
2) Gemeinsame mathematische Operatoren
a < b : a ist größer als b
a <= b ou a =< b : a ist größer oder gleich b
a > b : a ist kleiner als b
a >= b ou a => b : a ist kleiner oder gleich b
a = b : a ist gleich b (oder b ist zurückzuführen auf a)
a <> b : a ist verschieden zu b
30 / 56
Kapitel II: Math. Funktionen und ProBuild er-Anw eisungen
3) Chart-Vergleichsfunktionen
a Crosses Over b : die a-Kurve kreuzt über die b-Kurve
a Crosses Under b : die a-Kurve kreuzt unter der b-Kurve
4) Summenfunktion
Cumsum : Berechnet die Summe eines Kurses oder Indikators über alle im Chart geladenen Balken
Die Schreibweise von Cumsum ist:
Cumsum (price or indicator)
Bsp.: Cumsum(Close) berechnet die Summe der Schlusskurse aller im Chart geladenen Balken.
Summation: Berechnet die Summe eines Kurses oder Indikators über die letzten n Balken
Die Summe errechnet sich ab dem letzten Wert (von rechts nach links)
Die Schreibweise von Summation ist:
Summation[number of bars](price or indicator)
Bsp.: Summation[20](Open) berechnet die Summe der Eröffnungskurse der letzten 20 Balken.
5) Statistische Funktionen
Die Schreibweise all dieser Funktionen ist die Gleiche wie die Schreibweise der Summenfunktion, d.h.:
Lowest[number of bars](price or indicator)
Lowest: zeigt den niedrigsten Wert des Kurses oder Indikators über die Anzahl der Perioden,
definiert in den eckigen Klammern.
Highest: zeigt den höchsten Wert des Kurses oder Indikators über die Anzahl der Perioden,
definiert in den eckigen Klammern.
STD: zeigt die Standardabweichung eines Kurses oder Indikators über die Anzahl der definierten
Perioden.
STE: zeigt die Standard-Fehler eines Kurses oder Indikators über die Anzahl der definierten
Perioden.
31 / 56
Kapitel II: Math. Funktionen und ProBuild er-Anw eisungen
Logische Operatoren
Wie bei jeder Programmiersprache ist es notwendig, sich einen Überblick über die zur Verfügung stehenden
Logischen Operatoren zu schaffen, um relevante Indikatoren erstellen zu können. Dieses sind die 4
Logischen Operatoren in ProBuilder:
NOT(a) : logisch NICHT
a OR b : logisch ODER
a AND b : logisch UND
a XOR b : exklusiv ODER
Berechnung des Trendindikators: On Balance Volume (OBV)
IF NOT((Close > Close[1]) OR (Close = Close[1])) THEN
MyOBV = MyOBV – Volume
ELSE
MyOBV = MyOBV + Volume
ENDIF
RETURN MyOBV
ProBuilder-Befehle
RETURN: zeigt das Ergebnis an
CustomClose: zeigt einen einstellbaren Kurswert; in der Grundeinstellung wird der Schlusskurs
"Close" zugrunde gelegt
CALL: fordert einen anderen ProBuilder-Indikator für die Verwendung in Ihrem aktuellen Programm
AS: benennt das angezeigte Ergebnis
COLOURED: färbt die angezeigte Kurvebcolors in der Farbe Ihrer Wahl
1) RETURN
Der Return-Befehl ist sehr wichtig, wie wir bereits in Kapitel I gesehen haben. Um Programmierfehler zu
vermeiden, müssen wir einige spezifische Eigenschaften des Befehls kennen.
Die Hauptgründe den RETURN Befehl beim Programmschreiben in Erinnerung zu behalten sind, dass
RETURN verwendet wird:
Nur einmal in jedem ProBuilder Programm
Immer in der letzten Zeile des Codes
Optional mit anderen Funktionen, wie AS und COLOURED
Um viele Ergebnisse anzuzeigen; wir schreiben RETURN gefolgt mit dem, was wir anzeigen lassen
wollen, abgetrennt durch ein Komma (Beispiel : RETURN a,b)
32 / 56
Kapitel II: Math. Funktionen und ProBuild er-Anw eisungen
2) REM or //
REM ermöglicht Ihnen Anmerkungen und Kommentare in den Code zu schreiben. Das ist sehr nützlich, um
sich daran zu erinnern, wie der geschriebene Code funktioniert. Diese Bemerkungen werden natürlich nicht
vom Programm gelesen. Lassen Sie uns das Konzept am folgenden Beispiel zeigen:
REM Dieses Programm liefert den einfachen gleitenden Durchschnitt über die letzten 20 Perioden auf
Schlusskursbasis
RETURN Average[20](Close)
Verwenden Sie keine Sonderzeichen (Beispiele: é,ù,ç,ê…) in ProBuilder, auch nicht in der
REM Sektion
3) CustomClose
CustomClose ist eine Bedingung zum Anzeigen von Bedingungen, wie Close, Open, High, Low und viele
andere, welche im Indikator Einstellungsfenster eingestellt werden können.
Die Schreibweise ist die Gleiche, wie bei den Bedingungen in der Zeitskala im Chart:
CustomClose[n]
Beispiel:
RETURN CustomClose[2]
Durch einen Klick auf den Werkzeugschlüssel in der linken oberen Ecke des Charts, sehen Sie, dass es
möglich ist, die zur Berechnung verwendeten Kurse anzupassen (im Chart, in Gelb eingekreist).
33 / 56
Kapitel II: Math. Funktionen und ProBuild er-Anw eisungen
4) CALL
CALL erlaubt Ihnen einen selbst geschriebenen Indikator zu verwenden.
Die schnellste Methode ist auf "Funktion einfügen" zu klicken und dann wählen Sie die Kategorie "Anwender
Indikatoren" und wählen dann den Namen des Indikators, welchen Sie verwenden wollen und klicken dann
auf "Hinzufügen".
Sie haben z.B. einen MACD Diagramm programmiert und haben diesen HistoMACD genannt.
Wählen Sie Ihren Indikator und klicken Sie auf "Hinzufügen". Sie sehen dann im Programmfeld:
myHistoMACD = CALL HistoMACD
Die Software hat den Namen "myHistoMACD", der Indikator heißt "HistoMACD".
Diese Namen müssen Sie auch für den Rest des Programms verwenden, wenn Sie den HistoMACD
Indikator einfügen wollen, müssen Sie "myHistoMACD" schreiben.
5) AS
Das Schlüsselwort AS erlaubt es Ihnen, die verschiedenen angezeigten Ergebnisse zu benennen Diese
Anweisung wird verwendet mit RETURN und die Schreibweise ist:
RETURN Result1 AS "Curve Name", Result2 AS "Curve Name", …
Der Vorteil dieses Befehls liegt in der Tatsache, dass die Kurven einfacher unterschieden werden können.
Beispiel:
a = ExponentialAverage[200](Close)
b = WeightedAverage[200](Close)
c = Average[200](Close)
RETURN a AS "Exponential Average" , b AS "Weighted Average" , c AS "Simple Average"
34 / 56
Kapitel II: Math. Funktionen und ProBuild er-Anw eisungen
6) COLOURED
Die Anweisung COLOURED wird hinter RETURN verwendet und dient der Farbzuweisung der angezeigten
Kurven, definiert nach der RGB Norm (rot, grün, blau). Dieses sind die Hauptfarben mit der Norm:
Farbe
RGB Wert
(rot, grün, blau)
Englisch
(0, 0, 0)
Black
(255, 255, 255)
White
(255, 0, 0)
Red
(0, 255, 0)
Green
(0, 0, 255)
Blue
(255, 255, 0)
Yellow
(0, 255, 255)
Cyan
(255, 0, 255)
Magenta
Die Schreibweise der Coloured-Anweisung lautet:
RETURN Indicator COLOURED(Red, Green, Blue)
Die AS Anweisung kann in Zusammenhang mit der COLOURED(.,.,.) Anweisung stehen. Diese Assoziation
muss in folgender Reihenfolge stehen:
RETURN Indicator COLOURED(Red, Green, Blue) AS "Name Of The Curve"
Wir gehen zurück zum vorherigen Beispiel und fügen die Anweisung COLOURED in die Zeile "RETURN".
a = ExponentialAverage[200](Close)
b = WeightedAverage[200](Close)
c = Average[200](Close)
RETURN a COLOURED(255,0,0) AS "Exponential Moving Average" , b COLOURED(0,255,0) AS
"Weighted Moving Average" , c COLOURED(0, 0, 255) AS "Simple Moving Average"
35 / 56
Kapitel II: Math. Funktionen und ProBuild er-Anw eisungen
Dieses Bild zeigt die Farbanpassung des Ergebnisses.
36 / 56
Kapitel III : Praktische Aspekte
Kapitel III : Praktische Aspekte
Erstellung eines binären oder ternären Indikators: Wie und Warum?
Ein binärer oder ternärer Indikator ist ein Indikator, der nur zwei oder drei mögliche Ergebnisse hat
(normalerweise 0, 1 oder -1). Dessen Hauptzweck in Tradingkontext besteht darin, einfach und schnell
Muster oder Bedingungen herauszufiltern, die man im Indikator mit einem visuellen Signal definiert hat.
Zweck des binären oder ternären Indikators:
Erkennung der Haupt-Candlestickmuster (z.B.: Harami, Morgenstern, Hammer, …).
Erleichtert die Chartanalyse, wenn man nach bestimmten Bedingungen sucht.
Definieren Sie eine einfache Alarmbedingung in einem Indikator fest, welche verschiedene
Bedingungen beinhaltet und Sie werden mehr Alarmsignale zur Verfügung haben!
Erkennen komplexer Bedingungen anhand der geladenen historischen Daten.
Einfachere Erstellung eines Backtest.
Darüber hinaus finden Sie in dem ProBackTest Handbuch viele Beispiele, wie man Stop Orders in die
Anlagestrategie einfügt.
Binäre und ternäre Indikatoren sind im Wesentlichen IF-Strukturen. Wir empfehlen Ihnen den Abschnitt über
die IF Anweisung zu lesen, bevor Sie weiter lesen. (Seite 19)
Schauen wir uns ein Beispiel zu den binären und ternären Indikatoren an:
Binärer Indikator: Hammer Erkennung
Hammer = Close>Open AND High=Close AND (Open-Low)>=3*(Close-Open)
IF Hammer THEN
Result=1
ELSE
Result=0
ENDIF
RETURN Result AS "Hammer"
Ternärer Indikator: Goldenes Kreuz und Totes Kreuz Erkennung
a= ExponentialAverage[10](Close)
b= ExponentialAverage[20](Close)
c=0
//Goldenes Kreuz Erkennung
IF a Crosses Over b THEN
c=1
ENDIF
//Totes Kreuz Erkennung
IF a Crosses Under b THEN
c= -1
ENDIF
RETURN c
37 / 56
Kapitel III : Praktische Aspekte
Beachte: Wir haben hier einen exponentiellen Gleitenden Durchschnitt mit 10 und 20 Perioden angezeigt.
Die Schnittpunkte beider Linien werden im Indikator hervorgehoben.
Sie finden weitere Candlestick-Muster-Indikatoren im Abschnitt Kapitel IV: Übungen.
Erstellung von STOPP-Indikatoren: Folgen der Position in Echtzeit
Es ist möglich STOPP-Indikatoren nach eigenen Parametern zu erstellen, um Positionen zu schließen.
Mit dem Backtest Modul ProBackTest, welches in einem gesonderten Handbuch behandelt wird, lassen sich
auch Stopp-Level in einem Backtest definieren. Die Programmierung eines Stopps als Indikator ist aus
folgenden Gründen interessant:
Es erlaubt Ihnen die Visualisierung eines Stopps als Linie, welche in Echtzeit im Chart aktualisiert
wird (z.B.: Trailing Stopp).
Es ist möglich, Echtzeit Alarmsignale zu setzen, um unverzüglich informiert zu werden.
Es ist nicht nötig, Long oder Short Orders zu erstellen (anders beim ProBackTest)
38 / 56
Kapitel III : Praktische Aspekte
Die Programmierung von Stopps bedeutet auch, die Befehle der vorherigen Kapitel anwenden können.
Dies sind die 4 Kategorien, bei denen wir uns mit Stopps auseinander setzen:
StaticTake Profit STOP
Static STOP Loss
Inactivity STOP
Trailing STOP (trailing stop loss or trailing take profit)
Die Indikatoren in den folgenden Beispielen sind mögliche Codes, um Stopp-Indikatoren zu erstellen. Sie
werden wahrscheinlich diese nach Ihren eigenen Parametern, unter der Verwendung der Anweisungen, die
Sie in den vorhergehenden Kapiteln gelernt haben, anpassen.
1) StaticTake Profit STOP
Ein Static Take-Profit bezeichnet ein Niveau, bei dem wir beim Erreichen planen, Positionen zu schließen
und Gewinne mitzunehmen. Per Definition ist dieser Stopp eine feste Ebene (horizontale Linie). Die
Anwender dieser Art von STOPP schließen Ihre Position und nehmen Gewinne mit, wenn dieses Niveau
erreicht ist.
Der Indikator unten zeigt zwei Ebenen und "StartingTime" ist der Zeitpunkt, wenn die Position eingegangen
wurde:
Wenn Sie ein Käufer sind, ziehen Sie eine höhere Kurve in Betracht, das entspricht 10% Gewinn
(110% vom Kurs, wenn Sie Ihre Long Position nehmen)
Wenn Sie Verkäufer sind, ziehen Sie eine niedrigere Kurve in Betracht, das entspricht 10% Gewinn
(90% vom Kurs, wenn Sie eine Short Position nehmen)
//Wir definieren in der Option Variable:
//StartingTime = 100000 (das ist ein Beispiel für 10 Uhr; eingestellt auf die Zeit bei Eingang der
Position)
//Price= Kurswert, wenn Sie Ihre Position nehmen
//Nehmen Sie StopLONG für eine Long Position und StopShort für eine Short Position. Sie können
auch StopLONG oder StopSHORT entfernen, wenn Sie nur mit Long- bzw. Shortpositionen arbeiten.
//AmplitudeUp stellt die Veränderungsrate des verwendeten Kurses dar und zeichnet das Gewinnziel
für die Long Position ein (Standard: 1.1)
//AmplitudeDown stellt die Veränderungsrate des verwendeten Kurses dar und zeichnet das
Gewinnziel für die Short Position ein (Standard: 0.9)
IF Time = StartingTime THEN
StopLONG = AmplitudeUp*Price
StopSHORT = AmplitudeDown*Price
ENDIF
RETURN StopLONG COLOURED(0,0,0) AS "TakeProfit LONG 10%" , StopSHORT COLOURED(0,255,0)
AS "TakeProfit SHORT 10%"
39 / 56
Kapitel III : Praktische Aspekte
2) Static STOP loss
Ein Static STOP Loss ist das Gegenteil eines Static Take-Profit STOP; dies bedeutet, dass wir beim
Erreichen des Kurses planen, unsere Position mit Verlust zu schließen. Dieser STOPP ist sinnvoll, um
Verluste auf ein Minimum zu begrenzen, wenn Sie Geld verlieren und versuchen den Markt zu verlassen.
Wie beim Static Take-Profit definiert diese STOPP-Order eine feste Ebene, jedoch diesmal, beendet der
Anwender seine Position, um Verluste zu begrenzen, wenn diese Ebene erreicht wird.
Der unten stehende Indikator zeigt zwei Ebenen an und eine "Startzeit", wann die Position eingegangen
wurde:
Wenn Sie ein Käufer sind, ziehen Sie eine niedrigere Kurve in Betracht, das entspricht 10% Gewinn
(90% vom Kurs, wenn Sie eine Short-Position nehmen)
Wenn Sie Verkäufer sind, ziehen Sie eine höhere Kurve in Betracht, das entspricht 10% Gewinn
(110% vom Kurs, wenn Sie Ihre Long-Position nehmen)
Der Code dieses Indikators ist:
//Wir definieren in der Option Variable:
//StartingTime = 100000 (das ist ein Beispiel für 10 Uhr; eingestellt auf die Zeit bei Eingang der
Position)
//Price= Kurswert, wenn Sie Ihre Position nehmen
// Nehmen Sie StopLONG für eine Long Position und StopShort für eine Short Position. Sie können
auch StopLONG oder StopSHORT entfernen, wenn Sie nur mit Long- bzw. Shortpositionen arbeiten.
//AmplitudeUp stellt die Veränderungsrate des verwendeten Kurses dar und zeichnet einen Stopp
Loss für die Shortposition (Standard: 0.9)
//AmplitudeDown stellt die Veränderungsrate des verwendeten Kurses dar und zeichnet eine Stopp
Loss für die Log Position ein (Standard: 1.1)
IF Time = StartingTime THEN
StopLONG = AmplitudeUp*Price
StopSHORT = AmplitudeDown *Price
ENDIF
RETURN StopLONG COLOURED(0,0,0) AS "StopLoss LONG 10%" , StopSHORT COLOURED(0,255,0)
AS "StopLoss SHORT 10%"
3) Inactivity STOP
Ein Inaktivitäts-STOPP schließt die Position, wenn das Gewinnziel nicht erreicht wurde (definiert in % oder in
Punkten) über eine bestimmte Periode (definiert nach der Anzahl von Balken).
Erinnern Sie sich, wie man Variablen im Bereich "Variablen" definiert.
Beispiel eines Inaktivitäts-Stopps im Intraday-Chart:
Dieser Stopp muss bei diesen beiden Indikatoren verwendet werden:
Der erste Indikator stellt den Kursverlauf gegenüber
Der zweite Indikator soll in einem anderen Chartfenster dargestellt werden
40 / 56
Kapitel III : Praktische Aspekte
Indikator1
//Wir definieren in der Option Variable:
//MyVolatility = 0.01 entspricht der Veränderungsrate zwischen jedem Bereich der Spanne und dem
Schlusskurs
IF IntradayBarIndex = 0 THEN
ShortTarget = (1-MyVolatility)* Close
LongTarget = (1+MyVolatility)* Close
ENDIF
RETURN ShortTarget AS "ShortTarget", LongTarget AS "LongTarget"
Indikator2
//Wir definieren in der Option Variable:
//StartingTime = 090000 (das ist ein Beispiel für 9 Uhr; eingestellt auf die Zeit bei Eingang der
Position)
//Price= Kurswert, wenn Sie Ihre Position nehmen
REM Die Stellungnahme erfolgt zu Marktpreisen
//MyVolatility = 0.01 entspricht der Veränderungsrate zwischen jedem Bereich der Spanne und dem
Schlusskurs
//NumberOfBars=20: der Schlusskurs kann innerhalb einer vordefinierten Spanne schwanken,
während einer maximalen Anzahl von Balken ‘NumberOfBars bevor die Position geschlossen wird
(Ergebnis = 1)
Result = 0
Cpt=0
IF IntradayBarIndex = 0 THEN
ShortTarget = (1-MyVolatility)*Close
LongTarget = (1+MyVolatility)*Close
ENDIF
FOR i=IntradayBarIndex DOWNTO 1 DO
IF Close[i]>=ShortTarget AND Close[i]<=LongTarget THEN
Cpt=Cpt+1
ELSE
Cpt=0
ENDIF
IF Cpt = NumberOfBars THEN
Result = 1
ENDIF
NEXT
RETURN Result
41 / 56
Kapitel III : Praktische Aspekte
4) Trailing Stopp
A trailing STOP folgt dynamisch der Kursentwicklung und zeigt an, wann die Position zu schließen ist.
Wir schlagen Ihnen zwei Wege vor einen Trailing Stopp zu programmieren. Der Erste entspricht einem
dynamischen Trailing Stopp-Loss und der Andere einem Trailing Profit-Stopp.
Dynamischer Trailing STOPP-LOSS (wird im Intraday Handel verwendet)
//Definieren der folgenden Variablen im Bereich Variable:
//StartingTime = 090000 (das ist ein Beispiel für 9 Uhr; eingestellt auf die Zeit bei Eingang der
Position)
REM Wir setzen voraus, dass eine Position "zum Marktpreis" eröffnet wurde
//Amplitude stellt die Veränderungsrate des Eröffnungskurses verglichen mit der niedrigsten
Verlaufskurve dar ( z.B. nehmen wir eine Amplitude = 0.95)
IF Time = StartingTime THEN
IF Lowest[5](Close)<1.2*Low THEN
IF Lowest[5](Close) >= Close THEN
Cut = Amplitude*Lowest[5](Close)
ELSE
Cut = Amplitude*Lowest[20](Close)
ENDIF
ELSE
Cut = Amplitude*Lowest[20](Close)
ENDIF
ENDIF
RETURN Cut AS "Trailing Stop Loss"
Dynamischer Triling Profit-STOPP (wird im Intraday-Handel verwendet)
//Definieren der folgenden Variablen im Bereich Variable:
//StartingTime = 090000 (das ist ein Beispiel für 9 Uhr; eingestellt auf die Zeit bei Eingang der
Position)
REM Wir setzen voraus, dass eine Position "zum Marktpreis" eröffnet wurde
//Amplitude stellt die Veränderungsrate des Eröffnungskurses verglichen mit der niedrigsten
Verlaufskurve dar ( z.B. nehmen wir eine Amplitude = 1.015)
IF Time = StartingTime THEN
StartingPrice = Close
ENDIF
Price = StartingPrice - AverageTrueRange[10]
TrailingStop = Amplitude*Highest[15](Price)
RETURN TrailingStop COLOURED (255, 0, 0) AS "Trailing take profit"
42 / 56
K a p i t e l I V: Ü b u n g e n
Kapitel IV: Übungen
Candlestick-Muster
Aufwärts-Kurslücke oder Abwärts-Kurslücke
Die Kerzen können schwarz oder weiß sein
Eine Kurslücke wird durch diese zwei Bedingungen definiert:
(das aktuelle Tief liegt über dem Höchstkurs der letzten Kerze) oder (das aktuelle Hoch liegt unter
dem Tiefstkurs der letzten Kerze)
der absolute Wert vom ((aktuellen Tief – Hoch der letzten Kerze)/ das Hoch der letzten Kerze) ist
immer größer als der Ausschlag) oder ((das aktuelle Hoch – Tief der letzten Kerze)/das Tief der letzten
Kerze ) ist immer größer als der Ausschlag)
43 / 56
K a p i t e l I V: Ü b u n g e n
//Initialisierung der Amplitude
Amplitude = 0.001
//Initialisierung des Detektors
Detector = 0
//Aufwärts-Kurslücke
//erste Bedingung der Existenz einer Kurslücke
IF Low > High[1] THEN
//zweite Bedingung der Existenz einer Kurslücke
IF ABS((Low -High[1])/High[1]) > Amplitude THEN
//Verhalten des Detektors
Detector = 1
ENDIF
ENDIF
//Abwärts-Kurslücke
//erste Bedingung der Existenz einer Kurslücke
IF High < Low[1] THEN
//zweite Bedingung der Existenz einer Kurslücke
IF ABS((High - Low[1])/Low[1]) > Amplitude THEN
//Verhalten des Detektors
Detector = -1
ENDIF
ENDIF
//Anzeige des Ergebnisses
RETURN Detector AS "Gap detection"
44 / 56
K a p i t e l I V: Ü b u n g e n
Doji (flexible Version)
In diesem Code definieren wire in Doji Candlestick mit einer Spanne von (Hoch –
Schluss) ist größer als 5x der absolute Wert von (Eröffnung-Schluss).
Doji = Range > ABS(Open-Close)*5
RETURN Doji AS "Doji"
Doji (strenge Version)
Wir definieren den Doji mit Schlußkurs gleich dem Eröffnungskurs.
Doji = (Open = Close)
RETURN Doji AS "Doji"
45 / 56
K a p i t e l I V: Ü b u n g e n
Indikatoren
BODY MOMENTUM
Der Body Momentum wird mathematisch definiert durch:
BodyMomentum = 100*BodyUp / (BodyUp + BodyDown)
BodyUp zählt die Balken, von denen der Schlusskurs während einer bestimmten Periode über dem
Eröffnungskurs liegt.
BodyDown zählt die Balken, von denen der Eröffnungskurs während einer bestimmten Periode über dem
Schlusskurs liegt.
Periods = 14
b = Close - Open
IF BarIndex > Periods THEN
Bup= 0
Bdn= 0
FOR i=1 TO Periods
IF b[i] > 0 THEN
Bup = Bup+1
ELSIF b[i] < 0 THEN
Bdn = Bdn+1
ENDIF
NEXT
BM =(Bup/(Bup+Bdn))*100
ELSE
BM = Undefined
ENDIF
RETURN BM AS "Body Momentum"
46 / 56
K a p i t e l I V: Ü b u n g e n
ELLIOT WAVE OSCILLATOR
Der Elliot-Wave-Oszillator misst die Differenz zwischen zwei Gleitenden Durchschnitten.
Parameter:
a: Abwärtsperioden des GD (5 in der Grundeinstellung)
b: Aufwärtsperioden des GD (35 in der Grundeinstellung)
Dieser Oszillator erlaubt zwischen einer Welle 3 und einer Welle 5 nach der Elliot-Wellen-Theorie zu
unterscheiden.
Der Abwärts-GD zeigt die kurzfristige Abwärtsbewegung des Kurses,
längerfristigen Trend.
der aufwärts gerichtete GD den
Wenn die Kurse die Welle 3 bilden, steigen die Kurse stark. Das schlägt sich in einem hohen Wert im Elliot
Wave Oszillator nieder.
In der Welle 5 fallen die Kurse langsamer und der Oszillator zeigt niedrigere Werte an.
RETURN Average[5](MedianPrice) - Average[35](MedianPrice) AS "Elliot Wave Oscillator"
Williams %R
Dieser Indikator ähnelt sehr dem Stochastik Oszillator. Um ihn zu zeichnen, müssen wir 2 Linien definieren:
1) Die Linie des höchsten Hochs über 14 Perioden.
2) Die Linie mit dem niedrigsten Tief über 14 Perioden.
Die %R Linie wird mit dieser Formel definiert: (Close – Lowest Low ) / (Highest High –Lowest Low) * 100
HighestH = Highest[14](High)
LowestL = Lowest[14](Low)
MyWilliams = (Close – LowestL ) / ( HighestH – LowestL )* 100
RETURN MyWilliams AS "Williams %R"
Bollinger Bands
Das mittlere Band ist ein einfacher Gleitender Durchschnitt mit Periode 20 auf Schlusskursbasis.
Das obere Band ist das mittlere Band + die zweifache Standardabweichung mit einer Periode von 20 auf
Schlusskursbasis.
Das untere Band ist das mittlere Band - die zweifache Standardabweichung mit einer Periode von 20 auf
Schlusskursbasis.
a = Average[20](Close)
//Wir definieren die Standardabweichung
StdDeviation = STD[20](Close)
Bsup = a + 2 * StdDeviation
Binf = a - 2 * StdDeviation
RETURN a AS "Average", Bsup AS "Bollinger Up" , Binf AS "Bollinger Down"
47 / 56
Index
Index
A
CODE
SYNTAX
FUNKTION
Abs
Abs(a)
Mathematische Funktion "Absoluter Wert" von
AccumDistr
AccumDistr(close)
Klassische Kumulierung/Verlaufs Indikator
ADX
ADX[N]
Indikator Average Directional Index oder "ADX"
von n Perioden
ADXR
ADXR[N]
Indikator Average Directional Index Rate oder
"ADXR" von n Perioden
AND
a AND b
Verknüpfung AND Operator
AroonDown
AroonDown[N]
Aroon Down Indikator von n Perioden
AroonUp
AroonUp[N]
Aroon Up Indikator von n Perioden
Atan
Atan(a)
Mathematische Funktion "Arctangent" von
AS
RETURN Result AS
"ResultName"
Instruktion zur Bennenung einer Linie oder
Indikators im Chart. Verwendet mit "RETURN".
Average
Average[N](price)
Einfacher gleitender Durchschnitt mit n
Perioden
AverageTrueRange
AverageTrueRange[N](price)
"Average True Range" - True Range geglättet
nach der Wilder Methode
CODE
SYNTAX
FUNKTION
BarIndex
BarIndex
zeigt an, wieviele Kerzen aller geladener Daten
angezeigt werden
BollingerBandWidth
BollingerBandWidth[N](price)
Bollinger Bandbreite Indikator
BollingerDown
BollingerDown[N](price)
Unteres Bollingerband
BollingerUp
BollingerUp[N](price)
Oberes Bollingerband
BREAK
(FOR...DO...BREAK...NEXT)
or
(WHILE...DO...BREAK...WEND)
Instruktion bewirkt einen Abbruch der FOR
oder WHILE Schleife
B
48 / 56
Index
C
CODE
SYNTAX
FUNKTION
CALL
myResult = CALL
myFunction
Ruft einen benutzerdefinierten Indikator auf,
um diesen im Programm zu verwenden
CCI
CCI[N](price) or CCI[N]
Commodity Channel Index Indikator
ChaikinOsc
ChaikinOsc[Ch1, Ch2](price)
Chaikin Oszillator
Chandle
Chandle[N](price)
Chande Momentum Oszillator
ChandeKrollStopUp
ChandeKrollStopUp[Pp, Qq,
X]
Chande und Kroll Protection Stopp für Long
Positionen
ChandeKrollStopDown
ChandeKrollStopDown[Pp,
Qq, X]
Chande und Kroll Protection Stopp für Short
Positionen
Close
Close[N]
Schlußkurs der aktuellen Kerze oder der n
letzten Kerze
COLOURED
RETURN Result
COLOURED(R,G,B)
Färbt einer eine Chartlinie mit einer selbst
defnierten Farbe nach RGB
COS
COS(a)
Kosinus Funktion
Crosses Over
a Crosses Over b
Boolean Operator überprüft, ob eine Linie eine
Andere von unten nach oben gekreuzt hat
Crosses Under
a Crosses Under b
Boolean Operator überprüft, ob eine Linie eine
Andere von oben nach unten gekreuzt hat
CUMSUM
CUMSUM(price)
Errechnet einen bestimmten Kurs anhand der
ganzen geladenen Daten
CurrentDayOfWeek
CurrentDayOfWeek
Abbildung des aktuellen Tages der Woche
CurrentHour
CurrentHour
Abbildung der aktuellen Stunde
CurrentMinute
CurrentMinute
Abbildung der aktuellen Minute
CurrentMonth
CurrentMonth
Abbildung des aktuellen Monats
CurrentSecond
CurrentSecond
Abbildung der aktuellen Sekunde
CurrentTime
CurrentTime
Abbildung der aktuellen Zeit (HHMMSS)
CurrentYear
CurrentYear
Abbildung des aktuellen Jahres
CustomClose
CustomClose[N]
Bedingung anpassbar im Einstellungsfenster
des Charts (Standard: Schlusskurs)
Cycle
Cycle(price)
Kreis Indikator
49 / 56
Index
D
CODE
SYNTAX
FUNKTION
Date
Date[N]
Gibt das Datum von jedem im Chart geladenen
Balken aus
Day
Day[N]
Gibt den Tag von jedem im Chart geladenen
Balken aus
Days
Days[N]
Zähler der Tage seit 1900
DayOfWeek
DayOfWeek[N]
Wochentag von jedem Balken
Dclose
Dclose(N)
Schlusskurs vom n-ten Tag vor dem heutigen Tag
DEMA
DEMA[N](price)
Doppelter exponentieller Gleitender
Durchschnitt
Dhigh
Dhigh(N)
Hoch des n-ten Balkens vor dem aktuellen Balken
DI
DI[N](price)
Abbildung von DI+ minus DI-
DIminus
Diminus[N](price)
Abbildung des DI- Indikators
Diplus
Diplus[N](price)
Abbildung des DI+ Indikators
Dlow
Dlow(N)
Tiefstkurs des n-ten Tages vor dem heutigen Tag
DO
See FOR and WHILE
Optionaler Befehl in der FOR und WHILE
Schleife zur Definition der Schleifenaktion
Dopen
Dopen(N)
Eröffnungskurs des n-ten Tages vor dem
heutigen Tag
DOWNTO
See FOR
Befehl in der FOR Schleife, um in absteigender
Reihenfolge die Schleife auszuführen
DPO
DPO[N](price)
Detrented Price Oszillator
CODE
SYNTAX
FUNKTION
EaseOfMovement
EaseOfMovement[I]
Ease of Movement Indikator
ELSE
See IF/THEN/ELSE/ENDIF
Befehl wird verwendet, um die zweite
Bedingung der IF-bedingten Angabe
aufzurufen
ELSEIF
See IF/THEN/ELSE/ENDIF
Steht für ELSE IF (wird innerhalb der
bedingten Schleife verwendet)
EMV
EMV[N]
Ease of Movement Value Indikator
ENDIF
See IF/THEN/ELSE/ENDIF
End-Befehl von IF-bedingter Angabe
EndPointAverage
EndPointAverage[N](price)
Endpunkt des Gleitenden Durchschnitts von einer
Exp
Exp(a)
Mathematische Funktion "Exponentiell"
ExponentialAverage
ExponentialAverage[N](price)
Exponentieller Gleitender Durchschnitt
E
50 / 56
Index
F-G
CODE
SYNTAX
FUNKTION
FOR/TO/NEXT
FOR i =a TO b DO a NEXT
FOR Schleife (berechnet alle Werte in an- (TO)
oder absteigender Reihenfolge (DOWNTO))
ForceIndex
ForceIndex(price)
Force Index Indikator (ermittelt wer den Markt
dominiert (Käufer oder Verkäufer)
CODE
SYNTAX
FUNKTION
High
High[N]
Hoch des aktuellen Balkens oder des n-t
letzten Balkens
Highest
Highest[N](price)
Höchster Kurs über eine vorher definierte Anzahl
von Balken
HistoricVolatility
HistoricVolatility[N](price)
Historische Volatilität (oder statistische
Volatilität)
Hour
Hour[N]
Abbildung der Stunde von jedem im Chart
geladenen Balken
CODE
SYNTAX
FUNKTION
IF/THEN/ENDIF
IF a THEN b ENDIF
Gruppe von bedingten Anweisungen ohne eine
zweite Anweisung
IF/THEN/ELSE/ENDIF
IF a THEN b ELSE c ENDIF
Gruppe von bedingten Anweisungen
IntradayBarIndex
IntradayBarIndex[N]
Zählt, wieviele Balken an einem Tag angezeigt
werden, anhand der ganzen geladenen Daten
CODE
SYNTAX
FUNKTION
LinearRegression
LinearRegression[N](price)
Linearer Regressions Inidkator
LinearRegressionSlope
LinearRegressionSlope[N]
(price)
Steigung des Linearen Regressions Inidkators
Log
Log(a)
Mathematische Funktion "Neperian
Logarithmus" von einer
H
I-J-K
L
51 / 56
Index
Low
Low[N]
Tief des aktuellen Balkens oder von dem n-t
letzten Balken
Lowest
Lowest[N](price)
Tiefstkurs über eine vorher definierte Anzahl
von Balken
CODE
SYNTAX
FUNKTION
MACD
MACD[S,L,Si](price)
Moving Average Convergence Divergence
(MACD) als Diagrammform
MACDline
MACDLine[S,L](price)
MACD Linien Indikator
MassIndex
MassIndex[N]
Mass Index Indikator angewandt über N
Balken
Max
Max(a,b)
Mathematische Funktion "Maximum"
MedianPrice
MedianPrice
Durchschnitt vom Hoch und vom Tief
Min
Min(a,b)
Mathematische Funktion "Minimum"
Minute
Minute
Abbildung der Minute von jedem im Chart
geladenen Balken
Mod
a Mod b
Mathematische Funktion "Rest der Division"
Momentum
Momentum[N]
Momentum Indikator (Schluss – Schluss des nt letzten Balken)
MoneyFlow
MoneyFlow[N](price)
MoneyFlow Indikator (Ergebnis zwischen -1
und 1)
MoneyFlowIndex
MoneyFlowIndex[N]
MoneyFlow Index Indikator
Month
Month[N]
Abbildung des Monats von jedem im Chart
geladenen Balken
CODE
SYNTAX
FUNKTION
NEXT
See FOR/TO/NEXT
End Befehl für die FOR Schleife
NOT
NOT a
Logischer Operator NOT
M
N
52 / 56
Index
O
CODE
SYNTAX
FUNKTION
OBV
OBV(price)
On-Balance-Volume Indikator
ONCE
ONCE VariableName =
VariableValue
Einführung einer Definitionsanweisung, welche
nur einmal ausgeführt wird
Open
Open[N]
Eröffung des aktuellen Balkens oder des n-t
letzten Balkens
OpenOfNextBar
OpenOfNextBar[N]
Eröffung des Balkens, welcher dem n-ten
Balken folgt
OR
a OR b
Logischer Operator OR
CODE
SYNTAX
FUNKTION
PriceOscillator
PriceOscillator[S,L](price)
Prozentualer Preis Oszillator
PositiveVolumeIndex
PriceVolumeIndex(price)
Positiver Volumen Index Indikator
PVT
PVT(price)
Preis Volumen Trend Indikator
CODE
SYNTAX
FUNKTION
R2
R2[N](price)
R-zum Quadrat Indikator (Fehlerquote der
linearen Regression vom Kurs)
Range
Range[N]
berechnet die Spanne (Hoch minus Tief)
REM
REM comment
Einführung einer Bemerkung
Repulse
Repulse[N](price)
Repulse Indikator (misst die Stärke der Käufer
und Verkäufer für jede Kerze)
RETURN
RETURN Result
Anweisung gibt das Ergebnis aus
ROC
ROC[N](price)
Preisrate des Change Indikators
RSI
RSI[N](price)
Relativer Stärke Index Indikator
Round
Round(a)
Mathematische Funktion "Rundet zur nächsten
ganzen Zahl"
P-Q
R
53 / 56
Index
S
CODE
SYNTAX
FUNKTION
SAR
SAR[At,St,Lim]
Parabolic SAR Indikator
SARatdmf
SARatdmf[At,St,Lim](price)
Geglätteter Parabolic SAR Indikator
Sin
Sin(a)
Mathematische Funktion "Sinus"
Sgn
Sgn(a)
Mathematische Funktion "Zeichen von" einem
(ist positiv oder negativ)
SMI
SMI[N,SS,DS](price)
Stochastik Momentum Index Indikator
SmoothedStochastic
SmoothedStochastic[N,K]
(price)
Geglätteter Stochastik
Square
Square(a)
Mathematische Funktion "zum Quadtrat"
Sqrt
Sqrt(a)
Mathematische Funktion "Quadratwurzel" von
STD
STD[N](price)
Statistische Funktion "Standardabweichung"
STE
STE[N](price)
Statistische Funktion "Standard Fehler"
Stochastic
Stochastic[N,K](price)
%K Linie des Stochastik Indikators
Summation
Summation[N](price)
Errechnet einen bestimmten Preis über der N-t
lezten Kerze
SuperTrend
SuperTrend[STF,N]
Super Trend Indikator
CODE
SYNTAX
FUNKTION
Tan
Tan(a)
Mathematische Funktion "Tangens" von
TEMA
TEMA[N](price)
Dreifacher exponentieller Gleitender
Durchschnitt
THEN
See IF/THEN/ELSE/ENDIF
Anweisung folgt der ersten Bedingung von "IF"
Time
Time[N]
Abbildung der Zeit von jedem im Chart
geladenen Balken
TimeSeriesAverage
TimeSeriesAverage[N](price)
Zeitliche Serie Gleitender Durchschnitt
TO
See FOR/TO/NEXT
Richtungsanweisung in der "FOR" Schleife
Today
Today[N]
Datum des n-Perioden Balkens vor dem
aktuellen Balken
TotalPrice
TotalPrice[N]
(Schluss + Eröffnung + Hoch + Tief)/4
TR
TR(price)
True Range Indikator
TriangularAverage
TriangularAverage[N](price)
Dreieckiger Gleitender Durchschnitt
TRIX
TRIX[N](price)
Dreifach geglätteter exponentieller Gleitender
Durchschnitt
TypicalPrice
TypicalPrice[N]
Abbildung des Durchschnittskursese
(Durchschnitt vom Hoch, Tief und Schluss)
T
54 / 56
Index
U
CODE
SYNTAX
FUNKTION
Undefined
a = Undefined
Setzt den Wert einer Variablen auf unbestimmt
CODE
SYNTAX
FUNKTION
Variation
Variation(price)
Differenz zwischen dem Schluss des letzten
Balkens und dem Schluss des aktuellen
Balkens in %
Volatility
Volatility[S, L]
Chaikin Volatilität
Volume
Volume[N]
Volumen Indikator
VolumeOscillator
VolumeOscillator[S,L]
Volume Oszillator
VolumeROC
VolumeROC[N]
Volumen des Price Rate Of Change
CODE
SYNTAX
FUNKTION
WeightedAverage
WeightedAverage[N](price)
Abbildung des gewichteten Gleitenden
Durchschnitts
WeightedClose
WeightedClose[N]
Durchschnittswert von (2*Schluss), (1*Hoch)
und (1*Tief)
WEND
See WHILE/DO/WEND
End Anweisung der WHILE Schleife
WHILE/DO/WEND
WHILE (condition) DO
(action) WEND
WHILE Schleife
WilderAverage
WilderAverage[N](price)
Abbildung des Gleitenden Durchschnitts nach
Wilder
Williams
Williams[N](close)
%R vom Williams Indikator
WilliamsAccumDistr
WilliamsAccumDistr(price)
Akkumulation/Verteilung des Williams
Indikators
V
W
55 / 56
Index
X
CODE
SYNTAX
FUNKTION
XOR
a XOR b
Logischer Operator eXclusive OR
CODE
SYNTAX
FUNKTION
Year
Year[N]
Jahr des Balkens n Perioden vor dem
aktuellen Balken
Yesterday
Yesterday[N]
Datum des Tages des vorangegangen Balkens
n Perioden vor dem aktuellen Balken
CODE
SYNTAX
FUNKTION
ZigZag
ZigZag[Zr](price)
Abbildung des Zig-Zag Indikators eingeführt in
der Eliott Wellen Theorie
ZigZagPoint
ZigZagPoint[Zp](price)
Abbildung des Zig-Zag Indikators der Eliott
Wellen Theorie berechnet auf Zp Punkte
Y
Z
Weitere
CODE
FUNKTION
+
Additions Anweisung
-
Subtraktions Anweisung
*
Multiplikations Anweisung
/
Divisions Anweisung
=
Istgleich Anweisung
<>
Differenz Anweisung
<
Strenge Unterlegenheits Anweisung
>
Strenge Überlegensheits Anweisung
<=
Unterlegenheits Anweisung
>=
Überlegensheits Anweisung
//
Leitet eine Kommantar Zeile ein
56 / 56

Documents pareils