В этот раз мы протестируем стратегию торговли уровней перекупленности и перепроданности. Разворачивать нас будет индикатор RSI (Индекс относительной силы). Тестировать будем в Quantopian, а код писать на Python. На повестке дня: Результаты разворотов на уровнях перекупленности/перепроданности.Влияние срока удержания позиции.Сравнение разных периодов индикаторов. RSI — индикатор индекса относительной силы. В его основе лежит отношение среднего роста цены за период к среднему падению цены за период. Если индикатор выше 50-ти, значит в среднем цена выросла и, наоборот. Многие трейдеры используют данный индикатор для определения потенциальных разворотов цены. Автор индикатора предлагает использовать 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 года.Торгуем на открытии рынка.Без стопов. Торгуем развороты В первую очередь тестируем при входе в уровни перекупленности/перепроданности. Сигналы при пересечении 70-ти снизу и 30-ти сверху. Имеется сильная просадка, которая связана с отсутствием ограничителей и стопов. У нас есть сигнал только на открытие. Открывшись раз, мы закроемся только на противоположном уровне. Если на рынке сохраняется тренд, то до противоположного уровня мы можем быстро и не добраться. При торговле по RSI необходимо учитывать тренд актива. В коде мы должны проверять сигнал на вход, сигнал на выход и условия удержания позиции. Ниже выдержки из кода: Код доступен на Quantrum.me Внизу график при открытии позиций на выходе из уровней перекупленности/перепроданности. Сигнал на пересечении 70-ти сверху и 30-ти снизу. Количество сделок практически не поменялось. Результаты могли ухудшиться из-за поздней реакции. Ограничение времени удержания Ограничение времени удержания позиции позволило сократить просадку. Доходность практически не изменилась. Упешные развороты обычно коротки. Сигналов мало, что позволяет совместить их с другим алгоритмом. Например, торговать SPY по средним, а по сигналу использовать маржу для удваивания позиции на ограниченное время. Ниже выдержка из кода, как можно управлять ограничением удержания позиции: Код доступен на Quantrum.me Сравнение разных периодов Уменьшение периода индикатора приводит к увеличению количества сигналов для открытия позиций. Увеличение периода, сокращает количество сигналов. Результаты тестов доступны в таблице ниже. Меньше период RSI, больше сигналов. Больше период RSI, меньше сигналов. Результаты тестов СтратегияДоходПросадкаКол-во сделокAlphaBetaSPY, Вход*, Лонг**+75>#/td###-51>#/td###16/12-0.010.65SPY, Вход, Шорт**+5>#/td###-4>#/td###66/660.00-0.00SPY, Вход, Лонг&Шорт**+84>#/td###-51>#/td###82/67-0.000.65SPY, Выход, Лонг+60>#/td###-51>#/td###15/11-0.010.63SPY, Выход, Шорт-6>#/td###-6>#/td###67/67-0.00-0.01SPY, Выход, Лонг&Шорт +54>#/td###-51>#/td###84/67-0.010.62SPY, Вход, 20 дней***, Лонг+73>#/td###-16>#/td###15/180.020.28SPY, Вход, 20 дней, Шорт+5>#/td###-4>#/td###66/660.00-0.00SPY, Вход, 20 дней, Лонг&Шорт+81>#/td###-16>#/td###81/820.020.27Sectors****, Вход, Лонг&Шорт+123>#/td###-56>#/td###762/667-0.010.95Sectors, Вход, 20 дней, Лонг&Шорт+1>#/td###-60>#/td###766/795-0.050.83SPY,RSI(10), Вход, Лонг&Шорт+77>#/td###-54>#/td###149/115-0.010.73SPY,RSI(14), Вход, Лонг&Шорт+84>#/td###-51>#/td###82/67-0.000.65SPY, RSI(18), Вход, Лонг&Шорт-9>#/td###-51>#/td###39/35-0.040.68 Вход — сигнал при входе в зону перекупленности/перепроданности (например, при пересечении 70-ти снизу вверх). Выход — сигнал при выходе (например, при пересечении 70-ти сверху вниз).Лонг — только длинные сделки. Шорт — только короткие сделки. Или в обоих направлениях.20 дней — максимальное количество дней удержания открытой позиции.Тест на основных секторах: XLY, XLK, XLI, XLB, XLE, XLP, XLV, XLU, XLF, XLRE. Капитал распределяется равными долями между активами на открытие и удержание. Код в студию Поделитесь статьей для доступа к репозиторию с исходным кодом. Вопросы по коду пишите в комментариях. Код доступен на Quantrum.me Вывод На основании результатов видно, что чаще и лучше работают сигналы по тренду. За анализируемый период рынок большую часть времени рос. Лучшая доходность на сигналах покупки от 30-го уровня. Можно увеличить или уменьшить количество сигналов изменением периода индикатора. Оптимальным решением является предварительный анализ актива. Подбор уровней и периода для достижения наилучших показателей. Также важно учитывать тренд актива. Соглашусь, что это будет подгонка под прошлое. Но кто мешает разработать алгоритм подбора параметров и проверить его на разных периодах? Подобрать оптимальные параметры на одном периоде и проверить результаты на других. В следующий раз рассмотрим стратегию следования за RSI на разных таймфреймах. Также добавим проверку тренда актива. В комментариях оставляйте ваше мнение. Может, где ошибка или что можно улучшить? Предлагайте, что еще можно протестировать. Александр Румянцев aka "iamraa" Автор Quantrum.me Интересуетесь алготрейдингом на Python? Присоединяйтесь к команде. Пишите в личку или на email.