Estratégia de negociação quantitativa que combina RSI, MACD e suporte/resistência

Autora:ChaoZhang, Data: 2024-01-05 16:24:58
Tags:

img

Resumo

Esta estratégia é baseada nos indicadores RSI e MACD, combinados com níveis de suporte/resistência para julgamento de sinais comerciais. Seu nome é Panda Sticking Out Tongue estratégia. A estratégia usa o indicador RSI para determinar níveis de sobrecompra/supervenda, o indicador MACD para determinar tendências de alta/baixa, e desenha níveis de suporte/resistência com base nos preços mais altos e mais baixos nos últimos 100 períodos, gerando sinais de compra perto do suporte e sinais de venda perto da resistência.

Estratégia lógica

A estratégia baseia-se principalmente em dois indicadores - RSI e MACD. O indicador RSI julga os estados de sobrecompra / sobrevenda, enquanto o indicador MACD determina os estados de tendência de alta / baixa. Primeiro, ele calcula o valor do RSI de 14 períodos e define o limiar de sobrecompra como 70 e o limiar de sobrevenda como 30. Em seguida, ele calcula o valor do MACD com base na linha rápida de 12 dias, linha lenta de 26 dias e linha de sinal de 9 dias. RSI abaixo de 30 é considerado sobrevendo; RSI acima de 70 é considerado sobrecomprado.

Além disso, a estratégia também calcula os preços mais altos e mais baixos nos últimos 100 períodos como os níveis de suporte/resistência. Quando um sinal de compra é acionado, o preço precisa estar perto do nível de suporte, ou seja, dentro de 1% do nível de suporte, para efetivamente emitir uma ordem de compra. Da mesma forma, quando um sinal de venda é acionado, o preço precisa estar dentro de 1% abaixo do nível de resistência para efetivamente emitir uma ordem de venda.

Vantagens da estratégia

A estratégia combina análise de tendências e detecção de níveis de sobrecompra/supervenda para evitar sinais falsos dependendo apenas de um único indicador. Ao introduzir o filtro de suporte/resistência, pode reduzir os negócios errados devido a rebotes perto dos níveis principais de S/R. A combinação de MACD e RSI pode identificar com precisão os movimentos de preços e os estados OB/OS. Em comparação com as estratégias simples de média móvel, esta estratégia pode capturar tendências de preços de longo prazo de forma mais flexível.

Riscos da Estratégia

Os principais riscos desta estratégia incluem:

  1. Pode perder a maior parte dos lucros em tendências fortes, uma vez que tende a entrar após a reversão terminar.

  2. As configurações inadequadas dos parâmetros RSI e MACD podem causar sinais errados.

  3. A lógica de detecção S/R simples pode sobreestimar ou subestimar as zonas S/R reais.

  4. Falta de mecanismo de stop loss, incapaz de controlar efetivamente as perdas em condições extremas de mercado.

Para enfrentar estes riscos, métodos como MACD adaptativo, ajuste optimizado dos parâmetros do RSI, melhoria da identificação S/R, modelagem do regime de mercado, etc., podem ser utilizados para melhorar a estratégia.

Orientações para melhorar

A estratégia pode ser reforçada pelas seguintes dimensões:

  1. Introduzir mecanismos de stop loss, por exemplo, CANVAS stop loss

  2. Usar MACD adaptativo para ajuste de parâmetros dinâmicos

  3. Introduzir o reconhecimento de padrões de preços para uma identificação mais científica das S/R

  4. Incorporar mais dados para estabelecer a lógica de detecção do estado do mercado para utilizar diferentes parâmetros de forma adaptativa

  5. Usar algoritmos de aprendizagem de máquina para otimizar a estratégia de ponta a ponta

Através destas melhorias, podemos reduzir ainda mais a utilização e melhorar a estabilidade da estratégia.

Conclusão

A estratégia integra indicadores RSI e MACD para determinar os estados OB/OS e negociar em torno de níveis de suporte/resistência, representando uma abordagem de tendência. Ao incorporar o filtro de suporte/resistência, o risco é reduzido. A vantagem reside em sinais estáveis e risco controlável adequado para a detenção de longo prazo. Ainda alguns componentes, por exemplo, parâmetros do indicador, faixa S/R podem ser ajustados para melhorar a lucratividade.


/*backtest
start: 2023-12-28 00:00:00
end: 2024-01-04 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("RSI + MACD with Support and Resistance", shorttitle="RSI_MACD_SR", overlay=true)

// Input for RSI and MACD values
rsiOverbought = input(70, title="RSI Overbought Threshold")
rsiOversold = input(30, title="RSI Oversold Threshold")
macdFastLength = input(12, title="MACD Fast Length")
macdSlowLength = input(26, title="MACD Slow Length")
macdSignalSmoothing = input(9, title="MACD Signal Smoothing")

// Calculating RSI and MACD
rsiValue = ta.rsi(close, 14)
[macdLine, signalLine, _] = ta.macd(close, macdFastLength, macdSlowLength, macdSignalSmoothing)

// Support and Resistance
support = ta.lowest(100)
resistance = ta.highest(100)

// Drawing support and resistance lines
// line.new(x1=bar_index[0], y1=support, x2=bar_index[-1], y2=support, color=color.green, width=1)
// line.new(x1=bar_index[0], y1=resistance, x2=bar_index[-1], y2=resistance, color=color.red, width=1)

// Buy Condition: If RSI is oversold and MACD line crosses above the signal line
// Additionally, check if price is near the support line
longCondition = ta.crossover(macdLine, signalLine) and rsiValue < rsiOversold and (close - support) < (close * 0.01)
strategy.entry("Long", strategy.long, when=longCondition, comment="Buy")

// Sell Condition: If RSI is overbought and MACD line crosses below the signal line
// Additionally, check if price is near the resistance line
shortCondition = ta.crossunder(macdLine, signalLine) and rsiValue > rsiOverbought and (resistance - close) < (close * 0.01)
strategy.entry("Short", strategy.short, when=shortCondition, comment="Sell")

// Plot values on the chart for visualization
plotshape(series=longCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(series=shortCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")

Mais.