Индекс относительной силы и стратегия перекрестного использования скользящей средней

Автор:Чао Чжан, Дата: 21-12-2023 11:30:27
Тэги:

img

Обзор

Индекс относительной силы (RSI) и стратегия пересечения скользящей средней сочетает в себе индикатор RSI и скользящие средние для принятия количественных торговых решений.

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

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

  2. Вычислить скользящую среднюю линию (MA) RSI, используя экспоненциальную скользящую среднюю (EMA) или простую скользящую среднюю (SMA).

  3. Когда RSI пересекает линию MA, генерируется сигнал покупки с золотым крестом.

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

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

  1. Сочетание перекрестных сигналов индикатора с уровнями перекупленности/перепроданности RSI повышает точность торговых решений.

  2. Превышение порогов закупки и перепродажи определяет оптимальные входы и выходы.

  3. Зафиксировать изменение тренда, действуя на сигналы перекрестного действия индикаторов.

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

  1. RSI может генерировать неправильные сигналы во время неуравновешенных или боковых рынков.

  2. Неправильное установление порога перекупки или перепродажи может привести к слишком свободным или слишком строгим сигналам.

  3. Движущиеся средние чувствительны к краткосрочным аномалиям и пикам волатильности, что увеличивает вероятность преждевременного их прекращения.

Руководство по оптимизации

  1. Оптимизировать параметр RSI путем тестирования различных периодов длины.

  2. Найти оптимальные периоды скользящей средней путем оценки различных длин MA.

  3. Проверьте различные пороговые уровни перекупа и перепродажи для уточнения сигналов входа.

  4. Включите дополнительные фильтры для проверки сигналов и избегания ложных сделок.

Заключение

RSI и Moving Average Crossover Strategy объединяют уровни перекупленности/перепроданности RSI с сигналами перепроданности MA для выявления поворотных моментов рынка и улавливания обратных сдвигов.


/*backtest
start: 2022-12-14 00:00:00
end: 2023-12-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//dfurrer45
strategy(title="Relative Strength Index", shorttitle="RSI", overlay=true)
src = close, len = input(13, minval=1, title="Length"), maLen = input(9, minval=1, title="MA Lenght"), exponential = input(false, title="Exponential")

// === BACKTEST RANGE ===
FromMonth = input(defval = 10, title = "From Month", minval = 1)
FromDay   = input(defval = 3, title = "From Day", minval = 1)
FromYear  = input(defval = 2017, title = "From Year", minval = 2014)
ToMonth   = input(defval = 1, title = "To Month", minval = 1)
ToDay     = input(defval = 1, title = "To Day", minval = 1)
ToYear    = input(defval = 9999, title = "To Year", minval = 2014)
// ===  BACKTEST END  ===
backtestdaterange = (time > timestamp(FromYear, FromMonth, FromDay, 00, 00))

rsioverbought = input(90, minval=1, title="RSI % start overbought")
rsioversold = input(10, minval=1, title="RSI % start oversold")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
ma = exponential ? ema(rsi, maLen) : sma(rsi, maLen)
rsimacrossup = cross(rsi,ma) and rsi > ma
rsimacrossdown = cross(rsi,ma) and rsi < ma
plotchar(rsimacrossup, char='⇧', location = location.belowbar, color = green, text = "", textcolor = green, size=size.small)
plotchar(rsimacrossdown, char='⇩', location = location.abovebar, color = red, text = "", textcolor = red, size=size.small)
plotchar(rsi > rsioverbought, char='x', location = location.belowbar, color = aqua, text = "", textcolor = red, size=size.small)
plotchar(rsi < rsioversold, char='x', location = location.belowbar, color = aqua, text = "", textcolor = red, size=size.small)


closetrade = rsimacrossup or rsimacrossdown
strategy.close_all(closetrade)
strategy.close_all((rsi > rsioverbought) or (rsi < rsioversold))
strategy.entry("Short Overbought",strategy.short, when=(rsi > rsioverbought) and backtestdaterange)
strategy.entry("Buy Overbought",strategy.long, when=(rsi < rsioversold) and backtestdaterange)
strategy.entry("Long Cross", strategy.long, when=rsimacrossup and backtestdaterange)
strategy.entry("Short Cross", strategy.short, when=rsimacrossdown and backtestdaterange)


Больше