Estrategia triple del RSI de SuperTrend y Stoch

El autor:¿ Qué pasa?, Fecha: 2023-12-06 14:29:00
Las etiquetas:

img

Resumen general

La estrategia Triple SuperTrend y Stoch RSI es una estrategia de negociación cuantitativa que combina la tendencia de varios marcos de tiempo siguiendo el indicador SuperTrend y las señales de sobrecompra / sobreventa del indicador Stoch RSI. La estrategia utiliza tres indicadores de SuperTrend con diferentes configuraciones de parámetros para determinar las tendencias del mercado y combina las señales de Stoch RSI para filtrar las señales comerciales.

Estrategia lógica

La lógica central de la estrategia Triple SuperTrend y Stoch RSI es combinar los indicadores SuperTrend con diferentes parámetros y el indicador Stoch RSI para el filtrado de señales comerciales para mejorar la calidad de las señales y disminuir las señales falsas.

En primer lugar, la estrategia adopta tres indicadores de SuperTrend con configuraciones de parámetros variadas para determinar la tendencia principal del mercado. Los tres indicadores de SuperTrend tienen parámetros que van desde marcos de tiempo rápidos hasta lentos, con el fin de capturar los cambios de tendencia en diferentes niveles. Cuando los indicadores de SuperTrend más rápidos y segundos más rápidos dan señales de compra / venta concurrentes, hacemos un juicio preliminar de que la señal tiene cierta confiabilidad.

En segundo lugar, el indicador de Stoch RSI se introduce para determinar si el mercado está extremadamente sobrecomprado o sobrevendido cuando ocurre la señal. El indicador de Stoch RSI combina las fortalezas de los indicadores RSI y Estocástico, lo que permite juicios efectivos sobre las condiciones de mercado sobrecompradas / sobrevendidas. Cuando las señales SuperTrend más rápidas y la segunda más rápida se alinean con las señales de Stoch RSI, se pueden desencadenar las señales finales de compra / venta.

A través de la combinación de múltiples indicadores y marcos de tiempo, la estrategia Triple SuperTrend y Stoch RSI puede filtrar eficazmente el ruido del mercado, mejorar la confiabilidad de la señal y reducir las operaciones incorrectas.

Ventajas de la estrategia

La mayor ventaja de la estrategia Triple SuperTrend y Stoch RSI radica en la combinación efectiva de múltiples indicadores y marcos de tiempo, lo que trae los siguientes beneficios:

  1. La combinación de los indicadores SuperTrend y Stoch RSI triple puede disminuir en gran medida el ruido y las señales falsas que vienen con los indicadores individuales.

  2. A pesar de la disminución de la frecuencia de la señal, la proporción de señales rentables ve una mejora significativa.

  3. El filtrado de marcos de tendencia multi-tiempo facilita la captura de tendencias a medio y largo plazo, adaptándose bien a los entornos de mercado de tendencia.

  4. La optimización fácil para un mejor rendimiento. Los indicadores triples permiten mayores posibilidades de optimización de parámetros.

  5. Parámetros personalizables que se adaptan al estilo personal de negociación.

Riesgos de la estrategia

También hay algunos riesgos asociados con la estrategia Triple SuperTrend y Stoch RSI:

  1. Disminución de la frecuencia de la señal: el mecanismo de filtro de múltiples capas disminuye significativamente la frecuencia de negociación de la estrategia.

  2. La naturaleza conservadora hace que la estrategia pueda perder algunas oportunidades rentables.

  3. Aumento de la dependencia de los parámetros. Más indicadores significa mayor dificultad en la optimización.

  4. La combinación de múltiples marcos de tiempo también restringe la flexibilidad de la estrategia.

Para hacer frente a estos riesgos, pueden adoptarse medidas de optimización como el ajuste de los parámetros de los indicadores e introducción de más indicadores suplementarios para mejorar el control de riesgos y mejorar al mismo tiempo la calidad de la rentabilidad.

Direcciones de optimización

Todavía hay espacio para una mayor optimización de la estrategia Triple SuperTrend y Stoch RSI:

  1. Ajuste los parámetros del indicador para obtener la mejor combinación.

  2. Introduzca el stop loss/take profit para un mejor control del riesgo. Esto puede mejorar enormemente la estabilidad de la estrategia.

  3. Incorporar más indicadores para la validación de la señal, por ejemplo, indicadores de volumen.

  4. Incorporar capacidades adaptativas para optimizar automáticamente los parámetros de acuerdo con la dinámica cambiante del mercado.

  5. Combinar algoritmos de aprendizaje automático para la predicción del rendimiento, evaluando la precisión de la señal.

Con la optimización continua, la estrategia Triple SuperTrend y Stoch RSI puede evolucionar en un sistema de negociación estable y eficiente, proporcionando un alfa considerable.

Conclusión

La estrategia Triple SuperTrend y Stoch RSI combina con éxito el análisis de múltiples marcos de tiempo y el juicio de sobrecompra / sobreventa en una estrategia de trading única. Conserva las dos ventajas de seguir la tendencia y filtrar indicadores, mejorando las señales rentables mientras disminuye las falsas señales. Aunque todavía existen riesgos y espacio de optimización, su rentabilidad y estabilidad pueden mejorarse aún más a través del ajuste de parámetros y la optimización de la estrategia. En general, la estrategia Triple SuperTrend y Stoch RSI proporciona una elección de estrategia de trading cuantitativa de alta calidad.


/*backtest
start: 2022-11-29 00:00:00
end: 2023-04-17 00:00:00
period: 1d
basePeriod: 1h
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/
// © M3RZI

//@version=4
strategy("3x Supertrend and Stoch RSI", overlay = true, max_bars_back = 1000)

//INPUTS
STATRLENGTH1 = input(10, title = "Fast Supertrend ATR Length", type = input.integer, group = "SUPERTREND SETTINGS")
STATRMULT1 = input(1, title = "Fast Supertrend ATR Multiplier", type = input.float, group = "SUPERTREND SETTINGS")
STATRLENGTH2 = input(11, title = "Medium Supertrend ATR Length", type = input.integer, group = "SUPERTREND SETTINGS")
STATRMULT2 = input(2, title = "Medium Supertrend ATR Multiplier", type = input.float, group = "SUPERTREND SETTINGS")
STATRLENGTH3 = input(12, title = "Slow Supertrend ATR Length", type = input.integer, group = "SUPERTREND SETTINGS")
STATRMULT3 = input(3, title = "Slow Supertrend ATR Multiplier", type = input.float, group = "SUPERTREND SETTINGS")

stochK = input(3, title = "K (Stochastic Fast)", type = input.integer, group = "STOCHASTIC RSI SETTINGS")
stochD = input(3, title = "D (Signal Line)", type = input.integer, group = "STOCHASTIC RSI SETTINGS")
rsiLength = input(14, title = "RSI Length", type = input.integer, group = "STOCHASTIC RSI SETTINGS")
stochLength = input(14, title = "Stochastic Length", type = input.integer, group = "STOCHASTIC RSI SETTINGS")
rsiSource = input(close, title = "RSI Source", type = input.source, group = "STOCHASTIC RSI SETTINGS")
stochRestrictions = input(false, title = "Restrict crosses to overbought/oversold territory", type = input.bool, group = "STOCHASTIC RSI SETTINGS")
overboughtLine = input(80, title = "Stochastic  RSI Upper Band", type = input.integer, group = "STOCHASTIC RSI SETTINGS")
oversoldLine = input(20, title = "Stochastic RSI Lower Band", type = input.integer, group = "STOCHASTIC RSI SETTINGS")

EMALength  = input(200, title = "EMA Length", type = input.integer, group = "EMA SETTINGS")

SLStrategy = input("ATR Based", title = "Stop Loss Strategy", options = ["ATR Based"],type = input.string, group = "POSITION EXIT SETTINGS")
SLATRLength = input(14, title = "Stop Loss ATR Length", type = input.integer, group = "POSITION EXIT SETTINGS")
SLATRMult = input(2.7, title = "Stop Loss ATR Multiplier", type = input.float, group = "POSITION EXIT SETTINGS")
TPStrategy = input("ATR Based", title = "Take Profit Strategy", options = ["ATR Based"],type = input.string, group = "POSITION EXIT SETTINGS")
TPATRLength = input(14, title = "Take Profit ATR Length", type = input.integer, group = "POSITION EXIT SETTINGS")
TPATRMult = input(1.6, title = "Take Profit ATR Multiplier", type = input.float, group = "POSITION EXIT SETTINGS")

//SUPERTRENDS
[superTrend1,dir1] = supertrend(STATRMULT1,STATRLENGTH1)
[superTrend2,dir2] = supertrend(STATRMULT2,STATRLENGTH2)
[superTrend3,dir3] = supertrend(STATRMULT3,STATRLENGTH3)

directionST1 = dir1 == 1 and dir1[1] == 1 ? false : dir1 == -1 and dir1[1] == -1 ? true : na
directionST2 = dir2 == 1 and dir2[1] == 1 ? false : dir2 == -1 and dir2[1] == -1 ? true : na
directionST3 = dir3 == 1 and dir3[1] == 1 ? false : dir3 == -1 and dir3[1] == -1 ? true : na

//STOCH RSI
rsi = rsi(rsiSource, rsiLength)
k = sma(stoch(rsi, rsi, rsi, stochLength), stochK)
d = sma(k, stochD)

//EMA
ema = ema(close,EMALength)

//CONDITIONS LONG AND SHORT

var long = false
var longCondition = false
var short = false
var shortCondition = false
var drawing = false
var TP = 0.0
var SL = 0.0
var middle = 0.0
var initial = 0

stopSize = atr(SLATRLength) * SLATRMult
profitSize = atr(TPATRLength) * TPATRMult
longStop = close - stopSize
longProfit = close + profitSize
current = close
shortStop = close + stopSize
shortProfit = close - profitSize
barInitial = bar_index

if  stochRestrictions
    longCondition := close > ema and ((directionST1 == true and directionST2 == true)  or (directionST2 == true and directionST3 == true)) and crossover(k,d) and k < oversoldLine and not long and not drawing
    shortCondition := close < ema and ((directionST1 == false and directionST2 == false)  or (directionST2 == false and directionST3 == false)) and crossunder(k,d) and k > overboughtLine and not short and not drawing
else
    longCondition := close > ema and ((directionST1 == true and directionST2 == true)  or (directionST2 == true and directionST3 == true)) and crossover(k,d) and not long and not drawing
    shortCondition := close < ema and ((directionST1 == false and directionST2 == false)  or (directionST2 == false and directionST3 == false)) and crossunder(k,d) and not short and not drawing

if longCondition
    long := true
    short := false
    drawing := true
    TP := longProfit
    middle := current
    SL := longStop
    initial := barInitial
    strategy.entry("Long", strategy.long, 10)
    strategy.exit("Long exit","Long", limit = TP, stop = SL)
    alert("Long signal Supertrend \n Profit:"+tostring(TP)+"\Curret price:"+tostring(close)+"\Stop:"+tostring(SL),alert.freq_once_per_bar_close)
    //label.new(bar_index,low,text = "Long\nTP:"+tostring(TP)+"\nSL:"+tostring(SL)+"\nAbierto:"+tostring(current), yloc = yloc.belowbar, textcolor = color.white, color = color.green, size = size.small,  style = label.style_label_up)

if shortCondition
    short := true
    long := false
    drawing := true
    TP := shortProfit
    middle := current
    SL := shortStop
    initial := barInitial
    strategy.entry("Short", strategy.short, 10)
    strategy.exit("Short exit","Short",limit = TP , stop = SL)
    alert("Short signal Supertrend \n Profit:"+tostring(TP)+"\Curret price:"+tostring(close)+"\Stop:"+tostring(SL),alert.freq_once_per_bar_close)
    //label.new(bar_index,high,text = "Short\nTP:"+tostring(TP)+"\nSL:"+tostring(SL)+"\nAbierto:"+tostring(current), yloc = yloc.abovebar, textcolor = color.white, color = color.red, size = size.small,  style = label.style_label_down)

if long and (high[1] >= TP or low[1] <= SL)
    drawing := false
    long := false
    if high[1] >= TP
        label.new(bar_index[int((bar_index - initial)/2)],TP, text = "Win (Long)", textcolor = color.white, color = color.green, size = size.small, style = label.style_label_down)
    else
        label.new(bar_index[int((bar_index - initial)/2)],SL, text = "Lose (Long)", textcolor = color.white, color = color.red, size = size.small, style = label.style_label_up)

if short and (low[1] <= TP or high[1] >= SL)
    drawing :=  false
    short := false
    if low[1] <= TP
        label.new(bar_index[int((bar_index - initial)/2)],TP, text = "Win (short)", textcolor = color.white, color = color.green, size = size.small, style = label.style_label_up)
    else
        label.new(bar_index[int((bar_index - initial)/2)],SL, text = "Lose (short)", textcolor = color.white, color = color.red, size = size.small, style = label.style_label_down)

//STRATEGY
//strategy.entry("buy", strategy.long, 10, when = longCondition)
//strategy.exit("bracket", "buy",  10, limit = TP, stop = SL)
//strategy.entry("short", strategy.long, 10, when = shortCondition)
//strategy.exit("bracket", "short",  10, limit = TP, stop = SL)

//DRAWING
plotshape(longCondition, title = "Long Signal", location=location.belowbar, style=shape.labelup, color=color.green, textcolor=color.white, size=size.small, text="Long")
plotshape(shortCondition, title = "Short Signal", location=location.abovebar, style=shape.labeldown, color=color.red, textcolor=color.white, size=size.small, text="Short")
profitLine = plot(drawing and drawing[1] ? TP : na, title = "Take profit", color = color.green, style = plot.style_linebr)
currentLine =plot(drawing and drawing[1]  ? middle : na, title = "Middle Line", color = color.white, style = plot.style_linebr)
lossLine = plot(drawing and drawing[1]  ? SL : na, title = "Stop Loss", color = color.red, style = plot.style_linebr)
fill(currentLine,profitLine, title = "Profit Background" ,color = color.new(color.green,75))
fill(currentLine,lossLine, title = "Loss Background" ,color = color.new(color.red,75))
plot(superTrend1, title = "Fast Supertrend", color = dir1 == 1 and dir1[1] == 1 ? color.red : dir1 == -1 and dir1[1] == -1 ? color.green : na)
plot(superTrend2, title = "Medium Supertrend", color = dir2 == 1 and dir2[1] == 1 ? color.red : dir2 == -1 and dir2[1] == -1 ? color.green : na)
plot(superTrend3, title = "Slow Supertrend", color = dir3 == 1 and dir3[1] == 1 ? color.red : dir3 == -1 and dir3[1] == -1 ? color.green : na)
plot(ema, title = "EMA",color = color.yellow)
//plot(k, color = color.blue)
//plot(d, color = color.orange)
//h1 = hline(80)
//h2 = hline(20)
//fill(h1,h2, color = color.new(color.purple,60))




Más.