Эта стратегия реализует быстрые прорывные операции на основе индикатора RSI и EMA тела свечей. Она идентифицирует сигналы обратного движения с использованием быстрого формирования RSI и крупных тела свечей.
Вычислить индикатор RSI с периодом 7 и использовать RMA для ускорения.
Вычислить EMA размера тела свечи с периодом 30 в качестве ориентира для размера тела.
Если RSI пересекает предельную линию (по умолчанию 30) и текущий корпус свечи больше 1/4 среднего размера корпуса, делайте покупку.
Если RSI переходит ниже предельной линии (по умолчанию 70) и текущий корпус свечи больше 1/4 среднего размера корпуса, перейдите на короткий.
Если уже на позиции, закрыть, когда RSI пересечет линию предела.
Параметры, такие как длина RSI, лимит, эталонная цена, могут быть настроены.
Параметры, такие как период EMA тела, умножитель chroot открытого положения, могут быть настроены.
Количество переходов RSI может быть настроено.
Используйте атрибут обратного движения RSI для своевременного обнаружения обратного движения.
RMA ускоряет формирование RSI для более чувствительных переворотов.
Фильтруйте небольшие консолидации с большими телами свечей.
Достаточные данные обратного теста гарантируют надежность.
Настраиваемые параметры адаптируются к различным рыночным условиям.
Простая и ясная логика.
У RSI есть предвзятое отношение к обратному тесту, фактическая производительность должна быть подтверждена.
Крупные организации не могут полностью отфильтровать неблагополучные рынки.
Параметры по умолчанию могут не подходить для всех продуктов, необходима оптимизация.
Уровень победы может быть невысоким, нужно терпеть последовательные проигрыши умственно.
Риск неудачного прорыва, необходимо своевременное прекращение потерь.
Оптимизировать параметры RSI для различных периодов и продуктов.
Оптимизируйте период EMA тела, чтобы сгладить размер тела.
Оптимизируйте мультипликатор для открытых позиций, чтобы контролировать частоту входа.
Добавьте движущуюся стоп-лосс, чтобы обеспечить процент выигрыша.
Добавьте фильтр тренда, чтобы избежать торговли с противоположным трендом.
Оптимизировать управление деньгами для контроля рисков.
В общем, это очень простая и прямая стратегия обратного движения. Она использует как обратный атрибут 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()