
A estratégia do triplo SuperTrend e Stoch RSI é uma estratégia de negociação quantitativa que combina o acompanhamento de tendências em vários períodos de tempo e o supermercado de indicadores de superaquecimento. A estratégia usa o indicador do SuperTrend com três diferentes configurações de parâmetros para determinar a tendência do mercado e combina o sinal de superaquecimento do indicador do Stoch RSI para emitir um sinal de negociação.
A lógica central da estratégia do triplo SuperTrend e Stoch RSI é a combinação de diferentes parâmetros do indicador SuperTrend e do indicador Stoch RSI para filtrar o sinal de negociação, a fim de melhorar a qualidade do sinal e reduzir a taxa de erro.
Em primeiro lugar, a estratégia usa três conjuntos de indicadores SuperTrend com diferentes parâmetros para determinar a tendência principal do mercado. Os três conjuntos de indicadores SuperTrend têm configurações de parâmetros diferentes, com intervalos de tempo que vão de rápido a lento, para capturar mudanças de tendência em diferentes níveis. Quando o indicador SuperTrend mais rápido e o segundo mais rápido emitem sinais de compra/venda ao mesmo tempo, julgamos preliminarmente que o sinal tem certa confiabilidade.
Em segundo lugar, a estratégia introduz um indicador Stoch RSI para determinar se o sinal está excessivamente sobrecomprado ou sobrevendido. O indicador Stoch RSI combina os benefícios do indicador Stochastic e do indicador Stochastic para determinar se o mercado está sobrecomprado ou sobrevendido. Se os sinais de SuperTrend mais rápido e mais rápido coincidirem com o indicador Stoch RSI, podemos emitir um sinal de compra/venda final.
Através da combinação de múltiplos indicadores e múltiplos períodos de tempo, as estratégias de SuperTrend triplo e Stoch RSI podem efetivamente filtrar o ruído do mercado, aumentar a confiabilidade dos sinais e reduzir a ocorrência de erros de negociação.
A maior vantagem da estratégia do triplo SuperTrend e Stoch RSI é a combinação eficaz de vários indicadores e vários prazos, o que nos traz os seguintes benefícios:
A combinação do indicador triplo SuperTrend com o indicador Stoch RSI pode reduzir significativamente o ruído e os sinais errôneos existentes em um único indicador.
Melhorar a taxa de ganho de sinal. Embora a frequência do sinal seja reduzida, a taxa de ganho de sinal será significativamente melhorada.
Adequado para mercados de tendência. O filtro de quadros de tempo múltiplos é útil para capturar tendências de linha média e longa, adequado para ambientes de mercado em que as tendências são mais evidentes.
É fácil obter melhores resultados com otimização de parâmetros. O triplo indicador oferece maior espaço de possibilidades para otimização de parâmetros.
Pode-se ajustar os parâmetros de acordo com o estilo pessoal. Pode-se ajustar os parâmetros de forma livre para que a estratégia seja mais adequada ao seu estilo de negociação.
As estratégias de três SuperTrend e Stoch RSI também apresentam alguns riscos, principalmente concentrados nos seguintes aspectos:
A frequência de sinais é reduzida. O mecanismo de filtragem de camadas permite uma redução significativa na frequência de negociação da estratégia.
É fácil perder sinais. A conservadoria da estratégia pode fazer com que seja fácil perder oportunidades potenciais.
A multiplicação de indicadores aumenta a dependência de parâmetros. Quanto mais indicadores e parâmetros, maior é a dificuldade de otimização da estratégia.
A combinação de vários prazos também limita a flexibilidade da estratégia para acompanhar as tendências.
Para os riscos acima mencionados, podemos otimizá-los ajustando os parâmetros do indicador, introduzindo mais indicadores auxiliares de julgamento, etc. Para que a estratégia controle o risco e, ao mesmo tempo, obtenha uma maior qualidade de lucro.
A estratégia de três SuperTrend e Stoch RSI ainda tem espaço para otimização, principalmente a partir de:
Ajustar o conjunto de parâmetros indicadores para encontrar a melhor correspondência de parâmetros. Pode-se introduzir mais testes de parâmetros indicadores para encontrar o parâmetro ótimo.
Aumentar a estratégia de stop loss e controlar o risco de uma única transação. Isso pode aumentar significativamente a estabilidade da estratégia.
A introdução de mais indicadores de julgamento para verificação de sinais. Por exemplo, a introdução de indicadores de volume de transação para julgamento de vários ângulos.
A adição de uma função de auto-adaptação permite que a estratégia otimize automaticamente e ajuste os parâmetros para se adaptar às mudanças do mercado.
Combinação de algoritmos de aprendizagem de máquina para fazer previsões. Utilização de algoritmos de IA para prever a precisão dos sinais indicadores.
Com otimização contínua, a estratégia de três RSI SuperTrend e Stoch pode crescer para uma estratégia de negociação quantitativa estável e eficiente, trazendo-nos um Alpha considerável.
A estratégia Triple SuperTrend e Stoch RSI combina com sucesso a análise de múltiplos quadros de tempo com o julgamento de overbought e oversold, formando uma estratégia de negociação de tipo de tendência única. Ao mesmo tempo, mantém a dupla vantagem de seguir a tendência e filtrar os indicadores, aumentando a proporção de sinais de lucro ao mesmo tempo em que reduz os sinais de ruído. Embora o risco e o espaço para otimização da estratégia permaneçam, sua lucratividade e estabilidade podem ser ainda mais aumentadas através do ajuste de parâmetros e otimização da 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))