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.

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 - low

high - 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.

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.

Neben dem Code von candle_range.py ist unter den Kerzen ein eigenes Panel Range zu sehen.
Die Linie Range zeigt die Differenz von high und low in einem eigenen Panel. Ein größerer Wert bedeutet eine größere Kursspanne innerhalb der Kerze.

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:

  1. Es berechnet candle_range aus high und low dieser Kerze.
  2. plot stellt diesen Wert an der Position der Kerze dar.

Zum Beispiel:

  • Erste Kerze: high = 108, low = 101, also candle_range = 7.
  • Zweite Kerze: high = 110, low = 106, also candle_range = 4.
  • Dritte Kerze: high = 109, low = 103, also candle_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) / 2

Zuerst 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.

Neben candle_midpoint.py zeigt der Chart die Linie Midpoint, die die Mittelkurse der Kerzen verbindet.
Die Linie Midpoint markiert bei jeder Kerze die Mitte zwischen high und low.

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 / 2

Die 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.

  1. Die Datei soll candle_change.py heißen.
  2. Der Indikator soll den Titel "Candle Change" tragen und in einem eigenen Panel erscheinen.
  3. Das Berechnungsergebnis soll candle_change heißen.
  4. 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.