Bedingungen und Markierungen
Du wählst Farben mit Vergleichen und markierst nur die Kerzen, die eine Bedingung erfüllen.
Jetzt erstellst du ein Programm, das steigende und fallende Kerzen unterscheidet. Dafür prüft es die Beziehung zwischen Eröffnungs- und Schlusskurs und zeigt das Ergebnis durch Farbe und Markierung.
Wahr oder falsch
Der Vergleich close > open ergibt True, wenn der Schlusskurs höher als der Eröffnungskurs ist, andernfalls False. Das ist ein logischer Wert mit dem Typ bool.
Der Vergleich verändert keinen der beiden Kurse. Er beantwortet lediglich eine Frage.
| Zeichen | Bedeutung | Beispiel |
|---|---|---|
> | Größer | close > open |
< | Kleiner | close < open |
>= | Größer oder gleich | close >= open |
<= | Kleiner oder gleich | close <= open |
== | Gleich | close == open |
!= | Ungleich | close != open |
= weist einer Variablen einen Wert zu, == vergleicht zwei Werte. Die Zeile bullish = close > open speichert das Ergebnis des Vergleichs in bullish.
Sind Eröffnungs- und Schlusskurs gleich, ist weder close > open noch close < open wahr. Für eine vollständige Entscheidung behandeln wir auch diesen Fall.
if, elif und else
Die Bedingung nach if entscheidet, ob der eingerückte Abschnitt ausgeführt wird:
if bullish:
line_color = color.green
elif bearish:
line_color = color.red
else:
line_color = color.grayZuerst prüfen wir die Bedingung von if. Ist sie wahr, wählen wir Grün, und die übrigen Zweige entfallen. Ist sie falsch, folgt elif. else wird ausgeführt, wenn keine vorherige Bedingung wahr war.
Am Ende jedes Zweigbeginns steht ein Doppelpunkt. Den Inhalt des Zweigs kennzeichnet eine weitere Einrückung um vier Leerzeichen. Innerhalb von main() beginnt die Zeile mit if also mit vier und die Zuweisung darin mit acht Leerzeichen.
Das vollständige Programm
Lege die Datei candle_conditions.py an:
"""
@pyne edge
"""
from pynecore.lib import close, color, location, open, plot, plotshape, script, shape
@script.indicator("Candle Conditions", overlay=True)
def main():
bullish = close > open
bearish = close < open
if bullish:
line_color = color.green
elif bearish:
line_color = color.red
else:
line_color = color.gray
plot(close, "Close", color=line_color, linewidth=2)
plotshape(bullish, "Bullish candle", style=shape.triangleup,
location=location.belowbar, color=color.green)Führe sie auf den Demodaten aus. Die Farbe der Schlusskurslinie ändert sich von Kerze zu Kerze. Unter steigenden Kerzen erscheint ein grünes Dreieck.

Das erste Argument von plotshape legt fest, wann das Zeichen erscheint. style bestimmt seine Form, location seine Lage zur Kerze. Die hier markierte Kerze hat lediglich über ihrem eigenen Eröffnungskurs geschlossen. Aus der Markierung folgt kein Kaufauftrag.
Du musst die Parameter auch hier nicht auswendig kennen: Bewege im Code den Mauszeiger auf plotshape und lies die Hilfe. Die Schritte und den Sprung zur Definition findest du im Kapitel Hilfe beim Schreiben von Code.
Der Ort der Berechnung ist wichtig
plot und plotshape laufen auf jeder Kerze. Wir ändern den darzustellenden Wert, die Farbe oder die Bedingung. So hat die Darstellung für jede Kerze ein Ergebnis.
Beim gleitenden Durchschnitt ist dieselbe Reihenfolge sinnvoll:
average = ta.sma(close, 20)
above_average = close > averageZuerst berechnen wir den Durchschnitt auf jeder Kerze. Danach verwendet ihn die Bedingung. Setze den Aufruf von ta.sma nicht in den Zweig if bullish:, denn dann liefe er nur auf steigenden Kerzen.
Solange der Anfangswert des SMA fehlt, liefert close > average kein wahres Signal. Soll der Code gesondert auf fehlende Werte reagieren, verwende na(average). average == na ist dafür kein geeigneter Test.
Mehrere Bedingungen verknüpfen
and ist wahr, wenn beide Seiten wahr sind. or ist wahr, wenn mindestens eine Seite wahr ist. not kehrt den logischen Wert um.
strong_bullish = close > open and close > close[1]Diese Bedingung verlangt gleichzeitig zwei Dinge: Die Kerze muss steigen, und der Schlusskurs muss über dem vorherigen Schlusskurs liegen. Eine steigende Kerze kann trotzdem unter dem Schlusskurs der vorherigen Kerze schließen. Deshalb sind das zwei getrennte Prüfungen.
and und or werten kurzschließend aus: Bestimmt der erste Teil bereits das Ergebnis, wird der zweite Teil nicht ausgewertet. Bei and geschieht das, wenn der erste Teil falsch ist, bei or, wenn er wahr ist. Führe Berechnungen mit Zustand deshalb in eigenen Zeilen aus und verknüpfe erst die erhaltenen logischen Werte.
Kurz zwischen Werten wählen
Du kannst die Wahl zwischen zwei Werten auch in einem Ausdruck angeben:
line_color = color.green if bullish else color.redDas wählt Grün, wenn bullish wahr ist, andernfalls Rot. Auch bei gleichem Eröffnungs- und Schlusskurs würde Rot gewählt. Soll dieser Fall grau erscheinen, bleibe bei der vollständigen Entscheidung mit drei Zweigen.
Probiere es selbst aus
Zeichne über fallenden Kerzen ein rotes, nach unten gerichtetes Dreieck. Behalte das grüne Zeichen bei. Verschärfe anschließend beide Bedingungen um den Vergleich mit dem vorherigen Schlusskurs.
Lösung der Aufgabe
bullish_signal = bullish and close > close[1]
bearish_signal = bearish and close < close[1]
plotshape(bullish_signal, "Bullish signal", style=shape.triangleup,
location=location.belowbar, color=color.green)
plotshape(bearish_signal, "Bearish signal", style=shape.triangledown,
location=location.abovebar, color=color.red)Ersetze den ursprünglichen grünen Aufruf von plotshape durch die beiden neuen. Die Farbwahl betrachtet weiterhin nur Eröffnungs- und Schlusskurs der Kerze. Die Markierungen vergleichen zusätzlich mit dem vorherigen Schlusskurs.
Suche eine ausgelassene Kerze
Suche eine steigende Kerze, die in der verschärften Variante trotzdem kein grünes Zeichen erhält. Prüfe ihren eigenen Eröffnungskurs und den vorherigen Schlusskurs. Erkläre, an welchem Teil von and die Bedingung scheitert.