Стратегия RSI с корреляцией по импульсу


Дата создания: 2023-10-07 15:47:42 Последнее изменение: 2023-10-07 15:47:42
Копировать: 0 Количество просмотров: 751
1
Подписаться
1617
Подписчики

Обзор

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

Стратегический принцип

Эта стратегия сначала рассчитывает динамику цены, а затем рассчитывает коэффициент корреляции между ценой и динамикой. Коэффициент корреляции, близкий к 1, означает высокую положительную корреляцию между ценой и динамикой; коэффициент корреляции, близкий к 1, означает отрицательную корреляцию между ценой и динамикой.

В зависимости от взаимосвязи цены и динамики можно регулировать длину гладких циклов RSI. При высокой взаимосвязи используются более короткие циклы RSI; при низкой взаимосвязи используются более длинные циклы RSI.

В частности, эта стратегия устанавливает длину RSI-циклов в диапазоне 20-50 по умолчанию. После расчета соответствующих коэффициентов цены и динамики, соответствующие коэффициенты находятся в диапазоне 20-50 с помощью метода линейного отображения как окончательная длина циклов сглаживания RSI.

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

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

  • Динамическая корректировка параметров для адаптации к изменениям рынка
  • Избегайте ограничений использования фиксированных циклических показателей
  • Автоматическая оптимизация цикла сглаживания без необходимости выбора оптимальных параметров
  • Настраиваемый диапазон циклов RSI для различных сортов

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

  • Это приведет к задержке, которая может пропустить переломную точку в цене.
  • Слишком много внимания уделяется только цене и динамике, игнорируя другие факторы.
  • По умолчанию, диапазон циклов RSI может не подходить для всех сортов и требует оптимизации.
  • Можно рассмотреть возможность корректировки цикла RSI в сочетании с другими факторами, такими как волатильность

Направление оптимизации

  • Попробуйте различные методы вычислений Related для снижения задержки
  • Подумайте о том, чтобы использовать больше факторов для определения цикла RSI, а не полагаться только на корреляцию
  • Проверка различных сортов, чтобы найти оптимальный диапазон циклов RSI по умолчанию
  • Можно установить вес корреляции, а не полностью полагаться на линейное отображение
  • Добавление условий фильтрации, чтобы избежать использования неуместных циклов RSI в определенных рыночных условиях

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=5
strategy("Dynamic RSI Momentum", "DRM Strategy", process_orders_on_close = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 50 )

// +++++++++++++++++++++
// ++      INPUT      ++ 
// +++++++++++++++++++++

// Momentum
len = input.int(10, "Momentum Length", 1,      group = "Dynamic RSI Momentum")
src = input.source(close, "Source",   group = "Dynamic RSI Momentum")

min_rsi = input.int(20, "Min RSI", group = "Dynamic RSI Momentum")
max_rsi = input.int(50, "Max RSI", group = "Dynamic RSI Momentum")

upLvl = input.float(70, "OverBought", 0, 100, group = "Dynamic RSI Momentum")
dnLvl = input.float(30, "OverSold",   0, 100, group = "Dynamic RSI Momentum")

// +++++++++++++++++++++
// ++   CALCULATION   ++ 
// +++++++++++++++++++++

// RMA Function
rmaFun(src, len) =>
    sma   = ta.sma(src, len) 
	alpha = 1/len
	sum   = 0.0
	sum  := na(sum[1]) ? sma : alpha * src + (1 - alpha) * nz(sum[1])

// RSI Function 
rsiFun(src, len) =>     
    100 - 100 / (1 + rmaFun(src - src[1] > 0 ? src - src[1] : 0, len) / 
                     rmaFun(src[1] - src > 0 ? src[1] - src : 0, len))

// Momentum
momVal = src - src[len]

// Calculation Price vs Momentum
corr  = ta.correlation(src, momVal, len)
corr := corr > 1 or corr < -1 ? float(na) : corr

rsiLen = 0
rsiLen := int(min_rsi + nz(math.round((1 - corr) * (max_rsi-min_rsi) / 2, 0), 0))

rsiMom = rsiFun(src, rsiLen)


// +++++++++++++++++++++
// ++    STRATEGY     ++ 
// +++++++++++++++++++++

long  = ta.crossover(rsiMom, dnLvl)
short = ta.crossunder(rsiMom, upLvl) 


// +++> Long <+++++
if long and not na(rsiMom)
    strategy.entry("Long", strategy.long)

// +++> Short <+++++
if short and not na(rsiMom)
    strategy.entry("Short", strategy.short)

// +++++++++++++++++++++
// ++      PLOT       ++ 
// +++++++++++++++++++++

plot(rsiMom, "Dynamic RSI Momentum", rsiMom < dnLvl ? color.green : rsiMom > upLvl ? color.red : color.yellow)

hline(50, "Mid Line", color.gray)

upperLine = hline(upLvl, "Upper Line", color.gray)
lowerLine = hline(dnLvl, "Lower Line", color.gray)
fill(upperLine, lowerLine, color.new(color.purple, 90), "Background Fill")