Количественная стратегия торговли на основе StochRSI

Автор:Чао Чжан, Дата: 2023-12-07 16:05:17
Тэги:

img

Обзор

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

Принцип стратегии

Эта стратегия в основном применяет индикатор StochRSI для оценки перекупленных и перепроданных зон на рынке. Индикатор StochRSI состоит из линии K и линии D. Линия K отражает положение текущего значения RSI в ценовом диапазоне RSI за последний период. Линия D - скользящая средняя линии K. Когда линия K пересекает линию D, это перекупленная область, и можно занять длинные позиции. Когда линия K падает ниже линии D, это перепроданная область, и можно занять короткие позиции.

В частности, стратегия сначала рассчитывает значение 14-периодного индикатора RSI, а затем применяет индикатор StochRSI к индикатору RSI. Параметры индикатора StochRSI устанавливаются с длиной 14, сглаженным периодом линии K 3 и сглаженным периодом линии D 3. Когда линия K пересекает пределы определенной пользователем зоны перепродажи (по умолчанию 1), будет занята длинная позиция. Когда линия K опускается ниже установленной пользователем зоны перекупки (по умолчанию 99), будет занята короткая позиция.

Кроме того, в стратегии установлены параметры стоп-лосса и прибыли. Стоп-лосс по умолчанию составляет 10000.

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

  1. Использование индикатора StochRSI для определения перекупленных и перепроданных зон более надежно, чем один индикатор RSI
  2. Фильтрация сигналов с помощью RSI избегает ложных прорывов
  3. Установление механизмов стоп-лосса и прибыли для контроля рисков

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

  1. Индикатор StochRSI может иметь ложные сигналы
  2. Необходимо установить параметры перекупленные и перепроданные разумно, иначе это вызовет неисправность
  3. Если точка стоп-лосса слишком мала, легко попасть в ловушку.

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

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

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

Резюме

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


/*backtest
start: 2023-11-06 00:00:00
end: 2023-12-06 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version= 2
strategy("STOCHRSI JURE", overlay=false)
lengthrsi = input(10)
overSold = input( 1 )
overBought = input(99)

call_trail_stop = input(300)
call_trail_offset = input(0)
call_sl = input(10000)

price = ohlc4
vrsi = rsi(price, lengthrsi)

smoothK = input(3, minval=1)
smoothD = input(3, minval=1)
lengthRSI = input(14, minval=1)
lengthStoch = input(14, minval=1)
src = input(close, title="RSI Source")

rsi1 = rsi(src, lengthRSI)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)


plot( k, color=blue, linewidth=1, title="K")
plot( d, color=red, linewidth=1, title="D")

if (crossover(k, overSold) ) 
    strategy.entry("BUY", strategy.long, stop=close, oca_name="TREND",  comment="BUY")
    strategy.exit("BUY EXIT", "BUY", trail_points=call_trail_stop, trail_offset=call_trail_offset, loss = call_sl)


if (crossunder(k, overBought) ) 
    strategy.entry("SELL", strategy.short,stop=close, oca_name="TREND", comment="SELL")
    strategy.exit("SELL EXIT", "SELL", trail_points=call_trail_stop, trail_offset=call_trail_offset, loss = call_sl)
    

//if (  ( crossover(k,d)) and ( (vrsi<overSold) or crossover(vrsi,overSold) )  and   year >= yearfrom and year <= yearuntil and month>=monthfrom and month <=monthuntil and dayofmonth>=dayfrom and dayofmonth < dayuntil) 
//    strategy.entry("BUY", strategy.long, stop=close, oca_name="TREND", oca_type=strategy.oca.cancel, comment="BUY")
//else
//    strategy.cancel(id="BUY")

//if ( ( crossunder(k,d) ) and ( (vrsi >overBought) or crossunder(vrsi,overBought) ) and   year >= yearfrom and year <= yearuntil and month>=monthfrom and month <=monthuntil and dayofmonth>=dayfrom and dayofmonth < dayuntil ) 
//    strategy.entry("SELL", strategy.short,stop=close, oca_name="TREND", oca_type=strategy.oca.cancel, comment="SELL")
//else
//    strategy.cancel(id="SELL")
    
    
    

Больше