tores
tores личный блог
26 октября 2018, 21:21

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

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

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

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

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

После того как пришел к такому выводу, стал прогонять ТСы на как можно большей глубине данных. Никаких контрольных выборок. Можно по другому провести стресс-тест ТС, просто обучив ее на одном инструменте, потом прогнать с этими же параметрами на другом.
10 Комментариев
  • wrmngr
    27 октября 2018, 00:02
    Все верно, деление на семпл и аутофсемпл это такой своеобразный психологический костыль для разработчика. Дескать как же — все по науке!
    • Stagirit
      27 октября 2018, 00:18
      wrmngr, да-да, вообще системный подход, все эти волк-форвард, аутофсемпл, дефлейтед шарпы, статистики всякие — все это костыли. Торговать по интуиции — вот сила. Ну или там встал с левой ноги — продал, с правой — купил. Только так, только хардкор!
      • wrmngr
        27 октября 2018, 01:27
        Stagirit, при вульгарном применении, как это зачастую делается, конечно всё это костыли. Зарядить числодробилку большого ума не надо
  • Roman Ivanov
    27 октября 2018, 01:37
    OOS делаю минимальным в области свежих данных + OOS «слева» т.е. в области старых данных. Оптимизирую между ними.
    Есть иначе есть проблема, что когда рынок меняется, «новый рынок» очень не скоро появляется в in-sample.
    Результат сразу не торгую, выжидаю и проверяю на новых данных. На этом этапе многое отсеивается.
  • Иван Иванов
    27 октября 2018, 03:40
    Получается, что бы выбрать наилучший (в каком то смысле) набор параметров для ТС, мы можем просто взять тот набор параметров, который показывает хорошие результаты и на обучающей выборке, и на контрольнойвыборке

    Поэтому надо брать 3 периода данных. Первые 2 это как раз обучающий и контрольный. Контрольный при таком подходе тоже получается как бы оптимизированным — ведь мы выбираем те параметры которые хорошо работают на обучающем и контрольном. А вот 3 этап это проверочный — на нем мы ничего не подбираем, а просто смотрим. И если на 3 периоде ничего не работает, то мы уже не подбираем другие параметры, которые бы и на 3 работали, а всю систему отправляем в печку
      • Иван Иванов
        28 октября 2018, 05:36
        Max, получается что если мы опять подбираем такие параметры, которые и на 3 этапе работают, то мы оптимизируем 3 период. Тогда надо брать 4-й и так далее А смысл в том, чтобы на каком то периоде вообще ничего не подбирать, а просто смотреть как работает — этот период будет прообразом реальной торговли и вот он то и покажет как будет вести себя система в реальной торговле
  • day0markets.ru
    27 октября 2018, 09:08
    Смотрите распределение метрик системы от значений параметров. Если хорошо работает только на вырожденной комбинации — это подгонка. Если система будет рабочей в достпточно крупной области параметров, то она скорее всего рабочая. Можно уже тюнить параметры в этой области. Конечно, на реальных торгах все будет хуже, чем в тестах. Переоптимизация есть, от этого не уйти. Тестировать на других инструментах можно только если они реально очень схожи по своей природе. Например, spy/qqq. Но тестировать страту с aapl на spy смысла нет никакого 
  • Kapeks
    27 октября 2018, 10:39
    оптимизируй как хочешь. будущему всё равно. рынку тоже.
    мне вообще плевать как ты там оптимизируешь. ну и всем остальным вообще до лампочки, что ты тут написал.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн