Блог им. Quantrum

Бэктестинг: ловим развороты по RSI

В этот раз мы протестируем стратегию торговли уровней перекупленности и перепроданности. Разворачивать нас будет индикатор RSI (Индекс относительной силы). Тестировать будем в Quantopian, а код писать на Python.

На повестке дня:

  • Результаты разворотов на уровнях перекупленности/перепроданности.
  • Влияние срока удержания позиции.
  • Сравнение разных периодов индикаторов.

RSI — индикатор индекса относительной силы. В его основе лежит отношение среднего роста цены за период к среднему падению цены за период. Если индикатор выше 50-ти, значит в среднем цена выросла и, наоборот. Многие трейдеры используют данный индикатор для определения потенциальных разворотов цены.

Бэктестинг: ловим развороты по RSI

Автор индикатора предлагает использовать 14-ти дневный период. Уровень перекупленности актива находится на 70-ти. От него может начаться откат. На 30-ти — уровень перепроданности, и мы ожидаем подъём. Но, на графике видно, что данные уровни (30/70) отрабатывают не всегда.

Однако, мы это проверим на исторических данных с 2004 года.

Предположение

RSI показывает развороты. Значит мы будем открывать длинную позицию при достижении 30-го уровня, а короткую при достижении 70-го уровня.

Проверим следующее:

  • На входе: открываем длинные позиции, когда RSI(14) пересек 30 сверху вниз и короткие, когда RSI(14) пересек 70 снизу вверх.
  • На выходе: открываем длинные позиции на пересечении 30-ти снизу вверх и короткие на 70-ти сверху вниз.
  • Ограничим удержание открытой позиции 20-тью днями.
  • Сравним результаты за разные периоды RSI(10/14/18).

В конце статьи доступен исходный код и таблица с полученными результатами.

Условия

  • Торгуем SPY или фондами основных секторов — XLY, XLK, XLI, XLB, XLE, XLP, XLV, XLU, XLF, XLRE.
  • Капитал $100 000.
  • Торгуем с 2004 до 2017 года.
  • Торгуем на открытии рынка.
  • Без стопов.

Торгуем развороты

Бэктестинг: ловим развороты по RSI

В первую очередь тестируем при входе в уровни перекупленности/перепроданности. Сигналы при пересечении 70-ти снизу и 30-ти сверху.

Имеется сильная просадка, которая связана с отсутствием ограничителей и стопов. У нас есть сигнал только на открытие. Открывшись раз, мы закроемся только на противоположном уровне. Если на рынке сохраняется тренд, то до противоположного уровня мы можем быстро и не добраться.

При торговле по RSI необходимо учитывать тренд актива.

В коде мы должны проверять сигнал на вход, сигнал на выход и условия удержания позиции. Ниже выдержки из кода: Код доступен на Quantrum.me

Внизу график при открытии позиций на выходе из уровней перекупленности/перепроданности. Сигнал на пересечении 70-ти сверху и 30-ти снизу. Количество сделок практически не поменялось. Результаты могли ухудшиться из-за поздней реакции.

Ограничение времени удержания

Ограничение времени удержания позиции позволило сократить просадку. Доходность практически не изменилась. Упешные развороты обычно коротки. Сигналов мало, что позволяет совместить их с другим алгоритмом. Например, торговать SPY по средним, а по сигналу использовать маржу для удваивания позиции на ограниченное время.

Ниже выдержка из кода, как можно управлять ограничением удержания позиции: Код доступен на Quantrum.me

Сравнение разных периодов

Бэктестинг: ловим развороты по RSI

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

Меньше период RSI, больше сигналов. Больше период RSI, меньше сигналов.

Результаты тестов

Стратегия Доход Просадка Кол-во сделок Alpha Beta
SPY, Вход*, Лонг** +75% -51% 16/12 -0.01 0.65
SPY, Вход, Шорт** +5% -4% 66/66 0.00 -0.00
SPY, Вход, Лонг&Шорт** +84% -51% 82/67 -0.00 0.65
SPY, Выход, Лонг +60% -51% 15/11 -0.01 0.63
SPY, Выход, Шорт -6% -6% 67/67 -0.00 -0.01
SPY, Выход, Лонг&Шорт  +54% -51% 84/67 -0.01 0.62
SPY, Вход, 20 дней***, Лонг +73% -16% 15/18 0.02 0.28
SPY, Вход, 20 дней, Шорт +5% -4% 66/66 0.00 -0.00
SPY, Вход, 20 дней, Лонг&Шорт +81% -16% 81/82 0.02 0.27
Sectors****, Вход, Лонг&Шорт +123% -56% 762/667 -0.01 0.95
Sectors, Вход, 20 дней, Лонг&Шорт +1% -60% 766/795 -0.05 0.83
SPY,RSI(10), Вход, Лонг&Шорт +77% -54% 149/115 -0.01 0.73
SPY,RSI(14), Вход, Лонг&Шорт +84% -51% 82/67 -0.00 0.65
SPY, RSI(18), Вход, Лонг&Шорт -9% -51% 39/35 -0.04 0.68
  1. Вход — сигнал при входе в зону перекупленности/перепроданности (например, при пересечении 70-ти снизу вверх). Выход — сигнал при выходе (например, при пересечении 70-ти сверху вниз).
  2. Лонг — только длинные сделки. Шорт — только короткие сделки. Или в обоих направлениях.
  3. 20 дней — максимальное количество дней удержания открытой позиции.
  4. Тест на основных секторах: XLY, XLK, XLI, XLB, XLE, XLP, XLV, XLU, XLF, XLRE. Капитал распределяется равными долями между активами на открытие и удержание.

Код в студию

Поделитесь статьей для доступа к репозиторию с исходным кодом. Вопросы по коду пишите в комментариях.

Код доступен на Quantrum.me

Вывод

На основании результатов видно, что чаще и лучше работают сигналы по тренду. За анализируемый период рынок большую часть времени рос. Лучшая доходность на сигналах покупки от 30-го уровня.

Можно увеличить или уменьшить количество сигналов изменением периода индикатора. Оптимальным решением является предварительный анализ актива. Подбор уровней и периода для достижения наилучших показателей. Также важно учитывать тренд актива.

Соглашусь, что это будет подгонка под прошлое. Но кто мешает разработать алгоритм подбора параметров и проверить его на разных периодах? Подобрать оптимальные параметры на одном периоде и проверить результаты на других.

В следующий раз рассмотрим стратегию следования за RSI на разных таймфреймах. Также добавим проверку тренда актива.

В комментариях оставляйте ваше мнение. Может, где ошибка или что можно улучшить? Предлагайте, что еще можно протестировать.

Александр Румянцев aka «iamraa»
Автор Quantrum.me
Интересуетесь алготрейдингом на Python? Присоединяйтесь к команде. Пишите в личку или на email.
★7
43 комментария
как насчет ограничить потерю на сделку? хотя подозреваю, что индекс все равно не обгонит
avatar
cfree0185, при стопе он не перезайдет и будет терять движения после фиксации.
Интересная ТС, но напряг один момент: просадки до 50% (даже несмотря на хорошую прибыль) и отсутствие стопов. Без стоп-лосса слив депозита лишь вопрос времени. Пробовал торговать без стопов на небольшой процент от депо — усреднялся, но так чтобы не страдал манименеджмент или просто пересиживал убытки, но имхо понял что стоп даже неправильный лучше, чем материться на график и ждать отскока…
avatar
Raptor, использование стопов всегда приводило к ухудшению результатов. Из-за проскальзывания и пропускания разворота.
Александр Румянцев, не понимаю, как вы тогда ограничиваете убытки, не Мартингейлом же..... 
avatar
Raptor, поведением алгоритма.
Дополнение к моему первому коменту. Поправьте меня если я не прав, но индикаторы сливают, т.к. это лишь производная от цены и индикаторы показывают сигнал с сильным запозданием. Я бы рассмотерл только уровни (понятная точка входа скоротким стопом), PSAR для подтягивания стоп лосса в безубыток по его сигналам, остальное в плане индикаторов имхо шаманство. 
avatar
Raptor, если бы индикаторы были бесполезными, вряд ли их плодили бы такими пачками.
avatar
Итого, так понимаю, результат примерно 5% годовых.
Дядя Ваня СпекулянтЪ, мой результат 5% в месяц с гораздо меньшим риском, правда мой капитал намного скромнее. 
avatar
Raptor, 
мой результат 5% в месяц

За этот или за прошлый?) 
Дядя Ваня СпекулянтЪ, да, эти параметры индикаторы слишком медленные.
В среднем 5% +- 1% разброс и бывали убыточые месяцы. 
avatar
Raptor, 5% в месяц нa SPY???? vot sdelaete na SPY, togda i pogovorim
Самый лучший трейдер смартлаба, это будет грааль и он останется тайной до гроба.)
за этот месяц 0% т.к. я на море на 4 недели, сделки все выведены в кеш, чтобыголова ни о чем не болела :)
avatar
тесты с 2004… это 13лет… доходность максимальная в 120%/13лет=10% в год потолок
avatar
ves2010, меньше, в сделке используется весь капитал.
Расмотрите сценарий при котором сделки открываются только по тренду. В даном примере Ма_шки выстроены в лонг т.е синяя выше красной. Цена зашла под синюю и ищем выход из зоны 30. Значит на этой части графика должны были открываться только лонговые сделки. Машки перевернутся тогда выход из 70 и только шортовые сделки. Во флете слелок почти не будет
Елена(Anderlis), там есть такие тесты в результатах. короткие сделки почти всегда в убыток идут на таком длинном индикаторе.
Попробуйте протестировать систему при которой вход в позицию происходит при пересечении уровня 50 индикатора. 30 и 70 работ только в боковике.
Oskolkov, 50 — слишком поздно, основное движение отскока будет потеряно и быстро закроется позиция на 70. 
Александр Румянцев, если покупать/продавать на 30/70, то однажды можно попасть на длительный тренд при котором индикатор будет долго находиться в области 30/70. Тестирование это подтверждает наличием недопустимых просадок.
Oskolkov, главная опасность, если мы будем открываться на 50 — увеличение просадки при движении вниз. но встречно, это увеличит количество сделок, что может положительно отразиться на прибыли на бычьем рынке.
Александр Румянцев, RSI не работает, можно не мучиться. Доход получается только оттого, что рынок всё это время рос.
Zweroboi, а где вы видите мучеников? )
Александр Румянцев, а, просто скопипастил статью? Там в конце написано «оставляйте ваше мнение. Может, где ошибка или что можно улучшить? Предлагайте, что еще можно протестировать.»
Zweroboi, верно, я в конце статьи задаю вопрос читателю. Но при чем здесь копи-паст и мучения?
Александр Румянцев, вот читатель отвечает на вопрос )) результаты «тестов» чистый ужас. Если попытаться представить, что кто-то бы действительно так трейдил с 2004 то до 2017 он бы уже не дотянул. Напишите лучше, как на американском рынке торгуете
Zweroboi, пробовал, не захватывает. А вот тесты и анализ поведения индикаторов меня захватывают.
Многие трейдеры используют данный индикатор для определения потенциальных разворотов цены.
Ровно так же, как многие ловят ножи и усредняются.
Гораздо правильней использовать осцилляторы ПО ТРЕНДУ,
а не разворачивать ими рынок.
И еще — своим ученикам всегда повторяю правило номер 1:
сначала МЕСТО, потом сигнал.

Если интересно, в моём блоге посмотрите картинки моего первого робота — он построен на стохастике и делался на коленке (под мои умения, т.к. я не мог закодить свою ТС). Несмотря на то, что Stochastic (сигнальщик того робота) в «одиночном» использовании гораздо слабей эрэсайки, результаты несопоставимо сильней ваших. Ничего особенного, просто там сигналы стоха привязаны к цене по месту (с помощью мувингов)
avatar
VladMih, благодарю за совет. На поверхности ваш пост не нашёл.
Александр Румянцев, не думал, что вы глубоко не пашете...

Начало — описание: smart-lab.ru/blog/280436.php
Позже — проверка по данным ЛЧИ:
smart-lab.ru/blog/295630.php
avatar
VladMih, пара строк кода, лучше тысячи слов. Вы там не упоминаете даже индикаторы. 
Во-первых, это не код, а кубики;
во-вторых, я здесь их вчера «упомянул» — стох+2*МА;
в-третьих, *** цензоред ***
Знаете, я не понимаю ваших претензий.

Кстати, вашу тысячу строк кода я не считаю лучше пары толковых слов. Таких проверок индикатора «в лоб» я насмотрелся немало, но смысла в этом «неодушевленно»-математическом подходе не понимаю. У всех вывод один — «это не работает».
Хотел поговорить, ан не выходит.
avatar
VladMih, это не претензия, то был крик души. Вот скажите мне, как старожил, что можно почерпнуть из статьи с картинкой где нет названия индикаторов и их параметров? Ну посмотрел, ну здорово, автор провел какую-то работу. Но ценность статьи в чем? Автор молодец? Однозначно! Он пытается тестировать? Отлично! Но что он тестирует и почему? А это секрет! И так 70-90% статей в России. Может я плохо вижу? ну ткните меня тогда, где посмотреть настройки вашей стратегии. Предположения и ожидания. Может где-то под катом спрятаны, прячутся в комментариях? 
Александр Румянцев, смотрите как интересно — а я наоборот считаю ВАШ пост бесполезным, коим имя легион. Ни в одном посте нельзя сказать ВСЕГО, но в любом посте можно задать вопросы, для этого у меня открыты комменты. А если вопросов нет, то и в посте об этом писать незачем было — логично же?

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

Тон вашего крика души детский какой-то. «Ну ткните меня», «может я плохо вижу» — да *** вас знает, если честно, может и не видишь. По крайней мере ни одного нормального вопроса от тебя я не услышал — всё типа «а на поверхности не увидел».
Я в таком ключе бодаться ни с кем не собираюсь.

PS: ваше «посмотреть настройки» вместо «разобраться в сути» -
в этом ваша математическая душа.
Трейдер и математик/прогер — конь и трепетная лань.
А если конь или лань еще и интересуется «через губу»…
avatar
VladMih, благодарю за приятную перепалку. Приятно, когда есть с кем схлестнуться и дождаться ответа. По вашей стратегии интересно получить индикаторы, настройки, точки входа и выхода. Я бы её реализовал на quantopian. Посмотрели бы результаты. 
Александр Румянцев, увы, для меня она была неконструктивной, а значит и неприятной. Я свои претензии по вашему посту не вываливал с первого слова, а вы умудрялись прицепиться даже к «нецепляемому» (не там в блоге посты лежат).

Идея моего робота — входы в тренд с отката:
МАр — рабочая МА, определяющая "рабочий" тренд.
МАш — шустрик, знаменует собою текущую цену.
Когда МАш входит в ЗОНУ (конверт) МАр, имеем право брать сигнал осциллятора (изначально поставил от балды Stochastic и он потом привык).
По ходу дела, я добавил еще и более тяжелую, «глобальную» МА (ГМА) для дополнительной фильтрации по МАр относительно ГМА.

МАр — LWMA97,
ГМА — ЕМА234 
смешно, но эти мои извечные и любимые мувинги подтвердила оптимизация (±).
Стоха или любого другого сигнальщика, а также МАш сами «подгоните» не хуже меня, они могут быть любыми и есть подозрение, что мой вариант далеко не самый оптимальный, поэтому хотел бы увидеть ВАШ выбор как этих двух индикаторов, так и их настроек.

В принципе, МАш введена для упрощения «программирования» (как средняя цена) — вы можете закодить просто вход цены в конверт.
avatar
VladMih, какие настройки конверта (ширина)?
Александр Румянцев, оптимизируемый параметр, зависит от инструмента (волатильность) и таймфрейма. Я делал строго под EURAUD-м15 и только продажи.
Толком не вник почему, но покупки очень плохо, хотя на тестируемых участках рынки были самые разные — на картинках в блоге видно, что продажи хороши даже на растущем…

Если хотите, можем продолжить в скайпе голосом и на пальцах, покажу как это выглядит реально. Жаль, что вы не знаете кубиков ТСЛаба — могли бы и поплотней посотрудничать.
Скайп-логин: *** /предложение снято/
avatar
VladMih, хорошо. Я идею понял, прогоню через оптимизатор. Поставил себе стратегию в очередь на анализ. По факту готовности напишу статью. 
Александр Румянцев, предложение скайпа снял.
Успехов и удачи!
avatar

теги блога Александр Румянцев

....все тэги



UPDONW
Новый дизайн