Блог им. Voldemar227

Бывает так: тестируешь торгового робота, получаешь красивую кривую баланса, подбираешь настройки — всё выглядит отлично. А затем проверяешь стратегию на новых данных и видишь совсем другой результат.
Знакомая ситуация? В алгоритмической торговле это одна из самых распространённых проблем. И дело далеко не всегда в ошибках программирования.
Часто робот просто слишком хорошо приспособился к прошлому рынку.
Представим, что у советника есть несколько параметров. Мы запускаем оптимизацию и проверяем тысячи комбинаций. Среди них почти наверняка найдётся вариант с высокой прибылью и небольшой просадкой.
Но означает ли это, что мы нашли хорошую стратегию?
Не обязательно. Иногда мы находим настройки, которые удачно совпали с особенностями конкретного исторического периода. На другом участке рынка те же параметры могут работать значительно хуже.
Это и есть переоптимизация: стратегия хорошо описывает прошлые данные, но не обязательно сохраняет результат в будущем.
Поэтому я бы не стал оценивать робота только по лучшему результату оптимизации. Гораздо интереснее посмотреть, что происходит с соседними значениями параметров. Если небольшое изменение настройки превращает прибыльную систему в убыточную, это повод насторожиться.
Один из простых способов проверить стратегию — разделить историю на две части.
На первой подбираем параметры, а на второй проверяем результат, не меняя настройки. Второй участок не должен участвовать в оптимизации.
Например, если мы настраивали советника на данных за 2018–2023 годы, можно проверить выбранные параметры на последующем периоде.
Если результат резко ухудшился, стоит разобраться в причинах. Возможно, стратегия была переоптимизирована, а возможно, изменились рыночные условия.
Более подробную проверку можно провести методом walk-forward: параметры подбираются на одном участке истории, затем проверяются на следующем, после чего процедура повторяется со сдвигом окна.
Это не позволяет предсказать будущее, но помогает понять, насколько сильно результат зависит от конкретного периода.
Есть ещё один момент, который иногда недооценивают, — условия исполнения сделок.
Спред, комиссия и проскальзывание способны заметно изменить результат. Особенно это касается стратегий, которые часто открывают позиции и получают небольшую прибыль с каждой сделки.
Допустим, робот зарабатывает в среднем 3 пункта на сделку до учёта расходов. Если спред, комиссия в пересчёте на пункты и другие издержки составляют в сумме 2 пункта, от исходного результата остаётся всего 1 пункт.
А если условия исполнения ухудшатся, торговое преимущество может исчезнуть.
Поэтому тестировать стратегию желательно с реалистичными торговыми издержками. А после исторических тестов полезно проверить её на демосчёте.
Два робота могут заработать одинаковую сумму, но вести себя совершенно по-разному.
Один постепенно увеличивает баланс, другой долго удерживает убыточные позиции и в итоге получает ту же прибыль после значительной просадки.
Поэтому при оценке советника я бы обращал внимание на несколько вещей:
Особенно полезно смотреть на эквити с учётом плавающего результата открытых позиций. Баланс может выглядеть хорошо, хотя фактическое состояние счёта в данный момент значительно хуже.
Если коротко, последовательность следующая:
Ни один из этих этапов не гарантирует будущую прибыль. Но вместе они помогают отсеять часть стратегий, которые выглядят убедительно только на истории.
Я занимаюсь разработкой торговых роботов и считаю, что тестирование должно отвечать не только на вопрос «сколько заработал советник?», но и на вопрос «за счёт чего получен этот результат и насколько он устойчив?».
Примеры торговых алгоритмов можно посмотреть на Trading-Go.ru.
А как вы проверяете свои стратегии? Достаточно ли вам тестирования на отдельном историческом периоде или обязательно используете walk-forward и проверку на демосчёте?
имхо. Система — это всё же некая идея, новая информация, какое то условие почему ты заработаешь, почему рынок должен совершить движение в твою сторону. Система должна отвечать почему ты заработаешь без необходимости проверки на истории.