Ha egy gyertya legmagasabb ára 108, a legalacsonyabb pedig 101, a kettő különbsége 7. Ezt az ártartományt fogjuk kiszámítani és kirajzolni minden gyertyánál.

A második program a két ár közepét számítja ki. Mindkét példában változókkal és egyszerű számtani műveletekkel dolgozunk.

Mit jelent egy gyertya?

Egy gyertya egy időszak adatait foglalja össze. Az időszak hosszát az idősík határozza meg. Például egy órás adaton egy gyertya egy órához tartozik.

Öt alapadattal találkozol:

  • open: az időszak nyitóára;
  • high: az időszak legmagasabb ára;
  • low: az időszak legalacsonyabb ára;
  • close: az időszak záróára;
  • volume: az időszak forgalma, az adatforrás által használt egységben.

Ezek angol kezdőbetűi adják az OHLCV rövidítést. A könyv első példáiban már lezárt gyertyák mintaadataival dolgozunk.

A close mindig annak a gyertyának a záróárát jelenti, amelyet a program éppen feldolgoz. A következő gyertyán már annak a záróárát használja. Ugyanez igaz a többi alapadatra is.

Számítsd ki a tartományt

Ha a legmagasabb ár 108, a legalacsonyabb pedig 101, az ár 7 egységnyi tartományt járt be:

108 − 101 = 7

A kódban ezt így írjuk:

candle_range = high - low

A high - low egy kifejezés: a program kiértékeli, és előállít egy eredményt. A - kivonást jelent.

A candle_range egy változó neve. Az = ehhez rendeli a jobb oldali kifejezés eredményét. Ezt a műveletet értékadásnak nevezzük.

Úgy olvasd a sort: „Számítsd ki a high és low különbségét, és nevezd az eredményt candle_range-nek.” Ezután a program további soraiban ezen a néven használhatod az értéket.

Válassz érthető nevet

A candle_range elmondja, hogy az érték egy gyertya tartománya. Egy olyan név, mint az x, kevésbé segít a kód olvasásában.

A könyvben kisbetűs, angol változóneveket használunk, a szavak között aláhúzással. A név ne kezdődjön számmal, és ne tartalmazzon szóközt. A candle_range és a Candle_range különböző nevek lennének.

Készíts külön paneles indikátort

Hozz létre egy candle_range.py nevű fájlt a scripts mappában, és írd bele ezt a programot:

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

A main() első sora kiszámítja az értéket, a második pedig a candle_range néven átadja a plot-nak. Az értékadásnak meg kell előznie az érték használatát.

Az overlay=False külön panelt kér. A tartományt így a saját skáláján láthatod: például a 7 egységnyi tartomány és a 100 körüli árfolyam eltérő nagyságrendű értékek.

Mentsd el, és futtasd a programot ugyanazon a demóadaton.

A candle_range.py kódja mellett a gyertyák alatt külön Range panel látható.
A Range vonal külön panelen mutatja a high és low különbségét. A nagyobb érték nagyobb gyertyán belüli ártartományt jelent.

Hogyan olvasd az eredményt?

A magasabb pontokhoz nagyobb árkülönbség tartozik. Az alacsonyabb pontok kisebb tartományt jelölnek. A számítás a gyertya teljes legmagasabb és legalacsonyabb árát használja, a kanócokat is beleszámítva.

Emelkedő és csökkenő gyertyának is lehet ugyanolyan tartománya, ezért ebből az értékből az ármozgás irányát nem tudod megállapítani. A high legalább akkora, mint a low, így helyes gyertyaadat esetén az eredmény nem negatív.

Mit csinál a változó a következő gyertyán?

A program minden feldolgozott gyertyán újra elvégzi ezt a két lépést:

  1. Az adott gyertya high és low értékéből kiszámítja a candle_range értékét.
  2. A plot ezt az értéket megjeleníti az adott gyertya helyén.

Például:

  • Az első gyertya: high = 108, low = 101, így candle_range = 7.
  • A második gyertya: high = 110, low = 106, így candle_range = 4.
  • A harmadik gyertya: high = 109, low = 103, így candle_range = 6.

A grafikonon ebből a 7, 4, 6 értékekhez tartozó három pont készül. A változó minden gyertyán az aktuális számítás eredményét kapja meg.

Az előző gyertyák értékeinek elérésével és a megőrzött állapottal később foglalkozunk.

Összeadás, szorzás és osztás

A kódban a következő jelekkel végzünk egyszerű számításokat:

  • +: összeadás;
  • -: kivonás;
  • *: szorzás;
  • /: osztás.

A szorzás és osztás az összeadás és kivonás előtt történik. Zárójellel jelezheted, mit kell előbb kiszámítani.

Az árak tartományának közepe:

midpoint = (high + low) / 2

Előbb összeadjuk a két árat, majd az eredményt elosztjuk kettővel. Ha high = 108 és low = 101, a közép 104.5.

Figyeld meg a tizedespontot: a kódban 104.5 szerepel, még akkor is, ha magyar szövegben 104,5-öt írnál. A vesszőnek a kódban más szerepe van, például a függvény paramétereit választja el.

Rajzold ki a középárat

Készíts egy candle_midpoint.py nevű fájlt:

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

Itt újra overlay=True szerepel. A középárat a gyertyákkal közös árskálán szeretnénk látni.

A candle_midpoint.py mellett a grafikonon a gyertyák középárát összekötő Midpoint vonal látható.
A Midpoint vonal minden gyertyánál a high és low közötti közepet jelöli.

Futtatás után válassz ki egy gyertyát, és nézd meg a vonal pontját a gyertya helyén. A pont a gyertya teljes, kanócokkal együtt értett tartományának közepén van. A gyertyatest közepétől eltérhet, mert azt a nyitó- és a záróár határozza meg.

Miért fontos a zárójel?

A következő két kifejezés eltérő számítást ír le:

(high + low) / 2
high + low / 2

A második sor először csak a low értékét osztja kettővel, és ehhez adja hozzá a high értékét. A fenti 108 és 101 értékekkel 158.5-öt kapnál. Ez már nem a két ár közepe.

Mindkét kifejezés szintaktikailag helyes, mégis eltérő eredményt adnak. Egy kézzel is kiszámítható példán gyorsan ellenőrizheted, hogy azt írtad-e le, amit szerettél volna.

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

Rajzold ki a gyertya testének irányított változását: a záróárból vond ki a nyitóárat.

  1. A fájl neve legyen candle_change.py.
  2. Az indikátor címe legyen "Candle Change", és külön panelben jelenjen meg.
  3. A számítás eredményének neve legyen candle_change.
  4. A rajz neve legyen "Change".

Futtatás előtt számold ki a várható eredményt három esetben:

  • open = 100, close = 104;
  • open = 100, close = 97;
  • open = 100, close = 100.
A feladat megoldása

A három eredmény: 4, −3 és 0. A pozitív érték magasabb záróárat, a negatív alacsonyabb záróárat, a nulla azonos nyitó- és záróárat jelent.

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

A három program összehasonlítása

Nyisd meg egymás után a tartományt, a középárat és a változást számító programot. Mindegyik OHLC-adatokból számít ki egy változót, amelyet a következő sorban kirajzol. Az adatokat a program gyertyánként dolgozza fel. A különbséget a számítás és az overlay beállítása adja.

A következő fejezetben már két gyertya értékeit hasonlítjuk össze: megnézzük, hogyan férhetsz hozzá az előző gyertya adataihoz.