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

Автор:Чао Чжан, Дата: 2023-10-24 11:51:56
Тэги:

img

Обзор

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

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

  1. Вычислить индикатор RSI с периодом 7 и использовать RMA для ускорения.

  2. Вычислить EMA размера тела свечи с периодом 30 в качестве ориентира для размера тела.

  3. Если RSI пересекает предельную линию (по умолчанию 30) и текущий корпус свечи больше 1/4 среднего размера корпуса, делайте покупку.

  4. Если RSI переходит ниже предельной линии (по умолчанию 70) и текущий корпус свечи больше 1/4 среднего размера корпуса, перейдите на короткий.

  5. Если уже на позиции, закрыть, когда RSI пересечет линию предела.

  6. Параметры, такие как длина RSI, лимит, эталонная цена, могут быть настроены.

  7. Параметры, такие как период EMA тела, умножитель chroot открытого положения, могут быть настроены.

  8. Количество переходов RSI может быть настроено.

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

  1. Используйте атрибут обратного движения RSI для своевременного обнаружения обратного движения.

  2. RMA ускоряет формирование RSI для более чувствительных переворотов.

  3. Фильтруйте небольшие консолидации с большими телами свечей.

  4. Достаточные данные обратного теста гарантируют надежность.

  5. Настраиваемые параметры адаптируются к различным рыночным условиям.

  6. Простая и ясная логика.

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

  1. У RSI есть предвзятое отношение к обратному тесту, фактическая производительность должна быть подтверждена.

  2. Крупные организации не могут полностью отфильтровать неблагополучные рынки.

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

  4. Уровень победы может быть невысоким, нужно терпеть последовательные проигрыши умственно.

  5. Риск неудачного прорыва, необходимо своевременное прекращение потерь.

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

  1. Оптимизировать параметры RSI для различных периодов и продуктов.

  2. Оптимизируйте период EMA тела, чтобы сгладить размер тела.

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

  4. Добавьте движущуюся стоп-лосс, чтобы обеспечить процент выигрыша.

  5. Добавьте фильтр тренда, чтобы избежать торговли с противоположным трендом.

  6. Оптимизировать управление деньгами для контроля рисков.

Заключение

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


/*backtest
start: 2023-09-23 00:00:00
end: 2023-10-23 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title = "Noro's Fast RSI Strategy v1.2", shorttitle = "Fast RSI str 1.2", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 5)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
rsiperiod = input(7, defval = 7, minval = 2, maxval = 50, title = "RSI Period")
limit = input(30, defval = 30, minval = 1, maxval = 100, title = "RSI limit")
rsisrc = input(close, defval = close, title = "RSI Price")
rb = input(1, defval = 1, minval = 1, maxval = 5, title = "RSI Bars")
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), rsiperiod)
fastdown = rma(-min(change(rsisrc), 0), rsiperiod)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))
uplimit = 100 - limit
dnlimit = limit

//RSI Bars
ur = fastrsi > uplimit
dr = fastrsi < dnlimit
uprsi = rb == 1 and ur ? 1 : rb == 2 and ur and ur[1] ? 1 : rb == 3 and ur and ur[1] and ur[2] ? 1 : rb == 4 and ur and ur[1] and ur[2] and ur[3] ? 1 : rb == 5 and ur and ur[1] and ur[2] and ur[3] and ur[4] ? 1 : 0
dnrsi = rb == 1 and dr ? 1 : rb == 2 and dr and dr[1] ? 1 : rb == 3 and dr and dr[1] and dr[2] ? 1 : rb == 4 and dr and dr[1] and dr[2] and dr[3] ? 1 : rb == 5 and dr and dr[1] and dr[2] and dr[3] and dr[4] ? 1 : 0

//Body
body = abs(close - open)
emabody = ema(body, 30)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up = bar == -1 and (strategy.position_size == 0 or close < strategy.position_avg_price) and dnrsi and body > emabody / 4
dn = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and uprsi and body > emabody / 4
exit = ((strategy.position_size > 0 and fastrsi > dnlimit and bar == 1) or (strategy.position_size < 0 and fastrsi < uplimit and bar == -1)) and body > emabody / 2

//Trading
if up
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)))

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

Больше