Kilépések és pozícióméret
Stop- és céláras kilépést adsz a stratégiához, és ellenőrzöd a tickben megadott távolságot.
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ó:
| Argumentum | Mit adsz meg? |
|---|---|
loss | Veszteségi távolságot tickben |
profit | Nyereségi távolságot tickben |
stop | Konkrét stopárat |
limit | Konkré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.

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.