В статье много букв, так что для самых нетерпеливых в конце сделал важные выводы, прочитав которые, я надеюсь, появится желание прочитать и все остальное.
На выходных много думал, про трейдинг и судьбы мира, а в результате понял одну очень важную вещь, которая кардинально изменит мой подход в разработке торговых систем. Это с одной стороны очень простая вещь в своей сути, но очень сложная для понимания неподготовленному человеку. Если по прочтении у вас останутся вопросы — перечитайте еще раз или задавайте вопросы в комментариях.
В любом случае — я на 99% уверен, что вы не читали об этом нигде прежде, и я уверен, что это перевернет и ваше представление о разработке торговых систем.
Итак, давайте попробуем разобраться как обычно происходит разработка и тестирование торговых систем. Не имеет значение какая идея лежит в основе системы, это может быть и технический анализ, и какой угодно другой подход.
На первом этапе вырабатываются четкие формальные правила, определяющие каким образом система подает сигнал на открытие позиции, управление объемом открытой позиции, стоплоссы и тейкпрофиты и т.п. Более продвинутые трейдеры на этом же этапе активно изучают возможности по управлению капиталом, результаты от реинвестирования, время и величину максимальной просадки.
Далее полученная система тестируется на исторических данных.
Исходя из полученных результатов система модернизируется, уходит в корзину, оптимизируется.
Далее, если все хорошо наступает этап торговли на реальных деньгах.
Друзья (в этом месте я рискую нажить себе смертельных врагов из числа производителей софта для разработки и тестирования торговых систем)!
Все ваше тестирование на исторических данных абсолютно бесполезно! Любые результаты полученных на основе прогона системы не значат ничего, они являются всего лишь следствием случайности. Ниже я объясню подробно почему это так.
Самая главная причина, из-за которой все и происходит —
Именно дисперсия убивает всякий смысл в тестировании торговых систем. Дисперсия множит на ноль все усилия по оптимизации торговых систем в классическом смысле. Дисперсия приводит ваши результаты из вида: «На основе исторических данных, при реальном использовании система дает за год 10.000 пп. прибыли», в вид: «На основе исторических данных, при реальном использовании система дает за год 10.000 пп. плюс/минус 15.000 пп. прибыли».
Просто вдумайтесь. Вы тестируете систему на исторических данных. Получаете результат +10.000 пп. прибыли. Но в реальности это означает, что запустив ее в следующем году, вы можете получить, как 25.000 пп. прибыли, так и 5.000 пп. убытков!
А теперь представьте себе, что вы тестировали систему. Получили результат в 5.000 пп. убытока, и отправили ее в корзину. Но это на самом деле, могла быть та же самая система, которая давала на других данных 10.000 пп. прибыли!
Давайте попробуем понять почему так происходит, как велико влияние этой самом дисперсии и как сделать чтобы исключить это влияние.
Как я уже написал выше — не имеет значение, на что именно опирается ваша торговая стратегия. В общем виде можно допустить, что открывая позицию вы с некоторой вероятностью заработаете деньги. А с некоторой потеряете. Давайте для простоты расчетов представим себе, что у вас есть торговая система, которая в 60% случаев приносим вам 500 пп. прибыли, а в 40% случаев убыток в 500 пп. (тут очень важно понимать, что эти %, получаются НЕ на основе исторических данных, это полученное неизвестно откуда, абсолютно достоверное знание).
Давайте теперь смоделируем, как могут развиваться события, при торговле по этой системе на протяжении 100 сделок.
Я использовал тестер на основе датчика случайных чисел, который с вероятностью 60% плюсует 500 пп. к нашему результату, и с вероятность 40% вычитает те же 500 пп.
Наше подсознание сразу же подсказывает нам вот такую картинку:
Вы бы взяли такую торговую систему в работу?
Вроде бы, мы имеем неплохое матожидание, система должна давать хороший профит. И действительно, достаточно часто (чаще других вариантов) так и происходит.
Но теперь взгляните на другие варианты развития событий:
На всех этих картинках изображены результаты работы ровно той же торговой системы! Во всех случаях мы имели 60% вероятности заработать 500 пп., и 40% вероятности потерять.
Вы бы взяли такую торговую систему в работу, если ваш тестер показал бы вам подобный график эквити?
Конечно же в большинстве случаев, наш виртуальный помощник, которого я использую для отрисовки этих графиков показывает какую-то среднюю картинку:
Вроде бы и рост есть, и просадка присутствует.
Но (!). Вы никогда не знаете точно (если, конечно, вы не занимаетесь этим вопросом специально), какую из этих картинок покажет ваше тестирование на основе исторических данных.
Вполне возможно, что бешенная прибыль, которую вы видите на графике — просто напросто банальная случайность. Так сложилось.
А возможно, что торговая система, которая отправилась в корзину на прошлой неделе — просто неудачница. Просто так сложилось, что на отрезке истории, где вы ее тестировали (а может даже двух или трех, запросто!) ей банально не повезло.
Надеюсь, если вы дочитали до этого места, мне удалось донести до вас простую мысль — влияние дисперсии на результат тестирования системы на исторических данных велико. Очень велико. Оно намного больше чем вы когда-либо думали.
То же самое понимание, можно теперь перенести и на процесс оптимизации торговой системы. В большинстве случаев, историческое эквити торговой системы улучшается, не из-за реального улучшения матожидания вашей системы (60/40 которое мы с вами взяли в качестве базы), а просто в следствии влияния дисперсии: «Просто так сложилось».
Я сейчас вспоминаю, что в одной из прочитанных мною книг (вроде бы это было у Талеба в «Черном лебеде», ровно такая мысль о том, что мы склонны сильно недооценивать роль случайности в нашей жизни, кто не читал
Ну, ок. Я взорвал вам мозг, и ваше представление о базовых подходах. Давайте теперь попробуем понять, что с этим делать и какие выводы из этого следуют:
- Тестирование системы на исторических данных ничего не значит в 99% случаев. Нельзя принимать результаты исторического тестирования на веру, если вы не учитываете влияние дисперсии на них.
- Для того, чтобы понять насколько сильно влияние дисперсии на результат, необходимо знать истинное значение матожидания для вашей торговой системы. Откуда его получить? Я не знаю. Но точно знаю, что использовать для этого данные тестирования на исторических данных — ошибка. Возможно специалисты по математической статистике помогут, но для меня это пока загадка. Что же делать теперь!? В принципе, значение матожидания, полученного на основе исторических данных будет постепенно приближаться к истинному значению с ростом количество сделок на тесте. Но нужно понимать, что это очень приличный рост. Для большинства торговых систем на нашем рынке этот подход не возможен в принципе, из-за короткой истории рынка, и постоянно меняющейся конъюктуры рынка. Так, например, для нашего с вами примера (60/40) дистанция в 1000 сделок по прежнему может давать результаты отличающиеся в разы (!):
- И кому верить в таком случае? На более-менее стабильный результат можно выйти если увеличить дистанцию до 10.000 сделок:
- Но такой объем данных для тестирования на российском рынке на вменяемом таймфрейме просто не существует. Обычная система, построенная на часовиках, например, за всю историю сделает максимум несколько сотен сделок, а значит перенесет вас в область очень большой неопределенности. Теперь выкиньте из истории неадекватный 2008 год, годы ранее 2006 (из-за принципиально другой конъюктуры) и вы поймете что даже систему на 15-ти минутках невозможно нормально протестировать.
Именно поэтому я и говорю: тестирование торговых систем на истории абсолютно бессмысленно.
Что с этим делать? Ума не приложу.