Állapot helyett esemény: keresztezések
Megkülönbözteted az átlag fölött levő árat a fölé kerülés pillanatától.
Ha az ár tíz gyertyán át az átlag fölött van, a close > average tízszer lehet igaz. Ha csak azt az eseményt szeretnéd megjelölni, amikor az ár alulról fölé kerül, az előző gyertya kapcsolatára is szükséged van.
Egy helyzet és annak kezdete
Tegyük fel, hogy az átlag most és az előző gyertyán is 100. Az előző záróár 99, a mostani 101. A mostani gyertyán az ár az átlag fölött van, és az előző gyertyához képest át is keresztezte azt.
Ha a következő záróár 102, továbbra is az átlag fölött van. Új felfelé keresztezés azonban nincs, mert az előző gyertyán is fölötte volt.
A ta.crossover(first, second) akkor igaz, ha az első érték most nagyobb a másodiknál, az előző végrehajtáskor pedig kisebb vagy egyenlő volt nála. A ta.crossunder ennek lefelé irányuló párja.
A mostani egyenlőség még nem keresztezés. Ha az első érték csak eléri a másodikat, a > feltétel nem igaz. Az előző gyertyán az egyenlőség viszont még megengedi, hogy a mostani fölé kerülés keresztezés legyen.
Két mozgóátlag keresztezése
A Mozgóátlagok fejezet két átlagát használjuk tovább. A rövidebb, gyorsabb átlag kék lesz, a hosszabb, lassabb narancssárga. A zöld háromszög a gyors átlag felfelé keresztezését, a piros a lefelé keresztezését jelöli.
Hozd létre a cross_signals.py fájlt:
"""
@pyne edge
"""
from pynecore.lib import close, color, input, location, plot, plotshape, script, shape, ta
@script.indicator("Average Crossings", overlay=True)
def main(
fast_length: int = input.int(5, title="Fast length", minval=1, maxval=200),
slow_length: int = input.int(20, title="Slow length", minval=1, maxval=200),
):
fast_average = ta.sma(close, fast_length)
slow_average = ta.sma(close, slow_length)
crosses_up = ta.crossover(fast_average, slow_average)
crosses_down = ta.crossunder(fast_average, slow_average)
plot(fast_average, "Fast average", color=color.blue, linewidth=2)
plot(slow_average, "Slow average", color=color.orange, linewidth=2)
plotshape(crosses_up, "Cross up", style=shape.triangleup,
location=location.belowbar, color=color.green)
plotshape(crosses_down, "Cross down", style=shape.triangledown,
location=location.abovebar, color=color.red)Futtasd a demóadaton az 5 és 20 alapértékkel. A jelölések csak a keresztezést mutató gyertyákon jelennek meg. Egy hosszabb olyan szakaszon, ahol a kék vonal végig a narancssárga fölött van, nem kapsz minden gyertyán új zöld jelet.

Miért külön sorban számoljuk a keresztezést?
A ta.crossover és ta.crossunder minden gyertyán lefut. Így a saját előző végrehajtásuk az előző feldolgozott gyertyához tartozik.
Ha a keresztezést csak egy másik feltétel teljesülésekor hívnád meg, a hívás korábbi állapota nem feltétlenül az előző gyertyából származna. A rajzolt vonal és a jelölés eltérő idősort vizsgálhatna.
Ezért az előző fejezet szabályát követjük: minden gyertyán kiszámítjuk a szükséges állapotos eredményeket, majd a kész értékekből döntünk.
A bemelegedés itt is látszik
A húszas SMA csak a huszadik gyertyától érvényes. Az első érvényes értéknél az előző húszas SMA még hiányzik, ezért ott nincs két teljes gyertyából eldönthető keresztezés.
A feltételhez a két átlag mostani és előző gyertyához tartozó értéke is szükséges.
A na helyére nem érdemes nullát tenni a jel kedvéért. Egy nulla átlag mesterséges keresztezést hozhatna létre olyan ponton, ahol a valódi átlag még nem számítható.
Az adat időpontja
A könyvben lezárt, történelmi gyertyákon futtatjuk a programokat. A napi gyertya záróárával készített jelzés a gyertya lezárásakor ismert adatokat használja.
Egy éppen alakuló gyertya záróára még változhat. A gyertya közben megfigyelt keresztezés a végére eltűnhet. Ezt ne keverd össze a lezárt gyertyákon végzett ellenőrzéssel.
A történelmi grafikonon megjelenő jelnek nincs automatikusan ugyanazon gyertyán végrehajtott kötése. Az indikátor jelzést rajzol; a megbízást és annak teljesülési időpontját majd a stratégiánál adjuk meg.
Próbáld ki önállóan
Készíts másolatot price_crossings.py néven. A két átlag keresztezése helyett azt jelöld, amikor a záróár a lassú átlag fölé, illetve alá kerül. A lassú átlag maradjon a grafikonon.
A feladat megoldása
crosses_up = ta.crossover(close, slow_average)
crosses_down = ta.crossunder(close, slow_average)A jelölések a két logikai változót használják, így a plotshape sorokat nem kell átírnod. A címeket azonban érdemes Price cross up és Price cross down értékre módosítani.
Ha a gyors átlagot már nem használod, töröld a számítását, a rajzolását és a hozzá tartozó inputot. Így a felület csak a ténylegesen használt beállítást kínálja.
Kövess végig egy keresztezést
Válassz ki egy zöld jellel ellátott gyertyát. Nézd meg a két vonal értékét azon a gyertyán és az eggyel korábbin. Fogalmazd meg a két összehasonlítást, amely miatt a jelzés igaz lett. Ez a vizsgálat a stratégia ellenőrzésénél is használható.