Блог им. tores

немного про бэк-тестирование?

    • 26 октября 2018, 21:21
    • |
    • tores
  • Еще
Сегодня обсуждали бэк-тестинг в  одной из тем. Вспомнил как однажды сильно озадачился этим вопросом. Очень часто встречал такой рецепт. Берем исторические данные за 5 лет. Подбираем параметры на периоде  4 лет и потом тестим торговую систему (далее — ТС) на данных 5-го года, типа контрольная выборка или out of sample. Более продвинутые рецепты рекомендовали делать что то вроде кросс-валидации, т.е. период обучения сдвигать, что бы контрольной выборкой был то 1-й год данных, то 2-й год данных и т.д.

Смысл такого рецепта бэк-тестирования объяснялся тем, что если ТС на обучающих данных показывает хороший результат, а на контрольной выборке  показывает результат хуже, то это означает, что ТС плохая и торговать ее нельзя.

Я взял рецепт на вооружение, но зашел с другого конца. Допустим есть множество наборов параметров для ТС и каждому набору на обучающей выборке соответствует определенное значение целевой функции, допустим доходность. Но с другой стороны, также каждому набору параметров соответствует определенное значение доходности и на контрольной выборке. Получается, что бы выбрать наилучший (в каком то смысле) набор параметров для ТС, мы можем просто взять тот набор параметров, который показывает хорошие результаты и на обучающей выборке, и на контрольной выборке. В итоге приходим к тому, что надо делать подбор параметров на всей выборке и там уже выбирать, нравится-не нравится.

Когда мы делаем бэк-тестирование с разделением выборки  на обучающую и контрольную, то тестируем по сути не качество набора параметров ТС, а качество самого способа выбора наилучшего набора параметров для ТС. Если мы говорим о способе выбора наилучшей ТС, то говорим о целевой функции. Про это уже мало пишут в книгах и говорят на ютубе.

После того как пришел к такому выводу, стал прогонять ТСы на как можно большей глубине данных. Никаких контрольных выборок. Можно по другому провести стресс-тест ТС, просто обучив ее на одном инструменте, потом прогнать с этими же параметрами на другом.
★4
10 комментариев
Все верно, деление на семпл и аутофсемпл это такой своеобразный психологический костыль для разработчика. Дескать как же — все по науке!
avatar
wrmngr, да-да, вообще системный подход, все эти волк-форвард, аутофсемпл, дефлейтед шарпы, статистики всякие — все это костыли. Торговать по интуиции — вот сила. Ну или там встал с левой ноги — продал, с правой — купил. Только так, только хардкор!
avatar
Stagirit, при вульгарном применении, как это зачастую делается, конечно всё это костыли. Зарядить числодробилку большого ума не надо
avatar
OOS делаю минимальным в области свежих данных + OOS «слева» т.е. в области старых данных. Оптимизирую между ними.
Есть иначе есть проблема, что когда рынок меняется, «новый рынок» очень не скоро появляется в in-sample.
Результат сразу не торгую, выжидаю и проверяю на новых данных. На этом этапе многое отсеивается.
avatar
Получается, что бы выбрать наилучший (в каком то смысле) набор параметров для ТС, мы можем просто взять тот набор параметров, который показывает хорошие результаты и на обучающей выборке, и на контрольнойвыборке

Поэтому надо брать 3 периода данных. Первые 2 это как раз обучающий и контрольный. Контрольный при таком подходе тоже получается как бы оптимизированным — ведь мы выбираем те параметры которые хорошо работают на обучающем и контрольном. А вот 3 этап это проверочный — на нем мы ничего не подбираем, а просто смотрим. И если на 3 периоде ничего не работает, то мы уже не подбираем другие параметры, которые бы и на 3 работали, а всю систему отправляем в печку
avatar
Иван Собакин, ну можно и так. но опять же, вы можете  на всех трех периодах данных посчитать значение целевой функции (критерий, по которому вы выбираете набор параметров). И выбрать тот набор параметров который удовлетворителен на всех трех периодах. Логично же, что он и будет оптимальным для торговли? То что вы описали, на мой взгляд, это тестирование самого способа выбора оптимального набора параметров для торговли. Что в целом тоже правильно делать при выборе ТС.

С другой стороны:
«И если на 3 периоде ничего не работает, то мы уже не подбираем другие параметры, которые бы и на 3 работали, а всю систему отправляем в печку»
— что если есть такой набор параметров, который дает хороший результат на всех трех периодах? просто мы его правильно выбрать не можем из всего множества параметров. и заранее отказываемся от рабочей ТС? Тогда нам нужно изменить целевую функцию или набор критериев, так что бы мы могли на всем множестве параметров выбрать оптимальный набор. 

avatar
Max, получается что если мы опять подбираем такие параметры, которые и на 3 этапе работают, то мы оптимизируем 3 период. Тогда надо брать 4-й и так далее А смысл в том, чтобы на каком то периоде вообще ничего не подбирать, а просто смотреть как работает — этот период будет прообразом реальной торговли и вот он то и покажет как будет вести себя система в реальной торговле
avatar
Смотрите распределение метрик системы от значений параметров. Если хорошо работает только на вырожденной комбинации — это подгонка. Если система будет рабочей в достпточно крупной области параметров, то она скорее всего рабочая. Можно уже тюнить параметры в этой области. Конечно, на реальных торгах все будет хуже, чем в тестах. Переоптимизация есть, от этого не уйти. Тестировать на других инструментах можно только если они реально очень схожи по своей природе. Например, spy/qqq. Но тестировать страту с aapl на spy смысла нет никакого 
avatar
оптимизируй как хочешь. будущему всё равно. рынку тоже.
мне вообще плевать как ты там оптимизируешь. ну и всем остальным вообще до лампочки, что ты тут написал.
avatar
Kapeks, надо покормить тролля, лови плюс
avatar

теги блога tores

....все тэги



UPDONW
Новый дизайн