Az automatizált kereskedési rendszernek pozitív várható értéke volt: a matematika ellenőrizte, a hátsó tesztek nagyszerűek voltak, és kezdetben pénzt hozott. De idővel vérzik. Ez nem volt hiba a kódban, ez egy alapvető félreértés volt a termelésben. A várható érték csapdája A legtöbb kereskedési oktatóanyag, tudományos papírok és online tanfolyamok megtanítják, hogy maximalizálja a várt értéket. E[profit] = Σ(probability_i × outcome_i) Ha ez a szám pozitív, akkor vegye a kereskedelmet. Ha ezt a számot nagyobbá teheti, akkor optimalizálnia kell. A termelés kivételével ennek az optimalizálási stratégiának végzetes hibája van: . it doesn't account for the path you take to reach that expected value Hadd mutassam meg, mit értem valós forgatókönyvvel a rendszerünkből. A vérzés rendszere Stratégiánk célja az volt, hogy megragadja az árcsúcsokat a volatilis piacokon. Elemezze az egyes kereskedési ablakok lehetséges árirányzatait Pozíciómérés optimalizálása négyszögletes programozással Kereskedések végrehajtása a spread lehetőségek megragadásához A papíron a várható érték szilárdan pozitív volt. 1. nap: Megtalálták a nagy csúcsot, 15 000 dollárt hoztak 4-12 nap: Kis veszteségek minden nap, összesen -8,000 $ 13. és 14. nap: Egy másik csúcs, 12 000 dollár 15. és 28. nap: fokozatos vérzés, összesen -11 000 $ A probléma? Optimalizálónk szerkezeti előítéletet fejlesztett ki. Rendszeresen olyan pozíciókat foglalt el, amelyek alkalmanként nagyot nyertek, de gyakran kis összegeket vesztettek el. A várható érték kiszámítása szerint ez rendben volt: a nagy nyereség végül kompenzálni fog. De "végül" végtelen tőkét és végtelen időhorizontot igényel. Mi sem voltunk. A különbség látása: egy szimuláció Annak illusztrálása érdekében, hogy ezek a kockázatkezelések miért számítanak, hasonlítsunk össze két stratégiát ugyanazon a piacon egy év alatt: Agresszív pozíciómérés kizárólag a várható értékre alapozva, 150% -os tőkeáttétel alkalmazásával, amikor a lehetőségek jónak tűnnek. Strategy A (EV Maximization) Ugyanazok a piaci jelek, de a frakcionális Kelly méretezés (40% agresszív) és a CVaR-alapú pozíciócsökkenés a magas farok kockázati időszakokban. Strategy B (Risk-Controlled) Az eredmények kulcsfontosságú történetet mesélnek el. Nézd meg közelebbről a bal oldali diagramot - a legtöbb EV-maximalizációs ösvény nem katasztrofálisan kudarcot vall. Ők csak... nem komposztálnak. Látod a szalagmintát: alkalmi csúcsok felfelé, majd lassú erózió. Ez a rejtélyes vérzés, amely pozitív várható értéket hiányzik. Figyeljétek meg, hogy néhány út elérte az 500 000 dollárt? Ezek a kiemelkedők az átlagot 146 000 dollárra húzzák. Mindössze 136 000 dollár, és a 100 út közül 29 a kezdő tőke alatt ér véget. Medián In a backtest, you might have gotten lucky and seen one of those winner paths. In production, you get one random draw. A megfelelő diagram „unalmas”, és ez pontosan a lényeg. Nincs holdfelvétel 500 000 dollárra, de nincs katasztrofális leeresztés. A kockázat-kontrollált stratégia szorosan a szerény növekedés körül csoportosul. Ez a termelési valóság: a túlélő stratégia összeomlik, a kiáramló stratégia nem tesz semmit, függetlenül attól, hogy a várható érték kiszámítása mit ígért. Amit a várt érték nem fog el 1. Rombolás veszélye Ez a klasszikus szerencsejátékos problémája, amelyet a Kelly kritérium formalizál. Még pozitív várható érték esetén is, ha a pozíció mérete rossz, akkor Jöjjön el a törés! Szállás Vegye figyelembe: 100 000 dolláros tőke van, és egy kereskedelem 60% -os nyerési valószínűséggel, amely vagy megduplázza a tétet, vagy elveszíti azt. Kelly azt mondja, hogy az optimális tét mérete: kelly_fraction = (p * b - q) / b # where p = win probability, q = loss probability, b = odds De itt van, amit a termelésben megtanultunk: . even Kelly is too aggressive Azért mert: A valószínűségi becslések hibásak (mindig) A piacok változnak (a 60% -os előny 52% lesz) A korrelációk megszakadnak a stressz alatt (amikor a leginkább szükséged van rájuk) Nem lehet azonnal kiegyensúlyozni (csúszás, késleltetés, piaci hatás) Végül a részleges Kelly-t használtuk (25-50% az elméleti Kelly tét), mert az élvonal túlbecsülésének valós költségei katasztrofálisak. 2. Numerikus instabilitás szélsőséges eseményekben Egy reggel a rendszerünk összeomlott egy szélsőséges időjárási esemény során.Nem szoftveres összeomlás, hanem matematikai. Az optimalizáló nem tudott megoldást találni. fagyasztottunk, nem tudtunk kereskedni, a pontos körülmények között, ahol a stratégiánknak a legtöbb pénzt kellett volna keresnie. A probléma: optimalizáltunk a várt forgatókönyvekhez. De a szélsőséges eseményeknek különböző korrelációs struktúrájuk van. Azok az eszközök, amelyek általában függetlenül mozognak, hirtelen tökéletesen korrelálnak. A javítás nem volt jobb, mint a várt érték kiszámítása. : regularization from sklearn.covariance import LedoitWolf # Instead of sample covariance cov_matrix = np.cov(returns.T) # Use shrinkage towards structured estimator lw = LedoitWolf() cov_matrix_robust = lw.fit(returns).covariance_ Ez csökkenti bizonyos pontosságot a normál időkben a szélsőséges stabilitás érdekében. A várható érték kiszámítása kissé rosszabb lesz. Time Horizon összehasonlítás Itt van egy probléma, amely nem jelenik meg a backtesztekben: a várható érték kiszámítása feltételezi, hogy elég sokáig várhat a nagy számok törvényére. A termelésben nem lehet. Ezt akkor fedeztük fel, amikor a rendszerünk erős pozitív várható értéket mutatott a 90 napos ablakokon, de következetesen elvesztette a pénzt a 30 napos ablakokon. Pénzügyi szolgáltatóink havonta felülvizsgálták a teljesítményt. negyedéves korlátainkat a legutóbbi eredmények alapján állították be. Ha három rossz hónapunk volt, pozíciós korlátainkat csökkentették, függetlenül attól, hogy a hosszú távú várható érték mit mondott. Az elméleti stratégia 6-12 hónapig tartott, hogy megbízhatóan nyereséget mutatjon. Az optimalizálásunkhoz egyértelmű időhorizontkorlátozásokat kellett hozzáadnunk: def optimize_with_horizon_constraint(scenarios, max_horizon_days=30): """ Optimize not just for long-term EV, but for probability of positive returns within operational time horizon """ # Standard expected value ev = np.mean(scenarios) # But also: what'sthe probability we're profitable # within our actual time horizon? rolling_returns = pd.Series(scenarios).rolling(max_horizon_days).sum() prob_profitable_in_horizon = (rolling_returns > 0).mean() # Penalize strategies with low short-term win probability # even if long-term EV is great if prob_profitable_in_horizon < 0.6: return ev * 0.5 # Heavily discount return ev Ez azt jelentette, hogy olyan stratégiákat fogadunk el, amelyek valamivel alacsonyabb elméleti várható értékkel rendelkeznek, de nagyobb valószínűséggel mutatnak nyereséget a működési korlátainkon belül. Mit kell optimalizálni A fájdalmas leckék után itt van, amit megtanultunk optimalizálni: 1. Kockázat-korrigált megtérülés a CVaR-vel Ahelyett, hogy maximalizálnánk az E-profitot, minimalizálnánk a CVaR-t (Conditional Value at Risk): a várható veszteséget a legrosszabb 5%-ban. import cvxpy as cp # Decision variable: position sizes positions = cp.Variable(n_assets) # Scenarios returns scenario_returns = get_price_scenarios() # shape: (n_scenarios, n_assets) portfolio_returns = scenario_returns @ positions # CVaR constraints alpha = 0.05 # 5% tail var = cp.Variable() u = cp.Variable(n_scenarios) constraints = [ u >= 0, u >= -(portfolio_returns - var), ] cvar = var + cp.sum(u) / (n_scenarios * alpha) # Optimize for return while constraining tail risk objective = cp.Maximize(cp.sum(portfolio_returns) / n_scenarios - lambda_risk * cvar) Ez kifejezetten bünteti azokat a stratégiákat, amelyek jó átlagos megtérülést, de katasztrofális farokveszélyt jelentenek. 2. Robusztusság a modell hibához feltételezzük, hogy a modellünk hibás, és optimalizáljuk a ésszerű bizonytalanság határain belül: Legrosszabb eset # Instead of single expected return estimate mu_estimated = historical_returns.mean() # Assume uncertainty mu_lower_bound = mu_estimated - 2 * historical_returns.std() / np.sqrt(len(historical_returns)) # Optimize for worst-case in uncertainty range # (Robust optimization / minmax approach) Ez védi a túlzottan megbízható paraméterbecslések ellen. 3. Kelly-korlátozott pozíció mérete A pozíciós méreteket kifejezetten a Kelly kritérium alapján korlátozzuk, még akkor is, ha az optimalizáló többet akar: def kelly_position_limit(edge, volatility, capital, max_kelly_fraction=0.25): """ edge: expected return per unit risk volatility: standard deviation of returns max_kelly_fraction: fraction of theoretical Kelly to actually use """ kelly_full = edge / (volatility ** 2) kelly_fraction = capital * kelly_full * max_kelly_fraction return kelly_position 25% Kelly-t használunk kemény korlátozásként. Igen, ez csökkenti a várt értéket. Azt is biztosítja, hogy a következő hónapban is kereskedünk. A termelési gondolkodásmód A várható értéktől a termelési gondolkodásig való elmozdulás filozófiai: : "Melyik stratégia a legmagasabb várható megtérülést?" Research mindset "Milyen stratégia fog túlélni, ha tévedek a feltételezéseimmel kapcsolatban?" Production mindset Íme az általunk végrehajtott gyakorlati változások: Backtest: hozzáadott legrosszabb hónap elemzés, nem csak átlagos hozamok Pozícióméret: konzervatív alapértelmezés szerint, az anomáliákra vonatkozó kill-switchekkel Kockázati mutatók: a CVaR napi nyomon követése, nem csak a P&L A modell validálása: feltételezzük a paraméterek 30% -os bizonytalanságát az összes becslésnél Katasztrófa-tervezés: explicit kód útvonalak a „modell teljesen rossz” forgatókönyvekhez A lecke A várható érték egy gyönyörű matematikai koncepció, amely tiszta, intuitív és elméletileg optimális. Ez sem elég. A termelésben nem kereskedsz egy valószínűségi eloszlás ellen. Saját tökéletlen kockázati modellek Változó piacok Operational constraints that aren't in your backtest A pszichológiai valóság, hogy a tőke napról napra csökken, annak ellenére, hogy a „várható érték pozitív” Azok a rendszerek, amelyek túlélnek, nem a legmagasabb várható értékűek, hanem azok, amelyek robusztusak maradnak, amikor a modell helytelen, a piacok elmozdulnak, és fekete farkasok jelennek meg. Először a túlélésre optimalizáljuk, másodszor a jövedelmezőségre.A várható érték ennek a számításnak a része, de nem az objektív funkció.