1. Az állítás
Amikor megnyitsz egy pozíciót, azonnal mínuszban vagy. Nem azért, mert rossz irányba mentél, hanem mert a belépés fizikai ára kiszámlázódott: átléptél a spreaden, fizettél jutalékot és tőzsdei díjat, és ha market orderrel léptél be, valószínűleg kaptál egy kis csúszást is.
Ez a szám nem kerekítési hiba. Aggresszív scalpingnél, nagy kontraktusszámmal, napi több tucat kötéssel a költség rendszeresen nagyobb tétel, mint bármelyik egyedi rossz döntésed. Ez a lecke arról szól, hogyan számold ki pontosan, mekkora ez a teher, és hogyan döntsd el egy stratégiáról — mielőtt élesben kipróbálnád —, hogy egyáltalán van-e esélye pozitív maradni.
2. Piaci mechanika
A spread nem díj, hanem ár. A könyvben két ár van: amiért valaki vesz (bid) és amiért valaki elad (ask). Ha te market orderrel veszel, az askon kötsz, és azonnal a bid oldalon áll a pozíciód értéke. Az MNQ-n ez jó esetben egy tick, azaz kontraktusonként 0,50 dollár. Az oda-vissza (round turn) tehát már önmagában egy tick veszteséggel indul, mielőtt a piac egyetlen tickkel elmozdulna.
A jutalék kétszer számol. A brókerek jellemzően oldalanként (per side) árazzák a kontraktust, és ehhez jön a tőzsdei és clearing díj. Ami a weboldalon „0,25 dollár" néven szerepel, az a valóságban oldalanként értendő, plusz a CME díja, plusz az esetleges adatszolgáltatás. A round turn valódi ára majdnem mindig a duplája annak, ami elsőre a szemedbe ugrik.
A slippage a sietség ára. Market orderrel biztosan kötsz, de nem tudod, hol. Limit orderrel tudod, hol kötsz, de nem biztos, hogy kötsz. A kettő között nincs ingyen ebéd: a limit order ki nem töltése pont azokban a pillanatokban következik be, amikor az ár elment nélküled — vagyis akkor, amikor igazad volt.
Miért skálázódik rosszul a költség. A nyereséged a pontokkal és a mérettel együtt nő. A költséged viszont a mérettel és a kötésszámmal együtt nő, a pontokkal nem. Ezért egy nagy méretű, sok kötéses, kis pontcélú stílusban a költség aránya drasztikusan magasabb, mint egy ritkán kereskedő swing stílusban.
3. Szabályosított definíció
Round turn költség kontraktusonként:
RT_koltseg = 2 × jutalék_oldalanként
+ 2 × tőzsdei_és_clearing_díj_oldalanként
+ spread_költség
+ várható_slippageAz MNQ-n a spread költsége market-in / market-out esetén jellemzően 1 tick (0,50 USD). Limit belépővel ez nullára csökkenthető, de a ki nem töltés kockázatával.
R-multiple. Egy kereskedés eredménye a kezdeti kockázat egységében kifejezve:
R = eredmény_pontban / kezdeti_stop_távolság_pontbanAz R azért fontos, mert eltünteti a méretet a képletből: 5 pontos stoppal és 10 pontos célból 2R lesz, akkor is, ha 1 kontraktusod van, és akkor is, ha 20.
Elvárt érték (expectancy), R-ben:
E = WR × átlagos_nyertes_R − (1 − WR) × átlagos_vesztes_RNullszaldós találati arány: ha az átlagos nyertesed W R és az átlagos
vesztesed 1R, akkor
WR_breakeven = 1 / (1 + W)Vagyis 1:1-es kockázat/hozam mellett 50%, 2R célnál 33,3%, 0,5R célnál 66,7% találati arány kell — költségek nélkül. A költség ezt mindig feljebb tolja.
4. Számolás / kód
from dataclasses import dataclass
@dataclass
class CostModel:
"""Minden érték USD-ben, kontraktusonként. A sajátodat írd be!"""
commission_per_side: float = 0.35
exchange_fee_per_side: float = 0.37
spread_ticks: float = 1.0
tick_value: float = 0.50
slippage_ticks: float = 0.5
@property
def round_turn(self) -> float:
return (
2 * self.commission_per_side
+ 2 * self.exchange_fee_per_side
+ (self.spread_ticks + self.slippage_ticks) * self.tick_value
)
def daily_drag(self, trades_per_day: int, contracts: int) -> float:
return self.round_turn * trades_per_day * contracts
def breakeven_points(self, contracts: int, point_value: float = 2.0) -> float:
"""Hány pontot kell megtenned, hogy nullán legyél egy kötésen."""
return self.round_turn / point_value
def expectancy(win_rate: float, avg_win_r: float, avg_loss_r: float = 1.0) -> float:
return win_rate * avg_win_r - (1 - win_rate) * avg_loss_r
def breakeven_win_rate(avg_win_r: float, avg_loss_r: float = 1.0) -> float:
return avg_loss_r / (avg_win_r + avg_loss_r)
c = CostModel()
print(round(c.round_turn, 2)) # egy round turn ára / kontraktus
print(round(c.breakeven_points(20), 2)) # hány pont a nullszaldó
print(round(c.daily_drag(28, 20), 2)) # 28 kötés × 20 kontraktus napi terhe
print(round(expectancy(0.55, 1.5), 3)) # elvárt érték R-ben
print(round(breakeven_win_rate(1.5), 3)) # szükséges találati arányA daily_drag sor az, amit érdemes hosszan nézni. Egy aktív napon, 20
kontraktussal és néhány tucat kötéssel a költség háromjegyű, rossz esetben
négyjegyű dollárösszeg — a nyereségtől teljesen függetlenül. Ha a napi
célod ezer dollár, akkor a valódi célod a költséggel együtt értendő, és a
szükséges pontszám ennek megfelelően nagyobb.
Fontos: a fenti számok helyőrzők. Írd át őket a saját brókerednél érvényes tételekre, különben a modell hazudik neked.
5. A bizonyíték
Hol ellenőrzöd elsődleges forrásból: a brókered díjszabása (oldalanként vagy round turnönként árazzák?), a prop cég díjtáblája, és ami ennél is fontosabb — a saját számlakivonatod. A kivonaton kötésenként látod a jutalékot és a díjat. Ez az egyetlen szám, ami nem marketinganyagból származik.
Első tévhit: „a jutalék elhanyagolható, úgyis a stratégia dönt". Egy kötésen valóban elhanyagolható. Havi több száz kötésen, nagy mérettel a költség a legnagyobb, legkiszámíthatóbb és egyetlen garantált tétel a kimutatásodban. A piac bizonytalan; a díj nem az.
Második tévhit: „a magas találati arány jó stratégiát jelent". A találati arány önmagában nem értelmezhető. 90%-os találati arány 0,2R nyertesekkel és 1R vesztesekkel negatív elvárt értéket ad. A nyereséges nap, ahol minden kötés nyert, ugyanúgy jöhet szerencsés piaci környezetből, mint jó rendszerből — ezt csak elegendő mintaszám dönti el, és ezzel a P5 pálya foglalkozik.
Harmadik tévhit: „limit orderrel nincs slippage, tehát ingyen van". A limit order valóban nem csúszik, de az ára az, hogy amikor a piac gyorsan elmegy a jó irányba, nem kötsz. A statisztikádban ez nem költségként jelenik meg, hanem eltűnt nyereségként, amit soha nem fogsz látni — ezért veszélyesebb.
6. Végrehajtás
Számold ki egyszer a saját round turn költségedet, és írd fel tickben. Az MNQ-n 1,44 dollár például közel 3 tick.
Minden setup breakeven pontját told el ezzel. Ha a setup 5 pontos célra dolgozik, és a költség 1,5 pont, akkor valójában 6,5 pont a nullszaldó.
Napi szinten ismerd a költségterhedet. Ha a szokásos aktivitásod mellett a napi drag 500 dollár, akkor az ezer dolláros célod valójában 1500.
Tiltsd meg magadnak a kis pontcélt nagy mérettel, amíg nem számoltad ki, hogy a költség után marad-e valami. Ez a leggyakoribb rejtett vérzés.
7. Gyakorlat
Feladat 1. Nyisd meg az utolsó havi számlakivonatodat, és add össze az összes jutalékot és díjat. Oszd el a bruttó eredménnyel. Az így kapott arány a stratégiád valódi költségaránya.
Feladat 2. Írd át a
CostModelalapértékeit a sajátjaidra, és futtasd le. Jegyezd fel a round turn költséget tickben.Feladat 3. Számold ki az utolsó 20 kereskedésed átlagos nyertes és vesztes R-értékét, majd az elvárt értéket. Pozitív?
Feladat 4. Számold ki a szokásos setupod nullszaldós találati arányát, és vesd össze a tényleges találati arányoddal.
Ellenőrzési kritérium: meg tudod mondani fejből a saját round turn költségedet tickben, és azt is, hogy a szokásos napi aktivitásod mellett hány dollár költséggel indul a napod. Ha ezekre nincs számod, a P&L-ed egy részét nem te irányítod.