Estratégia de controle de risco baseada em supertendência e MACD


Data de criação: 2024-03-11 11:24:20 última modificação: 2024-03-11 11:24:20
cópia: 0 Cliques: 699
1
focar em
1617
Seguidores

Estratégia de controle de risco baseada em supertendência e MACD

Visão geral

A estratégia combina o indicador de supertrend e o indicador MACD para obter lucros capturando pequenas tendências. A estratégia usa o indicador de supertrend para julgar a tendência atual do mercado, enquanto usa o indicador MACD como condição auxiliar de entrada e saída. A lógica da estratégia é clara, fácil de entender e implementar.

Princípio da estratégia

  1. A função ta.supertrend é usada para calcular o indicador de super-tendência com os parâmetros ATR e o fator multiplicador.
  2. A tendência de pluralidade é julgada com base na mudança de direção do indicador de tendência super, quando a direção muda de maior que 0 para menor que 0, é considerada uma tendência ascendente; ao contrário, é considerada uma tendência descendente.
  3. A função request.security é usada para obter os valores do indicador MACD em períodos de 30 minutos, incluindo linhas MACD, linhas de sinal e gráficos em coluna.
  4. Em uma tendência ascendente, se o MACD é maior que 0, abre mais posições e liquida as posições vazias anteriores.
  5. Em uma tendência de baixa, se o MACD for menor que 0, abre uma posição vazia e liquida as posições anteriores.

Análise de vantagens

  1. A combinação de rastreamento de tendências e indicadores de dinâmica permite uma melhor adaptação às diferentes condições de mercado.
  2. O uso de indicadores MACD de períodos mais longos como condição auxiliar pode filtrar de forma eficaz alguns sinais falsos.
  3. A lógica da estratégia é simples e clara, fácil de entender e implementar, adequada para os iniciantes.
  4. Os parâmetros da estratégia são ajustáveis e podem ser otimizados para diferentes mercados e variedades.

Análise de Riscos

  1. A estratégia pode levar a uma maior quantidade de sinais de negociação em mercados turbulentos, resultando em negociações frequentes e altos custos de ponto de deslizamento.
  2. O indicador de tendência super sensível a parâmetros, diferentes configurações de parâmetros podem obter resultados diferentes.
  3. Os indicadores MACD podem se desviar do preço, causando sinais de negociação errados.
  4. A falta de medidas de suspensão de prejuízos na estratégia pode acarretar um risco maior em situações de fraqueza contínua ou de emergência.

Direção de otimização

  1. Pode-se considerar a adição de mais condições de filtragem, como a quebra de preços de suporte ou resistência importantes, mudanças no volume de transação, etc., para aumentar a confiabilidade do sinal.
  2. Para os mercados de choque, pode-se considerar o uso de indicadores MACD de períodos mais curtos ou outros indicadores adequados para mercados de choque para julgar a tendência.
  3. Pode-se adicionar medidas de parada de perda, como parada de ponto fixo, parada móvel, etc., para controlar o máximo risco de uma única transação.
  4. Pode-se fazer otimização de parâmetros para diferentes mercados e variedades, para encontrar a combinação de parâmetros mais adequada.

Resumir

A estratégia é mais abrangente e equilibrada, considerando a continuidade da tendência ao mesmo tempo em que capta pequenas tendências, através da combinação de indicadores de supertrend e MACD. A vantagem da estratégia é a clareza lógica, a facilidade de compreensão e implementação, além de filtrar efetivamente alguns falsos sinais usando indicadores de MACD de períodos mais longos como condições auxiliares. Mas a estratégia também apresenta alguns riscos, como a possibilidade de negociações frequentes em mercados turbulentos, configuração de parâmetros mais sensíveis e falta de medidas de parada.

Código-fonte da estratégia
/*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")