Most olyan programot készítesz, amely különbséget tesz az emelkedő és csökkenő gyertyák között. Ehhez megvizsgálja a nyitó- és záróár kapcsolatát, majd az eredményt színnel és jellel mutatja meg.

Igaz vagy hamis

A close > open összehasonlítás eredménye True, ha a záróár nagyobb a nyitóárnál, különben False. Ez logikai érték, típusa bool.

Az összehasonlítás nem változtatja meg egyik árat sem. Csak választ ad egy kérdésre.

JelJelentésPélda
>Nagyobbclose > open
<Kisebbclose < open
>=Nagyobb vagy egyenlőclose >= open
<=Kisebb vagy egyenlőclose <= open
==Egyenlőclose == open
!=Nem egyenlőclose != open

Az = értéket ad egy változónak, a == két értéket hasonlít össze. A bullish = close > open sor a vizsgálat eredményét teszi a bullish változóba.

Ha a nyitóár és a záróár azonos, sem a close > open, sem a close < open nem igaz. A teljes döntéshez ezt az esetet is kezeljük.

Az if, elif és else

Az if utáni feltétel dönti el, hogy lefusson-e a behúzott rész:

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

Először az if feltételét vizsgáljuk. Ha igaz, a zöld színt választjuk, és a többi ág kimarad. Ha hamis, az elif következik. Az else akkor fut le, ha egyik korábbi feltétel sem volt igaz.

Az egyes ágak végén kettőspont áll. Az ág belsejét újabb négy szóköznyi behúzás jelöli. A main() belsejében tehát az if sora négy, a benne levő értékadás nyolc szóközzel kezdődik.

A teljes program

Hozd létre a candle_conditions.py fájlt:

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

Futtasd a demóadaton. A záróár vonalának színe gyertyánként változik. Az emelkedő gyertyák alatt zöld háromszög jelenik meg.

A candle_conditions.py grafikonján változó színű záróárvonal és zöld háromszögjelölések láthatók.
A logikai feltétel színt választ, és az emelkedő gyertyák alatt háromszöget rajzol.

A plotshape első argumentuma azt mondja meg, mikor jelenjen meg a jel. A style a jel alakját, a location a gyertyához viszonyított helyét szabályozza. A jelölt gyertya itt egyszerűen magasabban zárt a saját nyitóáránál. A jelölésből nem következik vételi utasítás.

A paramétereket itt sem kell fejből tudnod: vidd az egeret a plotshape nevére a kódban, és nézd meg a súgóját. A lépéseket a Segítség kódírás közben fejezetben találod, a definícióhoz ugrás lehetőségével együtt.

A számítás helye számít

A plot és a plotshape minden gyertyán lefut. A kirajzolandó értéket, színt vagy feltételt változtatjuk. Így a megjelenítésnek minden gyertyáról van eredménye.

Ugyanez a jó sorrend a mozgóátlagnál:

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

Először minden gyertyán kiszámítjuk az átlagot. A feltétel utána használja. A ta.sma hívást ne helyezd az if bullish: ág belsejébe, mert akkor csak az emelkedő gyertyákon kapna végrehajtást.

Az SMA kezdeti hiányzó értéke mellett a close > average feltétel nem ad igaz jelzést. Ha a kódnak külön kell reagálnia a hiányra, a na(average) vizsgálatot használd. A average == na nem megfelelő hiányvizsgálat.

Több feltétel összekapcsolása

Az and akkor igaz, ha mindkét oldala igaz. Az or akkor igaz, ha legalább az egyik igaz. A not megfordítja a logikai értéket.

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

Ez a feltétel két dolgot kér egyszerre: a gyertya legyen emelkedő, és a záróár legyen magasabb az előző záróárnál. Egy emelkedő gyertya még zárhat az előző gyertya záróára alatt, ezért a két vizsgálat külön feltétel.

Az and és az or rövidre zárja a vizsgálatot: ha az első rész már eldönti az eredményt, a második rész nem értékelődik ki. Az and esetén ez akkor történik, ha az első rész hamis, az or esetén pedig akkor, ha az első rész igaz. Állapotot használó számítást ezért külön sorban futtass, és a kapott logikai értékeket kapcsold össze.

Rövid értékválasztás

Két érték közötti választást egy kifejezésben is megadhatsz:

line_color = color.green if bullish else color.red

Ez zöldet választ, ha bullish igaz, különben pirosat. Azonos nyitó- és záróárnál is pirosat adna. Ha azt az esetet szürkével akarod jelölni, maradj a teljes háromágú döntésnél.

Próbáld ki önállóan

Rajzolj piros lefelé mutató háromszöget a csökkenő gyertyák fölé. A zöld jel maradjon meg. Ezután szigorítsd mindkét jel feltételét az előző záróárhoz képest is.

A feladat megoldása
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)

Az eredeti zöld plotshape hívást cseréld a két új hívásra. A színválasztás továbbra is csak a gyertya nyitó- és záróárát nézi. A jelölések már az előző záróárral is összehasonlítanak.

Keress egy kihagyott gyertyát

Keress egy emelkedő gyertyát, amely mégsem kapott zöld jelet a szigorított változatban. Ellenőrizd a saját nyitóárát és az előző záróárat. Mondd el, az and melyik részén bukott el a feltétel.