Максат-функциясын долбоорлоо: сиз оптималдаштырган метрика стратегияңызды жашыруун тандап алат
"Иллюзиясыз бэктесттер" сериясынын бөлүгү.
📄 Бул макала изилдөө эмгегине айланды. Төмөндөгү ар бир сан көзөмөлдөнгөн негизги чындыкты түзгөн детерминисттик скрипттен алынган — орточо сигнал тилкесинде белгилүү edge'и бар жана бардык жерде майлуу куйруктуу шуусу бар синтетикалык рынок — андан кийин алты башка максат-функциясынын алдында босого издөө жүргүзөт жана, out of sample, ар бир максат чын мененен кайсы стратегияны тандап алаарын өлчөйт. Макаланы онлайн (интерактивдүү версия + PDF) objective-design.marketmaker.cc баракчасынан окуңуз, код жана маалыматтар github.com/suenot/objective-design-degeneracy дарегинде.
Сиз эң жакшы стратегияны каалайсыз. Ошондуктан издөө жүргүзөсүз — босогону, lookback'ти, стоп аралыгын сканерлейсиз жана эң жогорку упай алган параметрди калтырасыз. Издөө аяктайт жана сизге жеңүүчүнү берет. Акылга сыярлык. Стандарттуу. Бул жерде ар бир оптимизатор, grid search жана гиперпараметр тюнери жасаган нерсе.
Бирок этишке карагыла: эң жогорку упай алат. Эмнеде эң жогору? Издөө эч нерсени таажы кийгизе электе, сиз ага максималдаштырыла турган жалгыз санды бериш керек болду — максат-функциясын. PnL. Sharpe. Соода жасалган барларда Sharpe. Максималдуу кемүүгө болгон кирешенин катышы. Сиз булардын бирин терип, балким көп ойлонбой, андан кийин издөө миллион баалоону так сиз сураган нерсени аткарууга сарптады.
Ошол бир тандоо формалдуулук эмес. Бул — бүтүндөй чечим. Издөө "жакшы стратегияны" таппайт — андай нерсе абстракттуу мааниде жок. Ал сиз тандаган скалярды максималдаштырган стратегияны табат, ал ар түрдүү скалярлар бир эле маалыматтарда таптакыр башка стратегияларга көрсөтөт. Максат — руль үстүндөгү жашыруун кол, жана көбүнчө эч ким ага карабайт.
Бул жерде бүтүндөй макала бир таблицада. Бир босого издөө, чыныгы, белгилүү edge'и бар бир синтетикалык рынок, алты максат — жана алар тандаган алты стратегия, бөлүнүп сакталган маалыматтарда өлчөнгөн:
| Максат (издөө эмнени максималдаштырат) | Орточо рыноктук экспозиция | In-sample Sharpe | Out-of-sample Sharpe | Деградацияланган жеңүүчүлөр |
|---|---|---|---|---|
| Raw PnL | 0.859 | 1.76 | 1.61 | 0% |
| Full-Timeline Sharpe | 0.740 | 1.82 | 1.71 | 0% |
| Per-Trade ("активдүү") Sharpe | 0.286 | 1.00 | 0.70 | 57% |
| Экспозиция босогосу () | 0.740 | 1.82 | 1.71 | 0% |
| Бүтүм санына негизделген shrinkage (conf_k) | 0.523 | 1.54 | 1.31 | 20.7% |
| Робусттук (босого + conf_k) | 0.675 | 1.78 | 1.70 | 0.2% |
600 көз карандысыз seed, ар бирисинде бар, издөөгө 80 талапкер босого, in-sample жана out-of-sample көз карандысыз алынган. Жылдык Sharpe (жылына 252 мезгил). "Деградацияланган" = тандалган жеңүүчү рынокто убакыттын 5%дан азында болду, же оң эмес out-of-sample Sharpe көрсөттү. Бул рыноктун чыныгы оптимуму — 1.77 жылдык out-of-sample Sharpe.
Үчүнчү сапты ачуу тийгенче окуп чыгыңыз. Per-Trade Sharpe — активдүүлүккө байланыштуу метрикалардын бүтүн үй-бүлөсүнүн өкүлү (per-trade Sharpe, expectancy, ван Тарптын SQN'у, утуш ылдамдыгы), баары соода жасалган барларда гана эсептелген — out of sample башкалардын жарымынан начар стратегияны тандап алат жана муну 57% учурда деградацияланган түрдө жасайт. Бул кыйла начараак максат эмес. Бул маалыматтарда бул — тузак, жана издөө анда жарымынан көбүрөөк учурда кабылат. Эми андан жогорку сапты окуп чыгыңыз: жөнөкөй Full-Timeline Sharpe эч качан деградацияланбайт жана out of sample 1.71 упай алат. Бул бүткүл оңдоонун жыйынтыгы, эрте ачылды — ак ниет чечим жөн эле толук убакыт огунда өлчөө; төмөнкү саптардагы татаалыраак оңдоолор, эң жакшы учурда да, бул сан менен гана теңелет, эч качан андан ашпайт. Бул макала — ошол тузактын жана анын оңдолушунун анатомиясы, негизги чындык бүткүл мезгилде белгилүү болгондуктан "максат туура стратегияны тандадыбы?" деген суроо факты болот, ой-пикир эмес.
1-акт — Жашыруун чечим: Гудхарт мыйзамы — бул издөө

1975-жылы экономист Чарльз Гудхарт өзүнүн башка бардык ишинен узакка жашаган сүйлөмдү жазды:
"Any observed statistical regularity will tend to collapse once pressure is placed upon it for control purposes."
Марилин Стратерндин атына көбүнчө жазылган популярдуу парафраза так: өлчөм максатка айланганда, ал жакшы өлчөм болбой калат.
Параметр издөө — Гудхарт мыйзамынын эң таза мисалы. Максат-функциясы — өлчөм. Издөө — басым — ошол өлчөмдү мүмкүн болушунча жогору түртүү үчүн миңдеген, миллиондогон аракеттер. Ал эми издөөгө ошол өлчөм менен эмнени айткыңыз келгени такыр маанисиз. Ага так гана сан маанилүү. Эгер санды чоңойтуунун чыныгы, соода кыла турган edge'ге эч кандай тиешеси жок жолу болсо — сейрек соода кылуу, көбүнчө текши туруу, бир нече ийгиликтүү четтеп кеткен учурларды кармап алуу — издөө ошол жолду табат, анткени максимумду табуу — анын түзүлүш максаты жалгыз нерсе.
Бул AI-коопсуздук адабияты reward hacking деп атаган так ошол каталык: сиз каалаган нерсенин проксисин оптималдаштырган агент прокси менен максаттын ортосундагы ар бир боштукту пайдаланат. Сиздин издөөңүз — ошол агент. "Sharpe ratio" — ошол прокси. "Мен кийинки чейректе чыныгы акчаны ишенип тапшыра турган стратегия" — чыныгы максат. Алардын ортосундагы боштук — бүтүн тармактын жашоочу жери.
Ошол боштуктун ачылышын көрүү үчүн, бизге чындыкты билген дүйнө керек. Ошондуктан биз аны түзөбүз.
Рынок. Ар бир мезгилде болжолдоочу (стандарттык калыпта сигнал) келет, андан кийин ал жарым-жартылай болжолдогон киреше келет. Edge чыныгы, бирок чектелген — ал орточо сигнал тилкесинде гана бар, андан сырткары жоголот:
Эки долбоорлоо тандоосу маанилүү. Биринчиден, edge орточо тилкеде жашайт: экстремалдуу сигналдар эч кандай болжолдоочу маалымат алып жүрбөйт, ошондуктан стратегия ортоңку бөлүктү соода кылып, куйруктарды өткөрүп жиберүүгө тийиш. Экинчиден, шуу майлуу куйруктуу (4 эркиндик даражасы бар Student-, чыныгы кирешелерде чын эле болгон оор куйрук түрү) — бирок бул ингредиент бул жерде реализм үчүн, механизм үчүн эмес. Майлуу куйруктар тузакты мүмкүн кылган нерсе экенин айтуу азгырыктуу, жана биз көзөмөлдү жүргүзгөнгө чейин так ошону болжолдодук: бул рыноктун гаусс шуусу бар версиясы (жыйынтыктардагы gaussian_control, 300 seed) тузакты дээрлик өзгөрүүсүз кайталайт — per-trade максаты гаусс шуусунда дагы деле 55.7% убакытта деградацияланат, майлуу куйруктар менен 57.0% менен салыштырганда, ал эми анын out-of-sample Sharpe'и 0.71 менен 0.70гo салыштырганда. Демек, тузак майлуу куйруктарга тиешелүү эмес. Бул таза кичине үлгү-плюс-тандоо эффекти: ~20 төмөн экспозициялуу босогонун арасынан, бир аз байкоолордо эсептелген Sharpe'дин максимумун алыңыз, жана кандайдыр бир ийгиликтүү бурч ар дайым укмуштуудай көрүнөт. Каалаган шуу бөлүштүрүлүшү муну жасайт; рынокто бир нече барга гана болгон стратегия таза бактылуулук менен бир нече ыңгайлуу кыймылдарды өтүп, эч нерсени билдирбеген in-sample санды бере алат. Биз майлуу куйруктарды сактайбыз, анткени чыныгы кирешелерде алар бар, тузакка алар керек болгондуктан эмес.
Стратегия. Бир параметрдик үй-бүлө. Сигналдын багыты боюнча соода кылыңыз, анын чоңдугу босогодон төмөн болгондо, болбосо текши туруңуз:
Абдан кичине гана эң кичине, эң байкалбаган сигналдарда соода кылат — сейрек бүтүмдүү лотерея, рынокто дээрлик эч качан болбойт. Тилке четине жакын бүткүл чыныгы edge'ди кармап, жакшы экспозицияланган. Абдан чоң баарын соода кылат, эч кандай edge'и жок, шуу гана кошкон тилкеден тышкаркы барларды кошкондо да.
def gen_dataset(T, rng, beta=0.30, band=1.0, tail_df=4):
s = rng.standard_normal(T)
edge = beta * np.where(np.abs(s) <= band, s, 0.0) # edge ONLY inside |s| <= 1
t = rng.standard_t(tail_df, T) / np.sqrt(tail_df / (tail_df - 2.0)) # fat tails, unit var
return s, edge + t
def simulate(s, r, theta):
pos = np.where(np.abs(s) <= theta, np.sign(s), 0.0) # trade the band, skip outliers
strat = pos * r
active = pos != 0.0
exposure = active.mean() # fraction of bars in a position
sharpe_full = strat.mean() / strat.std(ddof=1) # on the WHOLE timeline
sharpe_active = strat[active].mean() / strat[active].std(ddof=1) # on ONLY the active bars
return dict(exposure=exposure, n_trades=int(active.sum()),
sharpe_full=sharpe_full, sharpe_active=sharpe_active, pnl=strat.sum())
Рынокту өзүбүз түзгөндүктөн, чындыкты түз эсептей алабыз — 600 seed боюнча ар бир босогодогу орточо натыйжалуулук, out of sample. Чыныгы оптимум жерде: так сигнал тилкесинин четинде, рынокто убакыттын болжол менен **70%**инде (алынган: стандарттык калыпта сигнал ичине ыктымалдуулугу менен түшөт), жылдык out-of-sample Sharpe 1.77 берет. Бул — ар бир максат табууга аракет кылган сан. Аны эсиңизде сактаңыз: θ≈1.04, OOS Sharpe 1.77, убакыт огунун болжол менен 70%и рынокто. Максат мунуздан алыс тандаган нерсе — максаттын ийгиликсиздиги, рыноктун кыйынчылыгы эмес.
2-акт — Тузак: сегиз ийгиликтүү бүтүм, 21ге тете Sharpe, элес

Эми бул рыноктун конкреттүү тартылышына жөнөкөй максатты бошотуп коёлу — seed 6. Seed тууралуу толук ачыктык: ал биринчи тартылыш да, кокустук да болгон эмес. Биз ачык деградацияланган per-trade жеңүүчүнү издеп, seed'дерди сканерледик жана дал ушуну тандадык, механизм байкалбай калбашы үчүн. Ал көрсөткөн натыйжа толугу менен типтүү — 3-акт ырастагандай, per-trade максаты бардык seed'дердин 56%инде 5%дан төмөн экспозициясы бар лотереяны тандайт — бирок seed 6нын чоңдугу ошол бөлүштүрүлүштүн экстремалдуу четинде турат. Аны кеңири таралган ийгиликсиздиктин өзгөчө курч мисалы катары окуп чыгыңыз, орточо катары эмес. Биз Per-Trade Sharpe'ти оптималдаштырабыз: стратегия чын мененен позицияда болгон барларда гана эсептелген Sharpe катышы. Муну билдирүү өтө табигый нерсе. "Соода кылганда, анын бүтүмдөрү канчалык жакшы?" Бул чеберчиликти активсиздиктен бөлүп ала тургандай сезилет. Ал тескерисинче жасайт.
Мына, Per-Trade Sharpe seed 6да таажы кийгизген стратегия:
- Босого — ал гана эң кичине сигналдарда соода кылат.
- Рыноктук экспозиция 0.4% — убакыттын 99.6%инде текши.
- Сегиз бүтүм. Сегиз. 2000 бардын ичинде.
- In-sample per-trade жылдык Sharpe: 21.09.
- In-sample full-timeline Sharpe: 0.82.
- Out-of-sample full-timeline Sharpe: 0.13.
Per-trade метрикасы 21.09 көрсөтөт — эч бир чыныгы стратегия эч качан көрсөтпөгөн сан, фондду ишке киргизе турган көрсөткүч. Ал эми бул толугу менен элес. Ошол сегиз бүтүм кокустан бир нече ыңгайлуу кыймылды кармап алды; так ошол сегиз бар боюнча өлчөгөндө, орточо менен стандарттык четтөөнүн катышы астрономиялык. Бирок толук убакыт огунда — стратегия убакыттын 99.6%инде текши жатканда — ошол "edge" дээрлик эч нерсе кошпойт: in-sample'де 0.82 full-timeline Sharpe, жаңы маалыматтарда 0.13гө чейин кулайт. Максат тандаган жеңүүчү, бардык соода максаттары үчүн, текши.
Жана бул ошол босогодо чыныгы edge да эмес. Рыноктон эсте калтырыңыз: edge тилкесинде жашайт, ал эми так ортосунда, сигнал эң алсыз жерде турат. деги чыныгы out-of-sample ийри сызыгы −0.01 — нөлдөн айырмаланбайт (негизги чындык ийри сызыгынан алынган). Издөө кичине чыныгы edge таппады. Ал шуунун сегиз ийгиликтүү тартылышын тапты жана аларды 21ге тете Sharpe катары билдирди.
Бул кичине тузак: Per-Trade Sharpe стратегияны мүмкүн болушунча сейрек соода кылганы үчүн сыйлайт, анткени канчалык аз барда турсаңыз, ошончолук алардын бир нечесинин ийгиликтүү болушу оңой, ал эми метрика эч качан "бирок сиз чын мененен рынокто болдуңузбу?" деп сурабайт. Seed 6нын чоңдугу тандалып алынган — биз атайын курч бирин издедик — бирок анын түрү андай эмес. Бардык 600 seed боюнча Per-Trade Sharpe **57%**инде деградацияланган жеңүүчүнү тандайт (аз соода кылган же out of sample жеңилген), так **56%**инде 5%дан төмөн экспозициясы бар лотереяны. Типтүү деградацияланган тандоо seed 6нын 21ге тете Sharpe'инен алда канча жумшагыраак: бардык 600 seed боюнча орточо алганда, per-trade максатынын жеңүүчүсүндө in-sample per-trade Sharpe 4.58 жана орточо экспозиция 0.286 бар — дагы деле көп убакыт текши, бирок 99.6% текши эмес. Seed 6 механизмди драмалаштырат; 56% сизди тынчсыздандырышы керек болгон бөлүк. Жарымынан көбүрөөк учурда, бул күнүмдүк метрика сизге лотерея билетин берип, аны стратегия деп атайт.
3-акт — Статистикалык чындык: алты максат, 600 seed

Бир seed эч нерсени далилдебейт; ал жөн гана көрсөтөт. Максатты өлчөө үчүн ал орточо алганда эмнени тандап аларын, көптөгөн көз карандысыз рынокторго карата суроо жана ошол тандоону издөө эч качан көрбөгөн маалыматтарда бааланышы керек. Ошондуктан: 600 seed, ар бири рыноктун көз карандысыз тартылышы; ар бирисинде, ар бир максат алдында 80-босого издөөнү жүргүзөбүз; экспозицияны, тандалган нерсенин in-sample жана out-of-sample Sharpe'ин, ошол тандоо деградацияланганбы же жокпу деп жазабыз.
| Максат | Орточо экспозиция | In-sample Sharpe | Out-of-sample Sharpe | IS→OOS түшүү (абс.) | Деградацияланган |
|---|---|---|---|---|---|
| Raw PnL | 0.859 | 1.76 | 1.61 | 0.15 | 0.0% |
| Full-Timeline Sharpe | 0.740 | 1.82 | 1.71 | 0.11 | 0.0% |
| Per-Trade Sharpe | 0.286 | 1.00 | 0.70 | 0.30 | 57% |
| Экспозиция босогосу () | 0.740 | 1.82 | 1.71 | 0.11 | 0.0% |
| conf_k shrinkage () | 0.523 | 1.54 | 1.31 | 0.23 | 20.7% |
| Робусттук (босого + conf_k) | 0.675 | 1.78 | 1.70 | 0.08 | 0.2% |
"IS→OOS түшүү" тилкеси — жылдык Sharpe'дин in-sample'ден out-of-sample'ге чейинки абсолюттук кулашы (мисалы, 0.30 кулаш), пайыз эмес. Жана "Экспозиция босогосу" сабы "Full-Timeline Sharpe" менен байт-байтка бирдей экенине көңүл буруңуз: бул кокустук эмес, 5-акт эмне үчүн экенин түшүндүрөт.
Үч факт дароо көзгө урунат, ар бирисинин сабагы бар.
Per-Trade Sharpe — деградацияланган жалгыз жөнөкөй максат. Анын орточо экспозициясы 0.286 — ал көбүнчө текши жаткан стратегияларды тандайт — жана анын in-sample Sharpe'и 1.00 0.30гo түшүп, out-of-sample 0.70гo жетет, талаадагы эң жаманы. Белгиге көңүл буруңуз: анын in-sample саны (1.00) таасирдүү да эмес, бирок кайсы болбосун жеке seed'де ал 21 per-trade көрсөткүчүн кубанып билдирет. Орточо мааниси жоголот, анткени ийгиликтүү терезелер кокустук багыттарга көрсөтөт; out-of-sample'ге чейин калган нерсе 0.70 гана, жана жеке тандоолордун 57%и таптакыр начар.
Экспозицияны эсепке алган максаттар табигый түрдө коопсуз. Raw PnL жана Full-Timeline Sharpe эч качан деградацияланбайт (0.0%). Себеп структуралык: экөө тең бүтүн убакыт огунда өлчөнөт, ошондуктан убакыттын 99.6%инде текши жаткан стратегия алардын алдында дээрлик эч нерсе таппайт. Толук убакыт огу метрикасын сейрек соода кылуу менен алдап кетүү мүмкүн эмес — текши туруу түз жана автоматтык түрдө жазаланат, анткени текши барлар бөлгүчтө турат. Бул макаланын эң маанилүү идеясы, биз 6-актта ага кайра кайрылабыз.
Raw PnL коопсуз, бирок оптималдуу эмес — ал ашыкча экспозицияланат. Кылдаттык менен караңыз: Raw PnL'дин орточо экспозициясы 0.859, баарынын ичинен эң жогорку, ал эми анын out-of-sample Sharpe'и (1.61) full-timeline Sharpe'ден (1.71) жана чыныгы оптимумдан (1.77) бир басым төмөн. PnL рынокто болууну сыйлайт, ошондуктан издөө 'ны өтө жогору түртөт (seed 6да, raw PnL оптималдуу 1.04нун ордуна тандайт), бул эч кандай edge'и жок, шуу гана кошкон тилкеден тышкаркы барларды тартат. Ал жарылбайт — бирок per-trade тузагынын карама-каршы багытында чыныгы оптимумдан ашып кетет. Башка максат, башка бурмалоо, бир эле сабак: метрика стратегияны тандады.
Биз азырынча талкуулай элек эки сап — экспозиция босогосу жана conf_k — оңдоо болуп саналат. Бул кийинки акт.
4-акт — Эмне үчүн сегиз бүтүмгө эч качан ишенүүгө болбойт

Тузакты оңдоодон мурун, сегиз бүтүм эмне үчүн эч нерсени билдирбеген 21 Sharpe чыгарарын так түшүнүү маанилүү — анткени чечим түз ушул себептен келип чыгат.
Sharpe катышы — баа, ал эми баалардын ката тилкелери бар. Эндрю Лонун 2002-жылкы натыйжасы байкоодон бааланган Sharpe катышынын стандарттык катасын эң жомок болжолдун алдында берет (IID гаусс кирешелери):
Ката боюнча гана азаят. Аны тузакка колдонолу. Seed 6дагы per-trade Sharpe жылдык , бул байкоо башына , бар боюнча эсептелген. Стандарттык ката
(Лонун формуласынан алынган). Чекиттик баа — ; анын бир-сигма ката тилкеси болжол менен — муну иллюстративдик тартип катары окуп чыгыңыз, калибрленген ишеним аралыгы эмес, анткени формула биздин майлуу куйруктуу шуубуз бузган IID гаусс кирешелерин болжолдойт. Ошондой болсо да, кабар ачык: "21ге тете Sharpe" — дээрлик эч кандай маалымат бербеген ушунчалык кенен бөлүштүрүлүштөн алынган сан — жана бул жомок эсептөө, анткени Мертенстин кеңейтилиши майлуу куйруктар менен кыйгачтык стандарттык катаны андан ары гана шишип кетирерин көрсөтөт. Сейрек бүтүмдүү бэктесттин Sharpe'и анын чекиттик маанисинен бардык багытта бир учурда ишенимсиз: өтө аз байкоо, жана туура эмес бөлүштүрүлүш.
Бул так Minimum Track Record Length формалдаштырган нерсе (Bailey & López de Prado, 2012). Ал суроону тескерилейт — ишеним менен ушул өлчөмдөгү Sharpe'ге ишенүү үчүн канча байкоо керек? —
"аз бүтүмдүү бэктестерге азыраак ишен" деген принципти бүтүмдөрдүн так, текшерилүүчү санына айландырат. Максат долбоорлоо үчүн терең идея мындай: жакшы максат ичинен минималдуу track record'ду талап кылышы керек, адамга жеңүүчү сегиз байкоодо тургандыгын кийин байкоого мүмкүнчүлүк бербестен. Per-Trade Sharpe тескерисинче жасайт — ал байкоо санын минимумга түртүү менен максималдашат. Оптимуму "мүмкүн болушунча аз бүтүм" болгон каалаган максат, түзүлүшү боюнча, өзүнүн эң ишенимсиз баасын издеген максат болуп саналат.
Тузакта эки ийгиликсиздик кошулат, экөөнү тең атоо бизге аны кантип оңдоону айтат. Биринчиден, кичине үлгү шуусу: сегиз байкоо эч кандай катышты бекитпейт. Экинчиден, тандоо: ошол сегиз бар бизге берилген эмес — издөө аларга түшкөн босогону тандады, жарым-жартылай алар ийгиликтүү болгондуктан. Издөө — максимизатор; ал ар дайым шуу кокустан сигналдай көрүнгөн мейкиндик бурчун табат. Муну жакшыраак чекиттик баа менен айланып өтүү мүмкүн эмес. "Эң жакшы" дегендин маанисин өзгөртүү керек, ийгиликтүү бурч максимум болбошу үчүн.
5-акт — Оңдоо: экспозиция босогосу жана бүтүм санына негизделген shrinkage

Бизде эки аталган оору бар — өтө сейрек соода кылат жана өтө аз байкоодо турат — ошондуктан биз эки дарылоо жазабыз, ар бирисин бирине багыттап.
1-дарылоо: экспозиция босогосу. Эң жөнөкөй мүмкүн болгон чечим. Рынокто кеминде убакыт болбогон каалаган стратегияны түздөн-түз четке кагыңыз — эгер ал аз соода кылса, анын упайы болот жана издөө аны тандай албайт. Бирок эмнени босого кылуу маселесинде ак ниет нюанс бар, жана бул бүткүл ушул макаланын тынч сабагы. Өз алдынча максат катары биз Full-Timeline Sharpe'ти босого кылдык, жана бул рынокто бул такыр эч нерсени өзгөртпөйт: Full-Timeline Sharpe'дин өз жеңүүчүсү мурунтан эле ~74% экспозицияда, ошондуктан 20% босого эч качан иштебейт. Дал ошондуктан жогорудагы таблицалардагы "экспозиция босогосу" жана "Full-Timeline Sharpe" саптары байт-байтка бирдей — мурунтан эле коопсуз метрикага босого коюу жөн эле толук Sharpe'ти кайра чыгарат. Босого гана башкача бурчка жүгүрө турган метриканы коргогондо көрүнөрлүк иш жасайт: per-trade метрикасы, төмөнкү робусттук максаттагыдай. Башкача айтканда, "экспозицияны талап кылуу" жана "толук убакыт огунда өлчөө" бул маалыматтарда бир интервенциянын эки аты.
2-дарылоо: бүтүм санына негизделген shrinkage — "conf_k". Per-trade метрикасы менен калгыңыз келгенде жана катаал кесүүнүн ордуна жумшак түзөтүү каалаганда: Sharpe'ти анын канча бүтүмгө таянарына жараша үзгүлтүксүз дисконттоо. гo көбөйтүңүз, мында — бүтүм саны, ал эми — туруктуу "ишеним туруктуусу" — издөө алдында тандалган бүтүмгө тете prior күчү:
болгондо, упай, чийки Sharpe канчалык чоң болбосун, нөлгө карай кысылат; болгондо упай чийки Sharpe'ге жакындашат. Бул MinTRL жана 4-акттын стандарттык катасы менен бирдей түзөтүү логикасы — кичине үлгү баасын анын үлгү көлөмүнүн азаюучу функциясы катары нөлгө карай тартуу — пост-хок фильтр катары эмес, түз максатка киргизилген. Эң жакын аталган прецедент — ван Тарптын System Quality Numberи (), ал да per-trade сапат метрикасын бүтүм санына жараша масштабдайт — бирок функционалдык форма башкача ( чексиз өсөт, ал эми 1де каныгат). Формасы боюнча биздики байесчил тактыкка байланыштуу салмактанган / эмпирикалык-байес стилиндеги shrinkage; бул ушул маселе үчүн биздин курулушубуз, адабияттан алынган аталган баалоочу эмес.
def obj_active_sharpe(m): # the trap: Sharpe on only the active bars
return m["sharpe_active"]
def _shrink(n, conf_k): # trade-count shrinkage n / (n + k)
return n / (n + conf_k) if (n + conf_k) > 0 else 0.0
def obj_confk(m, conf_k=40.0): # few trades -> little credit
return m["sharpe_active"] * _shrink(m["n_trades"], conf_k)
def obj_robust(m, e_min=0.20, conf_k=40.0): # both cures at once
if m["exposure"] < e_min: # floor: reject strategies that barely trade
return -np.inf
return m["sharpe_active"] * _shrink(m["n_trades"], conf_k)
Эми ак ниет бөлүк: канча босого, канча shrinkage? Экөөнү тең сканерлеп, бүтүн бетти окуп чыгыңыз. Ар бир клетка 600дүн үчтөн бир бөлүгү болгон 200 seed боюнча орточо out-of-sample Sharpe (эки өлчөмдүү сканерлөөнү арзан кармоо үчүн), жанында деградация деңгээли менен:
| \ conf_k | |||
|---|---|---|---|
| 0.00 | 0.66 (59.5%) | 1.26 (22.5%) | 1.47 (11.5%) |
| 0.05 | 1.43 (10.0%) | 1.53 (6.0%) | 1.60 (4.0%) |
| 0.10 | 1.64 (1.5%) | 1.65 (1.0%) | 1.67 (1.0%) |
| 0.20 | 1.71 (0.0%) | 1.71 (0.0%) | 1.71 (0.0%) |
| 0.35 | 1.73 (0.0%) | 1.73 (0.0%) | 1.73 (0.0%) |
Орточо жылдык out-of-sample Sharpe, деградация деңгээли кашаанын ичинде. Жогорку сол жактагы клеткасы — чийки per-trade Sharpe — босогосуз, shrinkage'сиз: OOS 0.66, деградацияланган 59.5%. Бул 3-акттын per-trade сабы менен бирдей максат, ал 0.70 / 57% окуду; кичине айырма толугу менен seed жыйындысынан: бул сканерлөө 200 seed колдонот, Монте-Карло бардык 600дү колдонду. Бирдей метрика, кичине үлгү.
Бет үч окуудан тунук окуя айтат.
Ар бир дарылоо жалгыз иштейт. Жогорку сап боюнча оңго жылыңыз (shrinkage кошуу, босогосуз): OOS гo көтөрүлөт, деградация гo түшөт. Сол мамычада ылдый жылыңыз (босого кошуу, shrinkage'сиз): OOS гo көтөрүлөт, деградация гo түшөт. Каалаган тобо, жалгыз бурулганда, out-of-sample натыйжалуулукту көз карандысыз көтөрүп, деградацияны жоготот. Экспозиция босогосу бул жерде күчтүүрөөк жалгыз тобо, анткени ал тузактын аныктоочу белгисине — нөлгө жакын экспозицияга — түз чабуул жасайт.
Бирге алар плато'го жетишет — жана плато так Full-Timeline Sharpe. де сап бардык shrinkage деңгээлинде OOS 1.71де, 0% деградация менен тегиз; гe чейин түртсө, 1.73кo жетет. Бирок ошол 1.71 эмне экенине кылдаттык менен караңыз: бул жөн гана Full-Timeline Sharpe 3-актта босогосуз жана эч кандай shrinkage'сиз көрсөткөн так ошол упай. Эң жакшы учурда, оңдоолор Full-Timeline Sharpe'ти ашпайт — алар аны кайра куруйт. Ал эми толугу менен оңдолгон робусттук максат ага толук жетпейт да: бардык 600 seed боюнча ал OOS 1.70гe 0.17% калдык деградация менен түшөт, толук Sharpe'дин 1.71 / 0%инен түк эле төмөн — ал жөнөкөйрөөк метрика тарабынан алсыз түрдө басымдуулук кылынган. Орточо орто параметр, жана менен, OOS 1.65кe 1% деградация менен жетет — per-trade метрикасы мажбурлап берилсе пайдалуу, бирок аны тандап алуунун себеби эч качан эмес.
Так сандар масштабга көз каранды — форма натыйжа. Бул рыноктун толугу менен оңдой турган нак маанилер , ушул маалымат генерациялоо процессине ылайыкташтырылган; соода жыштыгы жана куйрук калыңдыгы башка рынокто плато башка жерде турат. Жалпыланган нерсе координаттар эмес, бет: эки багытта тең монотондуу көтөрүлүү, деградация нөлгө карай жүргүзүлгөн, чындыктагы плато. Сиз жогорудагыдай сканерлөө аркылуу өз координаттарыңызды табасыз.
Эки дарылоону чогуу коюңуз — робусттук максат, босого 0.20 плюс conf_k 40 — жана seed 6гo кайра кайрылыңыз. Тузак , сегиз бүтүм, 0.13тин full-timeline OOS Sharpe'ин таажы кийгизген эле. Робусттук максат анын ордуна ду тандайт: рыноктук экспозиция 0.66, 447 бүтүм, жылдык out-of-sample Sharpe 1.77. Ошол чыныгы оптимум тен бир тор чекитине төмөн, ошондуктан ал так борборго тийбестен, оптималдуулукка жакын, жакшы экспозицияланган босогону калыбына келтирет — анын жалгыз seed'деги out-of-sample Sharpe'и (1.77) кокустан популяция оптимуму менен дал келет. Бир маалыматтар, бир издөө, бир 80 талапкер босого. Гана "эң жакшы" аныктамасы өзгөрдү, жана бул жеңүүчүнү тегиз сегиз бүтүмдүү элестен чыныгы, жакшы экспозицияланган edge'гe жылдырды — бул, кызыктуусу, бул seed'де жөнөкөй Full-Timeline Sharpe тандаган так ошол босого.
Сканерлөө ачык көрсөткөн эскертүү: бул рыноктук conf_k жалгыз жетишсиз. Босогосуз болгондо, деградация seed'дер боюнча дагы деле 22.5%да — ал эми so seed 6да, conf_k жалгыз ти тандайт, 35 бүтүм, out-of-sample Sharpe −0.06. Отуз беш бүтүм shrinkage'ден жеңип чыгууга жетиштүү упай менен аман калат. Экспозиция босогосу ошол акыркы боштукту жабат, анткени ал тузактын чыныгы белгисине — текши турууга — түз нысана алат, бүтүм санын анын прокси'си катары ишенүүнүн ордуна.
6-акт — Тереңирээк сабак: толук убакыт огунда өлчөө

Оңдоодон бир кадам артка чегинип, коопсуз максаттарды тузактан чыныгы эмне бөлгөнүн байкаңыз. Бул чеберчилик эмес эле. Raw PnL жана Full-Timeline Sharpe Per-Trade Sharpe'ден жөнөкөйрөөк, жана алар эч качан деградацияланган эмес — 600 seed боюнча 0% — босогосуз, shrinkage'сиз, эч кандай тюнингсиз.
Бөлүнүү сызыгы жалгыз касиет: метрика кайсы терезени өлчөйт? Per-Trade Sharpe гана стратегия туруу үчүн тандаган барларды өлчөйт — издөө каалагандай тарыта турган өзүн-өзү тандаган терезе. Full-Timeline Sharpe жана жалпы PnL бүтүн убакыт огун, текши барларды кошкондо, өлчөйт. Сиз толук убакыт огу метрикасын сейрек соода кылуу менен эч качан чоңойто албайсыз, анткени текши жаткан ар бир саат — эч нерсе таппаган бөлгүчтөгү саат. Экспозиция босогосу жана conf_k, акырында, per-trade метрикасын толук убакыт огунун метрикалары бекер алган экспозицияны эсепке алуу менен жаңылоо жолдору гана. Сканерлөө бизге ошол жаңылоонун чегин мурун эле айткан: эң жакшы учурда ал Full-Timeline Sharpe менен теңелет (OOS 1.70 vs 1.71), эч качан андан ашпайт. Терезени тандоого эркин болсоңуз, бүтүн убакыт огун тандаңыз жана жаңылоону толугу менен өткөрүп жиберилиз.
Ошентип долбоорлоо принциби, ачык айтылган:
Максатты сейрек ийгиликтүү бүтүмдөр менен алдай албагандай долбоорлоңуз. Сизде болжолдуу артыкчылык тартибинде үч курал бар:
- Толук убакыт огунда өлчөңүз. Дээрлик эч качан четтебей турган демейки. Full-Timeline Sharpe жана жалпы киреше түзүлүшү боюнча экспозицияны эсепке алат — активсиздик автоматтык түрдө жазаланат, анткени текши барлар эсептелет. Эгер өзүңүздү "биз активдүү болгон барларда гана" эсептелген метриканы билдирип жатканыңызды байкасаңыз, токтоп, издөө ошол барларды тандоо эркиндиги менен эмне кыларын сураңыз.
- Экспозицияны талап кылыңыз. Эгер активдүүлүккө байланыштуу метриканы колдонушуңуз керек болсо, экспозицияны босого кылыңыз, ошондо издөө аз соода кылган стратегияны тандай албайт. Бул ушул конкреттүү тузакка каршы эң күчтүү жалгыз тобо.
- Бүтүм санына жараша тартыңыз. Каалаган катышты гo дисконттоңуз, ошондо бир аз байкоодо турган Sharpe миңдеген байкоодо туруучу Sharpe'дин кредитинин бир бөлүгүн гана табат. Бул Minimum Track Record Length'дин максат деңгээлиндеги аткарылышы: аз байкоодон алынган сан ишенимсиз (4-акт), ошондуктан ак ниет максат ошол ишенимсиздикти адамга кийин байкоого ишенүүнүн ордуна алдын ала баага киргизет.
Мунун эч бирөө издөөнү акылдуураак кылбайт. Ал максатты ак ниет кылат, ошондуктан издөө ар дайым жасаган нерсени так жасаганда — максимумду тапканда — ошол максимум сиз чын мененен каалаган стратегия болот.
Ак ниеттик эскертүүлөр
Үч эскертүү, ачык айтылган, анткени көзөмөлдөнгөн изилдөө өз корутундуларын гана чектерин атаган учурда татыктуу болот.
- Рынок синтетикалык, жана атайын. Стандарттык калыпта сигнал, менен чектелген сызыктуу edge, майлуу куйруктуу Student-() шуусу — көзөмөлдөнгөн негизги чындык үчүн тандалган, рыноктук реализм үчүн эмес. Биз максат туура эмес стратегияны тандаарын гана аны кайсы стратегия туура экенин билген маалыматтарда иштетүү менен далилдей алабыз. Чыныгы рынокторо стационардык эмес, автокорреляцияланган жана режим алмаштыруучу. Майлуу куйруктар биз сактаган реалисттик ингредиент, бирок — табигый биринчи болжолдон карама-каршы, жана дал ушул макаланын мурунку долбоорунан карама-каршы — алар тузакты кубаттандыруучу нерсе эмес: гаусс шуусу бар көзөмөл (300 seed) бул жердеги **57.0%**гo салыштырмалуу 55.7% убакытта деградацияланат, out-of-sample Sharpe 0.71гe салыштырмалуу 0.70 менен. Тузак — оор куйруктар менен же алар жоксуз аман калган кичине үлгү-плюс-тандоо артефакти. Натыйжа — диагноз жана оңдоо үлгүсү, стратегия же универсалдуу туруктуу эмес.
- Оңдоо маанилери масштабга көз каранды. Тузакты толугу менен жабуучу так босого жана shrinkage ушул маалымат генерациялоо процессине — анын соода жыштыгына, куйрук калыңдыгына, edge өлчөмүнө — ылайыкташтырылган. Башка маалыматтарда плато жылат. Ташымалданган нерсе — сканерлөө бетинин формасы (эки тободо тең монотондуу көтөрүлүү, деградация нөлгө, чындыктагы плато) жана өз координаттарыңызды табуу ыкмасы: экөөнү тең сканерлеп, бетти окуп чыгыңыз, сандарды көчүрбөңүз.
- conf_k биздин курулушубуз, аталган баалоочу эмес. Бүтүм санына негизделген shrinkage — биз ушул маселе үчүн курган байесчил тактыкка байланыштуу салмактанган / эмпирикалык-байес стилиндеги курал; анын негиздемеси текшерилген Ло/Мертенс стандарттык ката натыйжасына жана Bailey–López de Prado MinTRL'ине таянат, ал эми анын эң жакын аталган туугандары ван Тарптын System Quality Number'ы (, башка функционалдык форма), бирок биз өзү адабиятта бир ат менен пайда болот деп ырастабайбыз. Анын шеригинде дарылоолор — экспозиция босогосу, толук убакыт огунда өлчөө — так айтылган стандарттуу практика. Жана бул жерде кайсы максаттар мурунтан эле коопсуз болгонуна көңүл буруңуз: Raw PnL жана Full-Timeline Sharpe эч качан оңдоону талап кылган эмес, анткени алар башынан эле экспозицияны эсепке алат — ушунчалык, Full-Timeline Sharpe'ти босого кылуу жөн эле Full-Timeline Sharpe'ге чейин азаят, анын жеңүүчүсү мурунтан эле каалаган акылга сыярлык босогодон ашат. Тузак так Per-Trade / активдүү Sharpe — жана толугу менен оңдолгон per-trade максат да Full-Timeline Sharpe менен гана теңелет (OOS 1.70 vs 1.71), эч качан андан ашпайт. Негизги сабак оңдоо эмес; бул башынан эле толук убакыт огунда өлчөө.
Негизги корутундулар
- Максат — чечим, формалдуулук эмес. Издөө "жакшы стратегияны" таппайт — ал сиз берген каалаган скалярдын максимизаторун табат, ал эми ар түрдүү скалярлар бирдей маалыматтарда таптакыр башка стратегияларды тандайт. Максатты тандоо — стратегияны тандоо дегендик; андан ары агым боюнча баары эсеп-кысап гана. Бул — Гудхарт мыйзамы: сиздин метрикаңыз издөөнүн максатына айланган учурда, издөө анын жана сиз айткан нерсенин ортосундагы ар бир боштукту пайдаланат.
- Per-Trade Sharpe — тузак. Стратегия соода кылган барларда гана өлчөнгөн, ал мүмкүн болушунча сейрек соода кылуу менен максималдашат — байкоо канчалык аз болсо, ошончолук бир нече ийгиликтүү кыймылдын катышты шишип кетиши оңой (гаусс көзөмөлү майлуу куйруктар керек эмес экенин ырастайт; бул кичине үлгү-плюс-тандоо эффекти). 600 seed боюнча ал алардын **56%**инде 5%дан төмөн экспозициясы бар лотереяны тандайт жана **57%**да деградацияланат; типтүү деградацияланган тандоо орточо эсеп менен 4.58 in-sample per-trade Sharpe'ти берет. Атайын тандалган курч seed'де, ал сегиз бүтүмдүү, 0.4% экспозициясы бар стратегияны 21.09 in-sample per-trade Sharpe менен таажы кийгизген, ал 0.13 full-timeline out-of-sample Sharpe'гe кулаган. Сегиз байкоодо курулган катыштын болжол менен ±7.7 жылдык стандарттык катасы бар (4-акт) — ал эч качан маалымат болгон эмес.
- Экспозицияны эсепке алган максаттар табигый түрдө коопсуз. Raw PnL жана Full-Timeline Sharpe эч качан деградацияланган эмес (0%), анткени алар бүтүн убакыт огун өлчөйт жана активсиздик автоматтык түрдө жазаланат. Толук убакыт огу метрикасын сейрек соода кылуу менен алдай албайсыз. Raw PnL'дин жалгыз кемчилиги — карама-каршы бурмалоо — ал ашыкча экспозицияланат (орточо экспозиция 0.859, OOS 1.61 чыныгы 1.77гo салыштырганда), 'ны рынокто көбүрөөк болуу үчүн оптимумдан ашырат.
- Оңдоолор иштейт — бирок алар сизди Full-Timeline Sharpe'гe гана кайра алып келет. Экспозиция босогосу жана бүтүм санына негизделген (conf_k) shrinkage ар бирисин көз карандысыз түрдө out-of-sample Sharpe'ти көтөрүп, деградацияны нөлгө карай түртөт; чогуу алар плато'гo жетишет. Бирок ошол плато — Full-Timeline Sharpe: де **59.5%**дан дe **0%**гo деградация түшөт, ал эми OOS Sharpe 0.66дан 1.71гe көтөрүлөт — жөн эле толук Sharpe жардамсыз көрсөткөн так ошол сан, ал эми толугу менен оңдолгон робусттук максат чынында андан түк эле төмөн түшөт (OOS 1.70, 0.17% деградация: алсыз түрдө басымдуулук кылынган). Seed 6да робусттук максат оптималдуулукка жакын, жакшы экспозицияланган босогону калыбына келтирет (, чыныгы тен бир тор чекитине төмөн; 447 бүтүм; OOS Sharpe 1.77). conf_k'ты per-trade метрикасы мажбурлап берилген учурдагы резерв катары карагыла, толук убакыт огун өлчөөдөн жогорку жакшыртуу катары эмес. Так координаттар масштабга көз каранды; беттин формасы — ташымалдана турган натыйжа.
- Максатты сейрек ийгиликтүү бүтүмдөр менен алдай албагандай долбоорлоңуз. Артыкчылык тартибинде: толук убакыт огунда өлчөө (демейки), экспозицияны талап кылуу (эң күчтүү жалгыз тобо), бүтүм санына жараша тартуу (максат деңгээлиндеги Minimum Track Record Length). Мунун эч бирөө издөөнү акылдуураак кылбайт — ал максатты ак ниет кылат, ошондуктан издөө сөзсүз түрдө тапкан максимум сиз чын мененен соода кыла турган стратегия болот.
Параметр издөө — баш ийген жин. Ал сиз айткан так каалоону аткарат, сиз айткыңыз келген нерсени эмес — ал эми "ушул метриканы максималдаштыр" — ошол каалоо. Аны per-trade Sharpe катары түзгүлө, ал сегиз ийгиликтүү бүтүмдү чакырып, аларды байлык деп атайт. Аны текши туруу жазаланчудай жана бир аз бүтүм гана бир аз кредит тапчудай түзгүлө, ошол эле жин, ошол эле маалыматтарда, сизге чыныгы edge'ди берет. Сиз жайгаштырган стратегия максатты терген учурда тандалган. Аны атайын тандаңыз.
Толук эксперимент — синтетикалык рынок, алты максат, 600-seed Монте-Карло, оңдоо-сканерлөө бети, ар бир сан детерминисттик скрипттен кайра жаралуучу — objective-design.marketmaker.cc даректеги шерик макалада, код жана маалыматтар github.com/suenot/objective-design-degeneracy дарегинде.
Бул биздин башка изилдөөлөр ар түрдүү бурчтардан алып барган бирдей согуштун бир майданы. Deflated Sharpe Ratio көп жолу текшерүүдөн кийин издөөнүн жеңүүчүсүнө баа коёт — бул макала максат биринчи кезекте туура стратегияны тандадыбы деп сураса, DSR тандалган стратегия таза бактылуулук чыгара тургандан ашабы деп сурайт. Алдыдагы probability of backtest overfitting изилдөөсү ошол эле тандоо бурмалоосуна кайра үлгүлөө тарабынан чабуул жасайт, жеңүүчүнүн ордуна процедураны баалайт. Ал эми look-ahead bias taxonomy жалган Sharpe жаратуучу дагы бир чоң булакты каталогдойт — келечектен агуу — ал таптакыр башка механизм аркылуу так ошол симптомду (тирүү кезинде өлүп калган укмуштуу бэктест) жаратат. Максат долбоорлоо, дефляция, ашыкча жамалуу ыктымалдуулугу, look-ahead: бир тармактын төрт аты — өз бэктестиңизден алданбоо.
Authors
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.