Стратегия разворота импульса RSI


Дата создания: 2023-11-07 15:45:15 Последнее изменение: 2023-11-07 15:45:15
Копировать: 0 Количество просмотров: 773
1
Подписаться
1617
Подписчики

Стратегия разворота импульса RSI

Обзор

Стратегия RSI Dynamic Reversal использует одновременно регулярные RSI и быстрые RSI, а также фильтры на K-линии, чтобы эффективно идентифицировать возможности для обратного роста.

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

Стратегия реализуется с помощью следующих компонентов:

  1. Конорс RSI

Рассчитайте обычный RSI, RSI Win Ratio, RSI Paris-Sharr, взяв среднее из них как RSI Коннора.

  1. Быстрый RSI

Быстрый RSI рассчитывается с использованием ценовых изменений, отражающих сверхкороткие циклы.

  1. Фильтрация сущностей K-линии

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

  1. Условия свободного пространства

Коннорс RSI ниже 20, быстрый RSI ниже 25, появляется реальный солнечный свет, делать больше.

Коннорс RSI выше 80, быстрый RSI выше 75, появляется реальная тень, пустота.

  1. Остановка убытков

Субъект выходит из строя при переходе на стоп-лост.

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

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

Эта стратегия имеет следующие преимущества:

  1. В сочетании с длинной и короткой линией

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

  1. Фильтрация

Операция только при фактическом прорыве позволяет снизить убытки, связанные с ложным прорывом.

  1. Параметры настраиваются

Параметры RSI, тип торговли и период торговли могут быть легко адаптированы к различным рынкам.

  1. Простая интуиция

RSI и K-линия являются основными показателями, логика стратегии проста и понятна.

  1. Легкость реализации

Использование только встроенных показателей, небольшой объем кода и низкая сложность реализации.

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

Основные риски этой стратегии:

  1. Риск неудачи в реверсии

После появления обратного сигнала цены продолжают движение по прежнему тренду, что приводит к убыткам.

  1. Риск потрясений

Некоторые из них, например, были задействованы на рынке в 2014 году, а в 2015 году были задействованы на рынке в 2014 году.

  1. Риск ложного прорыва

Фильтрация не может полностью предотвратить прорыв.

  1. Параметры, определяющие риск

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

  1. Специальные риски

В особых ситуациях RSI отключается и дает ошибочный сигнал.

Направление оптимизации

Эта стратегия может быть оптимизирована в следующих аспектах:

  1. Увеличение убыточности

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

  1. Интеграция нескольких показателей

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

  1. Фильтрация вероятности

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

  1. Оптимизация параметров

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

  1. Избегайте особых ситуаций

“Мы не можем позволить, чтобы это произошло, потому что мы не можем позволить, чтобы это произошло”, - сказал он.

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2023-10-07 00:00:00
end: 2023-11-06 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Connors RSI Strategy v1.0", shorttitle = "CRSI str 1.0", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10)

//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, %")
usecrsi = input(true, defval = true, title = "Use CRSI Strategy")
usefrsi = input(true, defval = true, title = "Use FRSI Strategy")
usemod = input(true, defval = true, title = "CRSI+FRSI Mode")
limit = input(25, defval = 25, minval = 1, maxval = 100, title = "RSI limit")
usebod = input(true, defval = true, title = "Use Body-filter")
usecol = input(true, defval = true, title = "Use Color-filter")
fromyear = input(1900, defval = 1900, 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")

//CRSI
rsilen = 3
streaklen = 2
lookback = 100
rsi = rsi(close,rsilen)
upday = close > close[1] ? 1 : 0
downday = close < close[1] ? -1 : 0
upstreak = upday!=0 ? upstreak[1] + upday : 0
downstreak = downday!=0 ? downstreak[1] + downday : 0
streak = upstreak + downstreak
streakrsi = rsi(streak,streaklen)
roc = close/close[1] - 1
roccount = 0
for i=1 to lookback-1
    roccount := roc[i]<roc ? roccount + 1 : roccount
crsi = (rsi + streakrsi + roccount) / 3

//Oscilator
// rsiplot = plot(crsi, title="RSI", style=line, linewidth=1, color=blue)
// band1 = hline(80, title="Upper Line", linestyle=dashed, linewidth=1, color=red)
// band0 = hline(20, title="Lower Line", linestyle=dashed, linewidth=1, color=green)
// fill(band1, band0, color=purple, transp=90)

//Fast RSI
fastup = rma(max(change(close), 0), 7)
fastdown = rma(-min(change(close), 0), 7)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Body Filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 3 or usebod == false

//Color Filter
bar = close > open ? 1 : close < open ? -1 : 0
gbar = bar == 1 or usecol == false
rbar = bar == -1 or usecol == false

//Signals

up1 = rbar and (strategy.position_size == 0 or close < strategy.position_avg_price) and crsi < limit and body and usecrsi
dn1 = gbar and (strategy.position_size == 0 or close > strategy.position_avg_price) and crsi > 100 - limit and body and usecrsi
up2 = rbar and (strategy.position_size == 0 or close < strategy.position_avg_price) and fastrsi < limit and body and usefrsi
dn2 = gbar and (strategy.position_size == 0 or close > strategy.position_avg_price) and fastrsi > 100 - limit and body and usefrsi
exit = ((strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1)) and body

//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) and usemod == false) or (up1 and up2 and usemod)
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

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