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