Signal Pilot
🟠 Продвинутый • Урок 70 из 85

Машинное обучение как фильтр

Время чтения ~13 мин • Модуль 8: Построение системы
Signal Pilot
Профессиональное обучение трейдингу
0 %
Ты делаешь успехи!
Читайте дальше, чтобы завершить урок

Урок 69 оставил этой странице сетку. Шесть гиперпараметров по пять значений каждый дают 15 625 конфигураций — сетка, которую новичок назвал бы скромной, — и арифметика урока 64 говорит, что поиск такой ширины, оценённый на 156 сделках, изготавливает 0,318 R на сделку прежде, чем рынок вообще что-то сделал. Это привычное возражение против машинного обучения в торговле, и оно как раз из тех, на которые есть ответ: сосчитай сетку, подними планку с 1,645 до 4,507 и посмотри, берёт ли её модель. Возражение, на которое так не ответишь, вообще не содержит модели. Фильтр не создаёт сделок, он их убирает, а значит, может вернуть тебе только те убыточные сделки, которые сумел поймать, а у стратегии, которая выглядит хорошо, их почти нет. У выигравшего правила из урока 63 шесть прибыльных сделок и одна убыточная. Фильтр, одинаково хорошо удерживающий прибыльные и отсеивающий убыточные, должен был бы оказываться прав в 96,04 процента ранее не виденных сделок только чтобы выйти на этом правиле в ноль, а безупречный, который ловит единственную убыточную и больше ничего не трогает, улучшил бы его на 4,30 процента.

Требования: Урок 64, за формулу ожидаемого максимума и за планку, которую задаёт число конфигураций, урок 63, за семь сделок, которые эта страница разбирает, и урок 17, за два числа, из которых сделан профит-фактор.

Во что обходится сетка, ещё не видевшая ни одной цены

У правила есть параметры, и урок 64 их сосчитал. У модели есть гиперпараметры — то же самое под другим именем, — и есть измерение, которого у правила нет: какие признаки в неё входят. И то и другое перемножается, и арифметика, оценивающая поиск, не различает, что есть что. Она считает конфигурации, и это число известно прежде, чем хоть что-нибудь запустится.

Возьми сетку, оставленную анонсом. Шесть гиперпараметров по пять значений каждый дают 15 625, и подстановка выписана целиком, чтобы ничего здесь не приходилось принимать на веру. Единица, делённая на 15 625, есть 0,0000640, и значение стандартного нормального распределения, оставляющее столько в верхнем хвосте, равно 3,83028. Далее 15 625 умножить на e есть 42 473, единица, делённая на это, есть 0,0000235, а её нормальное значение равно 4,06963. Взвесив эти два с весами 0,4228 и 0,5772, получаем 3,96843, и это t-статистика. Раздели на корень из 156, то есть на 12,49, и изготовленное преимущество равно 0,318 R на сделку. Планка, которую поиск такой ширины должен взять, чтобы его превзошли лишь пять процентов бессмысленных поисков, стоит на 4,507.

Теперь измерение, которого никто не считает. Список из двадцати признаков с указанием выбрать от трёх до шести — обычная форма этого упражнения, и указание читается как упрощение. Это поиск. Выбрать ровно четыре из двадцати — это 4 845 различных моделей, выбрать от трёх до шести — 60 249, и список был записан до того, как ты начал, так что число доступно всякому, кто его захочет. Умножь число четыре-из-двадцати на сетку гиперпараметров, и работа одного дня превращается в 75 703 125 конфигураций.

Что ты менялКонфигурацииПланка на пяти процентахИзготовленный R на сделку на 156 сделках
Три гиперпараметра, по пять значений1253,3460,209
Четыре гиперпараметра, по пять значений6253,7690,250
Шесть гиперпараметров, по пять значений15 6254,5070,318
Четыре признака, выбранных из списка в двадцать4 8454,2520,295
Последние две строки вместе75 703 1256,0610,453

Последняя строка — честный счёт для одного дня, и 6,061 — это t-статистика, которой несколько сотен сделок не дадут, какой бы хорошей ни была идея. Прочти, однако, третий столбец сверху вниз, и картина мягче, чем это звучит: перейти от 15 625 конфигураций к 75 703 125 — это в 4 845 раз больше поиска и сдвиг планки на 1,554. Штраф растёт с логарифмом числа, и режет это с той стороны, о которой никто не упоминает. Чтобы оказаться скверно подставленным, модная модель не нужна. Четыре гиперпараметра и никакого отбора признаков уже дают 3,769.

Предположим поэтому, что всё это ты делаешь как следует. Предположим, ты сосчитал сетку, взял планку и держишь в руках модель, которая действительно ранжирует твои собственные постановки лучше случая. Остальная часть страницы о том, стоит ли это чего-нибудь, и ей не нужны ни число конфигураций, ни моделирование, ни какое-либо допущение о рынках.

Построй это так, как на самом деле движутся деньги. Фильтр не находит новых сделок. Он садится на постановки, которые твой метод и так порождает, и часть из них убирает, поэтому честное сравнение — это суммарная прибыль на одних и тех же исходных возможностях, а не прибыль на одну взятую сделку. Запиши свою долю попаданий как p, а свою выплату как b, оба из урока 17, так что прибыльная сделка платит b, а убыточная стоит единицу. Пусть фильтр удерживает долю s прибыльных и верно отсеивает долю t убыточных. На одну исходную сделку он отказывается от p умножить на один минус s умножить на b и сберегает один минус p умножить на t. Он стоит того, когда второе не меньше первого:

(1 − p) t  ≥  p (1 − s) b

Раздели это двумя способами, и оно скажет две разные полезные вещи. Раздели на p умножить на один минус s — и убыточных, которые фильтр выбрасывает, должно быть больше выброшенных прибыльных не менее чем в b раз, то есть в твой payoff ratio; это проверка, которую можно провести по журналу сделок двумя подсчётами и вовсе без статистики. Раздели вместо этого на один минус p — и правая часть станет p b на один минус p, то есть валовая прибыль на валовой убыток, величина, которую обычно называют профит-фактором и которая на этой странице единственное новое имя. Это два числа из урока 17, записанные как одно.

Если модель одинаково хороша в обе стороны, так что s и t — одно и то же число a, условие сворачивается в порог для одной лишь точности: a должно быть не меньше профит-фактора, делённого на единицу плюс профит-фактор. Наоборот, фильтр с точностью a заслуживает места в любой стратегии, чей профит-фактор ниже a, делённого на единицу минус a.

При точности 52 процента — в любой стратегии с профит-фактором ниже 1,08.

При 55 процентах — ниже 1,22.

При 60 процентах — ниже 1,50.

При 65 процентах — ниже 1,86.

Пятьдесят два процента — не заполнитель. Гу, Келли и Сю измерили всё это семейство моделей вне выборки на месячных доходностях тысяч акций, и их лучшая сеть достигла месячного R-квадрата вне выборки около четырёх десятых одного процента. Переведи это на язык страницы: при двумерном нормальном распределении вероятность того, что знак прогноза совпадёт со знаком исхода, равна одной второй плюс арксинус корреляции, делённый на пи; корреляция есть корень из R-квадрата, то есть 0,0632, а точность равна 52,01 процента. Лучший опубликованный результат в этой области — фильтр для стратегий с профит-фактором ниже 1,08.

Почти никто из подгонявших модель к собственным сделкам не делил свою валовую прибыль на свой валовой убыток и не клал эти два числа рядом. Это две суммы из журнала сделок и одно деление, и в них всё решение целиком.

Лист, который этот модуль строит с урока 62, девятого столбца не получает. Здесь он расходуется, все восемь разом, на том единственном правиле, за которым курс следует с урока 63.

Лист, израсходованный на одном правиле

Урок 63 перебрал 253 конфигурации скользящих средних по шестидесяти закрытиям и оставил среднее по 2 барам против среднего по 5: семь сделок, 10,70 на акцию до издержек, 9,84 после, против 5,68 за удержание. Заполни восемь столбцов, и лист читается так.

Предложение, из урока 62: покупай, когда среднее по 2 барам закрытий пересекает среднее по 5 снизу вверх, выходи, когда пересекает обратно, исполняй по следующему закрытию.

Пара, из урока 63: 4,16 сверх ориентира против 52,5 процента бесструктурных поисков, дающих 4,16 или больше.

Планка и счёт, из урока 64: 253 ячейки, планка 3,537, t равна 3,65, и она эту планку берёт, пока не задашь минимальное число сделок, после чего доля идёт от 0,68 процента при пороге в семь до 50,48 процента при пороге в две.

Заранее назначенное число сделок, из урока 65: пусто. Эти семь — те, что случились.

Доля подверженности, из урока 66: 0,5085, и из 10,70 до издержек рынок дал 2,95.

Глубина остановки, из урока 67: пусто.

Ёмкость, из урока 68: средняя сделка в 0,9101R равна 1,4055 на акцию, что при цене около 103 составляет 136 базисных пунктов, так что в малой капитализации из урока 68 сделка вмещает 1 390 545 долларов, а лучшая одиночная позиция — 618 020.

Предел позиции и интервал его проверки, из урока 69: пусто.

Три пустые клетки и второй столбец, два числа которого стоят наоборот. Это и есть приговор, и он приходит раньше, чем лист прочитан наполовину. Всё же пройди его до конца, потому что вопрос этой страницы не в том, годится ли правило. Он в том, могла ли бы модель сделать его лучше, и у этого вопроса есть ответ даже для никчёмного правила.

Семь сделок за вычетом издержек равны 2,577, 1,877, 2,377, 1,377, минус 0,423, 1,177 и 0,877. Шесть прибыльных в сумме 10,262 и одна убыточная на 0,423, так что профит-фактор равен 24,26, средняя прибыльная 1,1075R, средняя убыточная 0,2739R, а payoff ratio 4,04. Теперь заставь работать остальные столбцы листа и смотри, что происходит по мере применения каждого. Последняя строка таблицы ниже — это собственная нулевая модель урока 63, пересчитанная для этой страницы: 59 движений от бара к бару, взятых с возвращением, 4 000 рядов от зерна 20260903, тот же поиск по 253 ячейкам на каждом, при том же пороге в семь сделок, которому сам победитель удовлетворял, и профит-фактор той ячейки, что победила. Его медиана равна 2,34, а 3,08 процента этих бесструктурных поисков дают победителя с профит-фактором 24,26 или выше.

Что вычтеноПрофит-факторТочность, которую фильтр обязан превзойтиСамое большее, что мог бы добавить безупречный фильтр
Ничего36,6797,35 %2,80 %
Издержки, по соглашению урока 6324,2696,04 %4,30 %
Издержки и доля рынка из урока 6614,2293,43 %7,57 %
Что тот же поиск даёт на пустоте, медиана2,3470,01 %74,91 %

Четвёртый столбец стоит того, чтобы на нём остановиться, и это второе чистое число, выпадающее из того же неравенства. Безупречный фильтр убирает каждую убыточную и удерживает каждую прибыльную, поэтому самое большее, что он вообще может добавить, — это весь валовой убыток, а как доля того, что стратегия уже приносит после издержек, это единица, делённая на профит-фактор минус единица. На этом правиле выходит 4,30 процента. Не 4,30 процента, если модель хороша: 4,30 процента, если модель безупречна, потому что в записи всего одна убыточная сделка и стоит она 0,423 из 9,839.

Прочти два средних столбца вместе, сверху вниз, и они по одной и той же причине расходятся в разные стороны. По мере того как профит-фактор сдувается к правде — сначала издержки, затем доля рынка, затем то, что поиск той же ширины даёт на данных, в которых ничего нет, — нужная фильтру точность падает с 97,35 процента до 70,01, а награда растёт с 2,80 процента до 74,91. Поиск изготовил преимущество и тем же движением изготовил причину, по которой ни одна модель не могла его улучшить.

Фильтр способен вернуть тебе только твои убыточные сделки, а у хорошей стратегии их почти нет.

Вот почему нижняя строка значит больше, чем кажется. Профит-фактор, равный единице, — это стратегия ровно с нулевым ожиданием, и там порог стоит на пятидесяти процентах, и фильтр в 52 процента действительно стоит того. Пересчитай это на трёхстах сделках при выплате два: сто прибыльных, платящих по два, и двести убыточных, стоящих по одному, дают ноль. Удержи 52 прибыльных и 96 убыточных, и получится 104 минус 96, то есть 8R на исходные триста, или 0,027 R на сделку. Фильтр не улучшает стратегию. Он и есть вся стратегия, и она мала. Поднимись к профит-фактору два, и тот же фильтр в 52 процента отнимет 0,22R на сделку у стратегии, дающей 0,50.

Так что сложи свои прибыльные, сложи свои убыточные, раздели и прочти ответ как точность, которую любой фильтр обязан превзойти, прежде чем ты возьмёшься его строить.

Что это не решает

Что фильтр уравновешен. Порог точности предполагает, что модель ровно настолько же хороша в удержании прибыльных, насколько в отсеве убыточных, а неравенство, из которого он вышел, ничего подобного не предполагает: оно требует лишь, чтобы специфичность, делённая на единицу минус чувствительность, превышала профит-фактор. Модель, жёстко настроенная на отсев убыточных и мирящаяся с тем, что она удержит почти каждую показанную ей прибыльную, способна взять эту планку при общей точности много ниже порога, и именно в эту сторону имеет смысл строить. Страница печатает уравновешенное число потому, что это то число, которое классификатор сообщает по умолчанию, а это утверждение о программах, а не о рынках.

Что сделки, которые фильтр удерживает, платят столько же, сколько заплатили бы выброшенные. Если модель предпочтительно удерживает крупные прибыльные, арифметика улучшается и порог падает, а модель, ранжирующая сделки по ожидаемому размеру, а не сортирующая их по знаку, — другой и лучший предмет, чем оценённый здесь. Страница оценивает классификатор потому, что классификатор — это то, что строят, и потому, что цифра точности, которую приводит эта область, определена только для него.

Что профит-фактор, посчитанный на семи сделках, есть число. Это отношение двух сумм, и в одной из этих сумм ровно одно слагаемое. Стоила бы единственная убыточная сделка из урока 63 не 0,423, а 1,423, профит-фактор был бы 7,21, порог 87,82 процента, а награда 16,10 процента — при том же правиле на тех же закрытиях. На нескольких сотнях сделок отношение успокаивается, но точным оно не бывает никогда, и второй знак после запятой у любого выведенного из него порога есть украшение.

Что 52 процента — верный ориентир для твоей модели. Гу, Келли и Сю прогнозируют месячные доходности по срезу из тысяч акций почти сотней предикторов, а это другая задача, чем оценка постановок, которые твой метод уже породил: у них несравнимо больше данных и нет доступа к твоему правилу входа, а у тебя наоборот. Цифра стоит на этой странице как проверка порядка величины, которого достигают лучшие работы области, и она не предсказывает, что сделает твой собственный классификатор.

Что конфигурации поддаются счёту. Это уступка урока 64, и модель делает её хуже, а не лучше. Гиперпараметры, которые ты вбил в сетку, счёту поддаются. Признак, который ты построил, нарисовал, невзлюбил и удалил, — нет, и целевая переменная, которую ты переопределил с направления следующего бара на направление следующих трёх, потому что первая не обучалась, — тоже нет. Каждое переобучение на свежих данных есть ещё одна конфигурация, и график, переобучающий модель ежемесячно два года подряд, тихо прогнал ещё двадцать четыре.

И уступка, которая стоит дороже всего: эта страница оценила модель и ничего не сказала о том, может ли модель оказаться права по причине. Фильтр, отказывающийся от сделок первых пятнадцати минут, потому что там скапливаются твои убыточные, есть правило, он пишется в одну строку и считается за одну-единственную конфигурацию с планкой 1,645. Арифметика этой страницы наказывает не за то, что ты чему-то научился из собственной записи. Она наказывает за то, что ты научился из неё многому и оставил лучшее, а это и есть подгонка модели. Урок 71 открывает портфельный модуль вопросом о том, что покупают четыре правила такого, чего не покупает одно, измеряет корреляцию между правилами, а не предполагает её, и обнаруживает, что 14,7 месяца, оценённые уроком 67, сокращаются до 14,1, а не до 3,7.

Задачи

  1. Сосчитай свою сетку. Возьми последнюю модель, которую ты подгонял, или последнюю, которую тебе показали, и сосчитай её как следует: каждое значение гиперпараметра, которое ты пробовал, перемноженное, и это ещё раз умноженное на число наборов признаков, которые ты рассматривал. Прочти планку из первой таблицы выше или посчитай её из числа конфигураций. Десять минут, и в конце у тебя одно число, та t, которую твоя модель должна была превзойти, и это почти наверняка не 1,645.
  2. Посчитай собственный порог. Возьми последние двести сделок, сложи всё, что дали прибыльные, сложи всё, что стоили убыточные, и раздели первое на второе. Полчаса, и в конце у тебя одно число, твой профит-фактор, из которого точность, обязательная для фильтра, есть это число, делённое на единицу плюс оно, а самое большее, что мог бы добавить безупречный фильтр, есть единица, делённая на это число минус единица.
  3. Измерь фильтр, который ты действительно мог бы построить. Разрежь свой журнал по времени. На первой половине выбери один признак, для которого ты можешь в одном предложении назвать причину, и найди тот единственный порог по нему, который лучше всего отделяет прибыльные от убыточных. Примени этот единственный порог без изменений ко второй половине и сосчитай две вещи: сколько убыточных он выбросил и сколько прибыльных он выбросил. Вечер, и в конце у тебя одно число, отношение первого счёта ко второму, которое обязано превысить твой payoff ratio прежде, чем простейший фильтр, какой ты можешь построить, будет чего-нибудь стоить, и которое стоит сопоставить с тем, что ты предполагал до того, как разрезал журнал.

Источники. David H. Bailey, Jonathan M. Borwein, Marcos López de Prado и Qiji Jim Zhu, «Pseudo-Mathematics and Financial Charlatanism: The Effects of Backtest Overfitting on Out-of-Sample Performance» (Notices of the American Mathematical Society, 2014) — за формулу ожидаемого максимума, по которой посчитана первая таблица, перенесённую из урока 64 и применённую здесь к сетке гиперпараметров, а не параметров. Shihao Gu, Bryan Kelly и Dacheng Xiu, «Empirical Asset Pricing via Machine Learning» (The Review of Financial Studies, 2020) — за измерение вне выборки, которое эта страница переводит в те 52 процента, против которых читается каждый её порог. Marcos López de Prado, Advances in Financial Machine Learning (Wiley, 2018) — за довод, что обычная перекрёстная проверка в финансах протекает, и за поправку на множественность проверок, малым случаем которой является первая таблица. Robert D. Arnott, Campbell R. Harvey и Harry Markowitz, «A Backtesting Protocol in the Era of Machine Learning» (The Journal of Financial Data Science, 2019) — за протокол, требующий записать число попыток до поиска; это и есть тот столбец листа, который добавил урок 64 и который расходует эта страница.

Связанные уроки
Урок 64

Цена поиска

Формула ожидаемого максимума и планка, которую задаёт число конфигураций.

Читать урок →
Урок 63

Backtesting как доказательство

Семь сделок, которые эта страница разбирает, и поиск, который их породил.

Читать урок →
Урок 17

Матожидание

Доля попаданий и выплата, из которых сделан профит-фактор.

Читать урок →
Только в образовательных целях. Торговля сопряжена со значительным риском убытков. Это не финансовая консультация. Прошлые результаты не гарантируют будущих.

💬 Обсуждение (0 комментариев)

0/1000

Загрузка комментариев…

← Предыдущий урок Следующий урок →

Готовы торговать с Signal Pilot?

Примените полученные знания с профессиональными индикаторами и инструментами анализа рынка в реальном времени.

Вернуться в Signal Pilot →