El índice de variación de las bandas de Bollinger TP/SL

El autor:¿ Qué pasa?, Fecha: 2021-12-21 11:17:19
Las etiquetas:

img

I. Resumen de la estrategia

La estrategia se llama RSI Bollinger Bands TP/SL Strategy. Combina el indicador RSI y Bollinger Bands para identificar tendencias y señales comerciales. Cuando el indicador RSI muestra señales de sobrecompra o sobreventa y el precio toca o rompe las bandas de Bollinger, se abrirán posiciones largas o cortas. Además, los puntos de toma de ganancias y stop loss también se establecen para controlar los riesgos.

II. Lógica de la estrategia

1. Indicador del RSI para las reversiones

El indicador RSI juzga si una acción está sobrecomprada o sobrevendida. Una lectura del RSI por encima de la línea de sobrecompra indica condiciones de sobrecompra, mientras que una lectura por debajo de la línea de sobreventa indica condiciones de sobreventa. La línea de sobrecompra se establece en 50 y la línea de sobreventa se establece en 50 en esta estrategia.

Las bandas de Bollinger para la tendencia

Las bandas de Bollinger trazan líneas de desviación estándar por encima y por debajo de una media móvil simple. La banda superior actúa como resistencia y la banda inferior actúa como soporte. Un cruce hacia arriba de la banda inferior es una señal de compra, mientras que un cruce hacia abajo de la banda superior es una señal de venta.

3. Combinación de los índices RSI y las bandas de Bollinger

Cuando el indicador RSI muestra una señal de reversión inferior y el precio rompe la banda inferior de las bandas de Bollinger, se considera una reversión ascendente, por lo que va largo.

III. Ventajas

1. Mejora de la precisión con indicadores dobles

El RSI y las bandas de Bollinger se utilizan para determinar tendencias e inversiones.

Control de riesgos mediante TP/SL

La estrategia establece puntos de toma de ganancias (TP) y stop loss (SL) para bloquear las ganancias y maximizar la mitigación de pérdidas.

3. Direcciones personalizables

Los usuarios pueden optar solo por el largo, sólo por el corto o en ambas direcciones en función de las condiciones del mercado, lo que permite un control del riesgo flexible.

IV. Riesgos

1. Parámetros sensibles de las bandas de Bollinger

El tamaño de la desviación estándar afecta el ancho de las bandas y las señales comerciales.

2. Riesgos de TP/SL

Las inversiones en forma de V pueden desencadenar pérdidas innecesarias con la configuración TP/SL siendo demasiado agresiva.

3. Parámetros sensibles del RSI

La configuración incorrecta de los parámetros RSI conduce a una disminución de la precisión de las señales de inversión.

V. Direcciones de optimización

1. Optimizar los parámetros del RSI

Se pueden probar más valores de longitud del RSI para encontrar la combinación óptima de parámetros.

2. Optimiza los parámetros de las bandas de Bollinger

Se pueden probar más longitudes y desviaciones estándar para encontrar la combinación óptima de parámetros.

3. Prueba de diferentes relaciones TP/SL

Las pruebas de retroceso pueden ayudar a encontrar la relación óptima TP/SL.

VI. Conclusión

Esta estrategia aprovecha el RSI y las bandas de Bollinger para identificar tendencias e inversiones, y establece TP / SL para controlar riesgos. Puede detectar automáticamente las señales de negociación y gestionar salidas. Todavía hay algunos riesgos que pueden mejorarse mediante la optimización de parámetros. En general, esta es una estrategia práctica con una fuerte aplicabilidad.


/*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")



















Más.