В этот раз мы протестируем стратегию торговли уровней перекупленности и перепроданности. Разворачивать нас будет индикатор RSI (Индекс относительной силы). Тестировать будем в Quantopian, а код писать на Python.
На повестке дня:
RSI — индикатор индекса относительной силы. В его основе лежит отношение среднего роста цены за период к среднему падению цены за период. Если индикатор выше 50-ти, значит в среднем цена выросла и, наоборот. Многие трейдеры используют данный индикатор для определения потенциальных разворотов цены.
Автор индикатора предлагает использовать 14-ти дневный период. Уровень перекупленности актива находится на 70-ти. От него может начаться откат. На 30-ти — уровень перепроданности, и мы ожидаем подъём. Но, на графике видно, что данные уровни (30/70) отрабатывают не всегда.
Однако, мы это проверим на исторических данных с 2004 года.
RSI показывает развороты. Значит мы будем открывать длинную позицию при достижении 30-го уровня, а короткую при достижении 70-го уровня.
Проверим следующее:
В конце статьи доступен исходный код и таблица с полученными результатами.
В первую очередь тестируем при входе в уровни перекупленности/перепроданности. Сигналы при пересечении 70-ти снизу и 30-ти сверху.
Имеется сильная просадка, которая связана с отсутствием ограничителей и стопов. У нас есть сигнал только на открытие. Открывшись раз, мы закроемся только на противоположном уровне. Если на рынке сохраняется тренд, то до противоположного уровня мы можем быстро и не добраться.
При торговле по RSI необходимо учитывать тренд актива.
В коде мы должны проверять сигнал на вход, сигнал на выход и условия удержания позиции. Ниже выдержки из кода: Код доступен на Quantrum.me
Внизу график при открытии позиций на выходе из уровней перекупленности/перепроданности. Сигнал на пересечении 70-ти сверху и 30-ти снизу. Количество сделок практически не поменялось. Результаты могли ухудшиться из-за поздней реакции.
Ограничение времени удержания позиции позволило сократить просадку. Доходность практически не изменилась. Упешные развороты обычно коротки. Сигналов мало, что позволяет совместить их с другим алгоритмом. Например, торговать SPY по средним, а по сигналу использовать маржу для удваивания позиции на ограниченное время.
Ниже выдержка из кода, как можно управлять ограничением удержания позиции: Код доступен на Quantrum.me
Уменьшение периода индикатора приводит к увеличению количества сигналов для открытия позиций. Увеличение периода, сокращает количество сигналов. Результаты тестов доступны в таблице ниже.
Меньше период 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 |
Поделитесь статьей для доступа к репозиторию с исходным кодом. Вопросы по коду пишите в комментариях.
Код доступен на Quantrum.me
На основании результатов видно, что чаще и лучше работают сигналы по тренду. За анализируемый период рынок большую часть времени рос. Лучшая доходность на сигналах покупки от 30-го уровня.
Можно увеличить или уменьшить количество сигналов изменением периода индикатора. Оптимальным решением является предварительный анализ актива. Подбор уровней и периода для достижения наилучших показателей. Также важно учитывать тренд актива.
Соглашусь, что это будет подгонка под прошлое. Но кто мешает разработать алгоритм подбора параметров и проверить его на разных периодах? Подобрать оптимальные параметры на одном периоде и проверить результаты на других.
В следующий раз рассмотрим стратегию следования за RSI на разных таймфреймах. Также добавим проверку тренда актива.
В комментариях оставляйте ваше мнение. Может, где ошибка или что можно улучшить? Предлагайте, что еще можно протестировать.
Александр Румянцев aka «iamraa»
Автор Quantrum.me
Интересуетесь алготрейдингом на Python? Присоединяйтесь к команде. Пишите в личку или на email.
За этот или за прошлый?)
Гораздо правильней использовать осцилляторы ПО ТРЕНДУ,
а не разворачивать ими рынок.
И еще — своим ученикам всегда повторяю правило номер 1:
сначала МЕСТО, потом сигнал.
Если интересно, в моём блоге посмотрите картинки моего первого робота — он построен на стохастике и делался на коленке (под мои умения, т.к. я не мог закодить свою ТС). Несмотря на то, что Stochastic (сигнальщик того робота) в «одиночном» использовании гораздо слабей эрэсайки, результаты несопоставимо сильней ваших. Ничего особенного, просто там сигналы стоха привязаны к цене по месту (с помощью мувингов)
Начало — описание: smart-lab.ru/blog/280436.php
Позже — проверка по данным ЛЧИ:
smart-lab.ru/blog/295630.php
во-вторых, я здесь их вчера «упомянул» — стох+2*МА;
в-третьих, *** цензоред ***
Знаете, я не понимаю ваших претензий.
Кстати, вашу тысячу строк кода я не считаю лучше пары толковых слов. Таких проверок индикатора «в лоб» я насмотрелся немало, но смысла в этом «неодушевленно»-математическом подходе не понимаю. У всех вывод один — «это не работает».
Хотел поговорить, ан не выходит.
В ваших же постах, даже спросить особо не о чем. В них сначала вникать надо неделю, т.к. тут фактически несколько торговых систем в одном посте, а разобраться даже с одной ТС для меня не так просто, как для большинства здесь присутствующих.
Тон вашего крика души детский какой-то. «Ну ткните меня», «может я плохо вижу» — да *** вас знает, если честно, может и не видишь. По крайней мере ни одного нормального вопроса от тебя я не услышал — всё типа «а на поверхности не увидел».
Я в таком ключе бодаться ни с кем не собираюсь.
PS: ваше «посмотреть настройки» вместо «разобраться в сути» -
в этом ваша математическая душа.
Трейдер и математик/прогер — конь и трепетная лань.
А если конь или лань еще и интересуется «через губу»…
Идея моего робота — входы в тренд с отката:
МАр — рабочая МА, определяющая "рабочий" тренд.
МАш — шустрик, знаменует собою текущую цену.
Когда МАш входит в ЗОНУ (конверт) МАр, имеем право брать сигнал осциллятора (изначально поставил от балды Stochastic и он потом привык).
По ходу дела, я добавил еще и более тяжелую, «глобальную» МА (ГМА) для дополнительной фильтрации по МАр относительно ГМА.
МАр — LWMA97,
ГМА — ЕМА234
смешно, но эти мои извечные и любимые мувинги подтвердила оптимизация (±).
Стоха или любого другого сигнальщика, а также МАш сами «подгоните» не хуже меня, они могут быть любыми и есть подозрение, что мой вариант далеко не самый оптимальный, поэтому хотел бы увидеть ВАШ выбор как этих двух индикаторов, так и их настроек.
В принципе, МАш введена для упрощения «программирования» (как средняя цена) — вы можете закодить просто вход цены в конверт.
Толком не вник почему, но покупки очень плохо, хотя на тестируемых участках рынки были самые разные — на картинках в блоге видно, что продажи хороши даже на растущем…
Если хотите, можем продолжить в скайпе голосом и на пальцах, покажу как это выглядит реально. Жаль, что вы не знаете кубиков ТСЛаба — могли бы и поплотней посотрудничать.
Скайп-логин: *** /предложение снято/
Успехов и удачи!