A estratégia Triple SuperTrend e Stoch RSI é uma estratégia de negociação quantitativa que combina a tendência de vários prazos do indicador SuperTrend e os sinais de sobrecompra/supervenda do indicador Stoch RSI. A estratégia utiliza três indicadores SuperTrend com configurações de parâmetros diferentes para determinar as tendências do mercado e combina os sinais Stoch RSI para filtrar os sinais comerciais. Especificamente, quando os dois indicadores SuperTrend mais rápidos dão sinais de compra / venda simultâneos, se o indicador Stoch RSI confirmar, as posições longas / curtas correspondentes serão tomadas.
A lógica central da estratégia Triple SuperTrend e Stoch RSI consiste em combinar indicadores SuperTrend com diferentes parâmetros e o indicador Stoch RSI para filtragem de sinais comerciais, a fim de melhorar a qualidade do sinal e reduzir os falsos sinais.
Em primeiro lugar, a estratégia adota três indicadores SuperTrend com configurações variadas de parâmetros para determinar a principal tendência do mercado. Os três indicadores SuperTrend têm parâmetros que variam de prazos rápidos a lentos, a fim de capturar mudanças de tendência em diferentes níveis. Quando os indicadores SuperTrend mais rápidos e segundos mais rápidos dão sinais de compra/venda simultâneos, fazemos um julgamento preliminar de que o sinal tem alguma confiabilidade.
Em segundo lugar, o indicador Stoch RSI é introduzido para determinar se o mercado está extremamente sobrecomprado ou sobrevendido quando o sinal ocorre. O indicador Stoch RSI combina os pontos fortes dos indicadores RSI e Estocástico, permitindo julgamentos eficazes sobre as condições de mercado sobrecompradas / sobrevendidas.
Através da combinação de múltiplos indicadores e prazos, a estratégia Triple SuperTrend e Stoch RSI pode efetivamente filtrar o ruído do mercado, melhorar a confiabilidade do sinal e reduzir as negociações incorretas.
A maior vantagem da estratégia Triple SuperTrend e Stoch RSI reside na combinação eficaz de múltiplos indicadores e prazos, o que traz os seguintes benefícios:
A combinação dos três indicadores SuperTrend e Stoch RSI pode diminuir muito o ruído e os falsos sinais que vêm com indicadores individuais.
Apesar da diminuição da frequência do sinal, a proporção de sinais rentáveis vê uma melhoria significativa.
Adequado para mercados de tendências. Filtragem de quadros de tempo múltiplos facilita a captura de tendências de médio a longo prazo, adequando-se bem aos ambientes de mercado de tendências.
Os indicadores triplos permitem possibilidades mais amplas de otimização de parâmetros.
Parâmetros personalizáveis que satisfazem o estilo de negociação pessoal. Os parâmetros podem ser ajustados livremente para se adequarem melhor ao próprio estilo de negociação.
Há também alguns riscos associados à estratégia Triple SuperTrend e Stoch RSI:
Diminuição da frequência do sinal. O mecanismo de filtro multicamadas diminui significativamente a frequência de negociação da estratégia.
A natureza conservadora torna a estratégia susceptível de perder algumas oportunidades lucrativas.
Aumento da dependência dos parâmetros. Mais indicadores significam maior dificuldade na otimização.
A combinação de vários prazos também restringe a flexibilidade da estratégia.
Para fazer face a estes riscos, podem ser adoptadas medidas de otimização, como o ajustamento dos parâmetros dos indicadores e a introdução de mais indicadores suplementares, para reforçar o controlo dos riscos, melhorando simultaneamente a qualidade da rendibilidade.
Ainda há espaço para a otimização da estratégia Triple SuperTrend e Stoch RSI:
Ajustar os parâmetros do indicador para a melhor combinação.
Introduzir stop loss/take profit para um melhor controlo do risco.
Incorporar mais indicadores para validação do sinal, por exemplo, indicadores de volume.
Construir capacidades adaptativas para otimizar automaticamente os parâmetros de acordo com a mudança da dinâmica do mercado.
Combinar algoritmos de aprendizagem de máquina para previsão de desempenho, avaliando a precisão do sinal.
Com otimização contínua, a estratégia Triple SuperTrend e Stoch RSI pode evoluir para um sistema de negociação estável e eficiente, fornecendo alfa considerável.
A estratégia Triple SuperTrend e Stoch RSI combina com sucesso a análise de vários prazos e o julgamento de sobrecompra / sobrevenda em uma estratégia de negociação única. Ele mantém as duplas vantagens de seguir tendências e filtrar indicadores, melhorando sinais lucrativos enquanto diminui sinais falsos. Embora ainda existam riscos e espaço de otimização, sua lucratividade e estabilidade podem ser melhoradas através do ajuste de parâmetros e otimização de estratégia.
/*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))