Количественная стратегия торговли, основанная на линейной регрессии RSI

Автор:Чао Чжан, Дата: 2024-01-24 11:35:19
Тэги:

img

Обзор

Эта стратегия разработана на основе индикатора линейной регрессии RSI. Она генерирует сигналы покупки и продажи путем расчета перекрестного взаимодействия между линейной регрессией RSI и EMA. Стратегия также предоставляет два варианта логики покупки, которые могут быть выбраны по мере необходимости.

Логика стратегии

Стратегия сначала рассчитывает 200-периодную линейную регрессию, затем рассчитывает 21-периодный RSI на основе результата линейной регрессии. После этого рассчитывается 50-периодная EMA. Когда RSI пересекает EMA, генерируется сигнал покупки. Когда RSI пересекает EMA, запускается сигнал продажи для закрытия позиции.

Стратегия предлагает два типа логики покупки:

  1. Купить при пересечении RSI выше EMA
  2. Купить, когда RSI выше EMA и также выше перекупленной линии

Соответствующую логику покупки можно выбрать на основе рыночных условий.

Анализ преимуществ

Эта стратегия сочетает в себе сильные стороны как линейной регрессии RSI, так и EMA, что эффективно фильтрует некоторые ценовые шумы и генерирует более надежные торговые сигналы.

Линейная регрессия RSI лучше улавливает тенденцию, а EMA помогает определить поворотные моменты.

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

Анализ рисков

Основный риск этой стратегии заключается в потенциальном изменении отношения между ИРС и EMA, что может привести к неправильным торговым сигналам.

Кроме того, задержка показателей RSI и EMA в качестве показателей может также привести к определенным задержкам в поступлениях и выходах, не способствующим идеальному охвату поворотных точек.

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

Направления к улучшению

Стратегия может быть улучшена в следующих аспектах:

  1. Оптимизировать длины линейной регрессии RSI и EMA для поиска лучших комбинаций параметров
  2. Добавьте другие индикаторы, такие как MACD, полосы Боллинджера и т. Д., Для улучшения качества сигнала
  3. Включить показатели волатильности для корректировки размеров позиций
  4. Использование методов машинного обучения для автоматической оптимизации параметров

Заключение

Эта стратегия разрабатывает среднюю стратегию реверсии на основе линейной регрессии RSI и EMA, выявляя возможности реверсии в пределах диапазонов, рассматривая перекрестки RSI-EMA. Она также предоставляет две опциональные логики покупки для гибкости адаптации к различным рынкам. В целом, путем сочетания нескольких индикаторов, стратегия может эффективно обнаруживать шансы реверсии. С настройкой параметров и дополнительными фильтрами она имеет потенциал для лучшей производительности.


/*backtest
start: 2023-01-17 00:00:00
end: 2024-01-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Linear RSI")

startP = timestamp(input(2017, "Start Year"), input(12, "Month"), input(17, "Day"), 0, 0)
end   = timestamp(input(9999, "End Year"),   input(1, "Month"),   input(1, "Day"),   0, 0)
_testPeriod() => true

//inputs
length = input(defval=200, minval=1, title="LR length")
length2 = input(defval=21, minval=1, title="RSI length")
ema_fast = input(defval=50, minval=1, title="EMA")
lag = 0

overBought = input(50)
overSold = input(50)


//rsi
src = close
Lr = linreg(src, length, lag)
rsi = rsi(Lr, length2)
ema = ema(rsi, ema_fast)

plot(rsi, color = rsi > overBought ? color.green : rsi < overSold ? color.red : color.silver)
plot(overBought, color=color.purple)
plot(overSold, color=color.purple)
plot(ema, color=color.blue)

first_type = input(true, title="Use first logic?")
second_type =  input(false, title="Use second logic?")

long_condition = (first_type ? crossover(rsi, ema) and _testPeriod() : false) or (second_type ? rsi > ema and rsi > overBought and _testPeriod() : false)
strategy.entry('BUY', strategy.long, when=long_condition)  
 
short_condition = crossunder(rsi, ema)
strategy.close('BUY', when=short_condition)

Больше