Случайный поиск против умного: переломный момент задает стоимость оценки, а не алгоритм
Часть серии "Бэктесты без иллюзий".
В оптимизации гиперпараметров есть расхожая мудрость: случайный поиск — это базовая линия, которую перерастают. Классический результат Бергстра и Бенджио (2012) показал, что случайный поиск обгоняет поиск по сетке; затем байесовская оптимизация, TPE, CMA-ES и мультифидельные методы вроде Hyperband/ASHA должны были, в свою очередь, обогнать случайный поиск. Поэтому, когда мы сели бенчмаркать методы поиска параметров для собственного торгового движка, мы ожидали обычную лестницу: случайный поиск внизу, умный сэмплер наверху.
Мы получили обратное — а потом получили и хрестоматийный ответ тоже. Та же стратегия, то же пространство параметров, тот же объектив, та же машина. Единственное, что мы поменяли, — это насколько дорогим был один бэктест, и рейтинг методов поиска перевернулся. Когда каждая оценка была дешевой, тупая скремблированная последовательность Sobol разгромила все "умные" сэмплеры. Когда мы сделали каждую оценку дорогой, умные методы вырвались вперед и нашли единственную конфигурацию, выжившую на out-of-sample.
Вывод не в том, что "случайный поиск недооценен" или "байесовский переоценен". Вывод в том, что точку пересечения между случайным и умным поиском определяет стоимость оценки, а не изощренность алгоритма. Выбирайте оптимизатор по тому, сколько стоит один бэктест, а не по его репутации. Эта статья измеряет, где именно проходит точка пересечения, почему она проходит именно там, и одно предварительное условие — fidelity, — которое решает, безопасно ли вообще использовать трюки дорогого режима (раннюю остановку, мультифидельный прунинг).
Все, что ниже, получено из двух скриптов нашего бэктестера: bench_search.py (v4, коммит ee092f1) для дешевого одно-таймфреймового режима и bench_search_multitf.py (коммит 102853c) для дорогого мульти-таймфреймового режима. Оба свободны от утечек (leak-free) — решение принимается на закрытии бара i, исполнение на open[i+1], — и оба оценивают каждый метод по мультифолдовому скользящему walk-forward объективу с отложенным тестовым окном, которое поиск никогда не видит.
Вопрос: пропускная способность или эффективность на точку?

Каждый метод поиска тратит свой бюджет wall-clock на две вещи: решение, где сэмплировать дальше (собственные вычисления сэмплера) и оценку сэмпла (запуск бэктеста). Назовем первое стоимостью ask/tell, а второе — стоимостью оценки. Эффективная поисковая мощность метода при фиксированном бюджете wall-clock, грубо говоря, такова:
а его итоговое качество — это данное число, умноженное на то, насколько удачно размещена каждая точка. Два рычага, тянущие в разные стороны:
- Пропускная способность (throughput) — точек в секунду. Тупые сэмплеры (случайный поиск, скремблированный Sobol/QMC) имеют почти нулевую стоимость ask/tell: они выдают точку с низким расхождением (low-discrepancy) и идут дальше. Они максимизируют количество.
- Эффективность на точку (sample-efficiency) — качество на точку. Умные сэмплеры (TPE, CMA-ES, ASHA) тратят реальные вычисления на моделирование объектива, чтобы разместить каждую точку лучше. Они максимизируют размещение — ценой пропускной способности.
Какой рычаг победит, целиком зависит от знаменателя. Когда стоимость оценки мала, в знаменателе доминирует стоимость ask/tell, поэтому все, что ее раздувает — суррогатная модель, оценка плотности ядром (kernel density estimate), обновление ковариации — напрямую сокращает число исследуемых точек. Когда стоимость оценки велика, стоимость ask/tell становится ошибкой округления, поэтому "ум" фактически достается бесплатно, и стоит брать его по максимуму.
Вот весь тезис в одном предложении: налог ask/tell фиксирован, но его значимость задается стоимостью оценки, на которую вы его делите. Теперь посмотрим, как это происходит на практике.
Дешевый режим: тупой Sobol побеждает по пропускной способности

Наша одно-таймфреймовая стратегия — это свободное от утечек правило разделения HMA/HMA3 над 7-параметрическим пространством, оцениваемое внутрипроцессным numba eval_batch, который прогоняет prange по конфигурациям без межпроцессных накладных расходов. На этом движке один бэктест почти бесплатен — сырое ядро оценивает конфигурации на скорости примерно 3-4 тыс. cfg/s. Это дешевый режим, и именно здесь трейдинг резко отличается от сеттинга deep learning, откуда родом большая часть фольклора об HPO: наша "целевая функция" — это не шестичасовой прогон обучения на GPU, а 0.3-миллисекундный проход по массиву.
Мы дали каждому методу одинаковый бюджет — 1,500 оценок — и зафиксировали wall-clock, который потребовался каждому, чтобы потратить эти оценки, плюс отложенный тестовый объектив, который он нашел. Поскольку бюджет оценок фиксирован, столбец wall-clock — это прямое отражение накладных расходов каждого сэмплера:
| Метод | Оценок | Wall-clock | Пропускная способность | 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 — это walk-forward объектив (годовой PnL на единицу активного времени × доверие по числу сделок) на отложенном окне, которого поиск никогда не касался; чем выше, тем лучше.
Бросаются в глаза два факта. Во-первых, посмотрите на столбец пропускной способности. Скремблированный Sobol работает на ~2,830 cfg/s — почти у потолка движка. TPE работает на ~154 cfg/s, а ASHA — на ~95. Это замедление в 18–30 раз ради того же самого, идентичного числа оценок. Умные сэмплеры не оценивают ничего дополнительного — они тратят это время внутри собственной машинерии ask/tell.
Во-вторых — и это та часть, которая держит историю честной, — ни один метод не нашел положительный результат на out-of-sample. Каждое значение TEST отрицательно. В одно-таймфреймовом режиме у нашей стратегии просто нет устойчивого OOS-преимущества, поэтому вопрос "какой метод победил" — это не вопрос об итоговой прибыли, а вопрос об эффективности поиска. А по эффективности поиска при фиксированном бюджете оценок тупые методы побеждают безоговорочно: Sobol и random достигают тех же или лучших показателей на отложенных данных, что и умные сэмплеры, тратя при этом 1/20 wall-clock.
Теперь перевернем сравнение так, как его реально переживает практик, — зафиксируем wall-clock, а не число оценок. Если дать каждому методу 15.8 секунды, которые потребовались ASHA на его 1,500 оценок, Sobol не остановится на 1,500. Он продолжит примерно до 45,000 конфигураций. В дешевом режиме вопрос никогда не звучит как "какой сэмплер лучше разместит 1,500 точек" — он звучит как "что вы предпочтете: 1,500 хитро размещенных точек или 45,000 скремблированных, если каждая точка почти бесплатна?" При почти бесплатной оценке широта побеждает. Тридцатикратное увеличение покрытия 7-мерного пространства бьет более качественную модель этого пространства.
Налог ask/tell
Куда уходят эти 20 раз? Не в бэктест — он идентичен для всех методов. Они уходят в учетную работу сэмплера на точку, выполняемую в Python, внутри цикла:
- TPE подгоняет пару оценок плотности ядром (kernel-density estimate, хорошие против плохих испытаний) на каждый
ask, и стоимость растет вместе с историей испытаний. Многомерный TPE подгоняет их совместно по измерениям — больше моделирования, больше Python. - CMA-ES обновляет и сэмплирует из ковариационной матрицы на каждом поколении. Здесь это дешевле, чем TPE (работал на ~850 cfg/s), но все равно на порядок дороже, чем просто выдать точку Sobol.
- ASHA платит за учет продвижения/ступеней (promotion/rung) прунера, и, в нашей схеме "фолды как fidelity", еще и платит за фиксированный предрасчет индикаторов, прежде чем сможет что-либо отсечь, — так что ее "сэкономленные" оценки экономят меньше, чем подсказывает бухгалтерия.
Ничего из этого не упрек в адрес алгоритмов. В этом и суть: стоимость ask/tell — это примерно фиксированное число миллисекунд на точку, и когда оценка, которую она оборачивает, тоже занимает несколько миллисекунд, эта фиксированная стоимость внезапно оказывается 90% вашего бюджета. Умный сэмплер тратит девять десятых своего wall-clock на раздумья о том, куда смотреть, и одну десятую — собственно на просмотр. Скремблированная последовательность Sobol тратит на просмотр все. Когда смотреть дешево, смотреть и выигрывает.
Мы намеренно не бенчмаркали здесь полноценный байесовский оптимизатор на гауссовских процессах, и по той же причине: суррогат GP имеет сложность по числу испытаний. Против оценки, которая стоит миллисекунды, подгонка суррогата поглотила бы весь бюджет поиска еще до того, как он оценил бы сколь-нибудь значимую долю пространства. В дешевом режиме GP-BO дисквалифицируется арифметикой.
Дорогой режим: точка пересечения переворачивается

Теперь сделаем один бэктест дорогим. Мульти-таймфреймовая стратегия складывает высокий, средний и низкий таймфреймы (тройной TF), каждый вносит свой проход индикатора и свои пороги, и все это оценивается по тому же мультифолдовому walk-forward. Одна оценка теперь стоит порядка 0.1–0.5 секунды вместо 0.3 миллисекунды — скачок на три порядка величины. Стоимость оценки переместилась из слагаемого-ошибки-округления нашего знаменателя в доминирующее слагаемое. Согласно тезису, налог ask/tell должен перестать иметь значение, а "ум" должен начать окупаться. Так и происходит.
Мы прогнали каждый метод при фиксированном бюджете wall-clock ~150 секунд на тройной-TF задаче (18-параметрическое пространство), позволили каждому тратить этот бюджет так, как диктует его сэмплер, и оценили единственную лучшую конфигурацию, которую он вернул, на отложенном тестовом окне:
| Метод (тройной TF, 150 s) | Оценок | TEST на отложенных данных | Вердикт |
|---|---|---|---|
| sobol (QMC) | 349 | −673 | проигрывает |
| cascade (sobol²×64) | 20,864 | −585 | проигрывает |
| asha (folds) | 292 эфф. | −239 | проигрывает |
| tpe-mv+sobol | 455 | −43 | проигрывает |
| sobol→cmaes | 15,239 | +226 | единственный положительный на OOS |
TEST — тот же walk-forward объектив, что и раньше. Только один метод пересек ноль.
Тупой базовый Sobol, доминировавший в дешевом режиме, теперь на последнем месте, с −673. Слепое сэмплирование с низким расхождением 18-мерного пространства, имея всего 349 оценок для траты (потому что каждая дорога), никогда ничего не локализует. Умный метод, sobol→cmaes — 30% бюджета на Sobol, чтобы засеять область притяжения (basin), затем уточнение CMA-ES от лучшего посева, — это единственный метод, вообще давший положительный результат out-of-sample. На финальном нетронутом holdout чемпион вернул +2.62% (19 сделок, ~6.6% экспозиции капитала) поверх тестового окна, вернувшего +16.35% (46 сделок, ~15.7% экспозиции). Чемпион каждого конкурента потерял деньги на out-of-sample.
Вот и точка пересечения, измеренная на том же семействе стратегий, том же объективе, той же машине: не меняйте ничего, кроме стоимости одной оценки, — и рейтинг методов поиска переворачивается. В дешевом режиме побеждает Sobol, а умные сэмплеры — это 20-кратная трата впустую; в дорогом режиме единственное, что работает, — умный сэмплер, а тратой впустую оказывается Sobol.
Почему "умный" побеждает здесь — и дело не только в эффективности на точку

Аккуратная версия этой истории звучит так: "дорогие оценки вознаграждают эффективность на точку, поэтому побеждает метод, размещающий меньше, но лучших точек." Это верно наполовину, и данные вынуждают признать честную, более интересную вторую половину.
Взгляните на числа оценок еще раз. sobol→cmaes победил не за счет оценки меньшего числа точек, чем слепой Sobol, — он оценил 15,239 против 349 у Sobol, в сорок раз больше, за те же 150 секунд. Как? Потому что наша стоимость оценки в multi-TF структурирована, а не однородна. Есть две оси: дорогая ось индикаторов (периоды таймфреймов и длины HMA, по 30–500 мс на вычисление, потому что они вынуждают пересчитывать индикатор) и дешевая ось порогов (уровни разделения входа/выхода, ~1–2 мс каждый на кэшированных сигналах). Разрыв между ними — 30–100x.
Слепой Sobol игнорирует эту структуру. Каждая точка, которую он рисует, дергает дорогую ось индикаторов, вынуждая свежий пересчет, — так что он платит полную цену на всех 349 оценках. sobol→cmaes, как только CMA-ES локализовал перспективную область, склонен держать грубую структуру индикаторов примерно фиксированной и варьировать непрерывные пороги, которые попадают на кэшированные сигналы и стоят почти ничего. Умный метод превращает тот же wall-clock одновременно в лучше размещенные точки и в намного большее их число, потому что быть адаптивным здесь означает быть чувствительным к стоимости: оставаться на дешевой оси после того, как дорогая ось зафиксирована. Наш явный эксплойт cascade(sobol²×64) делает это наиболее агрессивно — 20,864 оценки за счет батчинга дешевых порогов на кэшированных сигналах — и хотя он проиграл тест на тройном TF, в двух-таймфреймовом варианте он выиграл тестовое окно безоговорочно, с +20.2% (прежде чем провалить собственный holdout — подробнее об этом ниже).
Так что более точная формулировка точки пересечения такова: в дорогом режиме налог ask/tell становится пренебрежимо мал, что освобождает вас, позволяя быть умным, — а "умный" означает адаптацию к структуре стоимости объектива, а не только к его форме. Слепое сэмплирование не способно ни на то, ни на другое. Это в точности та двухосевая структура, которую наш движок адаптивного разрешения (drill-down) создан эксплуатировать, и именно поэтому мультифидельные методы принадлежат дорогому режиму — при условии, что выполняется одно условие.
Fidelity: скрытое предварительное условие для прунинга
Мультифидельные методы — Hyperband, ASHA, любой прунер с ранней остановкой — опираются на одно допущение: что дешевая, частичная оценка ранжирует конфигурации так же, как это сделала бы дорогая, полная оценка. Если конфигурация, которая хорошо выглядит на одном фолде walk-forward, обычно хорошо выглядит и на всех остальных, можно рано убивать проигрышные и тратить бюджет выживших на победителей. Если дешевая fidelity ранжирует случайно, ранняя остановка — это просто выбрасывание хороших конфигураций по подбрасыванию монеты.
Поэтому прежде чем доверять любому прунеру, мы измеряем это допущение напрямую. Наша fidelity — это число фолдов walk-forward (оценка на r фолдах дешево или на всех K фолдах по полной стоимости), а гейт fidelity вычисляет ранговую корреляцию Спирмена ρ между дешевым объективом на r фолдах и полным объективом на выборке случайных конфигураций. ρ@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 |
В режиме одного таймфрейма один фолд ранжирует конфигурации с корреляцией к истине ~0.03 — статистически неотличимо от случайности. Это не совпадение; это тот же факт, что и "ни один метод не нашел OOS-преимущества". Когда у стратегии нет устойчивого сигнала, ее результат на отдельном фолде — по большей части везение, поэтому любой отдельный фолд — почти случайная выборка, и прунинг по низкой fidelity убил бы хорошие конфигурации и продвинул бы везучие. Мультифидельность небезопасна здесь, в дешевом режиме, — не потому, что метод плох, а потому, что дешевый сигнал — это шум. (Наш гейт отмечает это и отказывается агрессивно отсекать.)
В режиме мульти-таймфрейма реальное преимущество существует, и картина fidelity преображается: ρ@1 поднимается до 0.43, а к пятому фолду ρ взбирается до 0.91. Теперь один фолд несет реальную ранжирующую информацию, а пять фолдов несут почти всю ее целиком. Ранняя остановка становится безопасной — конфигурация, проигрывающая на первых паре фолдов, действительно, скорее всего, окажется проигрышной. Это вторая причина, по которой мультифидельные методы принадлежат дорогому режиму: не только потому, что дорогие оценки делают прунинг оправданным, но и потому, что именно в дорогом режиме дешевая fidelity наконец начинает ранжировать так же, как дорогая.
Правило, которое отсюда следует, прямолинейно и дешево в исполнении: измеряйте ρ, прежде чем отсекать. Корреляция fidelity — это вычисление в две строчки на нескольких сотнях случайных конфигураций, и именно оно определяет разницу между мультифидельным поиском, который вас ускоряет, и мультифидельным поиском, который тихо вас саботирует.
Выиграть поиск — не значит его пережить
Еще одна ремарка о честности, потому что эта серия — про бэктесты, которые лгут. Наш чемпион на тройном TF, sobol→cmaes, был единственным методом, показавшим положительный holdout — +2.62% поверх +16.35% в тестовом окне. Это хорошая новость. А вот оговорка: он не пережил статистическую дефляцию.
Чемпион — лучший из десятков тысяч конфигураций, испробованных всеми методами. При таком объеме множественного тестирования holdout в +2.62% не является автоматически реальным. Мы прогнали гейты против переобучения, на которые опирается вся серия, — Deflated Sharpe Ratio с effective-N, скорректированным на корреляцию между испытаниями, и PBO через комбинаторно-симметричную кросс-валидацию (CSCV). Чемпион прошел PBO (0.12, с комфортным запасом ниже порога 0.2 — его ранг стабилен по сплитам CSCV), но его deflated Sharpe рухнул до нуля (гейт требует ≥ 0.95). Вердикт: не выживает.
Прочтите это внимательно, потому что в этом суть всего упражнения. Результат про точку пересечения реален: умный поиск выиграл поиск в дорогом режиме, решительно, а Sobol его проиграл. Но выигрыш поиска — это утверждение об оптимизаторе, а не о стратегии. Лучшая конфигурация, которую хороший оптимизатор может найти в пространстве без преимущества (edgeless), все равно остается без преимущества — дефляция как раз и говорит вам, какую именно конфигурацию вы держите в руках. Выбор правильного метода поиска эффективно дает вам лучший из доступных ответов; он не создает преимущество, которого никогда не было. Оптимизатор и гейты против переобучения — это разные инструменты, измеряющие разные вещи, и нужны оба.
Правило принятия решения, которое реально можно применить
Вам не нужно перезапускать наш бенчмарк, чтобы выбрать оптимизатор. Вам нужно одно число: сколько времени занимает один бэктест? Замерьте время одной оценки вашего объектива — один полный проход walk-forward, все фолды, — и по нему определите режим.
- Дешевая оценка (≲ ~10 ms/бэктест): покупайте пропускную способность. Используйте скремблированный Sobol/QMC или случайный поиск. Налог ask/tell на TPE/CMA-ES/ASHA обойдется вам в 10–30x по числу точек ради размещения, которое почти бесплатная оценка не вознаграждает. Не заморачивайтесь с мультифидельным прунингом — а если возникнет соблазн, сначала проверьте ρ@1; в дешевом режиме с низким преимуществом оно, скорее всего, близко к нулю, а значит, прунинг равносилен подбрасыванию монеты. Потратьте сэкономленное инженерное время на расширение поиска, а не на его сужение.
- Дорогая оценка (≳ ~100 ms–seconds/бэктест): покупайте эффективность на точку. Используйте CMA-ES, TPE или гибрид CMA-ES, засеянный Sobol; накладные расходы сэмплера теперь — ошибка округления на фоне оценки. Если ваша стоимость оценки структурирована (медленная ось индикаторов и быстрая ось порогов, как в multi-TF), предпочитайте методы, эксплуатирующие эту структуру, — каскады, drill-down, все, что учитывает стоимость, — методам, трактующим каждое измерение как одинаково дорогое.
- Если посередине или не уверены: гибрид, засеянный Sobol (
sobol→cmaes), — надежный вариант по умолчанию. Он ведет себя как поиск в ширину Sobol на раннем этапе (дешево, нечего подгонять) и как умный уточнитель на позднем, поэтому он изящно деградирует в любом режиме, в котором вы в итоге окажетесь, — именно поэтому он и стал нашим чемпионом дорогого режима. - Перед любым прунером измерьте fidelity. Вычислите ρ Спирмена между дешевой fidelity и полным объективом на нескольких сотнях случайных конфигураций. Если ρ@1 низкое, не отсекайте по одному фолду; поднимите минимальный ресурс, пока ρ не превысит ~0.5. Это стоит двух строк кода и не дает вашему акселератору тихо выбрасывать ваши лучшие конфигурации.
- Кто бы ни выиграл поиск, прогоните гейты дефляции. Победитель оптимизатора — самый склонный к переобучению объект, который вы произведете за всю неделю. Торгуемость решают DSR и PBO, а не оценка оптимизатора.
Куда это ведет
Этот результат находится в центре нескольких нитей, которые эта серия тянет с самого начала:
- Он предполагает, что движок под капотом честен. Все преимущество дешевого режима существует потому, что наш внутрипроцессный numba-движок выдает тысячи конфигураций в секунду без IPC — именно лестница скорости в первую очередь помещает вас в режим, где побеждает пропускная способность. Медленный, обложенный налогом фреймворка движок по умолчанию помещал бы любую задачу в дорогой режим, и вы никогда не увидели бы точку пересечения.
- Эксплойт дорогого режима — это та же двухосевая структура стоимости, вокруг которой построен наш движок адаптивного разрешения (drill-down): локализоваться на грубой, дорогой оси, затем эксплуатировать тонкую, дешевую.
- Каждый метод здесь заслуживает доверия только потому, что движок свободен от утечек. Поиск по десяткам тысяч испытаний — самая эффективная из возможных машин для нахождения и эксплуатации бага look-ahead — "победителем" оказалась бы та конфигурация, что сильнее всего опиралась на утечку. Сначала почините часы, потом ищите.
- А судьба чемпиона — выигрыш поиска при провале дефляции — это и есть весь аргумент в пользу того, чтобы рассматривать поиск параметров и контроль переобучения как отдельные стадии с отдельными инструментами.
Академический фон — тот же самый, к которому область продолжает возвращаться: Бергстра и Бенджио (2012) о том, почему случайный поиск обгоняет поиск по сетке; Hyperband авторства Ли и др. (2018) и последующая работа по ASHA (2020) о мультифидельности; и Бейли и Лопес де Прадо (2014) о том, почему победителю любого крупного поиска нужна дефляция, прежде чем ему можно верить. Ни одна из этих работ не предписывает единственный лучший оптимизатор, потому что такого не существует — есть режим и стоимость, которая его выбирает.
Главные выводы
- Точку пересечения между случайным и умным поиском задает стоимость оценки, а не алгоритм. Мы перевернули рейтинг всех методов, не меняя ничего, кроме того, насколько дорогим был один бэктест.
- Дешевая оценка → тупой Sobol побеждает по пропускной способности. На нашем одно-TF движке (~3–4k cfg/s) TPE и ASHA работали в 18–30x медленнее при том же числе оценок — ~95–154 cfg/s против ~2,830 у Sobol. При равном wall-clock широта бьет более качественную модель пространства, когда каждая точка почти бесплатна.
- Дорогая оценка → умные методы побеждают по эффективности. На тройной-TF задаче
sobol→cmaesбыл единственным методом, нашедшим положительный результат out-of-sample (+16.35% test, +2.62% holdout); слепой Sobol финишировал на последнем месте. - В дорогом режиме "умный" означает учитывающий стоимость. Победитель эксплуатировал разрыв 30–100x между дорогой осью индикаторов и дешевой осью порогов — он сделал больше оценок и разместил их лучше, оставаясь на дешевой оси после того, как дорогая была зафиксирована.
- Fidelity — предварительное условие для прунинга. Ранговая корреляция по одному фолду выросла с ρ@1 ≈ 0.03 (одно-TF, по сути случайность) до 0.43 (multi-TF), достигая 0.91 к пятому фолду. Мультифидельность/ASHA окупается только тогда, когда дешевая fidelity ранжирует так же, как дорогая, — так что измеряйте ρ, прежде чем отсекать.
- Выиграть поиск — не значит его пережить. Чемпион прошел PBO, но провалил гейт Deflated Sharpe. Выбирайте оптимизатор по стоимости оценки; торгуемость определяйте гейтами дефляции. Это разные инструменты, и нужны оба.
Выбирайте оптимизатор по тому, сколько стоит один бэктест. А затем помните, что лучший ответ, который оптимизатор может найти в пространстве без преимущества, все равно останется без преимущества, — и пусть не поиск, а гейты скажут вам, что именно вы держите в руках.
Авторы
Инженер торговых систем
Разработка торговых ботов с 2017 года: межбиржевой арбитраж (подключал до 30 бирж), парный арбитраж на коинтеграции между спотом и фьючерсами, скальпинг, фронтраннинг, торговля по новостям, сентиментный анализ, трендовые алгоритмы, а также алгоритмы управления и балансировки портфелей. Делает выставление ордеров до 1 мс, warehouse для big data, бэктестинг-движки, AI-агентов и интерфейсы для ботов (в т.ч. open-source profitmaker.cc). Стек: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, архитектура.