Бэктест торговой стратегии
Почему правило, прогнанное по прошлому, ничего о себе не сообщило
Бэктест прогоняет правило по уже случившемуся ряду цен и считает, что получилось бы. Граница между проверкой и подгонкой проходит по тому, что появилось раньше: правило или ряд, на котором его считают. Подгонка прячется в четырёх местах, которых на кривой не видно: выбор отрезка лет, выбор настроек, состав данных и то, вычтены ли расходы. Отвергать правило такой прогон умеет надёжно, подтверждать нет.
Разбор приёма. Расчёт комиссии: таблица курса из money-research §3.1 (миллион, 7 % годовых сложных, тридцать лет) · 22 мин · обновлено 01.10.2026
После урока вы сможете
- Знать, что такое бэктест и как получается его кривая
- Понимать, почему такой ступени нет в лестнице доказательств о лечении
- Различать проверку и подгонку по одному признаку: что появилось раньше
- Видеть четыре места, где подгонка прячется, и знать, что бэктест всё-таки умеет
На витрине стратегии нарисована гладкая кривая, и под ней подпись: за прошлые десять лет это правило обогнало бы рынок. Цены в расчёте настоящие. Арифметика в нём верная, и ошибки нигде нет. И всё-таки о самом правиле эта кривая почти ничего не сообщает.
Прогон правила по уже случившемуся ряду цен называется бэктестом. Приём этот дешёвый и красивый, поэтому попадается он постоянно. История цен лежит открыто, и любое правило прогоняется по ней за секунду. На выходе получается картинка, по виду неотличимая от результата настоящей проверки.
Урок 2 поставил бэктест на лестницу доказательств между отдельным случаем и наблюдением. Здесь разбирается, почему он стоит так низко, хотя выглядит так внушительно. А урок 11 покажет то же самое руками: что делается с картинкой, когда правил перебирают не одно, а триста.
Как делается такая кривая
Устройство приёма проще, чем кажется со стороны. Берут ряд цен за прошлые годы. Придумывают правило, например держать бумагу в те месяцы, когда среднее за три месяца выше среднего за год, и не держать в остальные. Прогоняют это правило по ряду месяц за месяцем и складывают, что вышло.
Дальше правило подкручивают. Три месяца против двенадцати дали умеренный результат, два против десяти вышли заметно лучше, а четыре против восемнадцати ещё лучше. Настройки меняют, пока кривая не станет красивой, и красивую показывают. Пример здесь учебный, но порядок действий именно такой.
Ни одной неправды при этом пока не сказано. Цены настоящие, счёт верный, кривая нарисована честно. Ошибка появляется на последнем шаге, когда её предъявляют как проверку правила. На деле она отвечает на другой вопрос: что правило сделало бы с уже известными годами.
Отдельно стоит вопрос, с чем сравнивают. «Обогнало бы рынок» требует знать, какой именно рынок взят за образец. Правило, которое половину месяцев сидит вне бумаги, сравнивают то с самой этой бумагой, то с широким рынком, то с доходом по вкладу. Три сравнения дают три разных вывода об одном и том же правиле, и все три посчитаны верно.
Почему кривая убеждает сильнее, чем должна
Убеждает бэктест не арифметикой, а видом. Гладкая линия читается как закономерность, потому что глаз ищет в линиях смысл. Числа рядом с ней конкретны: не «стратегия перспективна», а «столько-то за столько-то лет». Конкретность легко принять за проверенность, хотя это разные вещи.
Работает и сослагательное наклонение. «Правило принесло бы» звучит почти как «правило принесло», а между этими фразами лежит всё различие урока. В первом случае никто не рисковал ничем: ни одна сделка не совершалась, ни один месяц не переживался вживую. Задним числом легко высидеть любую просадку.
Есть и простая арифметическая причина. Кривая роста рисуется в единицах, где различия выглядят огромными: за десять лет разница в пару процентов годовых разводит две линии далеко друг от друга. Глаз читает расстояние между линиями как силу довода, хотя перед ним всего лишь сложный процент. Урок 4 разбирает этот множитель отдельно.
И последнее: у кривой нет оговорок. Настоящая проверка приходит с числом наблюдений, с разбросом, с признанием, что могло выйти иначе. Кривая на витрине не признаётся ни в чём, и признаваться ей действительно не в чем. Она не проверка, а рисунок по известному ряду.
Довод «здесь всё посчитано по реальным котировкам» звучит веско и ничего не решает. Реальные котировки нужны и для подгонки: подгоняют как раз под них. Разница не в том, откуда взяты числа, а в том, знал ли автор эти числа, когда выбирал правило.
Ступень, которой нет в медицине
Курс здоровья строит такую же лестницу доказательств, и на ней этой ступени нет вовсе. Причина простая: прошлым больным нельзя дать таблетку задним числом. Чтобы проверить лекарство, нужны новые люди, новое время и терпение. Иначе проверка просто не состоится.
С деньгами устроено иначе. Ряд цен за тридцать лет лежит открыто, доступен всем и с точностью до дня. Любое правило прогоняется по нему сколько угодно раз, и каждый прогон занимает секунды. Именно эта доступность и делает бэктест возможным, и она же лишает его силы доказательства.
Разница между двумя лестницами не в строгости, а в том, что можно потрогать. Врач, придумавший схему лечения, обязан ждать новых больных. Автор правила ждать не обязан, потому что всё нужное ему уже случилось. А тот, кому не нужно ждать, ничем и не рискует: его правило не встретит ни одного наблюдения, которого он не видел заранее.
Стоит сказать и то, откуда эта ступень вообще взялась. Деньги относятся к тем редким областям, где прошлое записано полностью и ровно в тех же единицах, в которых будет записано будущее. У врача нет ряда «здоровье пациента по дням за тридцать лет», а у рынка такой ряд есть. Поэтому финансовые обещания так часто опираются на историю: она под рукой, и добывать её не надо.
Здесь бэктест похож на разбор старых историй болезни: и то и другое смотрит назад и не считается проверкой. Ломается сравнение вот где. Архив больницы приходится собирать, он неполон, и у каждой больницы он свой. Ряд биржевых цен готов, полон и одинаков для всех желающих. Поэтому в медицине прошлое разбирают редко и трудно, а в деньгах постоянно и мгновенно.
Проверка и подгонка: где проходит граница
Главная граница урока проходит не там, где её обычно ищут. Вопрос не в том, использовались ли настоящие данные: они используются в обоих случаях. Вопрос в том, что появилось раньше: правило или ряд, на котором его считают.
Проверка предсказывает то, чего ещё не видела. Правило объявлено, дальше приходят новые месяцы, и правило вполне может с ними не сойтись. Подгонка описывает то, что уже случилось. Правило выбрано после того, как ряд стал известен, и не сойтись с ним оно уже не могло.
Проще всего почувствовать разницу на споре о матче. Назвать победителя до игры значит сделать предсказание, и ошибиться в нём можно. Назвать победителя после игры значит дать описание, и ошибиться в нём нельзя. Ломается это сравнение в одном: матч один, а месяцев в ряду сотни, и правило ошибается на части из них. Но выбирали его именно за то, что ошибается оно там реже прочих.
Заметьте, что дело здесь не в честности автора. Подогнать правило под известный ряд можно без всякого умысла и даже не заметив этого. Достаточно попробовать несколько вариантов и оставить тот, который понравился, а понравится тот, что лучше лёг на уже случившиеся годы. Умысел меняет оценку человека, но не меняет того, что показывает кривая.
Отсюда получается короткая проба, которую можно приложить к любой витрине. Спросите, могло ли правило провалиться на тех данных, на которых его показывают. Если не могло, перед вами описание прошлого, а не проверка. Описание бывает точным и полезным, но силы предсказывать оно от этого не приобретает.
Четыре места, где прячется подгонка
Подгонка редко выглядит как подгонка. Обычно она разложена по нескольким решениям, и каждое по отдельности кажется невинным. Мест этих четыре, и ни одно из них на картинке не видно.
Первое. Окно истории. Правило показывают на том отрезке лет, где оно сработало. Отрезок подбирается точно так же, как настройки. Сдвиньте начало на два года, и кривая может стать другой, а о том, почему выбрано именно это начало, витрина молчит.
Второе. Настройки. Каждый подкрут параметра считается отдельной попыткой. Попыток бывают сотни, а называют одну, ту, что вышла лучше прочих. Урок 11 показывает на тренажёре, во что это обходится.
Третье. Состав данных. Ряды часто собраны по тем, кто дожил до сегодняшнего дня. Закрытые и присоединённые фонды из витрины исчезают, и правило проверяется на выживших. Урок 3 разбирает этот механизм подробно.
Четвёртое. Расходы. В расчёте по истории их часто нет вовсе, а правило, которое торгует часто, платит много. Насколько это меняет итог, показывает урок 5. При доходности 7 % годовых, считая сложным процентом, комиссия в 1,5 % в год превращает миллион за тридцать лет не в 7 612 255, а в 4 983 951. Треть итога, и в расчёте по истории её обычно не вычитают.
Действуют эти четыре места вместе, и потому их трудно взвесить порознь. Отрезок подобран под настройки, настройки под отрезок, состав данных подпирает и то и другое, а расходы вычитаются в конце, если вычитаются вовсе. Разложить готовую кривую обратно на эти решения снаружи невозможно. Поэтому вопрос ставится не к кривой, а к тому, что написано рядом с ней.
Это не чек-лист курса: канонический список из шести вопросов к финансовому обещанию приводится в уроке 20. Здесь названы четыре места именно в бэктесте, и объединяет их одно. В каждом решение принималось после того, как результат уже был известен.
Что бэктест всё-таки умеет
Из сказанного легко сделать вывод сильнее, чем позволяют доводы: бэктест бесполезен, смотреть на него незачем. Это неверно, и неверно в ту же сторону, против которой написан весь курс. У приёма есть работа, которую он делает хорошо, и работ этих две.
Первая: он умеет отвергать. Правило, провалившееся на прошлом, вряд ли заслуживает внимания, потому что оно не описало даже того, что уже случилось. Провал на прошлом становится доводом против правила. Успех на прошлом доводом за него не становится, и несимметричность здесь обычная: опровергнуть всегда проще, чем подтвердить.
Вторая: он показывает характер правила. Сколько месяцев подряд оно теряло, какой глубины была просадка, как часто оно требовало сделок: всё это из прогона по истории видно. Такое описание полезно и никого не обманывает. Полезно оно ровно до тех пор, пока его читают как описание, а не как обещание.
Есть и третий случай, более редкий, когда прогон по истории говорит по существу. Это когда правило было записано и обнародовано заранее, а прогон делается по годам, которые прошли уже после этого. Тогда данные правила не видели, и проверка получается настоящей. Отличить такой случай от обычного можно по дате: она должна стоять раньше начала отрезка.
Поэтому осмысленный вопрос к бэктесту звучит не «сколько он показал», а «что именно он описал». Ответ на первый вопрос есть всегда, и он ничего не стоит. Ответ на второй бывает содержательным: отрезок такой-то, расходы учтены или нет, попыток было столько-то.
Урок не делит правила на работающие и неработающие и не говорит, что делать с числом на витрине. Он говорит, что это число означает: результат правила на отрезке прошлого, известном заранее. Решение зависит от обстоятельств, которых курс не знает: от вашего срока, дохода и обязательств.
Что дальше
Итог урока умещается в две строки. Кривая, нарисованная по прошлому, сообщает о прошлом. Чтобы она сообщила о правиле, правило должно было появиться раньше данных, а на витрине почти всегда наоборот.
Урок 11 берёт эту же мысль и доводит её до числа. Там тренажёр перебирает правила на ряду, в котором заведомо нечего искать, и показывает обе половины сразу: ту, на которой правило подбирали, и ту, которой оно не видело. Видно, как результат на первой растёт с числом попыток, а на второй не растёт вовсе.
Урок 12 задаёт соседний вопрос, уже не о правилах, а о фондах. Если результат фонда за прошлые годы известен, что он говорит о следующих годах? Этот вопрос измеряли, и ответ у него точнее, чем принято думать в обе стороны.
Что подтвердилось, а что нет
Результат на истории показывает свойство подбора, а не стратегии. Правило выбирают после того, как ряд цен стал известен целиком, и провалиться на этом ряду оно уже не могло. Кривая описывает выбранный отрезок прошлого вместе со всеми случайностями, которые в нём были. Утверждением о будущем поведении правила она не становится ни при какой длине отрезка.
Ни цены, ни арифметика к делу не относятся: подгоняют как раз под настоящие цены и считают при этом верно. Ненадёжным вывод делают четыре решения, принятые после того, как результат стал известен: выбор отрезка лет, выбор настроек, состав данных и то, вычтены ли расходы. Ни одно из них по кривой не видно.
Отвергать бэктест умеет: правило, провалившееся на прошлом, не описало даже того, что уже случилось. Несимметричность здесь обычная. Провал сообщает много, успех почти ничего. Кроме того, прогон по истории показывает характер правила: глубину просадок, длину неудачных полос, частоту сделок. Как описание он полезен, но не как обещание.
Термины
- бэктестbacktest
- Прогон правила по уже случившемуся ряду цен: правило применяют к прошлому и считают, что получилось бы. Результат описывает выбранный отрезок прошлого, а не будущее поведение правила.
- подгонка под прошлоеoverfitting to history
- Подбор правила под уже известный ряд. Правило выбирают за то, что оно лучше прочих описало случившееся, и потому на этом ряду оно не может выглядеть плохо.
- механическое правилоmechanical rule
- Заранее записанное условие, по которому решение принимается без участия человека: при таком-то признаке держать бумагу, при таком-то не держать. Именно такое правило можно прогнать по прошлому.
- скользящее среднееmoving average
- Средняя цена за последние несколько месяцев, пересчитываемая каждый месяц заново. Сглаживает колебания и потому запаздывает: разворот виден в нём позже, чем случился.
- окно историиsample window
- Отрезок прошлого, на котором показывают результат правила. Выбор отрезка тоже настройка, как и параметры правила, и в витрине он обычно не объяснён.
- кривая капиталаequity curve
- Линия, показывающая, во что превращались вложенные деньги месяц за месяцем по выбранному правилу. Нарисованная по прошлому, она описывает выбранный отрезок и ничего не обещает дальше.
- просадкаdrawdown
- Наибольшее падение от достигнутой вершины до следующей низшей точки. Мера того, как глубоко и долго приходилось терпеть, а не мера доходности.
- расходы на сделкиtransaction costs
- Всё, что вычитается из результата при каждой покупке и продаже: вознаграждение посредника и разница между ценой покупки и ценой продажи. В расчёте по истории их часто не вычитают вовсе.
Практикум · Разобрать одну кривую
Навык урока проверяется на первой попавшейся витрине со словами «за прошлые годы это принесло бы». Задача не в том, чтобы оценить стратегию, а в том, чтобы выписать, чего в показанном не сказано. Занимает около сорока минут.
- Найдите одно обещание, где результат правила показан за прошлые годы: реклама сервиса, разбор в статье, ролик. Берите первое попавшееся, а не самое сомнительное, чтобы выборка была честной.
- Выпишите отрезок: с какого года по какой считали. Отметьте, сказано ли, почему выбран именно он, и есть ли расчёт с началом на два года раньше.
- Найдите настройки правила и число попыток. Сколько вариантов автор перебрал, прежде чем показать этот? Скорее всего, не сказано вовсе. Запишите и это тоже.
- Проверьте, вычтены ли из результата вознаграждение посредника и расходы на сделки, и названо ли, сколько сделок правило требует за год.
- Ответьте себе одним предложением: могло ли это правило провалиться на показанных данных. Если не могло, перед вами описание прошлого, и других сведений в витрине нет.
Вопросы для самопроверки
Кривая стратегии посчитана по настоящим биржевым ценам, и арифметика в расчёте верна. Почему это не делает её проверкой правила?
- Потому что биржевые цены прошлых лет пересматриваются задним числом и потому ненадёжны
- Потому что в расчёте по истории пропускают расходы на сделки и вознаграждение посредника
- Потому что правило выбрали, уже зная этот ряд
- Потому что десяти лет мало: на таком отрезке результат любого правила случаен
Чем ступень «бэктест» отличается от ступеней лестницы доказательств, принятых в медицине?
- Правило прогоняют по уже известному прошлому, а лекарство приходится проверять на новых больных и ждать
- Бэктест считает машина, и потому в нём меньше произвола, чем в испытании лекарства
- В медицине результат меряют у отдельного человека, а в деньгах только у больших групп
- Испытания лекарств стоят дорого, и потому лестница доказательств в медицине короче
Автор правила показывает результат за 2012-2022 годы. Почему выбор именно этих лет входит в подгонку?
- Потому что за десять лет рынок успевает пройти полный цикл, и на таком отрезке результат любого правила усредняется
- Потому что вознаграждение посредника за эти годы менялось, и расчёт по одной средней величине занижает настоящие расходы
- Потому что данные до 2012 года хуже по качеству и для расчёта непригодны
- Потому что начало и конец отрезка выбраны уже после того, как стало известно, на каком отрезке правило выглядит лучше
Что бэктест всё-таки делает хорошо?
- Показывает, какую доходность правило принесёт в ближайшие годы, если рынок не изменится
- Отвергает: правило, провалившееся уже на прошлом, вряд ли заслуживает внимания
- Позволяет сравнить два правила и выбрать более надёжное
- Измеряет устойчивость правила к случайностям, если прогнать его по ряду много раз
Каким одним вопросом отличают проверку от подгонки?
- Спросить, могло ли правило провалиться на тех данных, на которых его показывают, и появилось ли оно раньше этих данных
- Спросить, сколько лет истории вошло в расчёт: чем длиннее отрезок, тем надёжнее вывод
- Спросить, учтены ли в расчёте расходы: если учтены, расчёт можно считать проверкой
- Спросить, кто именно считал: расчёт независимой стороны подгонкой не бывает
Ответы и разбор открываются в самопроверке урока: она считает результат и отмечает урок пройденным. Пройти самопроверку.
Что читать
- OpenStax Principles of Finance, главы о доходности и риске: Открытый учебник под лицензией CC BY-NC-SA 4.0. Даёт устройство величин, из которых складывается любой такой расчёт: доходность за период, сложный процент, разброс. Дополнение к уроку, а не условие его понимания.