Стратегия торговли RSI-SRSI с различными временными рамками

Автор:Чао Чжан, Дата: 2024-02-18 16:13:50
Тэги:

img

Обзор

Эта торговая стратегия сочетает в себе технические индикаторы Relative Strength Index (RSI) и Stochastic Relative Strength Index (Stochastic RSI) для генерации торговых сигналов.

Наименование стратегии

Стратегия торговли RSI-SRSI с различными временными рамками

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

Стратегия оценивает условия перекупления и перепродажи на основе значений RSI. RSI ниже 30 считается сигналом перепродажи, а RSI выше 70 считается сигналом перекупления. Индикатор Stochastic RSI наблюдает колебания значений RSI. Stochastic RSI ниже 5 является перепродажей, а Stochastic RSI выше 50 является перекуплением.

Стратегия также включает в себя ценовую тенденцию криптовалюты в более высокие временные рамки (например, еженедельно). Только когда более высокий временной интервал RSI превышает порог (например, 45), запускаются длинные сигналы. Это отфильтровывает непостоянные сигналы перепродажи, когда общая тенденция падает.

Сигналы покупки и продажи должны быть подтверждены в течение нескольких периодов (например, 8 бар) до создания фактического торгового сигнала, чтобы избежать поддельных сигналов.

Преимущества

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

Риски и решения

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

Области улучшения

  • Проверьте больше комбинаций индикаторов для более сильных сигналов
    • Например, включить индикатор MACD
  • Использование методов машинного обучения для поиска оптимальных параметров
    • Например, генетические алгоритмы/эволюционные алгоритмы для автоматизированной оптимизации
  • Добавить стратегии стоп-лосса для контроля рисков одной торговли
    • Установка стоп-лосса при выходе цены за пределы уровня поддержки

Заключение

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


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

//@version=5
strategy("RSI and Stochatic Strategy", overlay=true, use_bar_magnifier = false)


/////// Inputs ///////////////

// RSI and SRSI
rsiLength = input(14, title="RSI Length") 
stochLength = input(14, title="Stochastic Length")
kSmooth = input(3, title="K Smooth")
dSmooth = input(3, title="D Smooth")


//////// thresholds ///////////////
st_low = input(5, title="Low SRSI") // stochastic RSI low -- prepare to sell
st_hi = input(50, title="High SRSI") // stochastic RSI high -- prepare to buy
diff = input(5, title="difference") // minimum change in RSI
// inval_diff = input(12, title="difference") // invalidation difference: change in the oposite direction that invalidates rsi falling/rising
rsi_low = input(30, title="Low RSI") // RSI considered low
rsi_hi = input(60, title="High RSI") // RSI considered high
rsi_ht_hi = input(45, title="High higher time frame RSI") // RSI in higher time frame considered high


/// buy trigger duration 
tr_dur = input(8, title="Trigger duration")
low_dur = input(20, title="Monitoring last low")


///////////////// Higher time frame trend ///////////////////
// higher time frame resolution
res2 = input.timeframe("W", title="Higher time-frame")
// Input for the ticker symbol, default is an empty string
// For instance we could monitor BTC higher time frame trend
symbol = input("BTC_USDT:swap", "Input Ticker (leave empty for current)")

// Determine the symbol to use
inputSymbol = symbol == "" ? syminfo.tickerid : symbol
//////////////////////////////////////////////////////////

// Calculate RSI //
rsi = ta.rsi(close, rsiLength)

// Calculate Stochastic RSI //
rsiLowest = ta.lowest(rsi, stochLength)
rsiHighest = ta.highest(rsi, stochLength)
stochRsi = 100 * (rsi - rsiLowest) / (rsiHighest - rsiLowest)

// Apply smoothing
K = ta.sma(stochRsi, kSmooth)
D = ta.sma(K, dSmooth)

// Higher time Frame RSI
cl2 = request.security(inputSymbol, res2, close)
rsi2 = ta.rsi(cl2, 14)

// SRSI BUY/SELL signals 
sell_stoch = (ta.lowest(K, tr_dur) < st_low) or (ta.highest(rsi, tr_dur) < rsi_low)
buy_stoch = ((ta.lowest(K, tr_dur) > st_hi) or (ta.lowest(rsi, tr_dur) > rsi_hi)) and (rsi2 > rsi_ht_hi)

 // valitation / invalidation sell signal
ll = ta.barssince(not sell_stoch)+1
sell_validation = (ta.highest(rsi, ll)>rsi[ll]+diff and rsi < rsi[ll]) or (rsi < rsi[ll]-diff)

// valitation / invalidation buy signal
llb = ta.barssince(not buy_stoch)+1
buy_validation = (ta.lowest(rsi, llb)<rsi[llb]-diff and rsi > rsi[llb]) or (rsi > rsi_hi and rsi - rsi[tr_dur] > 0)

sell_signal = sell_stoch and sell_validation
buy_signal = buy_stoch and buy_validation 

// Define the start date for the strategy
startYear = input(2019, "Start Year")
startMonth = input(1, "Start Month")
startDay = input(1, "Start Day")

// Convert the start date to Unix time
startTime = timestamp(startYear, startMonth, startDay, 00, 00)

// Define the end date for the strategy
endYear = input(2030, "End Year")
endMonth = input(1, "End Month")
endDay = input(1, "End Day")

// Convert the end date to Unix time
endTime = timestamp(endYear, endMonth, endDay, 00, 00)


if true
    if buy_signal
        strategy.entry("buy", strategy.long, comment = "Buy")
    if sell_signal
        strategy.close("buy", "Sell")

Больше