В прошлом посте я дал определение термину edge торговой системы, сейчас пришло время определиться с методами и инструментами определения – обладает ли система edge либо это простое стечение обстоятельств.

Для начала немного истории, в далеком 2006 году ваш покорный слуга, слабал портфель системок которые  давали хорошие результаты на том рынке. Все было хорошо, до начала 2007 года, когда рынок вошел в боковик и системы начали сливать. Естественно бычий тренд с 2000 года, вселил веру в свою гениальность и прочее. Но вопрос вот в чем, можно  ли было предотвратить закономерный fail для этих несовершенных систем? Понятно, что было такое время что зарабатывали банальные средние, или популярная система NRTR (от konkop), но в дальнейшем их рынок поломал через коленку.

Для любой системы необходимо определить имеет ли она edge. Действовать нужно в 2х направлениях:

  • На этапе проектирования
     
  1. Идея – должна базироваться на использовании рыночных неэффективностей. Грубо говоря нужно понимать за счет кого система будет зарабатывать деньги, и кто будет помогать нам драйвить цену в нужную нам сторону. Для понимания сути таких вещей как сентимент, стат. преимущество (edge) можно почитать в ветке Поговорим о паттернах или поискать посты на пауке и невесте человека по имени Атаман
  2.  Данные – данные на которых обкатывается система, должны содержать все рыночные фазы. Для Российского рынка считаю представительным период 2007-2010 годы, можно захватить и 2006 при желании. Для американских стоков, важно чтобы выборка содержала delisted stocks, и не забывать о такой вещи как survivorship bias.
  • На этапе тестирования
  1. Количественные параметры системы – NetProfit, Max/DD, Sharpe, PF, Risk-Reward-Ratio, %Win, Avg. Trade и пр. метрики доступные в любом пакете для тестирования систем Ami, WL, TS и пр.
  2. Качественные параметры edge системы – именно о них хочу поговорить. Этот подход определяет обладает ли испытуемая система умением извлекать неслучайную прибыль из случайного процесса, либо это очередной бычий тренд и  никакой гениальности.

Edge Test



Механизм тут достаточно прост для понимания, в принципе его несложно будет реализовать любому программисту. Суть его основывается на моделировании методом Monte-Carlo, случайной выборки сделок и сравнения ее с результатами системы которые выдал тестер.

Алгоритм действия:

1. Необходимо определиться с периодом тестирования, например месяц/квартал/год, он зависит от того с какой частотой мы будем принимать решение об изменении композита наших систем, и в целом от частоты сделок для сверх высокочастотных систем достаточно будет месяца, для трендовых может и квартала не хватить.

2. Теперь на всем промежутке с начала тестирования и до конца (напр. с 2007 до 2010) откладываем равные отрезки времени, эквивалентные периоду тестирования который был нами выбран (напр. квартал)

3. Для каждого такого периода нам необходимо выбрать все сделки системы, например в 2 кв. 2008 года, система сделала 20 сделок, по 30 баров в каждой (если длина трейдов различается то мы должны это учитывать!)

4. Для простоты система торгует на 1 инструменте (напр. RI), теперь магия: берем тот же тайм фрейм, и тот же временной промежуток, и случайным образом откладываем на нем те самые 20 сделок (из п. 3) эквивалентной длины. Считаем промежуточный результат, и записываем на бумажку.

5. Повторяем процедуру из п. 4 от 10 000 до 100 000 раз

6. Ранжируем полученные результаты от меньшего к большему.

7. Считаем персентиль, я беру 70% лучших результатов (но тут индивидуально для каждого)

8. Если результаты системы по метрике лучше чем 70% случайных, поздравляю система прошла Edge Test на выбранном периоде.

9. Повторяем процедуру п. 3-8 для всех периодов на всей выборке.

На выходе, мой софт выплевывает следующую картиночку:

Разбивка по All/Long/Short, смотрю по ALL в основном, системка прошла средненько на грани фола 4й кв. 2007, и завалила 4й кв. 2008 года, это должно служить звоночком как минимум обратить внимание на систему как максимум принять решение о ее консервации. Тем не менее, у меня пока не было систем которые били EdgeTest 100 из 100, но я стремлюсь к этому :)

Важно:

  1. Для тестирования и сравнения необходимо использовать UnitSize, т.к. на одном периоде могут встречаться периоды низкой и дикой волатильности, соответственно результаты Monte-Carlo могут очень сильно "играть". Нужно понимать то что система заработала больше денег на высокой волатильности, совсем не говорит о том что она хорошо работает.
  2. Очень важный момент, Edge Test должен проводиться на системах без использования стопов/тейков, т.е. все входы и выходы должны быть проведены по Close или Open свечей. См. Стопы коварны

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

Leave a comment