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.
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.
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:
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.
A pesar de la disminución de la frecuencia de la señal, la proporción de señales rentables ve una mejora significativa.
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.
La optimización fácil para un mejor rendimiento. Los indicadores triples permiten mayores posibilidades de optimización de parámetros.
Parámetros personalizables que se adaptan al estilo personal de negociación.
También hay algunos riesgos asociados con la estrategia Triple SuperTrend y Stoch RSI:
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.
La naturaleza conservadora hace que la estrategia pueda perder algunas oportunidades rentables.
Aumento de la dependencia de los parámetros. Más indicadores significa mayor dificultad en la optimización.
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.
Todavía hay espacio para una mayor optimización de la estrategia Triple SuperTrend y Stoch RSI:
Ajuste los parámetros del indicador para obtener la mejor combinación.
Introduzca el stop loss/take profit para un mejor control del riesgo. Esto puede mejorar enormemente la estabilidad de la estrategia.
Incorporar más indicadores para la validación de la señal, por ejemplo, indicadores de volumen.
Incorporar capacidades adaptativas para optimizar automáticamente los parámetros de acuerdo con la dinámica cambiante del mercado.
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.
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))