Индикатор RSI в сочетании с торговой стратегией Bollinger Bands


Дата создания: 2023-12-21 11:17:19 Последнее изменение: 2023-12-21 11:17:19
Копировать: 0 Количество просмотров: 809
1
Подписаться
1623
Подписчики

Индикатор RSI в сочетании с торговой стратегией Bollinger Bands

Обзор стратегии

Эта стратегия называется стратегией RSI Bollinger Bands TP/SL Stop Loss. Эта стратегия объединяет индикаторы RSI и Bollinger Bands TP/SL и позволяет установить тренд и совершить сделку с прорывом.

2. Принципы стратегии

1. RSI указывает на обратную сторону

Показатель RSI позволяет определить, находится ли акция в пределах перекупки и перепродажи. Если RSI выше установленной линии перекупа, то это перекупка, а если она меньше установленной линии перепродажи, то это перепродажа.

2. Брин с тенденцией к осуждению

Брин-пояса, рассчитывая стандартную разницу цены акции, получают верхнюю и нижнюю траектории цены акций. Верхняя траектория является линией сопротивления, а нижняя траектория - линией поддержки.

3. RSI в сочетании с Брин-Бендом

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

Третье: стратегические преимущества.

1. Двойная фильтрация увеличивает точность сигнала

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

2. Контроль риска с помощью механизма остановки сбоев

Стратегия устанавливает стоп-стоп-стоп-убыток, делая стоп-стоп-стоп в качестве входной ценыСтоп-стоп - это начальная цена.(1- Stop Loss Ratio); напротив, форекс позволяет закрепить прибыль, максимально избежать убытков и контролировать риски.

3. Настраиваемое направление покупки и продажи

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

Стратегические риски

Первая - чувствительная к параметрам.

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

2. Опасность остановки

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

3. RSI-чувствительный параметр

Параметры RSI также влияют на форму кривой RSI. Если параметры RSI установлены неправильно, то точность обратного сигнала RSI снижается.

Пятое: оптимизация стратегии

1. Оптимизация параметров RSI

Можно проверить больше параметров длины RSI, чтобы найти оптимальную комбинацию параметров.

2. Оптимизация параметров Бринской полосы

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

3. Тестирование различных пропорций тормозной остановки

Оптимальный параметр Stop Loss Ratio может быть найден с помощью обратного измерения.

6. Заключение

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

Исходный код стратегии
/*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")