← Мақалаларға оралу
July 4, 2026
5 мин оқу

Кездейсоқ іздеу vs ақылды іздеу: кроссоверді алгоритм емес, бағалау құны анықтайды

Кездейсоқ іздеу vs ақылды іздеу: кроссоверді алгоритм емес, бағалау құны анықтайды
#алгосауда
#бэктест
#гиперпараметрлерді оңтайландыру
#байестік оңтайландыру
#walk-forward
#overfitting
Part 7 of 10 · Collection
High-Performance Backtest Engines

"Иллюзиясыз бэктестер" сериясының бөлігі.

Гиперпараметрлерді оңтайландыруда жалпыға белгілі бір қағида бар: кездейсоқ іздеу (random search) - сен асып түсетін базалық деңгей. Bergstra мен Bengio-дың классикалық нәтижесі (2012) кездейсоқ іздеудің тор (grid) іздеуден жақсы екенін дәлелдеді; содан кейін байестік оңтайландыру, TPE, CMA-ES және Hyperband/ASHA сияқты multi-fidelity әдістер өз кезегінде кездейсоқ іздеуден асып түсуі керек еді. Сондықтан біз өз сауда қозғалтқышымыз үшін параметрлерді іздеу әдістерін бенчмарктегенде, әдеттегі баспалдақты күттік: төменде кездейсоқ іздеу, үстінде ақылды сэмплер.

Біз керісінше нәтиже алдық - әрі оқулықтағыдай жауапты да алдық. Бірдей стратегия, бірдей параметрлер кеңістігі, бірдей мақсат функциясы, бірдей машина. Біз өзгерткен жалғыз нәрсе - бір бэктестің қаншалықты қымбат екені, және іздеу әдістерінің рейтингі керісінше айналды. Әр бағалау арзан болғанда, қарапайым scrambled Sobol тізбегі кез келген "ақылды" сэмплерді басып тастады. Ал әр бағалауды қымбат еткенде, ақылды әдістер алға шығып, out-of-sample тексеруден өткен жалғыз конфигурацияны тапты.

Мұндағы сабақ "кездейсоқ іздеу бағаланбай жүр" немесе "байестік оңтайландыру артық бағаланған" дегенде емес. Мәселе мынада: кездейсоқ пен ақылды іздеу арасындағы кроссоверді алгоритмнің ақылдылығы емес, бағалау құны басқарады. Оптимизаторыңызды оның беделіне қарап емес, бір бэктестің қанша тұратынына қарап таңдаңыз. Бұл мақала кроссовердің дәл қай жерде тұрғанын, неге дәл сол жерде тұрғанын және қымбат режимнің әдістерінің (ерте тоқтату, multi-fidelity кесу) жалпы қауіпсіз пайдалануға бола ма, соны шешетін бір алғышартты - fidelity-ді - өлшейді.

Төмендегінің бәрі біздің бэктестердегі екі скриптен алынған: арзан single-timeframe режимі үшін bench_search.py (v4, commit ee092f1), және қымбат multi-timeframe режимі үшін bench_search_multitf.py (commit 102853c). Екеуі де leak-free - шешім i барының жабылуында қабылданады, орындалу open[i+1]-де болады - және екеуі де әрбір әдісті іздеу ешқашан көрмейтін бөлек тест терезесі бар multi-fold rolling walk-forward мақсат функциясы бойынша бағалайды.

Сұрақ: өткізу қабілеті ме, әлде sample-efficiency ме?

Іздеу бюджеті бір бөлшек ретінде - нақты уақыт (wall-clock) ask/tell құны мен бағалау құнының қосындысына бөлінген - мұнда бөлімдегі бағалау құны мүшесі таза өткізу қабілеті жеңе ме, әлде әр нүктені орналастыру жеңе ме, соны шешеді

Әрбір іздеу әдісі өзінің нақты уақыт бюджетін екі нәрсеге жұмсайды: келесі нүктені қайдан алу керегін шешу (сэмплердің өз есептеуі) және сол нүктені бағалау (бэктестті жүргізу). Біріншісін ask/tell құны деп, екіншісін бағалау құны (eval cost) деп атайық. Тұрақты нақты уақыт бюджетіндегі әдістің тиімді іздеу қуаты шамамен мынаған тең:

points explored    wall-clock budgetask/tell cost+eval cost\text{points explored} \;\approx\; \frac{\text{wall-clock budget}}{\text{ask/tell cost} + \text{eval cost}}

ал оның түпкілікті сапасы - осы санның әр нүктенің қаншалықты жақсы орналасқанына көбейтіндісі. Бір-біріне қарсы тартатын екі тетік:

  • Throughput (өткізу қабілеті) - секундына нүкте саны. Қарапайым сэмплерлердің (кездейсоқ, scrambled Sobol/QMC) ask/tell құны нөлге жақын: олар төмен алшақтықты (low-discrepancy) нүктені шығарады да, әрі қарай жүре береді. Олар санды максимумға жеткізеді.
  • Sample-efficiency (үлгі тиімділігі) - әр нүктенің сапасы. Ақылды сэмплерлер (TPE, CMA-ES, ASHA) әр нүктені жақсырақ орналастыру үшін мақсат функциясын модельдеуге нақты есептеу қуатын жұмсайды. Олар орналастыруды максимумға жеткізеді, бірақ бұл өткізу қабілеті есебінен болады.

Қай тетіктің жеңетіні толығымен бөлімге байланысты. Бағалау құны өте кіші болғанда, бөлімде ask/tell құны басым болады, сондықтан оны ұлғайтатын кез келген нәрсе - сурогат модель, ядролық тығыздықты бағалау (kernel density estimate), ковариацияны жаңарту - зерттелетін нүктелер санын тікелей азайтады. Бағалау құны үлкен болғанда, ask/tell құны дөңгелектеу қатесі ғана болады, сондықтан ақылдылық іс жүзінде тегін тұрады да, оны барынша көп "сатып алу" керек.

Бүкіл тезис бір сөйлемде осындай: ask/tell салығы тұрақты, бірақ оның маңыздылығын сіз оны бөлетін бағалау құны анықтайды. Енді мұның қалай болатынын көрелік.

Арзан режим: қарапайым Sobol өткізу қабілеті бойынша жеңеді

Арзан режимде scrambled Sobol ағыны параметрлер кеңістігін мыңдаған тегінге жақын бағалаулармен толтырады, ал TPE мен ASHA өздерінің ask/tell механизмінің артында тұрып қалады, бюджетінің көбін қарау орнына ойлауға жұмсайды

Біздің single-timeframe стратегиямыз - 7 параметрлі кеңістіктегі leak-free HMA/HMA3 бөліну ережесі, ол процесс ішіндегі numba eval_batch арқылы бағаланады, ол конфигурациялар бойынша процесаралық үстеме шығынсыз prange жүргізеді. Бұл қозғалтқышта бір бэктест дерлік тегін - таза ядро конфигурацияларды шамамен 3-4 мың cfg/с жылдамдықпен бағалайды. Бұл - арзан режим, және дәл осы жерде сауда HPO фольклорының көбі шыққан deep learning жағдайынан күрт ерекшеленеді: біздің "мақсат функциямыз" 6 сағаттық GPU оқыту жүрісі емес, ол 0,3 миллисекундтық массив өтуі.

Біз әр әдіске бірдей бюджет бердік - 1500 бағалау - және әрқайсысы осы бағалауларға жұмсаған нақты уақытты, сонымен қатар тапқан бөлек тест мақсат функциясын жаздық. Бағалау бюджеті тұрақты болғандықтан, нақты уақыт бағаны әр сэмплердің үстеме шығынын тікелей көрсетеді:

Әдіс Бағалаулар Нақты уақыт Өткізу қабілеті Бөлек TEST
sobol (QMC) 1,500 0.53 s ~2,830 cfg/s −259
random 1,500 0.85 s ~1,770 cfg/s −27
sobol→cmaes 1,500 1.38 s ~1,085 cfg/s −367
cmaes 1,500 1.76 s ~850 cfg/s −85
tpe 1,500 9.76 s ~154 cfg/s −161
tpe-mv+sobol 1,500 12.15 s ~123 cfg/s −151
asha (folds) 1,500 15.79 s ~95 cfg/s −165

TEST - бұл іздеу ешқашан қол тигізбеген бөлек терезедегі (held-out window) walk-forward мақсат функциясы (жылдық PnL-per-active-time × trade-count confidence); неғұрлым жоғары болса, соғұрлым жақсы.

Екі факт бірден көзге түседі. Біріншіден, өткізу қабілеті бағанына назар аударыңыз. Scrambled Sobol ~2 830 cfg/с жылдамдықпен жұмыс істейді - бұл қозғалтқыштың шегіне жақын. TPE ~154 cfg/с, ал ASHA ~95 cfg/с жылдамдықпен жұмыс істейді. Бұл дәл сол бағалау санын орындау үшін 18-30 есе баяулау дегенді білдіреді. Ақылды сэмплерлер артық ештеңе бағаламайды; олар осы уақытты өздерінің ask/tell механизмінің ішінде жұмсайды.

Екіншіден - және дәл осы бөлік әңгімені адал етеді - ешбір әдіс оң out-of-sample нәтиже таппады. Барлық TEST мәні теріс. Single-timeframe режимінде біздің стратегияда мықты OOS артықшылық (edge) жоқ, сондықтан "қай әдіс жеңеді" деген сұрақ түпкілікті пайда туралы емес; ол іздеу тиімділігі туралы сұрақ. Ал тұрақты бағалау бюджетіндегі іздеу тиімділігі бойынша қарапайым әдістер айқын жеңеді: Sobol пен random ақылды сэмплерлермен бірдей немесе одан жақсы held-out көрсеткіштерге жетеді, әрі нақты уақыттың небәрі 1/20 бөлігін жұмсай отырып.

Енді салыстыруды практик нақты сезінетіндей етіп аударайық - бағалау санын емес, нақты уақытты тұрақты етіп алайық. Егер әр әдіске ASHA-ға өзінің 1500 бағалауы үшін қажет болған 15,8 секундты берсеңіз, Sobol 1500-де тоқтамайды. Ол шамамен 45 000 конфигурацияға дейін жалғаса береді. Арзан режимде сұрақ ешқашан "қай сэмплер 1500 нүктені ең жақсы орналастырады" деген болмайды - ол "әр нүкте дерлік тегін болғанда, сіз 1500 ақылмен орналастырылған нүктені қалайсыз ба, әлде 45 000 scrambled нүктені қалайсыз ба?" деген болады. Бағалау тегінге жақын болғанда, кеңдік (breadth) жеңеді. 7 өлшемді кеңістікті отыз есе көбірек қамту оны жақсырақ модельдеуден асып түседі.

Ask/tell салығы

20 есе қайда кетеді? Бэктестке емес - ол барлық әдістерде бірдей. Ол сэмплердің әр нүкте бойынша есеп жүргізуіне кетеді, бұл Python-да, циклдің ішінде орындалады:

  • TPE әр ask-та бір жұп ядролық тығыздық бағалауын (жақсы vs жаман трайлдар) сәйкестендіреді, ал бұл құн трайл тарихымен бірге өседі. Multivariate TPE оларды өлшемдер бойынша бірлесіп сәйкестендіреді - көбірек модельдеу, көбірек Python.
  • CMA-ES әр ұрпақта ковариация матрицасын жаңартады және одан сэмплдейді. Бұл жерде TPE-ден арзанырақ (~850 cfg/с жылдамдықпен жұмыс істеді), бірақ бәрібір Sobol нүктесін шығарудан бір реттік шамаға артық үстеме шығын әкеледі.
  • ASHA прунердің promotion/rung есебін төлейді, әрі біздің folds-as-fidelity дизайнымызда, ол ештеңе кесе алмас бұрын индикаторды алдын ала есептеудің тұрақты құнын төлейді - сондықтан оның "үнемделген" бағалаулары есеп көрсеткеннен азырақ үнемдейді.

Мұның бәрі алгоритмдерге сын емес. Мәселе мынада: ask/tell құны әр нүктеге шамамен тұрақты миллисекунд саны, ал ол қоршап тұрған бағалау да бірнеше миллисекунд болғанда, сол тұрақты құн кенеттен бюджеттің 90%-ына айналады. Ақылды сэмплер нақты уақытының тоғыз бөлігінің оны қайдан қарау керегін ойлауға, ал бір бөлігін нақты қарауға жұмсайды. Scrambled Sobol тізбегі оның бәрін қарауға жұмсайды. Қарау арзан болғанда, қарау жеңеді.

Біз әдейі толық Gaussian-process байестік оптимизаторын мұнда бенчмарктемедік, және дәл сол себеппен: GP сурогаты трайл саны бойынша O(n3)O(n^3) болып табылады. Миллисекунд тұратын бағалауға қарсы, сурогатты сәйкестендіру кеңістіктің мәнді бөлігін бағалап үлгермей тұрып, бүкіл іздеу бюджетін жұтып қояр еді. Арзан режимде GP-BO арифметиканың өзінен тыс қалады.

Қымбат режим: кроссовер керісінше өзгереді

Кроссовер нүктесі: бір бағалау қымбаттаған сайын, екі әдістің қисықтары қиылысады - соқыр Sobol құлдырайды, ал ақылды, құнды ескеретін (cost-aware) сэмплер одан асып өтіп, оң out-of-sample аймаққа өткен жалғыз әдіске айналады

Енді бір бэктесті қымбат етейік. Multi-timeframe стратегиясы жоғарғы, ортаңғы және төменгі таймфреймдерді (triple-TF) бір-біріне қабаттастырады, әрқайсысы өз индикатор өтуін және өз шектерін (thresholds) қосады, бәрі сол бір multi-fold walk-forward бойынша бағаланады. Енді бір бағалау 0,3 миллисекунд орнына шамамен 0,1-0,5 секунд тұрады - үш реттік шамаға секіру. Бағалау құны біздің бөлімдегі дөңгелектеу қатесі мүшесінен басым мүшеге көшті. Тезис бойынша, ask/tell салығы маңызды болудан қалуы керек, ал ақылдылық пайда әкеле бастауы керек. Дәл солай болады.

Біз әр әдісті triple-TF есебінде (18 параметрлі кеңістік) тұрақты ~150 секундтық нақты уақыт бюджетімен жүргіздік, әр әдіске бұл бюджетті өз сэмплері қалай айтса, солай жұмсауға мүмкіндік бердік, және ол қайтарған ең жақсы бір конфигурацияны бөлек тест терезесінде бағаладық:

Әдіс (triple-TF, 150 с) Бағалаулар Бөлек TEST Қорытынды
sobol (QMC) 349 −673 ұтылады
cascade (sobol²×64) 20,864 −585 ұтылады
asha (folds) 292 eff. −239 ұтылады
tpe-mv+sobol 455 −43 ұтылады
sobol→cmaes 15,239 +226 жалғыз OOS-оң

TEST - бұрынғыдай сол walk-forward мақсат функциясы. Тек бір ғана әдіс нөлден өтті.

Арзан режимде басым болған қарапайым Sobol базасы енді соңғы орында, −673 нәтижемен. 18 өлшемді кеңістікті соқыр low-discrepancy сэмплдеу, әр бағалау қымбат болғандықтан бар-жоғы 349 бағалаумен, ешқашан ештеңені локализацияламайды. Ақылды әдіс, sobol→cmaes - бюджеттің 30%-ы бассейнді (basin) себу үшін Sobol-ға, содан кейін ең жақсы себуден CMA-ES нақтылауына кетеді - бұл шынымен оң out-of-sample нәтиже берген жалғыз әдіс. Соңғы, қол тимеген holdout-та чемпион +2,62% қайтарды (19 мәміле, ~6,6% капитал экспозициясы), ал тест терезесі +16,35% қайтарған болатын (46 мәміле, ~15,7% экспозиция). Барлық бәсекелестің чемпионы out-of-sample-де ақша жоғалтты.

Міне, кроссовер, бірдей стратегия отбасында, бірдей мақсат функциясында, бірдей машинада өлшенген: бір бағалаудың құнынан басқа ештеңені өзгертпеңіз, сонда іздеу әдістерінің рейтингі керісінше айналады. Арзан режимде Sobol жеңеді, ал ақылды сэмплерлер 20 есе ысырап; қымбат режимде тек ақылды сэмплер ғана жұмыс істейді, ал Sobol - ысырап.

Неге "ақылды" мұнда жеңеді - және бұл тек sample-efficiency емес

Екі осьті параметрлер кеңістігін cost-aware пайдалану: қымбат индикатор осі орнында бекітілген кезде, ақылды сэмплер кэштелген сигналдардағы арзан threshold осін толтырады, сол бір нақты уақытты әрі көбірек бағалауға, әрі жақсырақ орналастырылған бағалауларға айналдырады

Бұл әңгіменің ыңғайлы нұсқасы: "қымбат бағалаулар sample-efficiency-ді марапаттайды, сондықтан азырақ, бірақ жақсырақ нүкте орналастыратын әдіс жеңеді." Бұл жартылай ғана рас, ал деректер адал, әрі қызықтырақ екінші жартысын көрсетуге мәжбүр етеді.

Бағалау сандарына қайта назар аударыңыз. sobol→cmaes соқыр Sobol-дан азырақ нүкте бағалап жеңген жоқ - ол сол 150 секундта Sobol-дың 349-іне қарсы 15 239 бағалады, яғни қырық есе көп. Қалайша? Себебі біздің multi-TF бағалау құны бірыңғай емес, құрылымдық. Мұнда екі ось бар: қымбат индикатор осі (таймфрейм периодтары мен HMA ұзындықтары, есептеуге әрқайсысы 30-500 мс, себебі олар индикаторды қайта есептеуге мәжбүр етеді) және арзан threshold осі (кіру/шығу бөліну деңгейлері, кэштелген сигналдарда әрқайсысы ~1-2 мс). Олардың арасындағы алшақтық 30-100 есе.

Соқыр Sobol бұл құрылымды елемейді. Ол шығаратын әрбір нүкте қымбат индикатор осін дірілдетеді, жаңа қайта есептеуге мәжбүр етеді - сондықтан ол барлық 349 бағалауда толық баға төлейді. sobol→cmaes, CMA-ES перспективалы аймақты локализациялағаннан кейін, ірі индикатор құрылымын шамамен тұрақты ұстауға, ал үздіксіз threshold-тарды ауытқытуға бейім болады, олар кэштелген сигналдарға түседі және дерлік ештеңе тұрмайды. Ақылды әдіс сол бір нақты уақытты әрі жақсырақ орналастырылған нүктелерге, әрі олардың әлдеқайда көбіне айналдырады, себебі мұнда бейімделгіш болу cost-aware болу дегенді білдіреді: қымбат ось бекітілгеннен кейін арзан оста қалу. Біздің анық cascade(sobol²×64) эксплойты мұны ең агрессивті түрде жасайды - кэштелген сигналдардағы арзан threshold-тарды топтап, 20 864 бағалау жасайды - және ол triple-TF тестінде ұтылса да, екі таймфреймді нұсқада ол тест терезесін +20,2%-бен толығымен жеңіп алды (өз holdout-ынан құламас бұрын - бұл туралы төменде толығырақ).

Fidelity: кесудің (pruning) жасырын алғышарты

Multi-fidelity әдістері - Hyperband, ASHA, кез келген ерте тоқтататын прунер - бір болжамға сүйенеді: арзан, ішінара бағалау конфигурацияларды қымбат, толық бағалау сияқты реттейді (ranks). Егер бір walk-forward фолдында жақсы көрінетін конфигурация барлығында да жақсы көрінуге бейім болса, ұтылғандарды ерте жойып, аман қалғандардың бюджетін жеңімпаздарға жұмсауға болады. Егер арзан fidelity кездейсоқ түрде реттесе, ерте тоқтату жақсы конфигурацияларды тек тиын лақтыру (coin-flip) арқылы лақтырып тастау болып табылады.

Сондықтан кез келген прунерге сенер алдында, біз болжамды тікелей өлшейміз. Біздің fidelity-міз - walk-forward фолдтарының саны (r фолдта арзан бағалау, немесе барлық K фолдта толық құнмен бағалау), және fidelity гейті кездейсоқ конфигурациялар үлгісі бойынша арзан r-фолд мақсат функциясы мен толық мақсат функциясы арасындағы Spearman дәрежелік корреляциясын (ρ) есептейді. ρ@1 - бұл бір ғана фолд бойынша шешім қабылдағандағы корреляция - ең агрессивті, ең арзан fidelity. Міне, бұл гейт екі режим бойынша не хабарлады:

Fidelity (қолданылған фолдтар) Single-TF ρ Multi-TF ρ
ρ@1 (1 фолд) ~0.03 0.43
ρ@2 0.67
ρ@3 0.78
ρ@4 0.82
ρ@5 0.91

Single-timeframe режимінде бір фолд конфигурацияларды ақиқатпен ~0,03 корреляциямен реттейді - бұл статистикалық тұрғыдан кездейсоқтықтан ажыратылмайды. Бұл кездейсоқтық емес; бұл "ешбір әдіс OOS артықшылық таппады" дегенмен бірдей факт. Стратегияда мықты сигнал болмағанда, оның фолд бойынша нәтижесі негізінен сәттілікке байланысты болады, сондықтан кез келген жалғыз фолд дерлік кездейсоқ таңдау болады, ал төмен fidelity кесу жақсы конфигурацияларды жойып, сәтті болғандарды алға жылжытар еді. Мұнда multi-fidelity арзан режимде қауіпсіз емес - әдіс жаман болғандықтан емес, арзан сигнал шу болғандықтан. (Біздің гейт мұны байқап, агрессивті кесуден бас тартады.)

Multi-timeframe режимінде нақты артықшылық (edge) бар, және fidelity картинасы өзгереді: ρ@1 0,43-ке дейін көтеріледі, ал бес фолдқа дейін ρ 0,91-ге дейін өрлейді. Енді бір фолд нақты рейтингтік ақпарат тасиды, ал бес фолд оның дерлік бәрін тасиды. Ерте тоқтату қауіпсіз болады - алғашқы бірнеше фолдта ұтылған конфигурация шынымен де ұтылушы болу мүмкіндігі жоғары. Бұл multi-fidelity әдістерінің қымбат режимге тиесілі болуының екінші себебі: тек қымбат бағалаулар кесуді құнды ететіндіктен ғана емес, сонымен қатар қымбат режим - арзан fidelity ақыр соңында қымбат fidelity сияқты реттелетін жер болғандықтан да.

Мұнан шығатын ереже қарапайым әрі орындауға арзан: кеспес бұрын ρ-ны өлшеңіз. Fidelity корреляциясы бірнеше жүз кездейсоқ конфигурацияда екі жолдық есептеу ғана, және дәл осы нәрсе multi-fidelity іздеудің сізді жылдамдатуы мен оның сізді үнсіз сабтаж жасауының арасындағы айырмашылықты анықтайды.

Іздеуде жеңу - одан аман қалу дегенді білдірмейді

Тағы бір адалдық ескертпесі, себебі бұл серия өтірік айтатын бэктестер туралы. Біздің triple-TF чемпионымыз, sobol→cmaes, оң holdout көрсеткен жалғыз әдіс болды - +2,62%, тест терезесіндегі +16,35%-тің үстіне. Бұл - жақсы жаңалық. Ал міне ескерту: ол статистикалық дефляциядан аман қалмады.

Чемпион - барлық әдістер бойынша сыналған он мыңдаған конфигурацияның ең жақсысы. Мұндай көп еселі тестілеу (multiple testing) жағдайында +2,62% holdout автоматты түрде нақты бола бермейді. Біз бүкіл серия сүйенетін overfitting гейттерін жүргіздік - трайлдар арасындағы корреляцияға түзетілген effective-N бар Deflated Sharpe Ratio, және комбинаторлық-симметриялы кросс-валидация (CSCV) арқылы PBO. Чемпион PBO-дан өтті (0,12, 0,2 шегінен едәуір төмен - оның рейтингі CSCV бөліктері бойынша тұрақты), бірақ оның deflated Sharpe нөлге дейін құлады (гейт ≥ 0,95 талап етеді). Қорытынды: аман қалмайды.

Мұны мұқият оқыңыз, себебі бұл бүкіл жаттығудың мәні. Кроссовер нәтижесі нақты: ақылды іздеу қымбат режимде іздеуде шешуші түрде жеңді, ал Sobol ұтылды. Бірақ іздеуде жеңу - оптимизатор туралы мәлімдеме, стратегия туралы емес. Жақсы оптимизатор артықшылығы жоқ (edgeless) кеңістіктен таба алатын ең жақсы конфигурация бәрібір артықшылықсыз болып қалады - қайсысын ұстап тұрғаныңызды дефляция көрсетеді. Дұрыс іздеу әдісін таңдау сізге бар ең жақсы жауапты тиімді түрде береді; ол ешқашан болмаған артықшылықты жасап шығармайды. Оптимизатор мен overfitting гейттері - әртүрлі нәрселерді өлшейтін әртүрлі құралдар, және сізге екеуі де қажет.

Іс жүзінде қолдана алатын шешім қабылдау ережесі

Оптимизаторды таңдау үшін біздің бенчмаркты қайта жүргізудің қажеті жоқ. Сізге бір ғана сан керек: бір бэктест қанша уақыт алады? Мақсат функцияңыздың бір бағалауын - бір толық walk-forward өтуін, барлық фолдтарды - хронометражбен өлшеңіз де, режимді анықтаңыз.

  • Арзан бағалау (≲ ~10 мс/бэктест): өткізу қабілетін "сатып алыңыз". Scrambled Sobol/QMC немесе random қолданыңыз. TPE/CMA-ES/ASHA-дағы ask/tell салығы сізге тегінге жақын бағалау марапаттамайтын орналастыру үшін нүктелер санының 10-30 есе бөлігіне түседі. Multi-fidelity кесумен айналыспаңыз - ал егер қызықсаңыз, алдымен ρ@1-ді тексеріңіз; артықшылығы төмен арзан режимде ол, ықтималдықпен, нөлге жақын болады, бұл кесудің тиын лақтыру екенін білдіреді. Үнемделген инженерлік уақытты іздеуді тарылту емес, кеңейтуге жұмсаңыз.
  • Қымбат бағалау (≳ ~100 мс - бірнеше секунд/бэктест): sample-efficiency "сатып алыңыз". CMA-ES, TPE немесе Sobol-мен себілген CMA-ES гибридін қолданыңыз; сэмплердің үстеме шығыны енді бағалауға қарсы дөңгелектеу қатесі ғана. Егер бағалау құныңыз құрылымдық болса (multi-TF-тегідей баяу индикатор осі және жылдам threshold осі), әр өлшемді бірдей қымбат деп қарайтын әдістерден гөрі, осы құрылымды пайдаланатын әдістерге - каскадтарға, drill-down-дарға, кез келген cost-aware нәрсеге - басымдық беріңіз.
  • Ортасында, немесе сенімсіз болсаңыз: Sobol-мен себілген гибрид (sobol→cmaes) сенімді әдепкі таңдау болып табылады. Ол басында breadth-first Sobol сияқты әрекет етеді (арзан, сәйкестендіретін модель жоқ), ал соңында ақылды нақтылаушы сияқты, сондықтан қай режимде болсаңыз да ол сылбырлап нашарлайды (degrades gracefully) - дәл осы себепті ол біздің қымбат режим чемпионы болды.
  • Кез келген прунерге дейін fidelity-ді өлшеңіз. Бірнеше жүз кездейсоқ конфигурацияда арзан fidelity мен толық мақсат функциясы арасындағы Spearman ρ-ны есептеңіз. Егер ρ@1 төмен болса, бір фолдта кеспеңіз; ρ ~0,5-тен асқанша минималды ресурсты көтеріңіз. Бұл екі жол код тұрады және акселераторыңыздың ең жақсы конфигурацияларыңызды үнсіз лақтырып тастауының алдын алады.
  • Іздеуде не жеңсе де, дефляция гейттерін жүргізіңіз. Оптимизатордың жеңімпазы - бүкіл апта бойы шығаратын ең overfitting-ке бейім нысан. Сауда жасауға жарамды ма екенін оптимизатордың бағасы емес, DSR мен PBO шешеді.

Бұл қайда байланысады

Бұл нәтиже осы серия тартып келе жатқан бірнеше желінің ортасында тұр:

  • Ол астыдағы қозғалтқыштың адал екенін болжайды. Арзан режимнің бүкіл артықшылығы дәл сол себепті бар - біздің процесс ішіндегі numba қозғалтқышы IPC-сіз секундына мыңдаған конфигурацияға жетеді - жылдамдық лестницасы (speed ladder) сізді ең алдымен өткізу қабілеті жеңетін режимге қоятын нәрсе. Баяу, фреймворк салығы бар қозғалтқыш кез келген есепті әдепкі бойынша қымбат режимге қояр еді, және сіз кроссоверді ешқашан көрмес едіңіз.
  • Қымбат режим эксплойты - бұл біздің adaptive-resolution drill-down қозғалтқышы айналасында жобаланған екі осьті құн құрылымы: алдымен ірі, қымбат осьте локализациялау, содан кейін нәзік, арзан осьті пайдалану.
  • Мұндағы әрбір әдіс тек қозғалтқыш leak-free болғандықтан ғана сенімді. Он мыңдаған трайл бойынша іздеу - look-ahead багын тауып, пайдаланудың ең тиімді мүмкін машинасы; "жеңімпаз" ағуға (leak) ең қатты сүйенген конфигурация болар еді. Алдымен сағатты түзетіңіз, содан кейін іздеңіз.
  • Ал чемпионның тағдыры - іздеуде жеңу, дефляцияда сәтсіздікке ұшырау - параметрлерді іздеу мен overfitting-ті бақылауды бөлек құралдары бар бөлек кезеңдер ретінде қарастырудың толық дәлелі.

Академиялық фон - сала үнемі оралатын сол баяғы фон: Bergstra & Bengio (2012) - неге кездейсоқ іздеу тор іздеуден жақсы екені туралы; Li және басқалардың Hyperband (2018) жұмысы мен ASHA жалғасы (2020) - multi-fidelity туралы; және Bailey & López de Prado (2014) - неге кез келген үлкен іздеудің жеңімпазы оған сену алдында дефляциялануы керек екені туралы. Олардың ешқайсысы жалғыз ең жақсы оптимизаторды нұсқамайды, себебі ондай оптимизатор жоқ - тек режим бар, және оны таңдайтын құн бар.

Негізгі қорытындылар

  1. Кездейсоқ пен ақылды іздеу арасындағы кроссоверді алгоритм емес, бағалау құны анықтайды. Біз бір бэктестің қымбаттығынан басқа ештеңені өзгертпей, әр әдістің рейтингін керісінше айналдырдық.
  2. Арзан бағалау → қарапайым Sobol өткізу қабілеті бойынша жеңеді. Біздің single-TF қозғалтқышымызда (~3-4 мың cfg/с) TPE мен ASHA бірдей бағалау саны үшін 18-30 есе баяу жұмыс істеді - Sobol-дың ~2830-ына қарсы ~95-154 cfg/с. Бірдей нақты уақытта, әр нүкте тегінге жақын болғанда, кеңдік (breadth) кеңістіктің жақсырақ моделінен асып түседі.
  3. Қымбат бағалау → ақылды әдістер тиімділік бойынша жеңеді. Triple-TF есебінде sobol→cmaes оң out-of-sample нәтиже тапқан жалғыз әдіс болды (+16,35% тест, +2,62% holdout); соқыр Sobol соңғы орында аяқтады.
  4. Қымбат режимде "ақылды" болу cost-aware болу дегенді білдіреді. Жеңімпаз қымбат индикатор осі мен арзан threshold осі арасындағы 30-100 еселік алшақтықты пайдаланды - ол көбірек бағалады әрі оларды жақсырақ орналастырды, қымбат ось бекітілгеннен кейін арзан оста қалу арқылы.
  5. Fidelity - кесудің алғышарты. Жалғыз фолд бойынша рейтингтік корреляция ρ@1 ≈ 0,03-тен (single-TF, дерлік кездейсоқ) 0,43-ке дейін (multi-TF) көтерілді, бес фолдқа дейін 0,91-ге жетті. Multi-fidelity/ASHA тек арзан fidelity қымбат fidelity сияқты реттелгенде ғана пайда әкеледі - сондықтан кеспес бұрын ρ-ны өлшеңіз.
  6. Іздеуде жеңу одан аман қалу дегенді білдірмейді. Чемпион PBO-дан өтті, бірақ Deflated Sharpe гейтінен сәтсіздікке ұшырады. Оптимизаторды бағалау құны бойынша таңдаңыз; сауда жасауға жарамдылықты дефляция гейттерімен шешіңіз. Бұл - әртүрлі құралдар, және сізге екеуі де қажет.

Оптимизаторыңызды бір бэктестің қанша тұратынына қарап таңдаңыз. Содан кейін оптимизатор артықшылығы жоқ кеңістіктен таба алатын ең жақсы жауап бәрібір артықшылықсыз болатынын есте сақтаңыз - және қайсысын ұстап тұрғаныңызды іздеу емес, гейттер айтсын.

blog.disclaimer

Authors

Eugen Soloviov
Eugen Soloviov

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.

Newsletter

Нарықтан бір қадам алда болыңыз

AI сауда талдаулары, нарық аналитикасы және платформа жаңалықтары үшін біздің ақпараттық бюллетеньге жазылыңыз.

Біз сіздің жекелігіңізді құрметтейміз. Кез келген уақытта жазылымнан шығуға болады.