Az átlag hosszának kipróbálásához eddig a forráskódban írtad át a számot. Most ezt a számot az indikátor beállításává teszed. Ugyanazt a programot más-más hosszal tudod futtatni.

Mi az input?

Az input a program egy névvel ellátott, kívülről módosítható bemenete. A forráskód meghatározza a bemenet típusát, alapértékét és megengedett tartományát. A felhasználó ezek között választ értéket.

A mostani bemenet neve length, alapértéke 20. A length változó a mozgóátlag hossza lesz. A kódhoz a pynecore.lib modulból az input névtér is kell.

length: int = input.int(20, title="Average length", minval=1, maxval=200)

Ez a sor a main() paraméterei közé kerül. Az int egész számot jelent: itt például 1, 20 vagy 200 használható, 2,5 nem. Az input.int egy egész számú bemenetet ír le.

A 20 az alapérték, az Average length a felületen megjelenő cím. A minval és maxval a legkisebb és legnagyobb megengedett érték. A nullás hossz nem értelmes átlagablak, ezért kizárjuk.

A teljes program

Hozd létre az adjustable_average.py fájlt:

"""
@pyne edge
"""
from pynecore.lib import close, color, input, plot, script, ta


@script.indicator("Adjustable Average", overlay=True)
def main(
    length: int = input.int(20, title="Average length", minval=1, maxval=200),
):
    average = ta.sma(close, length)
    plot(average, "Average", color=color.blue, linewidth=2)

A main nyitó zárójele után több sorba írtuk a paraméterlistát. A ): zárja le ezt a listát, és indítja el a függvény törzsét. Az alatta álló számítás és rajzolás négy szóközzel beljebb kezdődik.

Az input sorának végén álló vessző megengedi, hogy további paramétereket is hozzáadj. Egyetlen paraméternél is használható. A kétféle behúzott rész szerepe eltér: a zárójeleken belül a bemeneteket adjuk meg, utánuk a futtatott utasítások következnek.

Futtasd a programot a demóadaton. Első futtatáskor húsz gyertyából készül a kék átlag.

Nyisd meg az Inputs felületet

  1. Legyen aktív az adjustable_average.py fájl.
  2. A szerkesztő jobb felső sarkában, a fájl füle melletti eszköztáron kattints a fogaskerék ikonra. Ha fölé viszed az egérmutatót, az Edit Inputs… felirat jelenik meg.
  3. A megjelenő felületen keresd meg az Average length mezőt.
  4. Írd át az értékét 5-re, majd kattints a Save gombra.

Ugyanezt a felületet a bal oldali Pyne nézet Scripts csoportjából is megnyithatod: kattints jobb gombbal az adjustable_average.py fájlra, majd válaszd az Edit Inputs… menüpontot. A megnyitott kódban jobb gombbal elérhető menüben is megtalálod.

Az adjustable_average.py mellett nyitva van az Inputs felület az Average length mezővel és a Save gombbal.
Az Average length bemenet a PyneIDE Inputs felületén változtatható.

A Save gombra kattintva a PyneIDE automatikusan újraszámolja a megnyitott grafikont a mentett beállítással. Várd meg a frissítést: a kék vonal ekkor már öt gyertyából számított átlagot mutat.

A forrásban továbbra is 20 áll alapértékként. Az Inputs felületen mentett 5 felülírja ezt az adott projektben.

Most állítsd 50-re, és mentsd újra. Ugyanazon időszakon hasonlítsd össze, hogyan reagál a vonal az ár változására. Ha csak az időszakot mozgatod a grafikonon, az nem változtatja meg a program inputját.

Hol marad meg a beállítás?

A program mellett egy azonos nevű .toml fájl tárolja a mentett beállításokat. Ennél a példánál ez az adjustable_average.toml.

A TOML egy szöveges beállítási formátum. Ezt a fájlt a PyneIDE kezeli, ezért a gyakorlathoz elég az Inputs felületet használnod. Ha megnyitod a fájlt, a hosszhoz tartozó rész ilyen alakú:

[inputs.length]
value = 5

A szögletes zárójel itt egy beállításcsoportot jelöl. Ez nem az előzményeket bemutató fejezetben tanult gyertyaelőzmény: más fájlban, más nyelv szabályai szerint szerepel.

A paraméter kódbeli neve és a felületi címe sem ugyanaz. A fájlban length, a felületen Average length szerepel. A program működésében a kódbeli név számít.

Ha egy inputot átnevezel a forrásban, a régi névhez mentett érték nem az új input beállítása. Ilyenkor nyisd meg újra az Inputs felületet, és ellenőrizd az értéket. Egy program másolásakor a mellette levő .toml fájlt csak akkor másold át, ha a mentett beállításokat is meg akarod tartani.

Alapérték és tényleges érték

Ha átírod a kódbeli alapértéket 20-ról 30-ra, de már mentettél egy ötös értéket, a futtatás ötöt használhat. A mentett felülírás elsőbbséget élvez.

Egy eredmény leírásakor ezért a tényleges inputot jegyezd fel. A forrásban látható alapérték önmagában nem írja le a futás összes beállítását.

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

Adj egy második hosszparamétert az indikátorhoz. A rövid átlag alapértéke legyen 5, a hosszúé 20. Mindkettő legalább 1, legfeljebb 200 lehet. Rajzold ki őket külön címmel.

A feladat megoldása

A main() paraméterlistája:

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),

A törzs:

fast_average = ta.sma(close, fast_length)
slow_average = ta.sma(close, slow_length)
plot(fast_average, "Fast average", color=color.blue, linewidth=2)
plot(slow_average, "Slow average", color=color.orange, linewidth=2)

A két input külön módosítható. A megadott határok még nem kötik ki, hogy a gyors hossz kisebb legyen a lassúnál. Ezt a kapcsolatot külön kell ellenőrizni; a záróprojektben foglalkozunk vele.

Ellenőrizd a mentést

Állítsd a hosszt egyre. Az egygyertyás SMA az adott gyertya záróára, ezért a vonalnak a záróárakon kell haladnia. Ezután állítsd vissza húszra. A fájl újranyitásakor ellenőrizd, hogy a felület a mentett húszas értéket mutatja-e.