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,317R преимущества ещё до того, как рынок сделал хоть что-нибудь.
Задачи
- Оцените один полный оборот в 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 и импакт на розничном объёме
Издержки полного оборота, которые этот урок вычитает из каждого числа на странице.
Читать урок →Каждый из них определён в глоссарии рядом с арифметикой этой страницы.
Attribution · Backtest · Base Rate · Overfitting · Round Trip · t-statistic · Walk-Forward Optimization
Только в образовательных целях. Торговля сопряжена со значительным риском убытков. Это не финансовая консультация. Прошлые результаты не гарантируют будущих.
💬 Обсуждение (0 комментариев)
Загрузка комментариев…
Готовы торговать с Signal Pilot?
Примените полученные знания с профессиональными индикаторами и инструментами анализа рынка в реальном времени.
Вернуться в Signal Pilot →