Сегодня обсуждали бэк-тестинг в одной из тем. Вспомнил как однажды сильно озадачился этим вопросом. Очень часто встречал такой рецепт. Берем исторические данные за 5 лет. Подбираем параметры на периоде 4 лет и потом тестим торговую систему (далее — ТС) на данных 5-го года, типа контрольная выборка или out of sample. Более продвинутые рецепты рекомендовали делать что то вроде кросс-валидации, т.е. период обучения сдвигать, что бы контрольной выборкой был то 1-й год данных, то 2-й год данных и т.д.
Смысл такого рецепта бэк-тестирования объяснялся тем, что если ТС на обучающих данных показывает хороший результат, а на контрольной выборке показывает результат хуже, то это означает, что ТС плохая и торговать ее нельзя.
Я взял рецепт на вооружение, но зашел с другого конца. Допустим есть множество наборов параметров для ТС и каждому набору на обучающей выборке соответствует определенное значение целевой функции, допустим доходность. Но с другой стороны, также каждому набору параметров соответствует определенное значение доходности и на контрольной выборке. Получается, что бы выбрать наилучший (в каком то смысле) набор параметров для ТС, мы можем просто взять тот набор параметров, который показывает хорошие результаты и на обучающей выборке, и на контрольной выборке. В итоге приходим к тому, что надо делать подбор параметров на всей выборке и там уже выбирать, нравится-не нравится.
Когда мы делаем бэк-тестирование с разделением выборки на обучающую и контрольную, то тестируем по сути не качество набора параметров ТС, а качество самого способа выбора наилучшего набора параметров для ТС. Если мы говорим о способе выбора наилучшей ТС, то говорим о целевой функции. Про это уже мало пишут в книгах и говорят на ютубе.
После того как пришел к такому выводу, стал прогонять ТСы на как можно большей глубине данных. Никаких контрольных выборок. Можно по другому провести стресс-тест ТС, просто обучив ее на одном инструменте, потом прогнать с этими же параметрами на другом.
Есть иначе есть проблема, что когда рынок меняется, «новый рынок» очень не скоро появляется в in-sample.
Результат сразу не торгую, выжидаю и проверяю на новых данных. На этом этапе многое отсеивается.
Поэтому надо брать 3 периода данных. Первые 2 это как раз обучающий и контрольный. Контрольный при таком подходе тоже получается как бы оптимизированным — ведь мы выбираем те параметры которые хорошо работают на обучающем и контрольном. А вот 3 этап это проверочный — на нем мы ничего не подбираем, а просто смотрим. И если на 3 периоде ничего не работает, то мы уже не подбираем другие параметры, которые бы и на 3 работали, а всю систему отправляем в печку