Алиса обучила стратегию на ценовых данных за последние 6 лет, а затем протестировала ее на тех же ценовых данных. Это всегда приводит к чрезмерно оптимистичным результатам — как если бы человек готовился к экзамену, уже зная экзаменационные вопросы и заучивая ответы. Есть и другая проблема. За 6 лет рынки меняются, и торговые стратегии должны адаптироваться. Не рекомендуется торговать по неизменной стратегии в течение многих лет. Как правило, параметры стратегии должны регулярно корректироваться в соответствии с рыночной ситуацией. Zorro может делать это автоматически, но как мы можем имитировать это регулярное переобучение в тесте?
Оптимизация по шагам (Walk-forward optimisation, WFO) переносит процесс обучения в саму стратегию. Это позволяет — с определенными ограничениями — увидеть, может ли стратегия действительно достичь своих тестовых результатов в реальной торговле. В то же время WFO гарантирует, что параметры стратегии регулярно корректируются в соответствии с рыночной ситуацией. И это гарантирует, что ценовые данные, используемые для тестирования, всегда «вне выборки», т.е. не используются для обучения.
Чтобы активировать WFO, Алиса добавила две строки в сценарий (Alice2d.c):
StartDate = 2005; NumWFOCycles = 10;
При такой настройке параметры настраиваются десять раз за период моделирования. Для этого «временное окно» сдвигается на 10 циклов по периоду моделирования, что определяет участок всего периода. Раздел разбит на период просмотра, период обучения и последующий тест, как показано на следующем рисунке:
Рис. 30 — Оптимизация по методу Walk-forward
Время обратного хода в начале каждого временного окна необходимо для сбора выходных данных для функций. Во время обучения формируются параметры, которые затем проверяются в последующих тестовых периодах. Такое разделение гарантирует, что каждый тест всегда проводится с нетронутой частью ценовой кривой, которая еще не использовалась для обучения параметров. Затем временное окно сдвигается на величину тестового периода по сравнению с периодом моделирования, и начинается новый цикл обучения/тестирования, на этот раз с новой частью кривой цен. Последний цикл обучения генерирует значения параметров для реальной торговли и поэтому не имеет тестового периода.
Время тестирования теперь намного меньше, чем общий период моделирования. Поэтому Алиса установила начальную дату (StartDate) на 2005 год, чтобы иметь достаточно данных о времени и ценах. Поскольку каждому испытанию предшествует длительный период обучения, первый цикл испытаний приходится на 2009 г. Если StartDate не задан, моделирование всегда начинается примерно за 6 лет до текущей даты.
После нажатия кнопки [Train], обучение теперь занимает несколько минут, так как время моделирования теперь составляет более 10 лет, и полная оптимизация выполняется для каждого из циклов WFO. Обученные параметры теперь сохраняются в отдельных файлах параметров для каждого цикла WFO. Они вступают в игру, когда вы нажимаете на [Test] после тренировки. Во время цикла испытаний для каждого участка кривой загружаются соответствующие параметры. Еще одно нажатие на [Result] выводит кривую капитала:
Рис. 31 — Результат WFO
Мы видим, что, как и ожидалось, WFO показывает худшие результаты в тесте, чем стратегия, тестируемая непосредственно в период обучения. Стратегия по-прежнему прибыльна, но на кривой эквити есть отрицательные участки, например, в 2010 и 2013 годах. Такие просадки случаются почти во всех системах. Правда, они часто предшествуют прибыльному периоду, как в данном случае. Тем не менее, они вызывают головную боль и расстройство желудка у трейдера, который сталкивается с ними вживую. В следующей главе мы рассмотрим, как генерировать более стабильные и надежные доходы, чтобы Боб действительно мог получать от них регулярный доход.
С помощью оптимизации по принципу «вперед-назад» вы можете создать стратегию «без параметров» — стратегию, которая не зависит от набора параметров, оптимизированных один раз, а тренируется через регулярные промежутки времени в процессе торговли и таким образом сама определяет значения своих параметров. Таким образом, обучение становится частью стратегии. WFO моделирует этот процесс и таким образом проверяет не только стратегию, но и качество процесса оптимизации. Переадаптированные стратегии не проходят тест WFO, в то время как прибыльные и надежные стратегии показывают хорошие результаты WFO. Недостатком WFO, конечно, является то, что процесс обучения занимает больше времени, поскольку обычно проходит в течение многих циклов. И для обучения доступно меньше ценовых данных. 10 циклов, выбранных Алисой, являются компромиссом: большее количество циклов еще больше сократит период обучения на цикл, что сделает обучение на основе меньшего количества данных и менее эффективным. С другой стороны, меньшее количество циклов увеличивает период обучения на более длительные периоды времени, в течение которых рынок уже может измениться, что сделает обученные параметры устаревшими.
Поскольку стратегия, обученная WFO, также должна регулярно переобучаться в реальной торговле, чтобы адаптировать ее к рынку, Алиса добавила в скрипт следующие строки:
if(ReTrain) { UpdateDays = -1; SelectWFO = -1; }
ReTrain ненулевое значение, если кнопка [Train] была нажата во время реальной торговли. UpdateDays указывает период времени, по истечении которого новые ценовые данные автоматически загружаются из Интернета для обновления кривой цен для обучения. Если UpdateDays имеет значение -1, данные о ценах обновляются всегда. SelectWFO заставляет Zorro не переобучать весь период моделирования, а только определенный цикл WFO. В этом случае именно последний цикл (-1) содержит новые ценовые данные и формирует набор параметров для реальной торговли.
Если нажимать [Train] каждые несколько месяцев — по крайней мере, каждые 57 недель, как указано в разделе «Циклы тестирования WFO» в отчете о производительности, — процесс WFO регулярно продолжается во время торговли и делает стратегию независимой от предварительно обученных параметров. Таким образом, мы имеем по сути «беспараметрическую» стратегию.
Продолжение следует...
smart-lab.ru/blog/965978.php#comment