Быстрая стратегия торговли с разрывом RSI для криптовалют

Автор:Чао Чжан, Дата: 2023-11-27 11:22:19
Тэги:

img

Обзор: Это стратегия быстрого трейдинга с разрывом RSI, предназначенная для рынков криптовалют.

Принципы: В стратегии используются два основных метода: быстрые индикаторы RSI и паттерны разрывов.

В первую очередь, он рассчитывает быстрый индикатор RSI, основанный только на 7 свечах. Это делает RSI более чувствительным для быстрого обнаружения условий перекупа / перепродажи. Верхний предел RSI установлен на 70 и нижний предел на 30. Выше 70 считается перекупленным, а ниже 30 перепроданным.

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

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

Кроме того, стратегия использует другие фильтры, включая индикаторы SMA и Min / Max, чтобы избежать ложных сигналов.

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

Риски:
К основным рискам, с которыми сталкивается стратегия, относятся:

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

  2. Разрывы могут быть просто нормальными колебаниями цен вместо реальных перемен.

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

  4. Неправильные параметры, такие как минимальный/максимальный период, могут привести к ослаблению сигналов и низкой эффективности.

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

  1. Настраивайте быстрые параметры RSI и увеличивайте период RSI, чтобы сделать его менее чувствительным.

  2. Используйте динамический стоп-лосс, чтобы зафиксировать прибыль.

  3. Оптимизировать уровень участия в стратегии. Ограничить участие в условиях низкой волатильности.

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

Улучшение: К основным направлениям оптимизации относятся:

  1. Исследуйте другие индикаторы, такие как MACD, KDJ в сочетании с пробелами для повышения точности.

  2. Создать адаптивные механизмы остановки потерь на основе волатильности рынка.

  3. Включайте показатели объема, такие как OBV, чтобы подтвердить обратный ход после пробелов.

  4. Оптимизируйте параметры фильтра, такие как Min / Max период, чтобы обнаружить лучшие настройки для снижения ложных сигналов.

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

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

Заключение: Подводя итог, стратегия быстрого трейдинга с разрывом RSI - это эффективный подход, разработанный специально для волатильных крипторынков. Благодаря непрерывному тестированию и улучшению он имеет потенциал надежно улавливать быстрые изменения рынка и достигать постоянной прибыльности.


/*backtest
start: 2023-10-27 00:00:00
end: 2023-11-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy(title = "Noro's Fast RSI Strategy v1.5", shorttitle = "Fast RSI str 1.5", overlay = true)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usersi = input(true, defval = true, title = "Use Fast RSI Strategy")
usemm = input(true, defval = true, title = "Use Min/Max Strategy")
usesma = input(false, defval = false, title = "Use SMA Filter")
smaperiod = input(20, defval = 20, minval = 2, maxval = 1000, title = "SMA Filter Period")
fast = input(7, defval = 7, minval = 2, maxval = 50, title = "Fast RSI Period")
limit = input(30, defval = 30, minval = 1, maxval = 100, title = "RSI limit")
rsisrc = input(close, defval = close, title = "RSI Price")
rsibars = input(1, defval = 1, minval = 1, maxval = 20, title = "RSI Bars")
mmbars = input(1, defval = 1, minval = 1, maxval = 5, title = "Min/Max Bars")
showsma = input(false, defval = false, title = "Show SMA Filter")
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")

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

//Limits
bar = close > open ? 1 : close < open ? -1 : 0
uplimit = 100 - limit
dnlimit = limit

//RSI Bars
upsignal = fastrsi > uplimit ? 1 : 0
dnsignal = fastrsi < dnlimit ? 1 : 0
uprsi = sma(upsignal, rsibars) == 1
dnrsi = sma(dnsignal, rsibars) == 1

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

//MinMax Bars
min = min(close, open)
max = max(close, open)
minsignal = min < min[1] and bar == -1 and bar[1] == -1 ? 1 : 0
maxsignal = max > max[1] and bar == 1 and bar[1] == 1 ? 1 : 0
mins = sma(minsignal, mmbars) == 1
maxs = sma(maxsignal, mmbars) == 1

//SMA Filter
sma = sma(close, smaperiod)
colorsma = showsma ? blue : na
plot(sma, color = colorsma, linewidth = 3)

//Signals
up1 = bar == -1 and (strategy.position_size == 0 or close < strategy.position_avg_price) and dnrsi and body > abody / 5 and usersi
dn1 = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and uprsi and body > abody / 5 and usersi
up2 = mins and (close > sma or usesma == false) and fastrsi < 70 and usemm
dn2 = maxs and (close < sma or usesma == false) and fastrsi > 30 and usemm 
exit = ((strategy.position_size > 0 and fastrsi > dnlimit and bar == 1) or (strategy.position_size < 0 and fastrsi < uplimit and bar == -1)) 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
if up1 or up2
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn1 or dn2
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Больше