Законот за припишување на Квант: Ако пост-мена PnL е нагоре, тоа е промената; Ако пост-мена PnL е надолу, тоа е пазарот. Законот за припишување на Квант: Ако постојната промена на PnL е завршена, тоа е промената. Ако пост-мена PnL е надолу, тоа беше пазарот. Работам во квантитативна трговија и градам целосно автоматизирани истражувачки средини и системи за тргување кои ми помагаат да одам од податоци за пазарот до стратегии за тргување на производството до анализа на перформансите.Еден од клучните барања на таквите системи е да ми овозможат брзо да ги тестирам моите идеи и брзо да итерирам за да ги подобрам целокупните перформанси на тргувањето. Тоа е многу очигледна метрика за да се каже дали се справувам подобро од порано или не. PnL Ако некогаш сте извршувале стратегија за тргување во живо, ќе го знаете овој секојдневен ритуал: отворете табла за да ги проверите полнежите, задоцнежите, инвентарот и – неизбежно – да го погледнете PnL. Таа дијаграма е заводлива бидејќи е крајната табела за резултати која сумира колку успешно работи бизнисот. Пазарите се не-стационарни, кластерот на полнење, режимите на нестабилност се свртуваат, микроструктурите се менуваат, а дистрибуцијата на резултатите е дебела. fool yourself Оваа статија дава Преглед на тоа како да го замените PnL-охотувањето со – така што вашиот итерациски круг добива повеќе сигнал по единица време. practical statistical hypothesis testing Зошто PnL е бучна метрика PNL е една од од многу случајни компоненти: Агрегација Вашата дневна PnL дисперзија може да се удвои на еден ден, дури и ако вашиот систем е непроменет. Микросекундно време, позиција на ред, нивоа на надоместоци, скриена против светла интеракција – сето тоа вбризгува случајност во резултатите од тргувањето. Неколку рани победи се спојат во поголема номинална изложеност подоцна (или обратно), правејќи ја кривата да изгледа убедливо без да го менува основниот просечен исход по трговија. Промените на инвентарни капаци, ширини на цитати, внатрешно пресекување или рутирање може да ги поместат PnL во спротивни насоки и да се откажат или да се засилат едни со други. PnL е одлична цел за следење на бизнисот, но не мора да биде соодветна метрика за прифаќање / отфрлање на истражувачки промени на кратки прозорци. Што ние Сакаат да знаат Дој Дој Кога испраќаме промена (на пример, нова функција во сигналот, друга логика на цитирање, друго правило за извршување), сакаме да одговориме: Дали е веројатно дека забележаното подобрување ќе продолжи, или тоа е нешто што го видовме случајно? Is the observed improvement likely to persist, or is it something we saw by chance? Ова нè доведува во светот на статистичкото тестирање на хипотезата, каде што се поставува прашање за статистичката значајност на забележаните резултати. Оваа веројатност е Малите p-вредности значат „ова би било ретко ако немаше вистински ефект.“ Големите p-вредности значат „Она што го видовте е заедничко под бучава“. 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? Не прави ништо p-value Не прави ништо Еден практичен пример: две стратегии кои Различни, но не се Погледнете Погледнете Ајде да се преправаме дека испративме промена и добивме некои занаети на стратегија пред и по промената (или од backtest или од живо тргување). Стратегија А: Пред промената Стратегија Б: По промената Подолу генерирав две синтетички серии PnL за трговија. Токму онаа слика која ги тера тимовите да прогласат победа.Но, дали навистина можеме да му веруваме на она што го гледаме и да направиме заклучоци врз основа на тоа?На крајот на краиштата, не е PnL крајната цел на трговската стратегија?Ние ќе тестираме дали просечниот PnL по трговија навистина се разликува со спроведување на заеднички статистички тест подолу. diverge visibly Кодот што го користев за да ги произведам парцелите и да извршам статистички тест е подолу: 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(); Еве ги броевите што ги извлекува: mean_A=0.0611, mean_B=0.0037 Welch t-statistic=1.380, p-value=0.168 Ние ги гледаме двата стандардни резултати на статистичкиот тест – t-статистичка и p-вредност. Ќе кажам повеќе за нив подолу во приказната. Да се каже дека просечниот PnL по трговија се разликува. Сепак, двете кумулативни линии изгледаат доста далеку. there is not enough evidence Што точно се случило? (демистифицирање на хипотезата тест) Повеќето учебници фрлаат формула и табела на вас. Лично, не ми се допадна овој пристап многу кога прв пат научив за тестирање на статистички хипотези, бидејќи повеќето упатства не ја објаснуваат идејата зад тоа и само ви дозволуваат да запаметите тона работи.Иако можев да работам со него и да пресметам некои резултати слепо следејќи го алгоритмот и гледајќи ги работите во масивни табели, моментот кога ги научив механизмите за да го извлечам и од каде всушност доаѓа сè беше големо олеснување за мене. 1) Прашањето што го поставуваме Нула хипотеза (H0): вистинската просечна PnL по тргување е иста пред и по промената. Алтернативни (H1): тие се разликуваат (двострани), или еден е поголем (еднострани), во зависност од вашето прашање. 2) Статистиката што ја пресметуваме Во своето срце, на е : t-statistic разлика во примерокот значи поделена со стандардна грешка на таа разлика. поделени од . difference in sample means the standard error of that difference Ако двата примероци значат далеку , t-статот добива голема големина. Ако тие се блиску во однос на бучава, t-статот е мал. Што се однесува до тоа колку се бучни 3) од каде доаѓа p-вредноста Под H0 (без реална разлика), t-статистиката следи позната дистрибуција (a со некои степени на слобода). Тоа е едноставно: t-distribution p-value веројатноста, под H0, да се набљудува t-stat барем толку екстремно (голема вредност на t-stat) како оној што го добивте. the probability, under H₀, of observing a t-stat at least as extreme (large value of a t-stat) as the one you got. Тоа е сето она што тие табели (со што може да се соочите во различни водичи за тестирање на хипотеза) го прават - Мала p-вредност значи дека вашата забележана разлика би била ретка ако немаше вистински ефект. looking up a quantile 4) Како да ги прочитате вистинските броеви произведени од горенаведениот Python код Еве што ви кажуваат овие бројки: t ≈ 1.380 вели: набљудуваната разлика во просечниот PnL за тргување помеѓу А и Б е 1.380 стандардни грешки далеку од нула. p ≈ 0.168 (двострано) вели: ако навистина не постои разлика во медиумите, ќе видите разлика барем толку голема околу 16-17% од времето случајно. 5) Зошто графиконите нè измамени Кумулативниот PnL е со илјадници трговија, случајни чекори редовно се одвојуваат со количини кои се појавуваат во очите – дури и ако средствата се идентични. Нашите мозоци се прилагодени за да ги детектираат падини и раздвојување, но не премногу за правилно да се интегрираат разликите. . random walk against the per-trade dispersion 6) Што би било „значајно“ тука? Практично, ќе видите p-вредност на 0.05 ако апсолутното на t-статистички е 1.96 (само 5% од можните t-статистички вредности се над тоа). одржување на варијација и структурата на големината на примерокот иста, ќе треба околу 42% поголема просечна разлика (бидејќи 1.96 / 1.38 ≈ 1.42) за да се достигне 5% двострана бар. „Но ПНЛ е она што ги плаќа сметките.“ Вистина – и... Ние не го отфрламе ПНЛ, ние сме : separating roles PnL ви кажува дали бизнисот како целина работи. Тестовите за хипотеза ќе ви кажат дали оваа специфична промена е веројатно да помогне надвор од примерокот што го видовте. Кога двајцата не се согласуваат, сте научиле нешто: можеби животната средина беше невообичаено поволна, можеби корекцијата на рутирањето ја зголеми изложеноста, можеби сте испратиле повеќе промени. Ефектот е Зголемување Модел на имплементација што го препорачувам (брза итерација без самоизмама) Per-trade PnL е добро, во високата фреквенција / стратегии за правење на пазарот е вообичаено да се користат агрегации како што се по интервал PnL (на пример, 1 минута, 5 минути) за да се одразуваат залихите, надоместоците и агрегацијата на ризикот - и да се намали сериската корелација. 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 Опционално запирање ("ќе гледаме секој час и ќе испраќаме кога p < 0.05") ги надува лажните позитиви. Ракувајте со повеќе споредби. Ако пробате 20 копчиња, еден ќе „победи“ со среќа. Користете лажна стапка на откривање (Benjamini-Hochberg) или Bonferroni во контексти со високи облози. Чувајте централен дневник на сите тестови што ги изведувате. Чувајте се од фрлање и претерано тестирање. Разделете ги пазарите или времето, не дуплирајте карактеристики низ воз / тест и бидете експлицитни за датумите за замрзнување. Вредноста на p може да биде мала за еден милион трговии, но ефектот е економски безначаен по надоместоците и ризикот. Следете ја стабилноста. Реалниот раб треба да преживее поделби: по симбол на ликвидност, по време на денот, по режим на нестабилност. Ако вашата "победа" постои само во еден тенок парче, бидете внимателни. Назад на нашиот пример: што треба да заклучите Со оглед на горенаведените бројки (t ≈ 1.380, p ≈ 0.168): Нема доволно докази дека просечниот PnL на Стратегија Б се разликува од Стратегија А. Приличната дивергенција во кумулативниот PnL е компатибилна со случајноста во рамнопросечни процеси. Или да се соберат повеќе податоци (пред-поставување на поголем примерок), зајакнување на хипотезата (подобри карактеристики, контрола на ризикот), или да се кандидира чист A / B (изолирате збунувачи). Поради Вообичаени стапици (Јас ги направив сите, така што не мора да) Пекирање на тестот постојано и запирање кога p-вредноста се намалува под 0.05.Користете фиксни хоризонти или секвенцијални методи кои сметаат за пекирање, во спротивно ќе подигнете лажни позитиви. Користење на "на пополнување" резултати кога пополнувањата се високо поврзани. Мислите дека имате 100k примероци, но можеби навистина имате 2k независни настани. Споредување на кумулативни криви меѓу периоди со различни волумен / ликвидност и го нарекувате победа. Изедначување на „статистичко значење“ со „економска вредност.“ Малиот раб може да се избрише со надоместоци, одложување на латенцијата или ризик од инвентар. Ако прилагодите 20 карактеристики и го задржите најдобриот, вашата p-вредност мора да се коригира за тој избор. Mnemonic за t-тест кој всушност држи Кога ќе се чувствувате во искушение да го огледате PnL графиконот, запомнете: t = “ колку се далеку двата примерочни средства” ÷ “ колку се несигурни тие средства”. t = “how far the two sample means are” ÷ “how uncertain those means are.” Ако ја удвоите вашата големина на примерокот, значењето (несигурноста) се намалува; тривијалните разлики престануваат да изгледаат „значајни“. Крај на белешките Се надевам дека сте добиле интуиција зошто не е очигледно да ги процените промените во вашата стратегија за тргување со гледање само на разликата PnL, кои статистички алатки може да се користат за да се направи процесот на истражување посилен, и можеби некоја јасност за тоа што лежи зад сите овие термини кои се користат во тестирањето на статистичките хипотези и како всушност да ги изведете без слепо да ги следите упатствата во учебниците. Многу истражувачки тимови бидејќи тие грешат со среќа за подобрување. Тие циклуси низ табла-диригирани прилагодувања додека графиконот изгледа добро, испраќање, а потоа поминуваат месеци на отфрлање на штетата. Вие не треба тешка статистика за да се направи подобро. Вие само треба да ја наведете хипотезата, изберете разумна единица за анализа, користете тест кој го мери сигналот во однос на неизвесноста, почитуваат повеќе тестови и запре правила и одлучуваат врз основа на двете статистика Тимовите градат покомплексни рамки кои одговараат на нивната намена, но ова е добро место за почеток. fail to iterate и Направете го ова и вашата итерација ќе стане посмирена, побрза и покомплексна. Оваа публикација користи само јавно достапни информации и е за образовни цели, а не за инвестициски совети.Сите мислења и мислења изразени се мои и не ги претставуваат оние на било кој од моите поранешни / тековни работодавци или било која друга страна.