Az első stratégia csak az ellenkező keresztezésnél zárt. Most a belépési árhoz képest megadott veszteségi és nyereségi távolságot is használunk. A korábbi keresztezéses lezárás megmarad.

Három különböző kilépési ok

A long pozíciót ebben a példában három esemény zárhatja le:

  • az ár eléri a veszteségi stop megbízás szintjét;
  • az ár eléri a nyereségi limit megbízás szintjét;
  • a gyors átlag lefelé keresztezi a lassút, és a piaci lezárás teljesül.

A stop és a limit árfeltételes megbízás. A strategy.close piaci lezárási megbízást ad. A teljesülésük szabálya eltérhet, ezért a kötési táblázatban az árat és az időpontot is ellenőrizni kell.

Távolság vagy konkrét ár?

A strategy.exit hívásnál kétféle megadás használható:

ArgumentumMit adsz meg?
lossVeszteségi távolságot tickben
profitNyereségi távolságot tickben
stopKonkrét stopárat
limitKonkrét limitárat

Ha loss=100 szerepel, az nem 100 százalék és nem szükségképpen 100 pénzegység. Száz tick távolságot kérsz a belépési árhoz képest.

A DEMO tickmérete 0,01. Száz tick tehát 1 áregység, kétszáz tick 2 áregység. Egy 200-as long belépésnél ezek 199-es stop- és 202-es célszintet jelentenek a slippage és teljesülési körülmények további hatása nélkül.

A teljes program

Hozd létre a protected_strategy.py fájlt:

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


@script.strategy(
    "Crossing Strategy with Exits",
    overlay=True,
    initial_capital=10000,
    default_qty_type=strategy.fixed,
    default_qty_value=1,
    pyramiding=1,
    commission_type=strategy.commission.percent,
    commission_value=0.1,
    slippage=2,
)
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),
    stop_ticks: int = input.int(100, title="Stop distance (ticks)", minval=1),
    target_ticks: int = input.int(200, title="Target distance (ticks)", minval=1),
):
    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)
    if crosses_up:
        strategy.entry("Long", strategy.long)
    if crosses_down:
        strategy.close("Long")
    strategy.exit("Bracket", "Long", loss=stop_ticks, profit=target_ticks)
    plot(fast_average, "Fast average", color=color.blue, linewidth=2)
    plot(slow_average, "Slow average", color=color.orange, linewidth=2)

A Bracket a kilépési megbízáscsoport azonosítója. A második argumentum, Long, megmondja, melyik belépéshez kapcsolódik. A loss és profit a fenti két inputot használja.

A kilépési hívást minden gyertyán végrehajtjuk, ugyanazzal az azonosítóval. Ez a megadott kilépési szabályt kezeli; nem külön, független új teljes pozíciót nyit minden híváskor.

Futtasd a programot a demóadaton. A Trades nézetben most a keresztezéses piaci lezáráson kívül a Bracket kilépései is megjelenhetnek.

A protected_strategy.py futása látható a PyneIDE-ben, a kötéseket stop- vagy céláras kilépés is lezárhatja.
A stratégia a keresztezéses lezárás mellett tickben megadott stopot és célárat is használ.

Mikor jelenik meg a védő kilépés?

A program ugyanazon végrehajtásban adhat belépési és hozzá kapcsolt kilépési utasítást. A tickben megadott távolságot a futtató a belépés tényleges teljesülési árához tudja kapcsolni.

Ha ehelyett a jelzés záróárából számolnál konkrét stop árat, az a szint a jelzési ártól indulna. Egy eltérő következő nyitóár mellett már nem ugyanakkora távolság lenne a tényleges belépéstől.

A megadás módját ezért az alapján válaszd ki, melyik szabályt akarod leírni. A loss a belépéshez viszonyított ticktávolság, a stop egy konkrét árszint.

A gyertya nem tartalmaz minden árlépést

Az OHLCV-adatból ismerjük a gyertya nyitását, maximumát, minimumát és zárását. Nem ismerjük automatikusan a gyertyán belüli összes köztes ár időrendjét.

Ha ugyanazon gyertya maximuma eléri a célárat, minimuma pedig a stopot, a négy ár önmagában nem mondja meg, melyik történt előbb. A szimulátor ilyenkor a teljesülési modell szabályait használja. Részletesebb idősíkú adat más felbontású vizsgálatot tehet lehetővé.

Ezt az esetet külön ellenőrizd, ne válassz kézzel mindig a kedvezőbb kimenetelt. A modell feltételezése az eredmény része.

A stopár sem garantálja a pontos teljesülési árat. Ha a következő gyertya a stop túloldalán nyit, a teljesülés a résen átugrott szintnél kedvezőtlenebb lehet. Slippage mellett további áreltérés is megjelenhet.

A távolság és a pénzbeli veszteség

Egy egységnyi, 1 pontértékű long pozíciónál 100 tick, 0,01 tickmérettel 1 pénzegység árkülönbséget jelent. Tíz egységnél ugyanez tízszeres áreredmény.

A mennyiség, a tickméret és a pontérték együtt határozza meg a stopig tartó elmozdulás pénzbeli méretét. Ehhez még jutalék és a tényleges teljesülési körülmény is tartozik.

Ha a megbízásban közvetlenül qty értéket adsz meg, az a megbízás saját mennyisége. A példa az alapértelmezett mennyiséget használja, amely a Properties → Order size mezőben is felülírható.

A DEMO gyakorlathoz használt 100 és 200 tick szemléltető beállítás. Egy másik instrumentumon ugyanezek a számok más ár- és pénzbeli távolságot jelenthetnek.

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

Tartsd változatlanul a gyors és lassú hosszt, a mennyiséget és a költségeket. Futtass egy változatot 100/200, majd egyet 200/400 stop- és céltávolsággal. Ellenőrizd ugyanannak a belépési jelzésnek a sorsát.

A feladat megoldása

Az Inputs felületen csak a Stop distance (ticks) és a Target distance (ticks) értékét módosítsd. A nagyobb távolságok miatt más gyertyán vagy más okból záródhat a pozíció.

A keresztezéses lezárás mindkét változatban megmarad. Ezért a nagyobb célár nem jelenti, hogy a pozíció feltétlenül addig nyitva marad. A lezárási szabályok együtt működnek.

Az inputok mentése után mindig várd meg az újraszámítást, majd az új eredményt olvasd le. A két exportot eltérő néven őrizd meg, ha később össze akarod vetni őket.

Keresd meg a kilépés okát

Válassz egy lezárt kötést, és ellenőrizd a belépési árat, a megadott ticktávolságokat és a lezáró gyertya OHLC-értékeit. A kilépési ár és az időpont alapján döntsd el, melyik szabály teljesülése magyarázza a kötést. Ha több szintet is érint a gyertya, a teljesülési modellt is vedd figyelembe.