Az idő és az előző gyertyák
Megérted a gyertyánkénti végrehajtást, és a korábbi értékekből változást számítasz.
Az előző fejezetben egy gyertya adataiból számoltál. A záróár változásához már két gyertya kell: a mostani és az előző. Ebben a fejezetben ezek között teremtesz kapcsolatot.
A program ugyanaz, a gyertya változik
Amikor elindítod a programot a demóadaton, a PyneCore időrendben halad végig a gyertyákon. A main() az első gyertyával dolgozik, majd a másodikkal, és így tovább. A close minden alkalommal az éppen feldolgozott gyertya záróárát jelenti.
Ezért tud egyetlen plot(close, "Close") hívás teljes vonalat rajzolni. Egy végrehajtás egy pontot ad a vonalhoz; a gyertyák sorozata adja a teljes vonalat.
Az előző fejezet midpoint = (high + low) / 2 sora is újra lefut minden gyertyán. Az értékadás újraszámítja az adott gyertya középárát. A változó neve ugyanaz marad, az értéke változhat.
A feldolgozás sorrendjét a futtató biztosítja. A teljes grafikon bejárásához nem kell saját ciklust írnod.
Visszatekintés szögletes zárójellel
A close[1] az egy gyertyával korábbi záróár. A szögletes zárójelben álló szám azt mondja meg, mennyivel tekintsünk vissza.
| Kifejezés | Melyik záróárat jelenti? |
|---|---|
close | A feldolgozott gyertyáét |
close[0] | Szintén a feldolgozott gyertyáét |
close[1] | Az eggyel korábbi gyertyáét |
close[2] | A kettővel korábbi gyertyáét |
Ha a napi adatokban három egymást követő záróár 100, 103 és 101, akkor a harmadik gyertyán close értéke 101, close[1] értéke 103, close[2] értéke 100.
A close - close[1] ebben a helyzetben 101 - 103, azaz −2. Ez a két egymást követő záróár különbsége. A close - open ugyanazon gyertya nyitó- és záróárát hasonlítja össze. A két számítás eltérő kérdésre válaszol.
A visszatekintés gyertyákban mér, nem naptári napokban. Napi piaci adatokban egy hétvége vagy egy kereskedési szünnap miatt az előző gyertya időpontja több nappal korábbi is lehet.
A saját értékednek is lehet előzménye
A beépített árak előzménye már elérhető. Ha a saját számításodra is vissza szeretnél tekinteni, jelöld Series változóként:
midpoint: Series[float] = (high + low) / 2A kettőspont utáni rész egy típusjelölés. A float tört értéket is megengedő számot jelöl. A Series[float] azt is kéri a futtatótól, hogy őrizze meg a változó gyertyánkénti előzményeit.
Az értékadás továbbra is minden gyertyán lefut. A midpoint a mostani számított érték, a midpoint[1] az előző gyertyán eltárolt érték. A Series nevet a pynecore modulból kell importálni.
Kétféle változás a grafikonon
Hozd létre a history_change.py fájlt a projekt scripts mappájában:
"""
@pyne edge
"""
from pynecore import Series
from pynecore.lib import close, color, high, low, plot, script
@script.indicator("Changes Between Candles", overlay=False)
def main():
midpoint: Series[float] = (high + low) / 2
close_change = close - close[1]
midpoint_change = midpoint - midpoint[1]
plot(close_change, "Close change", color=color.blue)
plot(midpoint_change, "Midpoint change", color=color.orange)Mentsd el, majd válaszd a Run Pyne code műveletet és a demo adatot. Külön panelben két vonal jelenik meg. A kék a záróár, a narancssárga a középár változását mutatja. Egy pozitív pont azt jelenti, hogy az adott érték nőtt az előző gyertyához képest.

Vidd az egérmutatót egy gyertyára. A grafikon értékei mindig a mutatóhoz tartozó időpontot mutatják; a fájlban nem kell külön kiválasztanod ezt az időpontot.
Mi történik a legelső gyertyán?
Az első gyertyának nincs korábbi gyertyája az adatfájlban. Ott a close[1] hiányzó érték: na. A rövidítés a „not available” kifejezésből származik.
A hiányzó ár nem nulla. A close - close[1] eredménye is hiányzik, ezért az első gyertyán a program nem rajzol érvényes változást. Ez megfelelő eredmény: két gyertya különbségét egyetlen gyertyából nem tudjuk kiszámítani.
A na(value) hívással megvizsgálhatod, hogy hiányzik-e egy érték. A feltételek kezelését a Feltételek és jelölések fejezetben tanulod meg. Addig a grafikon elején látható hiányzó pontot ne próbáld nulla árként javítani.
A jövőbeli gyertyákat ez a jelölés nem teszi elérhetővé. A close[-1] sem jelent következő záróárat. Egy döntéshez csak az adott végrehajtáskor rendelkezésre álló adatok használhatók.
Próbáld ki önállóan
Módosítsd a kék vonalat úgy, hogy a záróárat az öt gyertyával korábbi záróárhoz hasonlítsa. A vonal címében is jelezd az öt gyertyás távolságot.
Mielőtt futtatod, döntsd el: az első hány gyertyán fog hiányozni az eredmény?
A feladat megoldása
close_change = close - close[5]
plot(close_change, "Five-candle change", color=color.blue)Az első öt gyertyán nincs öt gyertyával korábbi záróár. A hatodik gyertyán már van: az adatfájl első gyertyájának záróára.
A narancssárga vonal ettől nem változik. Ha mindkét változást öt gyertyára szeretnéd számolni, a midpoint[1] kifejezést is át kell írnod.
Ellenőrizd a számítást
Válassz három egymást követő gyertyát. Írd le a záróáraikat, és kézzel számítsd ki a második és a harmadik gyertya egygyertyás változását. A kék vonalnak ugyanezeket az értékeket kell mutatnia. Ha eltérés van, először a kiválasztott időpontokat és a visszatekintés számát ellenőrizd.
Szorgalmi feladat: előzmény helyett megőrzött érték
Egyetlen előző értéket úgy is felhasználhatsz, hogy eltárolod a következő gyertyára. Erre való a Persistent változó, amelyet az Amit a program megjegyez fejezetben ismersz meg. Ezt a feladatot annak elolvasása után is megoldhatod.
Írd át a history_change.py programot úgy, hogy se close[1], se midpoint[1] ne szerepeljen benne. Két perzisztens változó őrizze meg az előző gyertya záróárát és középárát. A két vonal ugyanazokat az értékeket mutassa, mint az eredeti programban, az első gyertyán pedig továbbra is hiányozzon a változás.
Gondold végig a sorrendet: mikor kell kiolvasnod a megőrzött értéket, és mikor írhatod felül a mostanival?
A feladat megoldása
A Series importját cseréld Persistent-re:
from pynecore import PersistentA pynecore.lib importjához add hozzá a na nevet. A fájl elején lévő jelölést és az indikátor beállításait tartsd meg, a main() függvényt pedig írd át így:
def main():
previous_close: Persistent[float] = na
previous_midpoint: Persistent[float] = na
midpoint = (high + low) / 2
close_change = close - previous_close
midpoint_change = midpoint - previous_midpoint
plot(close_change, "Close change", color=color.blue)
plot(midpoint_change, "Midpoint change", color=color.orange)
previous_close = close
previous_midpoint = midpointA két megőrzött változó kezdeti értéke na, mert az első gyertyán még nincs előző ár. Ezért az első különbség is hiányzik. A függvény végén eltároljuk a mostani értékeket; a következő gyertyán már ezekből számolunk.
Ha a previous_close = close sort a kivonás elé teszed, a mostani záróárból önmagát vonod ki, így nullát kapsz. A perzisztens megoldásnál neked kell gondoskodnod a frissítés sorrendjéről.
Egyetlen gyertyára való visszatekintéshez mindkét megoldás használható. A szögletes zárójeles változat rövidebb, és több gyertyával korábbi értéket is közvetlenül elérsz vele. Ez a két perzisztens változó csak a legutóbb eltárolt árakat őrzi.
Futtasd mindkét változatot ugyanazon a demóadaton, és hasonlítsd össze a két vonalat néhány kiválasztott gyertyán.