
Эта стратегия позволяет получить более точные сигналы для входа и выхода за счет многократного настройки параметров RSI, чтобы достичь многократного прорыва цены.
Стратегия устанавливает две группы параметров RSI: RSI с циклом 7, ограниченный RSI с 25 и RSI с циклом 14, ограниченный RSI с 25. Когда цена нарушает ограничения любой группы RSI, выполняется операция по увеличению или уменьшению.
Сначала стратегия рассчитывает значения двух групп RSI, а затем определяет, будет ли цена преодолевать верхнюю или нижнюю границу RSI. Если она преодолеет верхнюю границу, то будет создано множественное сигнала, а если она преодолеет нижнюю границу, то будет создано сигнала.
Если у вас уже есть позиция, то вы продолжаете судить о том, находится ли текущий RSI в пределах нормы. Если RSI нормален, а также если вы прорвете половину средней линии, то вы получите сигнал выхода.
В этой стратегии также используется система Мартингеля. После каждой потери, объем следующей сделки удваивается.
Используя две группы RSI, можно более точно определить сигнал прорыва и избежать ложного прорыва.
В то же время проверяйте прорыв в структуре, чтобы избежать ошибочных сделок во время потрясения.
Применение мартингеля позволяет быстро прекратить убытки после потери.
Настраиваемый набор RSI параметров, оптимизирующий шансы на поступление.
Ограничение сроков транзакций, чтобы избежать последствий крупных событий.
Двойной RSI не может полностью избежать ложного прорыва.
Мартингел увеличивает свои позиции, когда теряет, и легко лопнет.
Не учитывается влияние на стоимость сделки.
Оптимизируемых параметров больше, требуется большое количество тестов, чтобы найти оптимальную комбинацию параметров.
Можно установить стоп-стоп для ограничения убытков; оптимизировать параметры RSI; добавить расходы; надлежащим образом ослабить прорыв.
Присоединение к механизму сдерживания убытков может ограничить максимальные убытки.
Оптимизируйте комбинацию RSI, чтобы найти оптимальные параметры для уменьшения ложных прорывов.
Учитывайте влияние на стоимость транзакций и избегайте слишком частых транзакций.
В частности, он отметил, что “это не является прорывом, но это не является прорывом”.
Добавьте фильтры для других показателей, чтобы избежать попадания.
Стратегия использует двойные RSI для определения ценовых прорывов, включая фактические прорывы, чтобы избежать попадания в рынок во время колебаний. При этом используется мартингельский подъем для быстрого остановки.
/*backtest
start: 2023-10-30 00:00:00
end: 2023-11-06 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=2
strategy(title = "Noro's Fast RSI Strategy v2.0", shorttitle = "Fast RSI str 2.0", overlay = true)
//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, %")
usersi1 = input(true, defval = true, title = "Use RSI #1")
rsiperiod1 = input(7, defval = 7, minval = 2, maxval = 50, title = "#1 RSI Period")
rsilimit1 = input(25, defval = 25, minval = 1, maxval = 100, title = "#1 RSI limit")
usersi2 = input(true, defval = true, title = "Use RSI #2")
rsiperiod2 = input(14, defval = 14, minval = 2, maxval = 50, title = "#2 RSI Period")
rsilimit2 = input(25, defval = 25, minval = 1, maxval = 100, title = "#2 RSI limit")
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")
//RSI #1
uprsi1 = rma(max(change(close), 0), rsiperiod1)
dnrsi1 = rma(-min(change(close), 0), rsiperiod1)
rsi1 = dnrsi1 == 0 ? 100 : uprsi1 == 0 ? 0 : 100 - (100 / (1 + uprsi1 / dnrsi1))
uplimit1 = 100 - rsilimit1
dnlimit1 = rsilimit1
//RSI #2
uprsi2 = rma(max(change(close), 0), rsiperiod2)
dnrsi2 = rma(-min(change(close), 0), rsiperiod2)
rsi2 = dnrsi2 == 0 ? 100 : uprsi2 == 0 ? 0 : 100 - (100 / (1 + uprsi2 / dnrsi2))
uplimit2 = 100 - rsilimit2
dnlimit2 = rsilimit2
//Body
body = abs(close - open)
abody = sma(body, 10)
//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up1 = bar == -1 and (strategy.position_size == 0 or close < strategy.position_avg_price) and rsi1 < dnlimit1 and body > abody / 5 and usersi1
dn1 = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and rsi1 > uplimit1 and body > abody / 5 and usersi1
up2 = bar == -1 and (strategy.position_size == 0 or close < strategy.position_avg_price) and rsi2 < dnlimit2 and body > abody / 5 and usersi2
dn2 = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and rsi2 > uplimit2 and body > abody / 5 and usersi2
norma = rsi1 > dnlimit1 and rsi1 < uplimit1 and rsi2 > dnlimit2 and rsi2 < uplimit2
exit = (((strategy.position_size > 0 and bar == 1 and norma) or (strategy.position_size < 0 and bar == -1 and norma)) 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
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
if strategy.position_size < 0
strategy.close_all()
strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)
if dn1 or dn2
if strategy.position_size > 0
strategy.close_all()
strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
if exit
strategy.close_all()