Estratégia Triple SuperTrend e Stoch RSI

Autora:ChaoZhang, Data: 2023-12-06 14:29:00
Tags:

img

Resumo

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.

Estratégia lógica

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.

Vantagens da estratégia

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:

  1. 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.

  2. Apesar da diminuição da frequência do sinal, a proporção de sinais rentáveis vê uma melhoria significativa.

  3. 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.

  4. Os indicadores triplos permitem possibilidades mais amplas de otimização de parâmetros.

  5. 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.

Riscos da Estratégia

Há também alguns riscos associados à estratégia Triple SuperTrend e Stoch RSI:

  1. Diminuição da frequência do sinal. O mecanismo de filtro multicamadas diminui significativamente a frequência de negociação da estratégia.

  2. A natureza conservadora torna a estratégia susceptível de perder algumas oportunidades lucrativas.

  3. Aumento da dependência dos parâmetros. Mais indicadores significam maior dificuldade na otimização.

  4. 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.

Orientações de otimização

Ainda há espaço para a otimização da estratégia Triple SuperTrend e Stoch RSI:

  1. Ajustar os parâmetros do indicador para a melhor combinação.

  2. Introduzir stop loss/take profit para um melhor controlo do risco.

  3. Incorporar mais indicadores para validação do sinal, por exemplo, indicadores de volume.

  4. Construir capacidades adaptativas para otimizar automaticamente os parâmetros de acordo com a mudança da dinâmica do mercado.

  5. 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.

Conclusão

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))




Mais.