Стратегия торговли с отклонением от RSI

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

Обзор

Эта стратегия использует индикатор RSI для оценки рыночных тенденций и генерации торговых сигналов при возникновении условий перекупки или перепродажи. Она направлена на захват краткосрочных движений на рынке. Она также включает в себя скользящие средние и логику получения прибыли / остановки потери для фильтрации сигналов и контроля рисков.

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

  1. Вычислите 14-периодный РСИ и установите линию перекупленности на 67 и линию перепроданности на 44.

  2. Когда RSI пересекает линию перекупленности, генерируется сигнал продажи.

  3. Добавить фильтр скользящей средней. Сигналы продажи возникают только тогда, когда закрытие находится ниже MA предыдущего дня; Сигналы покупки возникают только тогда, когда закрытие находится выше MA предыдущего дня.

  4. Используйте логику получения прибыли и стоп-лосса.

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

  1. Захватывает краткосрочные возможности реверсии с использованием уровней перекупленности/перепродажи по показателю RSI.

  2. Фильтр скользящей средней избегает торговли против тренда.

  3. Приобретение прибыли и стоп-лосс контролируют потерю одной сделки.

  4. Может заранее заметить возможности для изменения тренда.

Риски и решения

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

  2. Фиксированный стоп-лосс может быть слишком широким или слишком узким.

  3. Фиксированная прибыль может выйти слишком рано или слишком мало.

  4. Не может отфильтровывать рынок, вызывая чрезмерную торговлю и убытки.

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

  1. Проверьте параметры RSI в разные временные рамки.

  2. Корректировать уровни перекупленного/перепроданного RSI.

  3. Попробуйте другие скользящие средние или другие фильтры.

  4. Проверка фиксированных и динамических целевых показателей прибыли.

  5. Оптимизировать значения прибыли/остановки, чтобы соответствовать волатильности рынка.

  6. Добавьте фильтры, чтобы избежать сбоев на рынках.

  7. Подумайте о слиянии нескольких временных рамок для улучшения качества сигнала.

Резюме

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


/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//© профешинил хомячело
//@version = 4

strategy("RSI Strategy Professional Хомячело", overlay=false)
length = input( 14 )
overSold = input( 44 )
overBought = input( 67 )
price = open
rsi = rsi(price, length)
band1 = hline(overSold, "overSold12", color=#C0C0C0)
band0 = hline(overBought, "overBought12", color=#C0C0C0)
plot(rsi, "RSI", color=color.red)
fill(band1, band0, color=color.black, transp=90, title="Background")
src = close
a = sma(src, 1)
aaa = strategy.opentrades + 1

n = input(defval = 0.0576923077, title = "AvgPrice - n")
//n = 0.0576923077

buysignal = crossover(rsi, overSold) and (a < (strategy.position_avg_price - n) or strategy.opentrades == 0)
sellsignal = crossunder(rsi, overBought) and (a > (strategy.position_avg_price + n) or strategy.opentrades == 0)


// crossover(rsi, overSold)
// crossunder(rsi, overBought)
if (not na(rsi))
    if(buysignal)
        strategy.entry("LONG", strategy.long, comment = tostring(a) + "\n(" + tostring(aaa) + ")")
        n += 1000
    if(sellsignal)
        strategy.entry("SHORT", strategy.short, comment = tostring(a) + "\n(" + tostring(aaa) + ")")
        n += 1000

//лонги орні       
    if(rsi < 15 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("LONG", strategy.long, comment = "ЙОБАНИЙ НАСРАВ ТА БЕРИ ЛОНГ НА ВСЬО ШО Є НАХУЙ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
    if(rsi < 20 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("LONG", strategy.long, comment = "ЛОНГ НА ВСЮ КОТЛЄТУ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
//шорти орні
    if(rsi > 85 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("SHORT", strategy.short, comment = "ЙОБАНИЙ НАСРАВ ТА БЕРИ ШОРТ НА ВСЬО ШО Є НАХУЙ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
    if(rsi > 80 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("SHORT", strategy.short, comment = "ШОРТ НА ВСЮ КОТЛЄТУ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")


//стоп-лосс і ціль

//rsi
rsion = input(defval = false, title = "Тейк-профіт по RSI")
rcl = input(defval = 73.0, title = "RSI тейк по лонгу")
rcs = input(defval = 44.0, title = "RSI тейк по шорту")
possize = input(defval = 250.0, title = "Маржа")
posp = input(defval = 3.0, title = "Плече")

//tick
ut = input(defval = false, title = "Тейк-профіт")
tar = input(defval = 4500.0, title = "Тейк-профіт у тіках")
us = input(defval = false, title = "Стоп-лосс")
stop = input(defval = 0.0, title = "Стоп-лосс у тіках")
tar:=tar/syminfo.mintick
stop:=stop/syminfo.mintick

if(ut==true and us==false)
    strategy.exit(id="LX", from_entry = "LONG", profit = tar, comment = "ТейкL")
    strategy.exit(id="SX", from_entry = "SHORT", profit = tar, comment = "ТейкS")
if(us==true and ut==false)
    strategy.exit(id="LX", from_entry = "LONG", loss = stop, comment = "СтопL")
    strategy.exit(id="SX", from_entry = "SHORT", loss = stop, comment = "СтопS")
    
if(ut==true and us==true)
    strategy.exit(id="LX", from_entry = "LONG", profit = tar, loss = stop, comment ="Тейк/СтопL")
    strategy.exit(id="SX", from_entry = "SHORT", profit = tar, loss = stop, comment ="Тейк/СтопS")
    
//закриття по rsi
if(rsion == 1 )
    pr = round(((a / strategy.position_avg_price - 1) * possize * posp), 2)
    ppr = round(((a / strategy.position_avg_price - 1) * 100 * posp), 2)
    spr = round((1 - (a / strategy.position_avg_price)) * possize * posp, 2)
    sppr = round((100 - (a / strategy.position_avg_price * 100)) * posp, 2)
    
    if(rsi > rcl)
        strategy.close(id="LONG", comment = "LT\n" + tostring(ppr) + "%\n" + tostring(pr) + "$\n" + tostring(a))
    if(rsi < rcs)
        strategy.close(id="SHORT", comment = "ST\n" + tostring(sppr) + "%\n" + tostring(spr) + "$\n" + tostring(a))

Больше