Változók és saját számítások
A gyertyák adataiból tartományt és középárat számítasz, majd megjeleníted az eredményt.
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.
Egy kis történelem: honnan jönnek a japán gyertyák?
A gyertyás ábrázolás gyökerei a 18. századi japán rizspiacokhoz vezetnek. Az ott kialakult árfolyamelemzési módszerekből a 19. században fejlődtek ki a gyertyás grafikonok. Steve Nison az 1991-ben megjelent Japanese Candlestick Charting Techniques című könyvével ismertette meg őket a szélesebb nyugati közönséggel.
A gyertya vastagabb „teste” a nyitó- és záróár közötti részt mutatja, a vékony „kanócok” pedig az időszak legmagasabb és legalacsonyabb árát jelölik.
Történeti háttér és ábrák: AAII Journal (angolul).
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 - lowA 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.
Miért használunk angol, ékezet nélküli neveket?
A nyelv kulcsszavai és a Pyne függvénytárának nevei is angol szavakra épülnek: ilyen például a def, a close vagy a plot. Az angol változónevek illeszkednek ezekhez, és a forráskódot olyanok is könnyebben megértik, akik nem beszélnek magyarul. Ez akkor is hasznos, ha később másoknak adod át a programodat, vagy közösen dolgoztok rajta.
A Pyne code ékezetes és más, nem angol betűket is megenged a változónevekben. Az angol, ékezet nélküli nevek használata tehát elnevezési ajánlás. Könnyebb őket más nyelvű billentyűzeten begépelni, és egyszerűbb megosztani a kódot nemzetközi közegben. A könyvben ezért következetesen ezt a formát használjuk.
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.

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:
- Az adott gyertya
highéslowértékéből kiszámítja acandle_rangeértékét. - A
plotezt az értéket megjeleníti az adott gyertya helyén.
Például:
- Az első gyertya:
high= 108,low= 101, ígycandle_range= 7. - A második gyertya:
high= 110,low= 106, ígycandle_range= 4. - A harmadik gyertya:
high= 109,low= 103, ígycandle_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) / 2Elő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.

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 / 2A 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.
- A fájl neve legyen
candle_change.py. - Az indikátor címe legyen
"Candle Change", és külön panelben jelenjen meg. - A számítás eredményének neve legyen
candle_change. - 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.