Мақсат-функциясын жобалау: сіз оңтайландыратын метрика стратегияңызды жасырын түрде таңдайды
"Иллюзиясыз бэктесттер" сериясының бөлігі.
📄 Бұл мақала зерттеу жұмысына айналды. Төмендегі әрбір сан бақыланатын негізгі шындықты құратын детерминистік скрипттен алынған — қалыпты сигнал жолағында белгілі 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-ге қарсы. Сонымен, тұзақ майлы құйрықтарға қатысты емес. Бұл таза шағын үлгі-плюс-таңдау әсері: ~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%-дан төмен экспозициясы бар лотереяны таңдайды — бірақ 6-seed-тің шамасы сол таралымның экстремалды шетінде тұр. Оны кең тараған сәтсіздіктің әсіресе айқын мысалы ретінде оқыңыз, орташа емес. Біз Per-Trade Sharpe-ты оңтайландырамыз: стратегия нақты позицияда болған барларда ғана есептелетін Sharpe коэффициенті. Мұны хабарлау өте табиғи нәрсе. "Сауда жасағанда, оның мәмілелері қаншалықты жақсы?" Ол шеберлікті бос тұрудан бөліп алатындай сезіледі. Ол керісінше жасайды.
Мінеки, Per-Trade Sharpe 6-seed-де тәж киетін стратегия:
- Табалдырық — ол тек ең кіші сигналдарда ғана сауда жасайды.
- Нарықтық экспозиция 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 стратегияны мүмкіндігінше сирек сауда жасағаны үшін марапаттайды, өйткені неғұрлым аз барда тұрсаңыз, соғұрлым олардың бірнешеуінің сәтті болуы оңайырақ, ал метрика ешқашан "бірақ сіз шынымен нарықта болдыңыз ба?" деп сұрамайды. 6-seed-тің шамасы таңдап алынған — біз әдейі айқынды іздедік — бірақ оның түрі олай емес. Барлық 600 seed бойынша Per-Trade Sharpe 57%-ында азғындаған жеңімпазды таңдайды (сирек сауда жасайтын немесе out of sample ұтылатын), нақтырақ 56%-ында 5%-дан төмен экспозициясы бар лотереяны. Типтік азғындаған таңдау 6-seed-тің 21 Sharpe-нен әлдеқайда жайлы: барлық 600 seed бойынша орта алынғанда, per-trade мақсатының жеңімпазында in-sample per-trade Sharpe 4.58 және орташа экспозиция 0.286 болады — әлі де көп уақыт тегіс, тек 99.6% тегіс емес. 6-seed механизмді драматизациялайды; 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-ге түсіп, out-of-sample 0.70-ке дейін жетеді, өрістегі ең нашары. Белгіге назар аударыңыз: оның 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 нарықта болуды марапаттайды, сондықтан іздеу -ны тым жоғары итереді (6-seed-де raw PnL оптималды 1.04-тің орнына таңдайды), бұл ешбір edge-і жоқ, тек шу қосатын жолақтан тыс барларды тартады. Ол жарылмайды — бірақ per-trade тұзағына қарама-қарсы бағытта нақты оптимумнан асып кетеді. Басқа мақсат, басқа ауытқу, бір сабақ: метрика стратегияны таңдады.
Әлі талқыламаған екі жол — экспозиция табалдырығы мен conf_k — жөндеу болып табылады. Бұл келесі акт.
4-акт — Сегіз мәмілеге неге ешқашан сенуге болмайды

Тұзақты жөндеместен бұрын, сегіз мәміле неге ешнәрсе білдірмейтін 21 Sharpe жасайтынын нақты түсіну маңызды — өйткені шешу тікелей осы себептен туындайды.
Sharpe коэффициенті — бағалау, ал бағалауларда қателік жолағы болады. Эндрю Ло-ның 2002 жылғы нәтижесі бақылаудан бағаланған Sharpe коэффициентінің стандартты қателігін ең қолайлы болжам бойынша береді (IID гаусс кірістері):
Қателік тек бойынша ғана азаяды. Оны тұзаққа қолданайық. 6-seed-дегі 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-ты оның қанша мәмілеге сүйенетініне қарай үздіксіз дисконттаңыз. -ге көбейтіңіз, мұндағы — мәміле саны, ал — тұрақты "сенімділік тұрақтысы" — іздеу алдында таңдалған мәмілеге тең 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 -ге көтеріледі, азғындау -ке түседі. Сол жақ бағанда төмен жылжыңыз (табалдырық қосу, shrinkage-сіз): OOS -ге көтеріледі, азғындау -ке түседі. Кез келген тұтқа, жеке бұралғанда, out-of-sample өнімділікті тәуелсіз көтеріп, азғындауды жояды. Экспозиция табалдырығы мұндағы күштірек жеке тұтқа, өйткені ол тұзақтың анықтаушы белгісіне — нөлге жақын экспозицияға — тікелей шабуыл жасайды.
Бірге олар плато-ға жетеді — және плато дәл Full-Timeline Sharpe. -де жол барлық shrinkage деңгейінде OOS 1.71-де, 0% азғындаумен тегіс; -ке дейін итерсе, 1.73-ке жетеді. Бірақ сол 1.71 не екеніне мұқият қараңыз: бұл жай Full-Timeline Sharpe 3-актіде табалдырықсыз және ешбір shrinkage-сіз көрсететін дәл сол ұпай. Ең жақсы жағдайда, түзетулер Full-Timeline Sharpe-тен асып кетпейді — олар оны қайта құрастырады. Ал толығымен жөнделген робасты мақсат оған тіпті толық жетпейді: барлық 600 seed бойынша ол OOS 1.70-ге 0.17% қалдық азғынумен түседі, толық Sharpe-тың 1.71 / 0%-нен түк қана төмен — ол қарапайымырақ метрикамен әлсіз басым болады. Орташа орта параметр, пен , OOS 1.65-ке 1% азғынумен жетеді — per-trade метрикасы мәжбүрлі түрде берілсе пайдалы, бірақ оны таңдап алудың себебі ешқашан емес.
Дәл сандар масштабқа тәуелді — форма нәтиже. Осы нарықты толығымен жөндейтін нақты мәндер , осы деректер генерациялау процесіне бейімделген; сауда жиілігі мен құйрық қалыңдығы басқа нарықта плато басқа жерде тұрады. Жалпыланатын нәрсе координаттар емес, бет: екі бағытта да монотонды көтерілу, азғындау нөлге қарай жүргізілген, шындықтағы плато. Сіз жоғарыдағыдай сканерлеу арқылы өз координаттарыңызды табасыз.
Екі емдеуді бірге қойыңыз — робасты мақсат, табалдырық 0.20 плюс conf_k 40 — және 6-seed-ке қайта оралыңыз. Тұзақ , сегіз мәміле, 0.13-тің full-timeline OOS Sharpe-ін тәж кигізген еді. Робасты мақсат оның орнына -ды таңдайды: нарықтық экспозиция 0.66, 447 мәміле, жылдық out-of-sample Sharpe 1.77. Сол нақты оптимум -тен бір торлы нүктеге төмен, сондықтан ол дәл ортаға түсудің орнына жақсы экспозицияланған, оптимумға жақын табалдырықты қалпына келтіреді — оның жалғыз seed-тегі out-of-sample Sharpe-і (1.77) кездейсоқ популяция оптимумымен сәйкес келеді. Бір деректер, бір іздеу, бір 80 кандидат табалдырық. Тек "ең жақсы" анықтамасы өзгерді, әрі бұл жеңімпазды тегіс сегіз мәмілелі мифтен нақты, жақсы экспозицияланған edge-ке жылжытты — мұны осы seed-де жай Full-Timeline Sharpe таңдайтын дәл сол табалдырық екенін көрсетеді.
Сканерлеу ашық көрсеткен ескерту: осы нарықта conf_k жалғыз жеткіліксіз. Табалдырықсыз кезінде, азғындау seed-тер бойынша әлі де 22.5%-да — атап айтқанда, 6-seed-де 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-ге қарсы 1.71), ешқашан асып түспейді. Терезені таңдауға еркін болсаңыз, бүкіл уақыт өсін таңдаңыз және жаңартуды толығымен өткізіп жіберіңіз.
Сонымен жобалау қағидасы, анық айтылған:
Мақсатты сирек сәтті мәмілелермен алдап кетпеу мүмкін болмайтындай жобалаңыз. Сізде шамамен басымдық ретімен үш құрал бар:
- Толық уақыт өсінде өлшеңіз. Дерлік ешқашан ауытқымауы тиіс әдепкі. Full-Timeline Sharpe мен жалпы кіріс құрылымы бойынша экспозицияны есепке алады — бос тұру автоматты түрде жазаланады, өйткені тегіс барлар саналады. Егер сіз "тек біз белсенді болған барларда" есептелген метриканы хабарлап жатқаныңызды байқасаңыз, тоқтаңыз да, іздеу сол барларды таңдау еркіндігімен не істейтінін сұраңыз.
- Экспозицияны талап етіңіз. Егер белсенділікке байланысты метриканы қолдануыңыз қажет болса, іздеу сирек сауда жасайтын стратегияны таңдай алмауы үшін экспозицияны табалдырықтаңыз. Бұл осы нақты тұзаққа қарсы ең күшті жеке тұтқа.
- Мәміле санына қарай тарылтыңыз. Мыңдаған бақылауда тұрған Sharpe-тің несиесінен тек бөлшегін мыңдаған бақылауда тұратын Sharpe табатындай кез келген қатынасты -ге дисконттаңыз. Бұл Minimum Track Record Length-тің мақсат деңгейіндегі орындалуы: аз бақылаудан алынған сан сенімсіз (4-акт), сондықтан адал мақсат кейін адамға оны байқауға сенудің орнына, сол сенімсіздікті алдын ала бағаға енгізеді.
Мұның ешбірі іздеуді ақылдырақ етпейді. Ол мақсатты адал етеді, сондықтан іздеу әрдайым істейтінін дәл жасаған кезде — максимумды тапқанда — сол максимум сіз шынымен қалайтын стратегия болады.
Адалдық ескертулері
Үш ескерту, анық айтылған, өйткені бақыланатын зерттеу өз қорытындыларын тек шектерін атаған кезде ғана лайықты болады.
- Нарық синтетикалық, әрі әдейі. Стандартты қалыпты сигнал, -мен шектелген сызықтық edge, майлы құйрықты Student-() шуы — бақыланатын негізгі шындық үшін таңдалған, нарық реализмі үшін емес. Біз мақсаттың дұрыс емес стратегияны таңдайтынын тек оны қай стратегия дұрыс екенін білетін деректерде іске қосу арқылы ғана дәлелдей аламыз. Нақты нарықтар стационарлы емес, автокорреляцияланған және режим ауыстырады. Майлы құйрықтар біз сақтаған реалистік ингредиент, бірақ — табиғи алғашқы болжамға қарама-қарсы, және дәл осы мақаланың бұрынғы жобасына қарама-қарсы — олар тұзақты қуаттандыратын нәрсе емес: гаусс шуы бар бақылау (300 seed) осындағы 57.0%-ға қарсы 55.7% уақытта азғындайды, out-of-sample Sharpe 0.70-ге қарсы 0.71-мен. Тұзақ ауыр құйрықтармен де, олардың сыз да аман қалатын шағын үлгі-плюс-таңдау артефактісі. Нәтиже — диагноз бен жөндеу үлгісі, стратегия немесе әмбебап тұрақты емес.
- Жөндеу мәндері масштабқа тәуелді. Тұзақты толығымен жабатын нақты табалдырық және 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-ге қарсы 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-ке құлайды. Сегіз бақылауда құрылған қатынастың шамамен ±7.7 жылдық стандартты қателігі бар (4-акт) — ол ешқашан ақпарат болмаған.
- Экспозицияны есепке алатын мақсаттар табиғи түрде қауіпсіз. Raw PnL мен Full-Timeline Sharpe ешқашан азғындаған жоқ (0%), өйткені олар бүкіл уақыт өсін өлшейді, ал бос тұру автоматты түрде жазаланады. Толық уақыт өсі метрикасын сирек сауда жасау арқылы алдап кету мүмкін емес. Raw PnL-дың жалғыз кемшілігі — қарама-қарсы ауытқу — ол шамадан тыс экспозициялайды (орташа экспозиция 0.859, OOS 1.61 нақты 1.77-ге қарсы), -ны нарықта көбірек болу үшін оптимумнан асырып жібереді.
- Жөндеу жұмыс істейді — бірақ ол сізді тек Full-Timeline Sharpe-қа қайтарады. Экспозиция табалдырығы мен мәміле санына негізделген (conf_k) shrinkage әрқайсысы тәуелсіз түрде out-of-sample Sharpe-ты көтеріп, азғындауды нөлге қарай итереді; бірге олар плато-ға жетеді. Бірақ сол плато — Full-Timeline Sharpe: -де 59.5%-дан -де 0%-ке дейін азғындау түседі, ал OOS Sharpe 0.66-дан 1.71-ге дейін көтеріледі — жай толық Sharpe көмексіз көрсететін дәл сол сан, ал толығымен жөнделген робасты мақсат шынымен одан түк қана төмен түседі (OOS 1.70, 0.17% азғындау: әлсіз басым болған). 6-seed-де робасты мақсат оптимумға жақын, жақсы экспозицияланған табалдырықты қалпына келтіреді (, нақты -тен бір торлы нүктеге төмен; 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.