Samsuga SuperTrend Estratégia MACD

Autora:ChaoZhang, Data: 2024-03-11 11:24:20
Tags:

img

Resumo

Esta estratégia combina o indicador SuperTrend e o indicador MACD para capturar pequenas tendências para lucro. Ele usa o indicador SuperTrend para determinar a tendência atual do mercado e o indicador MACD como uma condição auxiliar para entrada e saída.

Princípio da estratégia

  1. Utilize a função ta.supertrend para calcular o indicador SuperTrend com parâmetros para o período ATR e fator multiplicador.
  2. Determine a tendência longa/curta com base nas alterações na direção do indicador SuperTrend.
  3. Utilize a função request.security para obter os valores do indicador MACD no período de 30 minutos, incluindo a linha MACD, a linha de sinal e o histograma.
  4. Em uma tendência de alta, se o histograma MACD for superior a 0, abrir uma posição longa e fechar qualquer posição curta anterior.
  5. Em uma tendência de baixa, se o histograma MACD for inferior a 0, abrir uma posição curta e fechar qualquer posição longa anterior.

Análise das vantagens

  1. Combina indicadores de tendência e de dinâmica, permitindo-lhe adaptar-se bem às diferentes condições de mercado.
  2. Utiliza um indicador MACD de prazo mais longo como condição auxiliar, que pode efetivamente filtrar alguns sinais falsos.
  3. A lógica da estratégia é simples e direta, fácil de entender e implementar, adequada para os iniciantes aprenderem.
  4. Os parâmetros da estratégia são ajustáveis e podem ser otimizados para diferentes mercados e instrumentos.

Análise de riscos

  1. A estratégia pode gerar sinais de negociação frequentes em mercados agitados, levando a uma alta frequência de negociação e custos de deslizamento.
  2. O indicador SuperTrend é sensível às definições dos parâmetros e os diferentes valores dos parâmetros podem produzir resultados diferentes.
  3. O indicador MACD pode apresentar divergências em relação ao preço, resultando em sinais de negociação errôneos.
  4. A estratégia não possui medidas de stop-loss, o que pode expô-la a um risco maior durante uma continuidade de tendência fraca ou eventos inesperados.

Direcção de otimização

  1. Considerar a adição de mais condições de filtragem, tais como a ruptura do preço através de níveis de suporte/resistência importantes, alterações no volume de negociação, etc., para melhorar a confiabilidade do sinal.
  2. Para mercados agitados, considere utilizar um indicador MACD de prazo mais curto ou outros indicadores adequados para mercados de intervalo para determinar a tendência.
  3. Incorporar medidas de stop-loss, tais como stop-loss de ponto fixo, trailing stop-loss, etc., para controlar o risco máximo por transação.
  4. Otimizar parâmetros para diferentes mercados e instrumentos para encontrar as combinações de parâmetros mais adequadas.

Conclusão

Ao combinar o indicador SuperTrend e o indicador MACD, esta estratégia capta pequenas tendências, considerando também a continuidade da tendência, tornando-se uma estratégia relativamente abrangente e equilibrada. Os pontos fortes da estratégia estão em sua lógica clara, facilidade de compreensão e implementação e no uso de um indicador MACD de prazo mais longo como condição auxiliar para filtrar efetivamente falsos sinais. No entanto, a estratégia também tem alguns riscos, como o potencial de negociação frequente em mercados agitados, sensibilidade às configurações de parâmetros e falta de medidas de stop-loss. Para enfrentar esses riscos, as melhorias podem ser feitas adicionando mais condições de filtragem, otimizando parâmetros, incorporando stop-losses, etc. No geral, esta estratégia pode servir como uma estrutura de estratégia básica que, com otimização e melhoria contínua, tem o potencial de se tornar uma estratégia consistentemente lucrativa.


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

//@version=5
strategy("Samsuga supertrend", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)


atrPeriod = input.int(7,    "ATR Length", minval = 1)
factor =    input.float(1.0, "Factor",     minval = 0.01, step = 0.01)

[supertrend, direction] = ta.supertrend(factor, atrPeriod)

supertrend := barstate.isfirst ? na : supertrend
upTrend =    plot(direction <= 0 ? supertrend : na, "Up Trend",   color = color.green, style = plot.style_linebr)
downTrend =  plot(direction <= 0 ? na : supertrend, "Down Trend", color = color.red,   style = plot.style_linebr)
bodyMiddle = plot(barstate.isfirst ? na : (open + close) / 2, "Body Middle",display = display.none)
longcondition = direction[1] > direction 
shortCondition = direction[1] < direction 

macdp1 = 3
macdp2=10
macdp3=6

[macdLine, signalLine, histLine] =request.security(symbol = syminfo.tickerid, timeframe = "30",expression = ta.macd(close,macdp1,macdp2,macdp3),lookahead=barmerge.lookahead_on)
// plot(macdLine,   title = "MACD",   color = #2962FF)
// plot(signalLine, title = "Signal", color = #FF6D00)
// 8, 21, 5
// 8,13,9
// 12,26,9
//  1--> 3, 17, 5
// 3, 10, 16
// log.info(str.tostring(syminfo.tickerid)+str.tostring(histLine[0]))
//  /////////----------------METHOD 1-----------------////////////////
// if(longcondition)
//     if(strategy.opentrades>0)
//         strategy.close("Long","Prev Exit", immediately = true)
//     if( histLine[0] > 0.1)
//         strategy.entry(id= "Long", direction=strategy.long,  comment = "update long")

    
// else if(shortCondition and strategy.openprofit<=0.1) 
//     strategy.close("Long",comment = "Close",immediately = true)
//  /////////----------------METHOD 2-----------------////////////////
// if(longcondition)
//     if(histLine[0] > 0)
//         strategy.entry(id= "Long", direction=strategy.long,  comment = "update long" )
//         strategy.exit("Long", loss = close*0.2)


    
// else if(shortCondition ) 
//     strategy.close("Long",comment = "Close",immediately = true)
//  /////////----------------METHOD 3-----------------////////////////
// log.info(str.tostring(syminfo.tickerid)+str.tostring(histLine[0]))
if(longcondition)
    if(histLine[0] > 0)    
        strategy.close("Short",comment = "E-S", alert_message = "E-S",disable_alert = true)
        strategy.entry(id= "Long", direction=strategy.long,  comment = "L",alert_message = "L")
else if(shortCondition) 
    if(histLine[0] < 0)    
        strategy.close("Long",comment = "E-L",alert_message = "E-L",disable_alert = true)
        strategy.entry(id= "Short", direction=strategy.short,  comment = "S",alert_message = "S")

Mais.