De Wet van Toewijzing van Quant: Als post-change PnL is op, was het de verandering. De Wet van Toewijzing van Quant: Als de post-change PnL is op, was het de verandering. Als de post-change PnL daalde, was het de markt. Ik werk in kwantitatieve handel en bouw volledig geautomatiseerde onderzoeksomgevingen en handelssystemen die me helpen om van marktgegevens naar productiehandelsstrategieën te gaan tot prestatieanalyse.Een van de belangrijkste vereisten van dergelijke systemen is om me in staat te stellen mijn ideeën snel te testen en snel te itereren om de algehele handelsprestaties te verbeteren. is een zeer voor de hand liggende metric om te zeggen of ik beter doe dan voorheen of niet. PnL Als je ooit een live handelsstrategie hebt uitgevoerd, zul je dit dagelijkse ritueel kennen: open dashboards om vullingen, latenties, voorraad te controleren en - onvermijdelijk - peek op PnL. Die grafiek is verleidelijk omdat het de ultieme scoreboard is die samenvat hoe succesvol het bedrijf is. Markten zijn niet-stationeel, vullen cluster, volatiliteit regimes flip, microstructure verschuivingen, en de verdeling van de resultaten is vette staart. fool yourself Deze post geeft een Bekijk hoe u PnL-jagen kunt vervangen door Je iteratieloop ontvangt dus meer signaal per eenheid tijd. practical statistical hypothesis testing Waarom PnL een lawaaierige metric is PNL is een van vele willekeurige componenten: aggregeren Uw dagelijkse PnL dispersie kan verdubbelen op een nieuws-y dag, zelfs als uw systeem ongewijzigd is. Microseconde timing, wachtpositie, vergoedingsniveaus, verborgen versus verlichte interactie - alles injecteert willekeurigheid in handelsresultaten. Een paar vroege winsten combineren in een grotere notionele blootstelling later (of vice versa), waardoor de curve er overtuigend uitziet zonder de onderliggende gemiddelde uitkomst per handel te veranderen. Veranderingen in inventariscaps, citatenbreedtes, interne kruising of routing kunnen PnL's in tegenovergestelde richtingen verplaatsen en elkaar annuleren of versterken. PnL is een geweldig doelwit om het bedrijf te volgen, maar niet noodzakelijkerwijs een geschikte metric om onderzoekswijzigingen op korte vensters te accepteren/verwerpen. Wat wij Wilt weten Do van Do van Wanneer we een wijziging verzenden (bijvoorbeeld een nieuwe functie in het signaal, een andere citatielogica, een andere uitvoeringsregel), willen we antwoorden: Is de waargenomen verbetering waarschijnlijk aanhoudend, of is het iets dat we toevallig hebben gezien? Is the observed improvement likely to persist, or is it something we saw by chance? Dit brengt ons naar de wereld van statistische hypothese testen, waar we de statistische betekenis van de waargenomen resultaten in twijfel trekken. Deze waarschijnlijkheid is de Kleine p-waarden betekenen “dit zou zeldzaam zijn als er geen echt effect was”. Under a world where the change to the true mean outcome, how often would we see a difference at least as large as what we observed? doet niets p-value doet niets Een praktisch voorbeeld: twee strategieën die Verschillend, maar niet Kijk Kijk Laten we doen alsof we een verandering hebben geleverd en een aantal transacties hebben gehad op een strategie voor en na de verandering (hetzij van backtest of van live trading). Strategie A: vóór de verandering Strategie B: na de verandering Hieronder heb ik twee synthetische per-trade PnL-series gegenereerd. Maar kunnen we daadwerkelijk vertrouwen wat we zien en conclusies trekken op basis daarvan?Niet is PnL het ultieme doel van een handelsstrategie?We zullen testen of de gemiddelde PnL per handel echt verschilt door een gemeenschappelijke statistische test hieronder uit te voeren. diverge visibly De code die ik gebruikte om de plotten te produceren en een statistische test uit te voeren, is hieronder: import numpy as np import pandas as pd import matplotlib.pyplot as plt from scipy import stats import seaborn as sns sns.set(); rng = np.random.default_rng(49) # generate PnLs per trade n = 1200 pnl_A = rng.normal(loc=0.0, scale=1.0, size=n) pnl_B = rng.normal(loc=0.0, scale=1.0, size=n) # generate cumulative PnLs cum_A = pnl_A.cumsum() cum_B = pnl_B.cumsum() # run a statistical test t_stat, p_value = stats.ttest_ind(pnl_A, pnl_B, equal_var=False) print(f"mean_A={pnl_A.mean():.4f}, mean_B={pnl_B.mean():.4f}") print(f"Welch t-statistic={t_stat:.3f}, p-value={p_value:.3f}") plt.figure(figsize=(12,7)) plt.plot(np.arange(1, n+1), cum_A, label="Strategy A") plt.plot(np.arange(1, n+1), cum_B, label="Strategy B") plt.ylabel("Cumulative PnL", fontsize=15); plt.xlabel("Trade #", fontsize=15); plt.legend(["Cumulative PnL — Strategy A", "Cumulative PnL — Strategy B"], fontsize=15) plt.tight_layout(); plt.savefig("cumulative_pnl_A_vs_B.png", dpi=160); plt.show(); Hier zijn de cijfers die het uitbrengt: mean_A=0.0611, mean_B=0.0037 Welch t-statistic=1.380, p-value=0.168 We zien de twee standaarduitgangen van een statistische test – een t-statistische en een p-waarde. Om te zeggen dat de gemiddelde per-trade PnL verschilt. Toch zien de twee cumulatieve lijnen er vrij ver van elkaar uit. there is not enough evidence Wat is er precies gebeurd? (Demystifying hypothesis testing) Persoonlijk vond ik deze benadering niet erg leuk de eerste keer dat ik leerde over statistische hypothese-testen, omdat de meeste tutorials het idee erachter niet uitleggen en je gewoon een ton dingen laten onthouden.Hoewel ik ermee kon werken en sommige resultaten kon berekenen door blindelings het how-to-algoritme te volgen en dingen in enorme tabellen te bekijken, was het moment dat ik de mechanismen leerde om het af te leiden en waar alles eigenlijk vandaan kwam, een grote opluchting voor mij. 1) De vraag die we stellen Nullhypothese (H0): de werkelijke gemiddelde per handel PnL is hetzelfde voor en na de verandering. Alternatieve (H1): ze verschillen (tweezijdig), of één is groter (eenzijdig), afhankelijk van uw vraag. 2) De statistieken die we berekenen In zijn kern, de is het: t-statistic verschil in steekproef betekent gedeeld door de standaardfout van dat verschil. verschil in steekproef betekent gedeeld door de standaardfout van dat verschil. Als de twee monsters ver van elkaar verschillen , de t-stat wordt groot in grootte. Als ze dicht bij lawaai zijn, is de t-stat klein. Over hoe lawaaierig ze zijn 3) Waar de p-waarde vandaan komt Onder H0 (geen echt verschil) volgt de t-statistiek een bekende verdeling (a met een zekere mate van vrijheid). Het is eenvoudig: t-distribution p-value de waarschijnlijkheid, onder H0, van het observeren van een t-stat ten minste zo extreem (grote waarde van een t-stat) als degene die je kreeg. the probability, under H₀, of observing a t-stat at least as extreme (large value of a t-stat) as the one you got. Dat is al die tabellen (die je misschien hebt geconfronteerd in verschillende hypothese-testgids) doen - Een kleine p-waarde betekent dat het waargenomen verschil zeldzaam zou zijn als er geen werkelijk effect was. looking up a quantile 4) Hoe de werkelijke getallen te lezen geproduceerd door de bovenstaande Python-code Hier is wat die cijfers je vertellen: t ≈ 1.380 zegt: het waargenomen verschil in de gemiddelde per-trade PnL tussen A en B is 1.380 standaardfouten weg van nul. p ≈ 0,168 (tweezijdig) zegt: als er echt geen verschil in middelen was, zou je een verschil zien dat minstens zo groot is ongeveer 16-17% van de tijd per toeval. dat is niet zeldzaam genoeg om een echt effect te beweren. 5) Waarom de kaarten ons bedriegen Cumulatieve PnL is een Met duizenden trades, willekeurige wandelingen regelmatig gescheiden door oog-popping bedragen – zelfs als de middelen identiek zijn. Onze hersenen zijn ingesteld om hellingen en scheiding te detecteren maar niet te veel om variantie correct te integreren. de t-test dwingt u om het gemiddelde verschil te wegen . random walk against the per-trade dispersion 6) Wat zou hier “belangrijk” zijn geweest? In de praktijk zou je de p-waarde zien bij 0,05 als de absolute van t-statistiek 1,96 is (alleen 5% van de mogelijke t-statistische waarden zijn daarbuiten). Door variantie en steekproefgroottestructuur hetzelfde te houden, zou je ongeveer 42% groter gemiddeld verschil nodig hebben (omdat 1.96 / 1.38 ≈ 1.42) om de 5% tweezijdige bar te bereiken. “Maar PnL is degene die de rekeningen betaalt.” We verlaten de PNL niet, we zijn : separating roles PnL vertelt u of het bedrijf als geheel werkt. Hypothese tests vertellen u of deze specifieke verandering waarschijnlijk zal helpen buiten het monster dat u net zag. Wanneer de twee het niet eens zijn, heb je iets geleerd: misschien was de omgeving ongewoon gunstig, misschien een routing tweak versterkte blootstelling, misschien heb je meerdere veranderingen verzonden. Het effect . Incrementele Implementatiepatroon dat ik aanbeveel (snelle iteratie zonder zelfbedrog) Per-trade PnL is goed, in high-frequency / market-making strategieën is het gebruikelijk om aggregaties zoals per-interval PnL (bijvoorbeeld, 1-minute, 5-minute) te gebruiken om voorraad, vergoeding en risico-aggregatie te weerspiegelen - en om seriële correlatie te verminderen. For a mean-effect question, Welch’s t-test is a good default. If tails are very heavy or serial correlation is strong, switch to: Choose the statistic. (cluster by day, by venue, by symbol group), or Cluster-robust tests (label-shuffling), or Randomization / permutation tests (resample blocks to respect autocorrelation). Bootstrap Pre-commit de stop-regel. optionele stop ("we zullen elke uur kijken en schepen wanneer p < 0.05") opblaast valse positieven. Beslis de horizon of het aantal transacties voordat u het experiment start. Behandel meerdere vergelijkingen.Als je 20 knoppen probeert, zal er één "winnen" door geluk.Gebruik valse ontdekkingspercentage (Benjamini-Hochberg) of Bonferroni in contexten met hoge inzet.Bewaar een centraal logboek van alle tests die je uitvoert. Wees beschermd tegen lekkage en backtest overfitting. splits markten of tijd, dubbel niet duiken functies over de trein / test, en wees expliciet over bevriezen data. Een p-waarde kan klein zijn voor een miljoen transacties, maar het effect is economisch betekenisloos na vergoedingen en risico's. Track effect grootte (bijv. gemiddelde verschil in basispunten per transactie), en risicogerichte PnL (Sharpe, drawdown), niet alleen statistische betekenis. Een echte rand moet splitsingen overleven: door symbolische liquiditeitsbak, door tijd-of-dag, door volatiliteitsregime. Terug naar ons voorbeeld: wat u moet concluderen Gezien de bovenstaande cijfers (t ≈ 1,380, p ≈ 0,168): Er is niet genoeg bewijs dat strategie B's gemiddelde per-trade PnL verschilt van strategie A. De redelijke divergentie in cumulatieve PnL is compatibel met willekeurigheid onder gelijk-gemiddelde processen. Verzamel ofwel meer gegevens (vooraf een grotere steekproef instellen), versterk de hypothese (betere functies, risicobeheersing), of voer een cleaner A / B (isolate confounders). vanwege Gemeenschappelijke valstrikken (ik heb ze allemaal gemaakt, dus je hoeft niet) Peeking op de test herhaaldelijk en stoppen wanneer de p-waarde daalt onder 0.05. Gebruik vaste horizon of sequentiële methoden die rekening houden met peeking, anders verhoogt u vals positieve. Met behulp van "per-fill" -resultaten wanneer vullingen sterk correleren. U denkt dat u 100k-monsters hebt, maar u kunt echt 2k-onafhankelijke gebeurtenissen hebben. Vergelijk cumulatieve curven tussen periodes met verschillende vol / liquiditeit en noem het een winst. Vergelijking van "statistische betekenis" met "economische waarde."Een kleine rand kan worden weggevaagd door vergoedingen, latency slippage of voorraadrisico. Als u 20 functies aanpast en de beste behoudt, moet uw p-waarde voor die selectie worden gecorrigeerd. Een mnemoniek voor de t-test die echt steekt Wanneer je de verleiding hebt om een PnL-grafiek te bekijken, onthoud dan: t = “hoe ver de twee monster middelen zijn” ÷ “hoe onzeker die middelen zijn”. t = “how far the two sample means are” ÷ “how uncertain those means are.” Als u uw steekproefgrootte verdubbelt, krimpt de noemer (onzekerheid); triviale verschillen stoppen met "significant" te kijken. Eindige notities Ik hoop dat je een beetje intuïtie hebt achter waarom het niet duidelijk is om de veranderingen in je handelsstrategie te beoordelen door alleen naar het PnL-verschil te kijken, welke statistische hulpmiddelen kunnen worden gebruikt om het onderzoeksproces robuuster te maken, en mogelijk wat duidelijkheid over wat er achter al deze termen ligt die worden gebruikt bij het testen van statistische hypothesen en hoe ze daadwerkelijk kunnen worden afgeleid zonder blindelings de instructies van het leerboek te volgen. Veel onderzoeksteams Omdat ze geluk misleiden voor verbetering. Ze cyclen door dashboard-gedreven aanpassingen totdat de grafiek er goed uitziet, verzenden het, en dan maanden doorbrengen met het ontwijken van de schade. Je hebt geen zware statistieken nodig om beter te doen. Je hoeft alleen maar de hypothese te stellen, een redelijke eenheid van analyse te kiezen, een test te gebruiken die signaal meten ten opzichte van onzekerheid, meerdere test- en stopregels te respecteren en te beslissen op basis van beide statistieken Teams bouwen meer complexe kaders die geschikt zijn voor hun doel, maar dit is een goede plek om te beginnen. fail to iterate en Doe dit en je iteratieloop wordt kalmer, sneller en compounder. Deze publicatie maakt uitsluitend gebruik van openbaar beschikbare informatie en is voor educatieve doeleinden, geen beleggingsadvies.Alle meningen en meningen uitgedrukt zijn mijn eigen en vertegenwoordigen niet die van een van mijn voormalige / huidige werkgevers of andere partijen.