Olvasd és módosítsd a kódot
Megérted az első program sorait, és a záróár mellé a nyitóárat is kirajzolod.
A záróár mellé most a nyitóárat is kirajzoljuk. Ehhez az előző fejezet programját bővítjük: egy új adatot kérünk a könyvtárból, és még egy rajzoló hívást írunk a kódba.
A módosítás előtt végignézzük a program sorait, hogy értsd, melyik mire való.
A kód egy pontos leírás
A programban utasításokat adsz a számítógépnek. Például: „Használd a gyertya záróárát, és jelenítsd meg kék vonallal.” A számítógép ehhez pontos neveket és írásjeleket vár.
A Pyne code-ban ezeket a Python szintaxisával írjuk le. A függvényhívások zárójelei, a kettőspontok és a sorok behúzása mind ehhez tartoznak. A következő részekben megismered a szerepüket.
Nyisd meg a második fejezetben készített first_chart.py fájlt. Ha átnevezted benne az indikátort, az nem befolyásolja a következő magyarázatot.
A fájl elején lévő Pyne-jelölés
A fájl első három sora:
"""
@pyne edge
"""A három idézőjel egy szövegblokk elejét és végét jelöli. A fájl elején ez a blokk a program leírásának is helyet adhat. A Python ezt docstringnek nevezi.
Az @pyne jelölést a PyneCore olvassa ki belőle. Ez mondja meg neki, hogy a fájl Pyne code-ot tartalmaz, és a szokásos Python-működéshez képest más szabályokat kell alkalmaznia. A PyneCore futtatás előtt átalakítja a kódot, hogy például hozzáférhessünk az előző gyertyák értékeihez, és egy változó megőrizhesse az értékét a következő gyertyára. Ezekkel külön fejezetekben foglalkozunk.
Az @pyne önmagában is érvényes jelölés. Így is kezdődhet egy Pyne code fájl:
"""
@pyne
"""Mit jelent mellette az edge?
Az edge azt jelöli, hogy a program a Pyne code meghatározott, korlátozott nyelvi részét használja. A gyertyánkénti működést az @pyne kapcsolja be; az edge azt szabja meg, milyen nyelvi elemeket és függvényeket használhatunk hozzá. A PyneIDE jelzi, ha kilépünk ezekből a keretekből.
Az @pyne jelölésű programokban a Python további lehetőségeit és könyvtárait is használhatjuk. Az @pyne edge programok a Pyne által engedélyezett eszközökre épülnek, tetszőleges Python-könyvtárakat nem importálnak. Ez teszi lehetővé, hogy olyan futtatók is feldolgozzák őket, amelyekben nincs általános Python-környezet.
A könyv összes teljes programjában megtartjuk az @pyne edge jelölést, és ezen a nyelvi kereten belül dolgozunk.
Kiegészítő magyarázat: hol legyen a jelölés? A nyitó szövegblokk legyen a fájl első utasítása, és benne az @pyne legyen az első tartalmi elem. A program leírását a jelölés után írhatod. Ha az @pyne elé kerül a leírás, a PyneCore nem ismeri fel a jelölést. A jelölés önmagában nem indítja el a programot: a PyneCore-nak be is kell töltenie és futtatnia kell azt. Ezt a könyv példáiban a PyneIDE intézi.
Például így egészítheted ki a fájl elejét a program leírásával:
"""
@pyne edge
Open and Close
Shows each candle's opening and closing prices as two lines.
"""Az @pyne edge marad a szövegblokk első tartalmi sora. Az alatta lévő cím és leírás az olvasónak szól; nem ad új műveletet a programhoz. A záró három idézőjel után ugyanúgy az importok és a program többi része következik.
Az eszközök kiválasztása
A következő sor:
from pynecore.lib import close, color, plot, scriptA from … import … szerkezet elérhetővé teszi a felsorolt neveket a programban. Ebben a példában négy eszközt kérünk a pynecore.lib könyvtárból:
close: az aktuális gyertya záróára;color: a használható színek;plot: érték megjelenítése a grafikonon;script: a program típusának és alapbeállításainak megadása.
A vessző választja el egymástól a neveket. A nevek kis- és nagybetűi számítanak: a close és a Close nem azonos név.
Az üres sorok a kód tagolását segítik. Így könnyebb felismerni, hol ér véget az eszközök felsorolása, és hol kezdődik a program.
A program neve és megjelenése
@script.indicator("My First Chart", overlay=True)Ez a sor azt mondja, hogy indikátort készítünk. Az indikátor az adatokból számol és megjelenít valamit. Ebben a példában a záróárat rajzoljuk ki.
A zárójelek között adjuk meg az indikátor beállításait:
- A
"My First Chart"idézőjelek közé írt szöveg az indikátor neve. - Az
overlay=Trueazt kéri, hogy a rajz a gyertyákkal közös grafikonon jelenjen meg.
A True igaz értéket jelent. Az ellentéte False. Ha az overlay értékét False-ra állítod, az indikátor külön panelben jelenik meg. A saját számításokat bemutató fejezetben ezt is használni fogjuk.
A számítás helye
def main():
plot(close, "Close", color=color.blue, linewidth=2)A def egy függvény kezdetét jelöli. A függvény egy névvel ellátott műveletsor. Itt a neve main.
A PyneCore a main() törzsét hajtja végre az adat gyertyáin. Ez a programunk belépési pontja. A két zárójel után kettőspont áll, az alatta beljebb kezdődő sor pedig a függvény törzséhez tartozik.
A behúzás mondja meg, mely sorok tartoznak össze. Egy behúzási szinthez négy szóközt használunk. A sor elején nyomd meg a Tab billentyűt: a PyneIDE alapbeállításaival ez egy lépésben négy szóköznyi behúzást ad. A Shift + Tab egy szinttel visszább húzza a sort. A Visual Studio Code rendszerint automatikusan be is húzza az új sort, amikor egy kettősponttal végződő sor után Entert nyomsz.
Mit kérünk a plot-tól?
A plot(...) egy függvényhívás. A zárójelben megadjuk a működéséhez szükséges értékeket és beállításokat:
close: ezt az értéket jelenítse meg;"Close": ez legyen a rajz neve;color=color.blue: kék legyen;linewidth=2: a vonalvastagság beállítása legyen 2.
Az első két értéknél a sorrend adja meg a szerepet. A color= és a linewidth= név szerint mondja meg, melyik beállítást adjuk át. Ezeket paramétereknek nevezzük.
A color.blue pontja azt jelenti, hogy a color névhez tartozó blue színt használjuk. A kódban a pont része a név elérésének; ne cseréld vesszőre.
Rajzolj két vonalat
A záróárhoz a close nevet használtuk. A nyitóárat az open névvel érheted el.
Készíts másolatot a fájlról two_lines.py néven a scripts mappába. Így megmarad az második fejezet példája is. A másolatban:
- Add hozzá az
opennevet az importált eszközökhöz. - Nevezd át az indikátort
"Open and Close"névre. - Adj hozzá egy második
plothívást amain()törzséhez.
A teljes program:
"""
@pyne edge
"""
from pynecore.lib import close, color, open, plot, script
@script.indicator("Open and Close", overlay=True)
def main():
plot(close, "Close", color=color.blue, linewidth=2)
plot(open, "Open", color=color.orange, linewidth=2)Futtatás előtt próbáld megjósolni, hol találkozik majd a két vonal a gyertyákkal. Mentsd el a fájlt, és kattints a Run Pyne code műveletre. Használd ugyanazt a mintaadatot, mint korábban.

Mit figyelj meg?
A kék vonal a gyertyák záróárát, a narancssárga a nyitóárát köti össze. A grafikon rajzai nevet is kaptak: Close és Open. A név segít azonosítani őket akkor is, ha később módosítod a színeket.
A két plot hívás azonos, négy szóköznyi behúzással kezdődik, mert ugyanahhoz a main() függvényhez tartoznak.
Ha az open alatt hibajelzés jelenik meg, ellenőrizd, hogy hozzáadtad-e az import sorhoz. Egy új eszköz használatához annak nevét is elérhetővé kell tenni.
Megjegyzések a kódban
Az egyetlen # jellel kezdődő sor egy megjegyzés:
# Show the opening price of each candle.
plot(open, "Open", color=color.orange, linewidth=2)A megjegyzés nem hajt végre műveletet. Arra használhatod, hogy leírd egy lépés célját magadnak vagy annak, aki később olvassa a kódot. A példák megjegyzéseit angolul írjuk; a magyarázatot a könyvben magyarul olvashatod.
Megjegyzést egy utasítás végére is írhatsz:
plot(open, "Open", color=color.orange, linewidth=2) # Show the opening price.A plot(...) hívás ilyenkor lefut. Az utána álló # jeltől a sor végéig tartó szöveg megjegyzés, ezért azt a futtató figyelmen kívül hagyja. A kód és a # között két szóközt hagyunk, hogy könnyebb legyen olvasni.
Próbáld ki önállóan
Készíts harmadik vonalat, amely a gyertyák legmagasabb árát mutatja. Ennek neve high. A rajz neve legyen "High", a színe pedig color.green.
Gondold végig, melyik két helyen kell bővítened a programot. Futtatás előtt jósolj: kerülhet-e a High érték a saját gyertyájának nyitó- vagy záróára alá?
A feladat megoldása
A high nevet az import sorba is be kell írni:
from pynecore.lib import close, color, high, open, plot, scriptA main() törzséhez add hozzá ezt a sort, ugyanazzal a behúzással, mint a másik két hívást:
plot(high, "High", color=color.green, linewidth=2)A gyertya legmagasabb ára legalább akkora, mint a nyitó- és a záróára. Ezért a High pontja egy adott gyertyánál egyik alá sem kerülhet. Az egyes pontokat összekötő vonalszakaszokat mindig a megfelelő gyertya helyén értelmezd.
Ellenőrizd a saját módosításodat
Nézd végig a háromvonalas programot. Megtalálod benne az importált adatokat, az indikátor nevét és a rajzoló hívásokat? Ellenőrizd, hogy minden újonnan használt adat neve szerepel-e az import sorban, és hogy a három hívás egyformán van-e behúzva.
Mielőtt saját számításokat végzünk az árakon, megnézzük, hogyan segít a PyneIDE a függvények használatában.