Стратегия двойного быстрого прорыва RSI

Автор:Чао Чжан, Дата: 2023-11-07 16:56:39
Тэги:

img

Обзор

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

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

Стратегия устанавливает две группы параметров RSI, одна с периодом 7 и лимитом 25, другая с периодом 14 и лимитом 25.

Стратегия сначала рассчитывает значения двух индикаторов RSI, затем оценивает, проходит ли цена через верхний или нижний предел RSI. Если она проходит через верхний предел, генерируется длинный сигнал. Если она проходит через нижний предел, генерируется короткий сигнал.

Если у вас уже есть позиция, он продолжает судить, находится ли текущий RSI в пределах нормального диапазона.

Стратегия также использует систему Мартингейла, размер ордера удваивается после каждой потери.

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

  • Использование двух индикаторов RSI позволяет лучше оценить прорывные сигналы и избежать ложных сигналов.

  • Также проверка прорыва тела избегает неправильных сделок во время консолидации.

  • Мартингейл помогает быстро остановить убытки после потерь.

  • Настраиваемые параметры RSI оптимизируют возможности входа.

  • Торговые сессии могут быть ограничены, чтобы избежать влияния крупных событий.

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

  • Двойной RSI не может полностью избежать ложного прорыва.

  • Мартингейл увеличивает позиции после потерь, рискуя взорваться.

  • Стоимость торговли не учитывается.

  • Слишком много оптимизируемых параметров требует много тестов, чтобы найти лучшую комбинацию.

Может установить стоп-лосс для ограничения потерь; оптимизировать параметры RSI; добавить расходы; расслабить критерии прорыва.

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

  • Добавьте стоп-лосс, чтобы ограничить максимальную потерю.

  • Оптимизируйте параметры RSI, чтобы уменьшить ложные сигналы.

  • Для предотвращения переоценки следует учитывать влияние затрат на торговлю.

  • Расслабьте критерии прорыва тела для большего количества возможностей.

  • Добавьте больше фильтров, чтобы избежать задержания.

Резюме

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


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

//Noro
//2018

//@version=2
strategy(title = "Noro's Fast RSI Strategy v2.0", shorttitle = "Fast RSI str 2.0", overlay = true)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
usersi1 = input(true, defval = true, title = "Use RSI #1")
rsiperiod1 = input(7, defval = 7, minval = 2, maxval = 50, title = "#1 RSI Period")
rsilimit1 = input(25, defval = 25, minval = 1, maxval = 100, title = "#1 RSI limit")
usersi2 = input(true, defval = true, title = "Use RSI #2")
rsiperiod2 = input(14, defval = 14, minval = 2, maxval = 50, title = "#2 RSI Period")
rsilimit2 = input(25, defval = 25, minval = 1, maxval = 100, title = "#2 RSI limit")
showarr = input(false, defval = false, title = "Show Arrows")
fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//RSI #1
uprsi1 = rma(max(change(close), 0), rsiperiod1)
dnrsi1 = rma(-min(change(close), 0), rsiperiod1)
rsi1 = dnrsi1 == 0 ? 100 : uprsi1 == 0 ? 0 : 100 - (100 / (1 + uprsi1 / dnrsi1))
uplimit1 = 100 - rsilimit1
dnlimit1 = rsilimit1

//RSI #2
uprsi2 = rma(max(change(close), 0), rsiperiod2)
dnrsi2 = rma(-min(change(close), 0), rsiperiod2)
rsi2 = dnrsi2 == 0 ? 100 : uprsi2 == 0 ? 0 : 100 - (100 / (1 + uprsi2 / dnrsi2))
uplimit2 = 100 - rsilimit2
dnlimit2 = rsilimit2

//Body
body = abs(close - open)
abody = sma(body, 10)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up1 = bar == -1 and (strategy.position_size == 0 or close < strategy.position_avg_price) and rsi1 < dnlimit1 and body > abody / 5 and usersi1
dn1 = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and rsi1 > uplimit1 and body > abody / 5 and usersi1
up2 = bar == -1 and (strategy.position_size == 0 or close < strategy.position_avg_price) and rsi2 < dnlimit2 and body > abody / 5 and usersi2
dn2 = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and rsi2 > uplimit2 and body > abody / 5 and usersi2
norma = rsi1 > dnlimit1 and rsi1 < uplimit1 and rsi2 > dnlimit2 and rsi2 < uplimit2
exit = (((strategy.position_size > 0 and bar == 1 and norma) or (strategy.position_size < 0 and bar == -1 and norma)) and body > abody / 2)

//Arrows
col = exit ? black : up1 or dn1 ? blue : up2 or dn2 ? red : na
needup = up1 or up2
needdn = dn1 or dn2
needexitup = exit and strategy.position_size < 0
needexitdn = exit and strategy.position_size > 0
plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0)
plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0)

//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

if up1 or up2
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if dn1 or dn2
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
    
if  exit
    strategy.close_all()

Больше