Backtesting как доказательство
Перебор 253 обычных правил на скользящих средних по шестидесяти закрытиям этого курса выдаёт победителя, который после издержек делает 9,84 доллара на акцию против 5,68 у простого удержания, на 7 сделках, при t-статистике 3,65. А теперь перемешайте те же самые шестьдесят изменений от бара к бару так, чтобы не уцелела никакая временная структура, сохраните дрейф и волатильность ровно такими, какими они были, и запустите тот же перебор заново. На 52,5 процента этих бесструктурных рядов лучшее правило обыгрывает удержание не меньше, чем это сделало настоящее, а на 77,2 процента обыгрывает вообще. Результат лежит ниже медианы того, что выдаёт рынок, в котором нет ничего. Backtest одного правила — это измерение; backtest лучшего из 253 — это измерение перебора.
Требования: Урок 62, ради фразы из четырёх частей, которой правило обязано быть записано, прежде чем его вообще можно проверить, урок 19, ради того, что семь сделок могут выдержать, а что нет, и урок 11, ради издержек полного оборота, которые эта страница вычитает из каждого числа на ней.
Тезис, изложенный так, как он и задуман
Доводы в пользу backtesting хороши и заслуживают того, чтобы изложить их как следует, прежде чем с ними что-либо делать. Правило есть набор инструкций. История есть запись того, что делали цены. Значит, можно прогнать инструкции по записи и выяснить, сколько правило заработало бы, а это обычное инженерное испытание, а не суеверие. Проиграло — вы узнали это дёшево. Выиграло — вы по крайней мере установили, что идея не пуста очевидным образом. Никто в здравом уме не утверждает, что backtest предсказывает будущее. Тезис уже и звучит неуязвимо: backtest говорит вам, работало ли правило.
Вот что он говорит на самом деле, на данных, которые этот курс уже напечатал. Возьмите шестьдесят закрытий и одно семейство правил: в лонг, когда быстрая скользящая средняя по закрытиям пересекает медленную снизу вверх, вне рынка, когда пересекает обратно вниз. Быстрые длины от 2 до 12, медленные от 3 до 30, медленная всегда длиннее быстрой. Это 253 конфигурации, что по любым меркам небольшой перебор, и каждая из них — правило, которое мог бы предложить разумный человек.
Соглашение об исполнении весит больше, чем кажется, поэтому оно стоит на странице. Пересечение видно только после того, как бар закрылся, поэтому сигнал читается на закрытии бара i, а сделка делается на закрытии бара i плюс один. Исполнять на самом сигнальном баре — это заглядывание вперёд, на котором работает половина backtest в интернете, и здесь оно стоит примерно трети видимого преимущества. Издержки: цент спреда, пять базисных пунктов slippage на сторону при цене около 103 и полцента на акцию комиссии, что даёт 0,1230 на акцию за полный оборот. Любая позиция, ещё открытая на последнем баре, там же и закрывается.
Прогоните все 253, и лучшей окажется быстрая средняя по 2 барам против медленной по 5. Она делает 7 сделок и приносит 10,70 на акцию до издержек, 9,84 после, против 5,68 у покупки на первом закрытии и продажи на последнем. Доля выигрышей у неё 6 из 7, средняя сделка равна 0,910 одного барового стандартного отклонения, а t-статистика по её собственной истории сделок равна 3,65. Каждое из этих чисел из тех, под которые дают деньги.
Что тот же перебор находит на рынке, в котором нет ничего
Проверка дёшева. Возьмите 59 изменений от бара к бару, из которых состоит эта серия, вытяните 59 из них наугад с возвращением и выложите их подряд от той же начальной цены. У результата тот же дрейф и та же волатильность, что у оригинала, он построен буквально из тех же движений, и в нём нет никакой временной структуры: ничто в нём не может быть использовано правилом, которое зависит от порядка чего бы то ни было, потому что порядок уничтожен. Сделайте так 4000 раз от зерна 20260903 и прогоните на каждом ряду тот же перебор из 253 ячеек.
| Величина | Значение |
|---|---|
| Лучшая из 253, до издержек | 10,70 |
| Лучшая из 253, после издержек | 9,84 |
| Купи и держи, после издержек | 5,68 |
| Преимущество над удержанием | 4,16 |
| Бесструктурные ряды, чья лучшая ячейка обыгрывает удержание | 0,772 |
| Бесструктурные ряды, превзошедшие настоящее преимущество | 0,525 |
На 77,2 процента рядов, в которых нет никакой структуры, лучшее из 253 правил обыгрывает покупку и удержание. На 52,5 процента оно обыгрывает его не меньше чем на те 4,16, которые нашёл настоящий перебор. Измеренный результат не просто невпечатляющ на фоне этого распределения: он лежит ниже его медианы. Что бы перебор ни нашёл на настоящих закрытиях, перебор того же размера находит больше этого, чаще чем в половине случаев, в данных, в которых нечего находить.
Обратите внимание, чего это не говорит. Это не говорит, что правило плохое, и не говорит, что в серии нет структуры. Это говорит, что число 9,84 произведено процедурой, которая и без того производит числа вроде 9,84, а потому число не годится в доказательство о рынке. Это утверждение об измерении, и именно поэтому почти никто из тех, против кого вы торгуете, никогда не проверял своё: проверка стоит вечера и цикла пересэмплирования, и она может только отнять результат.
Два столбца ложатся в таблицу, которую этот модуль начал в уроке 62, рядом с фразой. Что вернул backtest, здесь это 4,16 над эталоном. И что тот же перебор вернул на данных, в которых нет ничего, здесь это 4,16 или лучше в 52,5 процента попыток. Строка, у которой второй столбец не заметно больше третьего, ничего не заработала, и пара стоит больше, чем любое из двух чисел по отдельности, потому что ни одно из них без другого мало что значит.
Два вычитания, которые идут раньше
Сперва издержки, потому что они здесь единственное надёжное. Полный оборот стоит тут 0,1230 на акцию, а одно баровое стандартное отклонение на этой серии равно 1,5443, значит, полный оборот равен 0,0796 одного R. Звучит мало, пока это не умножишь. Победившее правило делает 7 сделок и потому платит 0,557R издержек; удержание делает одну и платит 0,0796R. Часто торгующее правило стартует, отставая примерно на половину R, прежде чем хоть одно из двух в чём-нибудь окажется право, и те же издержки равны 0,0398R против стопа в две сигмы и 0,1593R против стопа в полсигмы, потому что издержки заданы в центах, а R нет.
Затем эталон, и это то вычитание, которого почти всегда нет. Лучшая ячейка сделала 9,84. Удержание сделало 5,68. Вклад правила не 9,84, а 4,16, потому что серия росла, и любое правило, проводящее время в лонге, подбирает этот рост, поняло оно что-нибудь или нет. Backtest, который показывает собственную кривую капитала стратегии и никогда кривую эталона, спрятал большее из двух чисел.
Строка, которой не видит тест на разделённой выборке
Обычная защита от всего этого — тест вне выборки, и он действительно того стоит, так что проведём его здесь. Оптимизируйте только на первых тридцати закрытиях. Лучшая ячейка на этом окне снова пара 2 и 5: 5,53 чистыми на 3 сделках, на отрезке, где покупка и удержание потеряли 0,82. Похоже на правило, которое находит что-то на рынке, не предлагавшем ничего. Заморозьте параметры, ничего не трогайте и прогоните их на последних тридцати закрытиях.
| Окно | Лучшее правило, чистыми | Купи и держи, чистыми | Сделок |
|---|---|---|---|
| Бары с 1 по 30, здесь оптимизировано | 5,53 | -0,82 | 3 |
| Бары с 31 по 60, параметры заморожены | 4,29 | 6,88 | 5 |
Проходит. Результат упал с 5,53 до 4,29, ухудшение на 22 процента, а любой чек-лист в этой области считает всё, что ниже 30 процентов, зачётом. Правило не было подогнано под кривую в том смысле, который имеет в виду чек-лист: оно и правда продолжало работать на данных, которых никогда не видело.
А на тех же самых невиданных барах ничегонеделание принесло 6,88. Проверенное правило проиграло эталону 2,59 ровно на том окне, которое должно было его оправдать, и тест вне выборки не мог об этом сообщить, потому что никакого эталона в нём нигде нет. Тест спрашивает, повторяется ли результат. Он никогда не спрашивает, стоил ли результат того.
Те же шестьдесят закрытий на четырёх уровнях честности
Ничто ниже не меняет ни данные, ни правило. Пересечение 2 и 5 — на каждом уровне одно и то же правило, прогнанное по тем же шестидесяти закрытиям. Меняется только то, с чем его сравнивают, и каждый уровень — это тот, на котором большинство backtest останавливается.
Остановитесь на первом уровне, и правило сделало 10,70 на акцию на 7 сделках при 6 прибыльных. Остановитесь на втором, и издержки доводят его до 9,84, а это скидка в 8 процентов, и она ощущается добросовестностью, потому что страница, вычитающая издержки, выглядит аккуратной. Остановитесь на третьем, и эталон доводит его до 4,16, что снова урезает больше чем вдвое, и это уже дальше, чем заходит большинство опубликованных backtest.
Четвёртый уровень — тот, что меняет вердикт, а не величину. Перетяните движения, перезапустите перебор, и 52,5 процента бесструктурных рядов выдают лучшую ячейку, обыгрывающую удержание на 4,16 и больше. Собственная t-статистика правила, 3,65, не ошибочна; она отвечает на другой вопрос. Она измеряет, насколько уверенно 7 сделок этой ячейки отличаются от нуля, и у неё нет способа узнать, что ещё 252 ячейки прошли пробы и были отсеяны. t-статистика считается внутри победителя. Перебор происходил снаружи.
Backtest измеряет перебор, который вы прогнали, а не рынок, на котором вы его прогнали.
Уцелевшего больше, чем кажется. Backtest по-прежнему убивает правила, дёшево и навсегда: правило, проигрывающее внутри выборки и до издержек, мертво, а выяснить это за один вечер — это и есть большая часть того, для чего техника существует. Чего он не может в одиночку, так это правило продвинуть. Продвижение требует эталона, издержек и пересэмплированного нулевого распределения, а нулевое распределение — это один цикл кода.
Так что прогоните сегодня вечером все четыре уровня по собственному правилу, в этом порядке, и остановитесь на первом, который отнимет результат.
Что это не решает
Что backtesting не работает. Страница проверила одно семейство правил на одной серии из шестидесяти баров перебором в 253 ячейки, а настоящая программа идёт по тысячам баров и многим инструментам, где выборочный шум, которым эта страница пользуется, куда меньше. Довод о раздувании перебором не зависит от размера ни того, ни другого, а вот конкретные 52,5 процента зависят, и на более длинной серии тот же перебор изготовил бы соразмерно меньшее преимущество. Ничто здесь не показывает, что техника бесполезна: оно показывает, что результат обязан пережить, прежде чем что-то значить.
Что тест на пересэмплировании — правильное нулевое распределение. Вытягивание движений с возвращением уничтожает всю временную структуру разом, что делает его проверкой того, использует ли правило порядок, и только этого. Оно уничтожает и кластеризацию волатильности, которая реальна и которой правило на пересечениях действительно может торговать, так что в этом отношении нулевое распределение слишком легко обыграть, и истинная доля скорее выше 52,5 процента, чем ниже. Блочный бутстрап сохранил бы часть этой структуры и является честным следующим шагом; эта страница его не запускает.
Что издержки ваши. Цент спреда и пять базисных пунктов slippage описывают ликвидный инструмент малым размером. На чём-нибудь пошире они грубо оптимистичны, а на глубокой крупной бумаге на сотне акций пессимистичны. Каждое число на этой странице движется вместе с этим допущением, а правило на 7 сделок движется примерно всемеро быстрее эталона, и это направление, льстящее удержанию.
Что купи и держи — правильный эталон. Здесь он правильный, потому что правило только длинное на растущей серии, и он неправильный для правила, которое шортит, или для отрезка, который падал. На падающей серии любое только длинное правило выглядит слабо против удержания по причине, к правилу отношения не имеющей, а выбирать себе эталон, который вам льстит, — та же ошибка, что выбирать окно, которое делает то же самое. Эталон надо выбирать до теста, а эта страница выбрала его после, потому что серия уже была написана.
Что результат на разделённой выборке обобщается. Тридцать баров на половину — это слишком мало, окно внутри выборки содержит 3 сделки, а вне её 5, и при таких малых выборках цифра ухудшения в 22 процента не несёт почти никакой информации. Вывод, который она подпирает, не в том, что тесты вне выборки обычно пропускают плохие правила; он уже и твёрже: они могут пропустить правило, проигрывающее эталону, потому что эталона в них нет. Этот изъян структурный и от объёма выборки не зависит вовсе.
И уступка, которая стоит дороже всего: эта страница велит вычесть то, что произвёл бы перебор, и не даёт способа сделать это для перебора, который вы действительно провели. 253 ячейки поддаются счёту, потому что они были закодированы. Правила, на которые вы посмотрели на графике и бросили, параметр, который вы дважды сдвинули и вернули, инструмент, который вы попробовали первым и оставили, потому что он был уродлив, — это тоже конфигурации, они не записаны, и их почти наверняка больше 253. Поправка на этой странице вычислима только для той части перебора, которая оказалась достаточно честной, чтобы быть записанной. Урок 64 берётся за эту задачу в лоб и обнаруживает, что раздувание предсказуемо заранее из одного лишь счёта: для перебора из 15 000 конфигураций на 156 сделках лучшая ячейка показывает 0,351R преимущества до того, как рынок вообще что-либо сделал.
Задачи
- Оцените один полный оборот в R. Возьмите спред своего инструмента, комиссию своего брокера и цифру slippage, которую вы готовы защищать, сложите их для полного оборота и разделите на одно баровое стандартное отклонение на том таймфрейме, которым торгуете. Десять минут, и на руках у вас одно число, стоимость сделки в R, и это ровно та величина, которую опустил каждый backtest, что вы когда-либо читали.
- Поставьте эталон рядом со своим правилом. Возьмите правило, которым уже торгуете или в которое уже верите, прогоните его по двумстам барам за вычетом только что посчитанных издержек, и на тех же двухстах барах посчитайте, сколько принесла бы покупка на первом закрытии и продажа на последнем. Полчаса, и на руках у вас одно число, разрыв между ними, и это единственная часть вашей кривой капитала, за которую отвечает правило.
- Прогоните нулевое распределение. Возьмите изменения от бара к бару тех же двухсот баров, вытяните двести из них наугад с возвращением, выложите подряд и заново прогоните весь свой перебор по синтетической серии. Сделайте так тысячу раз с зерном, которое запишете, и посчитайте, как часто лучший результат обыгрывает эталон не меньше чем на то, что нашёл ваш настоящий перебор. Вечер, и на руках у вас одно число, доля, и это вероятность того, что рынок, в котором нет ничего, вручил бы вам ровно то, что вы нашли.
Источники. Halbert White, «A Reality Check for Data Snooping» (Econometrica, 2000), ради процедуры бутстрапа, которую этот урок прогоняет в миниатюре, и ради довода о том, что судить перебор надо против распределения лучшего правила, а не распределения одного правила. Ryan Sullivan, Allan Timmermann и Halbert White, «Data-Snooping, Technical Trading Rule Performance, and the Bootstrap» (The Journal of Finance, 1999), ради того же эксперимента, проведённого в полном масштабе на столетии дневных данных и тысячах правил, и это то исследование, подражанием которому на шестидесяти барах является эта страница. 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), ради результата, что одного числа испробованных конфигураций уже хватает, чтобы предсказать, сколько видимого преимущества всплывёт, а это ровно то, что вычисляет следующий урок. Bradley Efron, «Bootstrap Methods: Another Look at the Jackknife» (The Annals of Statistics, 1979), ради метода пересэмплирования, из которого построено нулевое распределение в этом уроке.
Что должно было бы произойти
Фраза из четырёх частей, которой правило обязано быть записано, прежде чем его вообще можно проверить.
Читать урок →Сколько ждать, чтобы узнать
Что семь сделок и t-статистика 3,65 могут выдержать, а что нет.
Читать урок →Slippage и импакт на розничном объёме
Издержки полного оборота, которые этот урок вычитает из каждого числа на странице.
Читать урок →Только в образовательных целях. Торговля сопряжена со значительным риском убытков. Это не финансовая консультация. Прошлые результаты не гарантируют будущих.
💬 Обсуждение (0 комментариев)
Загрузка комментариев…
Готовы торговать с Signal Pilot?
Примените полученные знания с профессиональными индикаторами и инструментами анализа рынка в реальном времени.
Вернуться в Signal Pilot →