Стратегия обратного движения импульса RSI

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

img

Обзор

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

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

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

  1. Индикатор RSI Коннора

    Вычисляет обычный RSI, RSI Win Ratio и RSI Parisian, чтобы получить RSI Коннора в среднем.

  2. Быстрый индикатор RSI

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

  3. Фильтр тела свечи

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

  4. Долгие и короткие условия

    Идите длинный, когда Коннор RSI ниже 20 и быстрый RSI ниже 25 с бычьим телом.

    Сократите, когда RSI Коннора превысит 80 и быстро RSI превысит 75 с медвежьим телом.

  5. Выход с остановкой потери

    Выходит со стоп-лосом, когда тело свечи поворачивается.

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

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

Преимущества этой стратегии включают:

  1. Сочетание долгосрочных и краткосрочных показателей

    RSI Коннора отражает долгосрочные циклы, а быстрый RSI отражает краткосрочные циклы, объединяя оба, можно точно определить точки перелома.

  2. Фильтр тела свечи

    Торговля только на телом может уменьшить убытки от ложных прорывов.

  3. Регулируемые параметры

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

  4. Просто и интуитивно понятно

    RSI и тело свечи - это базовые индикаторы, легко понятная логика.

  5. Легко внедряется

    Использует только встроенные индикаторы, требует мало кода и легко внедряется.

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

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

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

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

  2. Рыночный риск

    Частые неэффективные сигналы вызываются на различных рынках.

  3. Риск ложного выхода

    Фильтр тела свечи не может полностью избежать ложных прорывов.

  4. Риск параметров

    Ненадлежащие параметры РСИ могут привести к пропуску сделок или вызвать множество неэффективных сделок.

  5. Специальный рыночный риск

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

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

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

  1. Добавление механизмов остановки потерь

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

  2. Интегрировать несколько показателей

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

  3. Добавить фильтры вероятности

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

  4. Оптимизировать параметры

    Испытать параметры на различных продуктах и временных рамках для поиска оптимальных значений.

  5. Избегайте особых рыночных условий

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

Заключение

Стратегия реверсии импульса 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()

Больше