В прошлых статьях я писал, что Байес и Monte Carlo не заменяют исследование. Они могут быстро найти хороший показатель или собрать распределение, но не отвечают на главный вопрос: что именно мы исследуем и почему результат должен быть устойчивым.
То же самое относится к другим методам: `Random search`, `CMA-ES`, `Particle Swarm`, `Genetic / evolutionary search`. Это не магические способы найти прибыльную стратегию. Это разные способы задавать вопросы к уже подготовленному пространству вариантов.
В этой статье я разберу методы в общих чертах: что они делают, где полезны и где легко ошибиться. Практические замеры по CPU и GPU для таких примеров лучше вынести отдельно. Это будет следующая статья: там уже можно сравнивать не лозунг «GPU быстрее CPU», а конкретные режимы, размеры batch-а, стоимость подготовки данных и реальную цену передачи между CPU и GPU.
Важно разделять две вещи. Метод поиска может быстро двигаться по пространству параметров. Но качество результата зависит не только от метода. Оно зависит от того, как задано пространство, как считаются сделки, какие ограничения включены, как устроена проверка вне обучающего участка и что именно считается хорошим результатом.
Общая постановка
Любой метод поиска получает на вход не «стратегию вообще», а конкретный вектор параметров.
x = entry + filters + PM + risk + limits + selection rules
Дальше этот вариант прогоняется через функцию качества.
score = f(x)
И здесь начинается главная проблема. Если функция качества слабая, например «найти максимальный `PnL`», то метод честно будет искать максимальный `PnL`. Он не обязан понимать, что результат мог появиться из-за одной случайной сделки, одного режима рынка или переоптимизированного управления позицией.
Поэтому в торговых исследованиях функция качества почти всегда должна быть шире одной итоговой цифры. Она может учитывать доходность, риск, просадку, стабильность, поведение на правой стороне и роль решения в группе. Конкретная формула — это уже внутренняя часть исследовательского контура. В статье важен принцип: метод поиска отвечает только на тот вопрос, который ему задали.
Random search

Random search берет случайные точки из заданного пространства и проверяет их.
x_i ~ Uniform(Ω)
y_i = f(x_i)
x_best = argmax y_i
На первый взгляд это слишком простой подход. Но именно в этом его сила. Random search почти ничего не предполагает о форме пространства. Он не пытается угадать гладкость функции, не требует производных, не строит сложную модель и не делает вид, что понимает структуру задачи.
В торговой оптимизации это полезно как честный baseline. Если сложный optimizer не дает результат лучше случайной выборки, значит проблема может быть не в методе поиска, а в постановке задачи, данных, функции качества или исходной гипотезе.
Random search также помогает понять плотность полезных решений. Если случайная выборка часто находит приемлемые варианты, пространство может содержать широкие живые области. Если почти все точки мусорные, то дальнейший поиск должен сначала ответить на вопрос, почему пространство настолько пустое.
Плюс метода: простота, воспроизводимость и отсутствие сильных предположений о форме пространства.
Минус: если устойчивая область узкая, случайная выборка может ее не задеть. Тогда метод честно покажет «ничего не найдено», хотя в пространстве может быть маленький остров хороших решений.
Что считать на CPU: генерацию случайных точек, проверку допустимости параметров, отсечение пустых веток, работу с файлами, кэшами, очередями и сохранением результата. CPU здесь удобен как диспетчер: он быстро решает, какие точки вообще стоит запускать и что делать с результатом.
Что можно считать на GPU: массовую независимую оценку уже подготовленных точек, если они приведены к плотному одинаковому batch-у. Например, когда много вариантов используют одинаковый цикл симуляции и отличаются только числовыми параметрами.
CMA-ES

CMA-ES работает иначе. Он не просто кидает точки случайно, а постепенно учит распределение вокруг перспективной области.
x_k ~ N(m, σ² C)
m_new = Σ w_i x_i
C_new <- update©
Здесь `m` — центр поиска, `σ` — масштаб шага, `C` — ковариационная матрица. Проще говоря, метод пытается понять не только «где лучше», но и «какой формы эта область».
Это особенно полезно для непрерывных числовых параметров: множителей, процентов, периодов, уровней фильтров, коэффициентов риска. Если хорошая область не точечная, а имеет вытянутую или наклонную форму, CMA-ES может быстрее приблизиться к ее центру и адаптировать направление поиска.
Главная идея здесь в ковариации. Метод постепенно видит, какие параметры полезно двигать вместе, а какие лучше менять независимо. Это делает его сильнее грубой сетки там, где пространство числовое и относительно гладкое.
Плюс метода: хорошо работает с непрерывными параметрами и умеет подстраиваться под форму области.
Минус: дискретные логические ветки ему неудобны. Если переключение между режимами стратегии кодируется как число, метод может начать искать гладкость там, где ее нет. Для составных торговых правил это нужно учитывать отдельно.
Что считать на CPU: обновление распределения, ковариационной матрицы, ограничений параметров, обработку невалидных точек и принятие решений о следующем поколении кандидатов. Эта часть не всегда тяжелая по арифметике, но требует аккуратной логики.
Что можно считать на GPU: параллельную оценку большой пачки кандидатов, которую CMA-ES сгенерировал на очередном шаге. Сам метод может жить на CPU, а тяжелая одинаковая симуляция каждого кандидата может уходить на GPU, если batch достаточно большой.
Particle Swarm
Particle Swarm можно представить как группу точек, которые летят по пространству. Каждая точка помнит свой лучший результат, а группа знает общий лучший результат.
v_i <- ωv_i + c1 r1(p_i — x_i) + c2 r2(g — x_i) x_i <- x_i + v_i
Здесь `x_i` — текущая позиция частицы, `p_i` — лучший результат этой частицы, `g` — лучший результат всей группы. Метод отвечает на вопрос: куда сдвигается группа решений, если часть опыта локальная, а часть общая.
В отличие от CMA-ES, Particle Swarm проще объяснить интуитивно. Есть несколько кандидатов. Каждый двигается по своему направлению, но его тянет к собственному лучшему результату и к лучшему результату группы. Получается баланс между личным поиском и коллективным притяжением.
Этот метод полезен, когда хочется увидеть динамику движения группы решений. Он может быстро собирать точки вокруг интересной области, но при этом не требует такой же статистической модели распределения, как CMA-ES.
Плюс метода: понятная логика, хорошая работа с числовыми областями и возможность наблюдать коллективное движение поиска.
Минус: swarm может слишком быстро стянуться к локальному максимуму. Если функция качества переоценивает красивый хвост истории, вся группа уверенно полетит в эту сторону.
Что считать на CPU: управление роем, обновление лучших локальных и глобальных точек, ограничения скорости, границы параметров, перезапуски частиц и диагностику схлопывания в локальный максимум.
Что можно считать на GPU: оценку fitness для большого числа частиц за один шаг, если каждая частица проверяется одинаковым расчетом. GPU здесь полезен не потому, что сам swarm сложный, а потому что много частиц можно прогонять параллельно.
Genetic / evolutionary search

Генетические и эволюционные методы работают через популяцию решений. Есть текущая популяция, отбор по fitness, скрещивание, мутация и новое поколение.
P_t = {x_1..x_n}
p_i = fitness_i / Σ fitness
child = crossover(a, b)
x_new = mutate(child)
Здесь важна не биологическая метафора, а способ работы с составными решениями. «Хромосомой» может быть набор правил: тип входа, фильтр, параметры управления позицией, ограничения риска и правила отбора.
Эволюционный подход интересен там, где пространство не гладкое, а составное. Например, когда нужно менять не один числовой процент, а комбинацию правил. В таком случае обычные числовые методы могут быть неудобны, потому что соседние значения не всегда означают похожие решения.
Скрещивание позволяет переносить части удачных решений в новое поколение. Мутация не дает популяции застыть слишком рано. Отбор усиливает те ветки, которые лучше проходят заданную функцию качества.
Плюс метода: удобно работать с дискретными и составными решениями.
Минус: качество результата очень зависит от кодирования профиля, силы мутаций, правил отбора и fitness-функции. Если fitness смотрит только на лучший `PnL`, эволюция будет развивать не устойчивость, а красивую переоптимизацию.
Что считать на CPU: кодирование решений, отбор, скрещивание, мутации, проверку допустимости потомков, работу с дискретными правилами и сохранение истории поколений. Здесь много ветвлений и бизнес-логики, поэтому CPU обычно удобнее.
Что можно считать на GPU: массовую оценку fitness для большой популяции, если отдельные особи уже приведены к совместимому формату и используют одинаковый расчет. GPU может ускорить именно проверку популяции, но не отменяет сложность кодирования и отбора.
Как сочетать методы
Эти методы не должны спорить между собой. У каждого своя роль.
`Random search` полезен как контрольная случайная выборка. `CMA-ES` и `Particle Swarm` подходят для уточнения числовых областей. `Genetic search` удобен для составных комбинаций правил. Байес может уточнять перспективные зоны по выбранной функции качества. Monte Carlo может проверять устойчивость и распределения. Walk-forward и rolling OOS нужны для проверки того, что найденное не умерло за пределами видимого участка.
Но все это имеет смысл только после базовой подготовки:
1. определить пространство поиска;
2. убрать заведомо пустые ветки;
3. сохранить условия эксперимента;
4. зафиксировать правила исполнения сделок;
5. не смешивать обучение и проверку;
6. сравнить левую и правую сторону истории;
7. проверить соседние области.
Поэтому метод поиска — это не вся система. Он может найти область интереса. Но исследовательский контур должен объяснить, почему эта область появилась, насколько она устойчива и что с ней делать дальше.
Вывод
Random search, CMA-ES, Particle Swarm и Genetic search решают разные задачи. Они не заменяют карту гипотез и не доказывают прибыльность стратегии сами по себе.
Главный вопрос остается прежним: найден лучший показатель или найдена устойчивая закономерность?
Если нет сохраненных условий эксперимента, причин отсечения, проверки соседних областей и правой стороны, то даже самый красивый метод поиска превращается в способ быстрее найти очередную лучшую строку.
Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.