Сложность стратегии:    

18 июня на Трейдерской Субботе в AllDerivatives Café, накануне переезда в Лондон и следующего личного этапа в бизнесе и трейдинге, алгоритмический трейдер управляющий Андрей Карташов сделал подробный доклад о своей торговой системе, использующей статистический алгоритм. Почти в неизменном виде эта система показала стабильную реальную доходность и высокий коэффициент Шарпа на протяжении 2011-2016 гг.

Видеозапись из трех частей, готова первая. Видео (часть 1, часть 2, часть 3 или плейлист) предоставляется участникам встречи бесплатно, остальным – за плату 1000 руб. и 500 руб. дополнительные электронные адреса Ваших коллег (запрос на alina[собачка]lowrisk.ru). Весь материал презентации размещен в этом посте.

Регистрация на Трейдерский Четверг 14 июля с Вадимом Галкиным и Эдуардом Ланчевым.

Андрей Карташов:

20160618_Andrey-Katashov_AllDerivatives_2

Постановка задачи трейдера и ответы на вопросы

Задача ставиться может по-разному. У меня уже был некоторый изначальный капитал, и я хотел получать на него доход выше рыночного. Горизонт инвестирования был большой, терпимость просадок тоже. Хотя, как после выяснилось, все же не очень. Посему HFT мне не требовалось. Среднесрочное инвестирование не подходило, потому что был нужен абсолютный доход и все-таки просадки хотелось терпеть не годами. Краткосрочный вполне подошел. Я лично считаю успехом доходность 20%+ в валюте на протяжении долгого времени (10 лет с реинвестированием = увеличение капитала в 6 раз), с просадкой в те же 20%. Но каждому здесь свое.

Что мне нужно, чтобы зарабатывать на бирже?
  • Иметь стартовый капитал, либо идти в HFT
  • Быть хорошо подкованным с математической, логической точки зрения.
Признаки правильной, удобной и прибыльной торговой системы?
  • Хороший коэффициент Шарпа. По мне от 2-х.
  • Тесты соответствуют реальной торговле.
  • Система зарабатывает =)
  • У вас нет психологических проблем.
Где искать: среди опционов, фьючерсов, акций или делать комбинированные позиции?
  • Везде. Где нашли – там и хорошо. По мне нет никаких отличий, все это хорошие инструменты со своей спецификой.
  • Начинать стоит с акций и фьючерсов без плечей, чтобы сразу все не слить.
  • Другие общие вопросы по торговле?
Какую скользящую среднюю лучше использовать?

Не очень люблю, но у меня идут очень короткие – 2, 3, 5. Фактически это уже не скользящие, а просто закрытие подкорректированное.

Важность ликвидности инструмента для использования в вашей торговой стратегии?

Ликвидность важна, так как проскальзывание убивает многие системы. Но тут есть связь проскальзывание-доходность. Вроде Eu не очень ликвиден, а идет на ура.

Какое ПО используется для проверки стратегий, какое для торговли роботом?

Все свое самописное в C#. Для этой стратеги придется все писать самому в том или ином языке программирования. Для торговли ровно та же программа в связке с Квиком через Lua.

Как оптимизируете и меняете параметры системы (как понимаете, что это нужно)?

Этого коснемся в конце моей презентации системы, хороший вопрос.

Цена входа для запуска Вашей стратегии?

Не очень понял – но я использую Close цену всегда.

Примеры прибыльных среднесрочных торговых стратегий в нынешней ситуации на рынке при минимальной просадке?

HFT. Вопрос не ко мне, соответственно. Остальные вопросы оставим на после презентации торговой системы.

 

Пример построения статистического алгоритма для торговой системы по индикатору «прорыв волатильности по Вильямсу»

 

Kartashov_dynamics

Список литературы

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

Формула «плеча» взята из статьи Edward O. Thorp, The Kelly Criterion In Blackjack Sprots Betting And The Stock Market (стр.24), а алгоритм адаптивного случайного поиска – из статьи Jason Brownlee, Clever Algorithms: Nature-INspired Programming Recipes.

Описание торговой системы

Работа ведется на 15-минутках, но, как видно дальше, тайм можно выбирать любой, хоть минутки, хоть 139-секундки.

Данные по нашим фишкам я беру с 2006 года, можно брать меньший диапазон – сильно не влияет, бОльший – на нашем рынке смысла нет. Фишки: 5 основных – GAZP, SBRF, Si, Eu, RTS.

Торговля не ведется перед нашими праздниками – эти дни выкидываются. Дальше это потребуется. Также дивидендные отсечки и склейки фьючерсов тоже убираются.

Основные понятия: Indicator, TR, Results.

True Range

Основное в моей торговой системе – нормировка на волатильность результатов и самих индикаторов. Посему вводим TR. TR (true range) – это среднее изменение за день за последние 2-5 дней. В одной из вариаций я беру 3 дня и выкидываю минимальный – защита от неторговли Америки. Более детально – смотрите ссылки dsit, можно брать любой вам приглянувшийся.

Indicator

За индикатор возьмем просто число – на сколько мы ушли от вчерашнего закрытия.

(Close – Yesterday Close)/TR (всегда делим на TR)

Results

За результат возьмем то, куда мы пришли на следующее открытие + еще 2 результата: High в момент времени от сейчас до следующего открытия и Low за тот же период. То есть

ResС = (Next day Open — Close)/TR.

ResH = (Curr High — Close)/TR.

ResL = (CurrLow — Close)/TR.

Важно, чтобы в процессе обработки вы случайно не заглядывали в будущее, потому что Results – это всегда будущее. И, соответственно, для недавних свечей Results невалидны.

Важно правильное откидывание тех дней, которые мы пропускаем (склейки, праздники, …)

Добавим проскальзывание. Каждый Result превращается в 2 переменных. Res+ и Res-. Res+ считается как обычный резалт, только в цене текущего Close добавляется проскальзывание, а Res- тоже самое, но вычитается.

Теперь проговорим смысл этих Res.

Построение вероятности

Сравниваем все свечи по времени +- 3 свечи или вообще без +-. Получается набор из скажем 20000 свечей для сравнения.

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

Distance = (I1-I2)*(I1-I2)*Exp(-min(I1,I2)) *Exp(-min(I1,I2)).

Тем более, формула работает, когда индикатор – это число. В других пространствах ее надо будет изменить, но несложно понять как.

Дальше берем только 1000 самых близких. И берем

P(вероятность) = 1/(1+Dist*Dist).

Это уже немного обратное к расстоянию. Все вероятности нормируем, чтобы в сумме получить 1. Получаем на каждой свечке Pi – вероятность ее выпадения.

Построение плеча

У нас есть для каждой свечи в прошлом ее Pi и ее Results(набор). Применим немного обобщенную формулу “Келли” и получим:

Сумм(Pi * Ri)/Сумм(Pi*Ri*Ri).

Это просто плечо без проскальзывания. Я использую их отдельно как S1(числитель), S2(знаменатель). Лучше числитель умножить на 0.5 – полуКелли.

Если с проскальзыванием, то получаем коридор. Один его конец – это все Results надо брать +, другой все –.

Основная идея моей системы: я всегда имею коридор, и текущая позиция должна в него попадать.

Маленький момент – все Results у нас нормированны на TR – то есть плечо выше мы получаем в TR а надо преобразовать в реальные плечи. Посему ренормируем обратно.

S1*= TR/Close. S2*= (TR/Close)^2

Выше все вычисления не привязаны к конкретной фишке. Посему можно гонять одну фишку по своей же истории, но и по другим историям вместе.

По идее всё – идём в бой!

Нормировка на волатильность и объединение

Если мы придумали несколько систем, то мой подход для их объединения – это придумать им веса. И дальше результирующая система это

S1 = (S1первой*веспервой + S1второй*весвторой),

S2 = (S2первой*веспервой + S2второй*весвторой).

Обговорить смысл и минусы. Я в раздумьях, когда имеем системы с долго нерешающими факторами.

Выше видно, что если волатильность систем сильно разная – то они будут забивать друг друга. Посему я раз в год просто каждой системе добавляю множитель в S1, чтобы урезать ее волатильность до таргетинговой. Раз в год, чтобы нечасто – на то есть обоснование.

Ну и напоследок, можно еще раз в год подбирать множитель под наше объединение систем, чтобы выдерживать нужную волатильность депозита.

Также при желании можно убирать общий тренд (скорее зависимость от времени, если она не нравится). И здесь таким же образом на каждом шаге можно убирать некое среднее плечо, составленное БЕЗ весов. Я делаю примерно таким образом. К размышлению.

Оптимизация

Когда мы насобирали годных 50 систем – встает вопрос, какие веса использовать для них (как их объединять – см. выше). Мой подход простой. Я пытаюсь подобрать такие веса, чтобы максимизировать коэффициет Sharpe на истории (Шарп считается по дням или по закрытым сделкам приведенные к дням, потом проиводится к годовому). И именно с такими весами и пускаю.

Как это делать – скорее, не ко мне и, скорее, вопрос отдельной лекции – в списке литературы есть один пример работы. Тут важно сделать одно допущение, чтобы изрядно не “скакать” по параметрам день ото дня. Глобальный перебор всех параметров делается раз в месяц, а каждый день мы чутка их двигаем.

Прогон

  • Среднее убирается.
  • 6 подсистем для оптимизации.
  • Volatility individual = 0.5, common = 0.4.
  • Матрица Gazp + SBER + RTS. SI + EU. По весам.
  • 5 Алго. YC + TO. TR0 + TR1. + CommonY (по-моему, его надо выкинуть).
  • Гонять с 2008 года по 2011 включительно смысла нет – там космос.

20160618_Andrey-Kartashov_Results_AllDerivatives_v2

 

20160618_Andrey-Kartashov_Downside_AllDerivatives_v2

Шарп – считается по дням и приводится к годовому. По месяцам там почти не будет убыточных. Смысла в краткосрочной торговле нет.

Sharpe RTS SBER GAZP SI EU ALL Sortino Средняя 56.75%
14 год 1.93 2.47 -0.09 6.40 3.48 4.57 16.10 12 год 52.97%
12, 13 года -0.13 0.81 1.37 1.42 2.69 2.46 4.56 13 год 30.46%
Шарп c 12 года 0.69 1.39 0.43 2.91 2.73 3.02 6.86 14 год 104.58%
Шарп c 15 года 1.58 1.83 -0.71 2.72 2.57 2.70 15 год 30.01%
Просадка 16.42%

 

Регистрируйтесь на нашу следующую встречу 14 июля! В этот раз Четверг, специально для тех докладчиков и участников, которым неудобно в субботу. 🙂
Регистрация на Трейдерский Четверг 14 июля с Вадимом Галкиным и Эдуардом Ланчевым.