Estratégia de SuperTendência Tríplice

Autora:ChaoZhang, Data: 2024-02-26 10:04:18
Tags:

img

Resumo

Esta é uma estratégia que toma decisões de negociação com base em três indicadores SuperTrend sobrepostos.

Estratégia lógica

A estratégia usa a função ta.supertrend() para calcular três indicadores de SuperTrend com configurações de parâmetros diferentes, a saber, SuperTrend1 com 10 dias e um multiplicador de 3, SuperTrend2 com 14 dias e um multiplicador de 2 e SuperTrend3 com 20 dias e um multiplicador de 2.5. Um sinal de compra é gerado quando o preço cruza acima de todas as três linhas SuperTrend. Um sinal de venda é gerado quando o preço cruza abaixo de todas as três linhas SuperTrend.

O indicador SuperTrend incorpora o indicador ATR para rastrear efetivamente as mudanças de tendência de preços.

Vantagens

  1. Mecanismo de filtro triplo evita sinais falsos e melhora a qualidade do sinal
  2. O próprio SuperTrend tem uma boa capacidade de redução de ruído
  3. Múltiplas combinações de hiperparâmetros podem ser configuradas para se adequarem a mais ambientes de mercado
  4. Bom desempenho histórico com elevado rácio retorno/risco

Riscos

  1. Múltiples sinais de filtragem podem perder algumas oportunidades
  2. Não tem um bom desempenho em diversos mercados
  3. Requer otimização de combinações de três conjuntos de hiperparâmetros
  4. O tempo de negociação concentrado é suscetível a eventos repentinos

Para reduzir os riscos, podem ser consideradas as seguintes medidas:

  1. Ajustar as condições de filtragem, manter um ou dois SuperTrends
  2. Adicionar estratégia de stop loss
  3. Otimizar hiperparâmetros para melhorar a taxa de vitória

Orientações de otimização

  1. Teste mais combinações de parâmetros para encontrar hiperparâmetros ideais
  2. Adicionar algoritmos de aprendizado de máquina para otimização de parâmetros em tempo real
  3. Adicionar estratégias de stop loss para controlar perdas individuais
  4. Incorporar outros indicadores para identificar tendências e intervalos
  5. Prorrogar o tempo de negociação para evitar riscos num único momento

Conclusão

Esta estratégia toma decisões com base em três SuperTrends sobrepostas, que podem identificar efetivamente a direção da tendência. Tem vantagens como alta qualidade de sinal e parâmetros configuráveis. Ao mesmo tempo, também há certos riscos. Parâmetros e tempo de saída precisam ser ajustados para se adaptar a diferentes ambientes de mercado.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Combined Supertrend Strategy - Ajit Prasad', overlay=true)

// Function to calculate Supertrend
supertrendFunc(atrLength, factor) =>
    [supertrend, direction] = ta.supertrend(factor, atrLength)
    [supertrend, direction]

// Input parameters for the first Supertrend
atrPeriod1 = input(10, 'ATR Length 1')
factor1 = input(3, 'Factor 1')

// Calculate the first Supertrend
[supertrend1, direction1] = supertrendFunc(atrPeriod1, factor1)

// Input parameters for the second Supertrend
atrPeriod2 = input(14, 'ATR Length 2') // Change values as needed
factor2 = input(2, 'Factor 2') // Change values as needed

// Calculate the second Supertrend
[supertrend2, direction2] = supertrendFunc(atrPeriod2, factor2)

// Input parameters for the third Supertrend
atrPeriod3 = input(20, 'ATR Length 3') // Change values as needed
factor3 = input(2.5, 'Factor 3') // Change values as needed

// Calculate the third Supertrend
[supertrend3, direction3] = supertrendFunc(atrPeriod3, factor3)

// Define market opening and closing times
marketOpenHour = 9
marketOpenMinute = 15
marketCloseHour = 15
marketCloseMinute = 30
exitTimeHour = 15
exitTimeMinute = 10

// Fetch historical close values using security function
histClose = request.security(syminfo.tickerid, "D", close)

// Buy condition
buyCondition = close > supertrend1 and close > supertrend2 and close > supertrend3 and close[1] <= supertrend1[1]

// Sell condition
sellCondition = close < supertrend1 and close < supertrend2 and close < supertrend3 and close[1] >= supertrend1[1]

// Exit conditions
buyExitCondition = close < supertrend1[1] or close < supertrend2[1] or close < supertrend3[1]
sellExitCondition = close > supertrend1[1] or close > supertrend2[1] or close > supertrend3[1]

// Execute orders with market timing
if true
    // Buy condition without 'and not'
    strategy.entry('Buy', strategy.long, when = buyCondition)

    // Sell condition without 'and not'
    strategy.entry('Sell', strategy.short, when = sellCondition)

    // Close conditions
    strategy.close('Buy', when = buyExitCondition )
    strategy.close('Sell', when = sellExitCondition)

// Close all trades at 3:10 pm IST
if true
    strategy.close_all()

// Plot Supertrends
plot(supertrend1, 'Supertrend 1', color=color.new(color.green, 0), style=plot.style_linebr)
plot(supertrend2, 'Supertrend 2', color=color.new(color.red, 0), style=plot.style_linebr)
plot(supertrend3, 'Supertrend 3', color=color.new(color.blue, 0), style=plot.style_linebr)

// Plot labels
plotshape(buyCondition, style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), size=size.large, text='Buy Signal', textcolor=color.new(color.white, 0))
plotshape(sellCondition, style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), size=size.large, text='Sell Signal', textcolor=color.new(color.white, 0))

Mais.