Teraz zbudujesz program odróżniający świece wzrostowe od spadkowych. Sprawdzi relację otwarcia i zamknięcia, a wynik pokaże kolorem i symbolem.

Prawda czy fałsz

close > open daje True, gdy zamknięcie jest większe od otwarcia, w przeciwnym razie False. To wartość logiczna typu bool.

Porównanie nie zmienia żadnej ceny. Odpowiada tylko na pytanie.

ZnakZnaczeniePrzykład
>Większeclose > open
<Mniejszeclose < open
>=Większe lub równeclose >= open
<=Mniejsze lub równeclose <= open
==Równeclose == open
!=Różneclose != open

= przypisuje, == porównuje. bullish = close > open umieszcza wynik porównania w bullish.

Przy identycznym otwarciu i zamknięciu ani close > open, ani close < open nie jest prawdą. Uwzględnimy też ten przypadek.

if, elif i else

Warunek po if rozstrzyga wykonanie wciętej części:

if bullish:
    line_color = color.green
elif bearish:
    line_color = color.red
else:
    line_color = color.gray

Najpierw sprawdzamy if. Gdy prawdziwy, wybieramy zielony, a pozostałe gałęzie pomijamy. W przeciwnym razie sprawdzamy elif. else działa, gdy żaden wcześniejszy warunek nie był prawdziwy.

Początek gałęzi kończy dwukropek, a wnętrze ma kolejne cztery spacje. W main() wiersz if ma więc cztery, a przypisanie wewnątrz osiem spacji.

Pełny program

Utwórz candle_conditions.py:

"""
@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)

Uruchom na demonstracji. Kolor linii zamknięcia zmienia się ze świecami. Pod wzrostowymi pojawiają się zielone trójkąty.

Wykres candle_conditions.py pokazuje zmienny kolor zamknięcia i zielone trójkątne oznaczenia.
Warunek logiczny wybiera kolor i rysuje trójkąt pod świecami wzrostowymi.

Pierwszy argument plotshape określa, kiedy pokazać symbol. style ustala kształt, location położenie wobec świecy. Oznaczenie mówi tylko, że świeca zamknęła się wyżej od własnego otwarcia. Nie jest instrukcją kupna.

Parametrów nie musisz pamiętać: najedź na plotshape w kodzie i przeczytaj pomoc. Kroki i przejście do definicji znajdziesz w Pomocy podczas pisania kodu.

Miejsce obliczenia ma znaczenie

plot i plotshape wykonują się na każdej świecy. Zmieniamy wartość, kolor lub warunek, dzięki czemu wyświetlanie ma wynik dla każdej świecy.

Taką kolejność stosuj też do średniej:

average = ta.sma(close, 20)
above_average = close > average

Najpierw liczymy średnią na każdej świecy, potem warunek jej używa. Nie wkładaj ta.sma do if bullish:, bo wykona się tylko na świecach wzrostowych.

Przy początkowej brakującej SMA close > average nie daje prawdziwego sygnału. Osobną reakcję na brak opisz przez na(average). average == na nie jest poprawnym sprawdzeniem.

Łączenie warunków

and jest prawdziwe, gdy obie strony są prawdziwe. or gdy co najmniej jedna. not odwraca wartość logiczną.

strong_bullish = close > open and close > close[1]

Warunek wymaga jednocześnie świecy wzrostowej i zamknięcia powyżej poprzedniego zamknięcia. Świeca wzrostowa nadal może zamknąć się poniżej poprzedniej, stąd dwie osobne kontrole.

and i or stosują skróconą ewaluację: gdy pierwszy człon rozstrzyga wynik, drugi nie jest obliczany. Dla and dzieje się to, gdy pierwszy jest fałszywy, dla or, gdy prawdziwy. Obliczenia ze stanem uruchamiaj więc w osobnych wierszach i dopiero łącz ich wyniki logiczne.

Krótki wybór wartości

Wybór między dwiema wartościami można opisać jednym wyrażeniem:

line_color = color.green if bullish else color.red

Wybiera zielony przy prawdziwym bullish, inaczej czerwony. Dla identycznych otwarcia i zamknięcia także wybrałby czerwony. Jeśli ten przypadek ma być szary, zachowaj pełną decyzję z trzema gałęziami.

Spróbuj samodzielnie

Narysuj czerwony trójkąt skierowany w dół nad świecami spadkowymi. Zachowaj zielony. Następnie zaostrz oba warunki o porównanie z poprzednim zamknięciem.

Rozwiązanie zadania
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)

Zastąp oryginalne zielone plotshape dwoma nowymi wywołaniami. Wybór koloru nadal sprawdza tylko otwarcie i zamknięcie świecy. Oznaczenia porównują też poprzednie zamknięcie.

Znajdź pominiętą świecę

Znajdź wzrostową świecę bez zielonego znaku w zaostrzonej wersji. Sprawdź jej otwarcie i poprzednie zamknięcie. Wyjaśnij, na którym członie and warunek przestał być spełniony.