Стратегия называется RSI Bollinger Bands TP/SL Strategy. Она сочетает в себе индикатор RSI и Bollinger Bands для определения тенденций и торговых сигналов. Когда индикатор RSI показывает сигналы перекупа или перепродажи и цена касается или прорывается через Bollinger Bands, будут открыты длинные или короткие позиции. Кроме того, для контроля рисков устанавливаются точки получения прибыли и остановки потери.
Индикатор RSI определяет, является ли акция перекупленной или перепроданной. Читание RSI выше перекупленной линии указывает на перекупленные условия, в то время как чтение ниже перепроданной линии указывает на перепроданные условия. Линия перекупления устанавливается на 50 и линия перепродажи устанавливается на 50 в этой стратегии.
Боллингерские полосы вывешивают стандартные отклонения выше и ниже простой скользящей средней. Верхняя полоса действует как сопротивление, а нижняя полоса действует как поддержка.
Когда индикатор RSI показывает нижний сигнал переворота и цена прорывается через нижнюю полосу полос Боллинджера, это рассматривается как восходящее перевороты, и, следовательно, длинный.
RSI и Bollinger Bands используются для определения тенденций и переворотов.
Стратегия устанавливает точки получения прибыли (TP) и остановки потери (SL), чтобы зафиксировать прибыль и максимизировать снижение потерь.
Пользователи могут выбирать только длинный, короткий или оба направления в зависимости от рыночных условий, что позволяет гибко контролировать риск.
Размер стандартного отклонения влияет на ширину полос и торговые сигналы.
V-образные перевороты могут вызвать ненужные потери с слишком агрессивными настройками TP / SL.
Неправильные параметры RSI приводят к снижению точности сигналов обратного движения.
Для поиска оптимальной комбинации параметров можно проверить больше значений длины RSI.
Для поиска оптимальной комбинации параметров можно испытать больше длин и стандартных отклонений.
Обратное тестирование может помочь найти оптимальное соотношение TP/SL.
Эта стратегия использует RSI и полосы Боллинджера для выявления тенденций и перемен, и устанавливает TP / SL для контроля рисков. Она может автоматически обнаруживать торговые сигналы и управлять выходами.
/*backtest start: 2023-11-20 00:00:00 end: 2023-12-20 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © BigCoinHunter //@version=5 strategy(title="RSI_Boll-TP/SL", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000, currency=currency.USD, commission_value=0.05, commission_type=strategy.commission.percent, process_orders_on_close=true) //----------- get the user inputs -------------- //---------- RSI ------------- price = input(close, title="Source") RSIlength = input.int(defval=6,title="RSI Length") RSIoverSold = input.int(defval=50, title="RSI OverSold", minval=1) RSIoverBought = input.int(defval=50, title="RSI OverBought", minval=1) //------- Bollinger Bands ----------- BBlength = input.int(defval=200, title="Bollinger Period Length", minval=1) BBmult = input.float(defval=2.0, minval=0.001, maxval=50, step=0.1, title="Bollinger Bands Standard Deviation") BBbasis = ta.sma(price, BBlength) BBdev = BBmult * ta.stdev(price, BBlength) BBupper = BBbasis + BBdev BBlower = BBbasis - BBdev source = close buyEntry = ta.crossover(source, BBlower) sellEntry = ta.crossunder(source, BBupper) plot(BBbasis, color=color.aqua, title="Bollinger Bands SMA Basis Line") p1 = plot(BBupper, color=color.silver, title="Bollinger Bands Upper Line") p2 = plot(BBlower, color=color.silver, title="Bollinger Bands Lower Line") fill(plot1=p1, plot2=p2, title="Bollinger BackGround", color=color.new(color.aqua,90), fillgaps=false, editable=true) //---------- input TP/SL --------------- tp = input.float(title="Take Profit:", defval=0.0, minval=0.0, maxval=100.0, step=0.1) * 0.01 sl = input.float(title="Stop Loss: ", defval=0.0, minval=0.0, maxval=100.0, step=0.1) * 0.01 longEntry = input.bool(defval=true, title= 'Long Entry', inline="11") shortEntry = input.bool(defval=true, title='Short Entry', inline="11") //---------- backtest range setup ------------ fromDay = input.int(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input.int(defval = 1, title = "From Month", minval = 1, maxval = 12) fromYear = input.int(defval = 2021, title = "From Year", minval = 2010) toDay = input.int(defval = 30, title = "To Day", minval = 1, maxval = 31) toMonth = input.int(defval = 12, title = "To Month", minval = 1, maxval = 12) toYear = input.int(defval = 2042, title = "To Year", minval = 2010) //------------ time interval setup ----------- start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window finish = timestamp(toYear, toMonth, toDay, 23, 59) // backtest finish window window() => time >= start and time <= finish ? true : false // create function "within window of time" //------- define the global variables ------ var bool long = true var bool stoppedOutLong = false var bool stoppedOutShort = false //--------- Colors --------------- TrendColor = RSIoverBought and (price[1] > BBupper and price < BBupper) and BBbasis < BBbasis[1] ? color.red : RSIoverSold and (price[1] < BBlower and price > BBlower) and BBbasis > BBbasis[1] ? color.green : na //bgcolor(switch2?(color.new(TrendColor,50)):na) //--------- calculate the input/output points ----------- longProfitPrice = strategy.position_avg_price * (1 + tp) // tp -> take profit percentage longStopPrice = strategy.position_avg_price * (1 - sl) // sl -> stop loss percentage shortProfitPrice = strategy.position_avg_price * (1 - tp) shortStopPrice = strategy.position_avg_price * (1 + sl) //---------- RSI + Bollinger Bands Strategy ------------- vrsi = ta.rsi(price, RSIlength) rsiCrossOver = ta.crossover(vrsi, RSIoverSold) rsiCrossUnder = ta.crossunder(vrsi, RSIoverBought) BBCrossOver = ta.crossover(source, BBlower) BBCrossUnder = ta.crossunder(source, BBupper) if (not na(vrsi)) if rsiCrossOver and BBCrossOver long := true if rsiCrossUnder and BBCrossUnder long := false //------------------- determine buy and sell points --------------------- buySignall = window() and long and (not stoppedOutLong) sellSignall = window() and (not long) and (not stoppedOutShort) //---------- execute the strategy ----------------- if(longEntry and shortEntry) if long strategy.entry("LONG", strategy.long, when = buySignall, comment = "ENTER LONG") stoppedOutLong := true stoppedOutShort := false else strategy.entry("SHORT", strategy.short, when = sellSignall, comment = "ENTER SHORT") stoppedOutLong := false stoppedOutShort := true else if(longEntry) strategy.entry("LONG", strategy.long, when = buySignall) strategy.close("LONG", when = sellSignall) if long stoppedOutLong := true else stoppedOutLong := false else if(shortEntry) strategy.entry("SHORT", strategy.short, when = sellSignall) strategy.close("SHORT", when = buySignall) if not long stoppedOutShort := true else stoppedOutShort := false //----------------- take profit and stop loss ----------------- if(tp>0.0 and sl>0.0) if ( strategy.position_size > 0 ) strategy.exit(id="LONG", limit=longProfitPrice, stop=longStopPrice, comment="Long TP/SL Trigger") else if ( strategy.position_size < 0 ) strategy.exit(id="SHORT", limit=shortProfitPrice, stop=shortStopPrice, comment="Short TP/SL Trigger") else if(tp>0.0) if ( strategy.position_size > 0 ) strategy.exit(id="LONG", limit=longProfitPrice, comment="Long TP Trigger") else if ( strategy.position_size < 0 ) strategy.exit(id="SHORT", limit=shortProfitPrice, comment="Short TP Trigger") else if(sl>0.0) if ( strategy.position_size > 0 ) strategy.exit(id="LONG", stop=longStopPrice, comment="Long SL Trigger") else if ( strategy.position_size < 0 ) strategy.exit(id="SHORT", stop=shortStopPrice, comment="Short SL Trigger")