Variablen und eigene Berechnungen
Du berechnest aus den Kerzendaten die Handelsspanne und den Mittelkurs und stellst die Ergebnisse dar.
Wenn der Höchstkurs einer Kerze 108 und ihr Tiefstkurs 101 beträgt, ist die Differenz 7. Diese Kursspanne berechnen und zeichnen wir für jede Kerze.
Das zweite Programm berechnet die Mitte zwischen den beiden Kursen. In beiden Beispielen arbeiten wir mit Variablen und einfachen Rechenoperationen.
Was bedeutet eine Kerze?
Eine Kerze fasst die Daten eines Zeitraums zusammen. Dessen Länge bestimmt der Zeitrahmen. Bei Stundendaten gehört beispielsweise jede Kerze zu einer Stunde.
Du begegnest fünf grundlegenden Werten:
open: der Eröffnungskurs des Zeitraums;high: der Höchstkurs des Zeitraums;low: der Tiefstkurs des Zeitraums;close: der Schlusskurs des Zeitraums;volume: das Handelsvolumen des Zeitraums in der vom Datenanbieter verwendeten Einheit.
Aus ihren englischen Anfangsbuchstaben ergibt sich OHLCV. In den ersten Beispielen des Buchs arbeiten wir mit Beispieldaten bereits abgeschlossener Kerzen.
close ist immer der Schlusskurs der Kerze, die das Programm gerade verarbeitet. Bei der nächsten Kerze verwendet es deren Schlusskurs. Dasselbe gilt für die übrigen Grunddaten.
Ein wenig Geschichte: Woher kommen japanische Kerzen?
Die Wurzeln der Kerzendarstellung liegen in den japanischen Reismärkten des 18. Jahrhunderts. Aus den dort entstandenen Methoden zur Kursanalyse entwickelten sich im 19. Jahrhundert die Kerzencharts. Steve Nison machte sie mit seinem 1991 erschienenen Buch Japanese Candlestick Charting Techniques einem breiteren westlichen Publikum bekannt.
Der dickere „Körper“ einer Kerze zeigt den Bereich zwischen Eröffnungs- und Schlusskurs. Die dünnen „Dochte“ markieren den Höchst- und Tiefstkurs des Zeitraums.
Historischer Hintergrund und Abbildungen: AAII Journal (auf Englisch).
Berechne die Spanne
Beträgt der Höchstkurs 108 und der Tiefstkurs 101, hat sich der Kurs innerhalb einer Spanne von 7 Einheiten bewegt:
108 − 101 = 7
Im Code schreiben wir das so:
candle_range = high - lowhigh - low ist ein Ausdruck: Das Programm wertet ihn aus und erzeugt ein Ergebnis. - bedeutet Subtraktion.
candle_range ist der Name einer Variablen. = weist ihr das Ergebnis des Ausdrucks auf der rechten Seite zu. Diesen Vorgang nennt man Zuweisung.
Lies die Zeile so: „Berechne die Differenz von high und low und nenne das Ergebnis candle_range.“ Danach kannst du den Wert in den folgenden Programmzeilen unter diesem Namen verwenden.
Wähle einen verständlichen Namen
candle_range erklärt, dass der Wert die Spanne einer Kerze darstellt. Ein Name wie x hilft beim Lesen des Codes weniger.
Im Buch verwenden wir englische Variablennamen in Kleinbuchstaben und trennen Wörter mit Unterstrichen. Ein Name darf nicht mit einer Zahl beginnen und kein Leerzeichen enthalten. candle_range und Candle_range wären unterschiedliche Namen.
Warum verwenden wir englische Namen ohne Umlaute und Akzente?
Die Schlüsselwörter der Sprache und die Namen in der Pyne-Bibliothek beruhen ebenfalls auf englischen Wörtern, zum Beispiel def, close und plot. Englische Variablennamen passen dazu und erleichtern das Lesen auch Menschen, die kein Deutsch sprechen. Das hilft, wenn du dein Programm später weitergibst oder mit anderen daran arbeitest.
Pyne code erlaubt auch Umlaute und andere Buchstaben außerhalb des englischen Alphabets in Variablennamen. Englische Namen ohne Umlaute und Akzente sind daher eine Empfehlung zur Benennung. Sie lassen sich auf anderssprachigen Tastaturen leichter eingeben und erleichtern den internationalen Austausch von Code. Deshalb verwenden wir diese Form im Buch durchgehend.
Erstelle einen Indikator mit eigenem Panel
Lege im Ordner scripts eine Datei namens candle_range.py an und schreibe dieses Programm hinein:
"""
@pyne edge
"""
from pynecore.lib import color, high, low, plot, script
@script.indicator("Candle Range", overlay=False)
def main():
candle_range = high - low
plot(candle_range, "Range", color=color.orange, linewidth=2)Die erste Zeile von main() berechnet den Wert; die zweite übergibt ihn unter dem Namen candle_range an plot. Die Zuweisung muss vor der Verwendung des Werts stehen.
overlay=False fordert ein eigenes Panel an. So siehst du die Spanne auf ihrer eigenen Skala: Eine Spanne von beispielsweise 7 Einheiten und ein Kurs um 100 haben unterschiedliche Größenordnungen.
Speichere das Programm und führe es auf denselben Demodaten aus.

Wie liest du das Ergebnis?
Höhere Punkte stehen für eine größere Kursdifferenz, niedrigere Punkte für eine kleinere Spanne. Die Berechnung verwendet den vollständigen Höchst- und Tiefstkurs der Kerze, einschließlich der Dochte.
Eine steigende und eine fallende Kerze können dieselbe Spanne haben. Deshalb verrät dir dieser Wert nicht die Richtung der Kursbewegung. high ist mindestens so groß wie low; bei korrekten Kerzendaten ist das Ergebnis daher nicht negativ.
Was macht die Variable bei der nächsten Kerze?
Das Programm führt für jede verarbeitete Kerze diese beiden Schritte erneut aus:
- Es berechnet
candle_rangeaushighundlowdieser Kerze. plotstellt diesen Wert an der Position der Kerze dar.
Zum Beispiel:
- Erste Kerze:
high= 108,low= 101, alsocandle_range= 7. - Zweite Kerze:
high= 110,low= 106, alsocandle_range= 4. - Dritte Kerze:
high= 109,low= 103, alsocandle_range= 6.
Daraus entstehen im Chart drei Punkte mit den Werten 7, 4 und 6. Die Variable erhält auf jeder Kerze das Ergebnis der aktuellen Berechnung.
Den Zugriff auf frühere Kerzenwerte und das Speichern von Zustand behandeln wir später.
Addition, Multiplikation und Division
Im Code verwenden wir folgende Zeichen für einfache Berechnungen:
+: Addition;-: Subtraktion;*: Multiplikation;/: Division.
Multiplikation und Division werden vor Addition und Subtraktion ausgeführt. Mit Klammern legst du fest, was zuerst berechnet werden soll.
Die Mitte der Kursspanne:
midpoint = (high + low) / 2Zuerst addieren wir die beiden Kurse und teilen das Ergebnis durch zwei. Bei high = 108 und low = 101 beträgt die Mitte 104,5.
Achte auf den Dezimalpunkt: Im Code steht 104.5, obwohl du in einem deutschen Text 104,5 schreiben würdest. Das Komma hat im Code andere Aufgaben, etwa das Trennen von Funktionsparametern.
Zeichne den Mittelkurs
Lege eine Datei namens candle_midpoint.py an:
"""
@pyne edge
"""
from pynecore.lib import color, high, low, plot, script
@script.indicator("Candle Midpoint", overlay=True)
def main():
midpoint = (high + low) / 2
plot(midpoint, "Midpoint", color=color.purple, linewidth=2)Hier steht wieder overlay=True. Wir möchten den Mittelkurs auf derselben Preisskala wie die Kerzen sehen.

Wähle nach der Ausführung eine Kerze aus und betrachte den Linienpunkt an ihrer Position. Er liegt in der Mitte der gesamten Spanne einschließlich der Dochte. Von der Mitte des Kerzenkörpers kann er abweichen, da diese durch Eröffnungs- und Schlusskurs bestimmt wird.
Warum sind die Klammern wichtig?
Die folgenden Ausdrücke beschreiben unterschiedliche Berechnungen:
(high + low) / 2
high + low / 2Die zweite Zeile halbiert zuerst nur low und addiert dann high. Mit den Werten 108 und 101 von oben erhieltest du 158,5. Das ist nicht die Mitte der beiden Kurse.
Beide Ausdrücke sind syntaktisch korrekt und liefern dennoch unterschiedliche Ergebnisse. An einem von Hand ausrechenbaren Beispiel kannst du schnell prüfen, ob du das Gewünschte geschrieben hast.
Probiere es selbst aus
Zeichne die gerichtete Veränderung des Kerzenkörpers: Ziehe den Eröffnungskurs vom Schlusskurs ab.
- Die Datei soll
candle_change.pyheißen. - Der Indikator soll den Titel
"Candle Change"tragen und in einem eigenen Panel erscheinen. - Das Berechnungsergebnis soll
candle_changeheißen. - Die Darstellung soll
"Change"heißen.
Berechne vor der Ausführung das erwartete Ergebnis für drei Fälle:
open= 100,close= 104;open= 100,close= 97;open= 100,close= 100.
Lösung der Aufgabe
Die drei Ergebnisse sind 4, −3 und 0. Ein positiver Wert bedeutet einen höheren Schlusskurs, ein negativer einen niedrigeren Schlusskurs. Null bedeutet identische Eröffnungs- und Schlusskurse.
"""
@pyne edge
"""
from pynecore.lib import close, color, open, plot, script
@script.indicator("Candle Change", overlay=False)
def main():
candle_change = close - open
plot(candle_change, "Change", color=color.blue, linewidth=2)Die drei Programme im Vergleich
Öffne nacheinander die Programme für Spanne, Mittelkurs und Veränderung. Jedes berechnet aus OHLC-Daten eine Variable und zeichnet sie in der nächsten Zeile. Das Programm verarbeitet die Daten Kerze für Kerze. Die Unterschiede liegen in der Berechnung und der Einstellung overlay.
Im nächsten Kapitel vergleichen wir Werte zweier Kerzen: Du lernst, auf die Daten der vorherigen Kerze zuzugreifen.