Александр Румянцев
Александр Румянцев личный блог
20 июля 2017, 23:22

Бэктестинг: ловим развороты по 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.
43 Комментария
  • cfree0185
    21 июля 2017, 01:33
    как насчет ограничить потерю на сделку? хотя подозреваю, что индекс все равно не обгонит
  • Raptor
    21 июля 2017, 01:42
    Интересная ТС, но напряг один момент: просадки до 50% (даже несмотря на хорошую прибыль) и отсутствие стопов. Без стоп-лосса слив депозита лишь вопрос времени. Пробовал торговать без стопов на небольшой процент от депо — усреднялся, но так чтобы не страдал манименеджмент или просто пересиживал убытки, но имхо понял что стоп даже неправильный лучше, чем материться на график и ждать отскока…
      • Raptor
        21 июля 2017, 23:11
        Александр Румянцев, не понимаю, как вы тогда ограничиваете убытки, не Мартингейлом же..... 
  • Raptor
    21 июля 2017, 01:50
    Дополнение к моему первому коменту. Поправьте меня если я не прав, но индикаторы сливают, т.к. это лишь производная от цены и индикаторы показывают сигнал с сильным запозданием. Я бы рассмотерл только уровни (понятная точка входа скоротким стопом), PSAR для подтягивания стоп лосса в безубыток по его сигналам, остальное в плане индикаторов имхо шаманство. 
    • Михаил К.
      21 июля 2017, 05:18
      Raptor, если бы индикаторы были бесполезными, вряд ли их плодили бы такими пачками.
  • Итого, так понимаю, результат примерно 5% годовых.
    • Raptor
      21 июля 2017, 02:05
      Дядя Ваня СпекулянтЪ, мой результат 5% в месяц с гораздо меньшим риском, правда мой капитал намного скромнее. 
  • Raptor
    21 июля 2017, 02:41
    В среднем 5% +- 1% разброс и бывали убыточые месяцы. 
  • Raptor
    21 июля 2017, 02:42
    за этот месяц 0% т.к. я на море на 4 недели, сделки все выведены в кеш, чтобыголова ни о чем не болела :)
  • ves2010
    21 июля 2017, 08:34
    тесты с 2004… это 13лет… доходность максимальная в 120%/13лет=10% в год потолок
  • Елена(Anderlis)
    21 июля 2017, 08:52
    Расмотрите сценарий при котором сделки открываются только по тренду. В даном примере Ма_шки выстроены в лонг т.е синяя выше красной. Цена зашла под синюю и ищем выход из зоны 30. Значит на этой части графика должны были открываться только лонговые сделки. Машки перевернутся тогда выход из 70 и только шортовые сделки. Во флете слелок почти не будет
  • Феликс Осколков
    21 июля 2017, 09:06
    Попробуйте протестировать систему при которой вход в позицию происходит при пересечении уровня 50 индикатора. 30 и 70 работ только в боковике.
      • Феликс Осколков
        21 июля 2017, 17:06
        Александр Румянцев, если покупать/продавать на 30/70, то однажды можно попасть на длительный тренд при котором индикатор будет долго находиться в области 30/70. Тестирование это подтверждает наличием недопустимых просадок.
          • Пафос Респектыч
            22 июля 2017, 15:31
            Александр Румянцев, RSI не работает, можно не мучиться. Доход получается только оттого, что рынок всё это время рос.
              • Пафос Респектыч
                22 июля 2017, 21:12
                Александр Румянцев, а, просто скопипастил статью? Там в конце написано «оставляйте ваше мнение. Может, где ошибка или что можно улучшить? Предлагайте, что еще можно протестировать.»
                  • Пафос Респектыч
                    22 июля 2017, 21:33
                    Александр Румянцев, вот читатель отвечает на вопрос )) результаты «тестов» чистый ужас. Если попытаться представить, что кто-то бы действительно так трейдил с 2004 то до 2017 он бы уже не дотянул. Напишите лучше, как на американском рынке торгуете
  • VladMih
    23 июля 2017, 21:17
    Многие трейдеры используют данный индикатор для определения потенциальных разворотов цены.
    Ровно так же, как многие ловят ножи и усредняются.
    Гораздо правильней использовать осцилляторы ПО ТРЕНДУ,
    а не разворачивать ими рынок.
    И еще — своим ученикам всегда повторяю правило номер 1:
    сначала МЕСТО, потом сигнал.

    Если интересно, в моём блоге посмотрите картинки моего первого робота — он построен на стохастике и делался на коленке (под мои умения, т.к. я не мог закодить свою ТС). Несмотря на то, что Stochastic (сигнальщик того робота) в «одиночном» использовании гораздо слабей эрэсайки, результаты несопоставимо сильней ваших. Ничего особенного, просто там сигналы стоха привязаны к цене по месту (с помощью мувингов)
  • VladMih
    24 июля 2017, 09:04
    Во-первых, это не код, а кубики;
    во-вторых, я здесь их вчера «упомянул» — стох+2*МА;
    в-третьих, *** цензоред ***
    Знаете, я не понимаю ваших претензий.

    Кстати, вашу тысячу строк кода я не считаю лучше пары толковых слов. Таких проверок индикатора «в лоб» я насмотрелся немало, но смысла в этом «неодушевленно»-математическом подходе не понимаю. У всех вывод один — «это не работает».
    Хотел поговорить, ан не выходит.
      • VladMih
        24 июля 2017, 09:38
        Александр Румянцев, смотрите как интересно — а я наоборот считаю ВАШ пост бесполезным, коим имя легион. Ни в одном посте нельзя сказать ВСЕГО, но в любом посте можно задать вопросы, для этого у меня открыты комменты. А если вопросов нет, то и в посте об этом писать незачем было — логично же?

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

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

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

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

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

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

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

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн