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


Дата создания: 2023-12-07 16:05:17 Последнее изменение: 2023-12-07 16:05:17
Копировать: 0 Количество просмотров: 627
1
Подписаться
1619
Подписчики

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

Обзор

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

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

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

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

Кроме того, в стратегии также установлены параметры остановки и остановки. Параметр остановки по умолчанию 10000; остановка по умолчанию установлена как кривая trailing stop, с по умолчанию 300 послепроходными точками и 0 смещением.

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

  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")