Melhoria da estratégia de média móvel do RSI MACD

Autora:ChaoZhang, Data: 2024-01-05 16:11:23
Tags:

img

Resumo

Esta é uma estratégia combinada que utiliza RSI, MACD e médias móveis. Incorpora os sinais de sobrecompra / sobrevenda do RSI, a sensibilidade do MACD e o efeito indicador das médias móveis ao determinar pontos de entrada.

Estratégia lógica

A estratégia avalia principalmente as seguintes quatro condições para decidir a entrada longa:

  1. O histograma MACD é superior ao nível de entrada longo definido;
  2. O RSI é superior a 50, indicando estado de sobrecompra;
  3. A EMA de curto prazo cruza a EMA de longo prazo, formando uma cruz de ouro;
  4. O preço de fechamento rompe a EMA de longo prazo e é superior à EMA de longo prazo mais o intervalo de stop loss ATR.

Quando estiverem preenchidas as seguintes duas condições de saída, a estratégia fechará as posições para parar perdas:

  1. O histograma MACD é inferior ao nível de stop loss definido;
  2. A EMA de curto prazo cruza abaixo da EMA de longo prazo, formando uma cruz morta.

Assim, a estratégia suspende as perdas em tempo hábil e evita perdas enormes quando se obtém lucro ou retracement.

Análise das vantagens

A maior vantagem desta estratégia reside na combinação de indicadores, dando pleno aproveitamento aos méritos de cada indicador:

  1. A aplicação do RSI evita a perda de comissões de transação causada pela abertura repetida de posições em mercados de intervalo.

  2. A sensibilidade do indicador do histograma MACD garante a captura atempada dos pontos de inflexão.

  3. As médias móveis filtram o ruído do mercado a curto prazo e dão todo o efeito ao efeito do indicador.

Riscos e soluções

Os principais riscos desta estratégia incluem:

  1. O maior risco de média móvel como estratégias de tendência é o grande pullback causado pela reversão da tendência.

  2. Dificuldade na otimização de parâmetros. Estratégias combinadas de múltiplos indicadores têm maior dificuldade na configuração e otimização de parâmetros. Métodos como walk forward, algoritmo genético podem ser adotados para parâmetros otimizados.

Orientações para a melhoria

A estratégia pode ser ainda melhorada nos seguintes aspectos:

  1. Aumentar os filtros adicionais para evitar ainda mais sinais falsos, por exemplo, combinar com indicadores de volume, volatilidade, etc.

  2. Diferenças de parâmetros de ensaio adequadas a mais produtos. Ajustar parâmetros para adaptar mais variedades.

  3. Otimizar as definições dos parâmetros da média móvel.

  4. Pesquise médias móveis adaptativas, altere diferentes conjuntos de parâmetros baseados em regimes de mercado.

Conclusão

Em conclusão, esta estratégia é uma versão tipicamente otimizada da média móvel e da estratégia de tendência. Absorve os pontos fortes de indicadores convencionais como MACD e RSI em aspectos de entrada de tempo e parada de perda. Os próximos passos podem ser melhorias de perspectivas como otimização de parâmetros e controle de risco para tornar a estratégia mais robusta e adaptável a mais produtos, resultando em maior estabilidade.


/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Improved RSI MACD Strategy with Moving Averages", overlay=true)

// Inputs
src = input(close, title="RSI Source")

// RSI Settings
lengthRSI = input.int(14, minval=1)

// Stop Loss Settings
stopLossPct = input.float(0.09, title="Stop Loss Percentage")
takeProfitPct = input.float(0.15, title="Take Profit Percentage")

// MACD Settings
fastlen = input(12)
slowlen = input(26)
siglen = input(9)

// Strategy Settings
longEntry = input(0, title="Long Entry Level")
exitLevel = input(0, title="Exit Level")

// EMA Settings
emaShortLength = input(8, title="Short EMA Length")
emaLongLength = input(21, title="Long EMA Length")

atrMultiplier = input.float(2, title="atrMultiplier")
atrLength = input.int(20, title="atrLength")

// Indicators
rsi1 = ta.rsi(src, lengthRSI)
[macd, signal, hist] = ta.macd(src, fastlen, slowlen, siglen)

// Calculate EMAs
emaShort = ta.ema(src, emaShortLength)
emaLong = ta.ema(src, emaLongLength)

// Calculate ATR
atr = ta.atr(atrLength)

// Variables
var bool canEnterLong = na

// Strategy conditions
longCondition = hist > longEntry and rsi1 > 50 and emaShort > emaLong and close > emaLong + atrMultiplier * atr

// Entries and Exits
if hist < exitLevel and emaShort < emaLong
    canEnterLong := true
    strategy.close("Long")
    
// Store last entry price
var lastEntryPrice = float(na)
var lastEntryPrice2 = float(na)
if longCondition
    strategy.entry("Long", strategy.long)
    canEnterLong := false
    lastEntryPrice := close
if lastEntryPrice < close
    lastEntryPrice := close
// Calculate Stop Loss and Take Profit Levels based on last entry price
stopLossLevel = lastEntryPrice * (1 - stopLossPct)

// Check for stop loss and take profit levels and close position if triggered
if (strategy.position_size > 0)
    last_buy = strategy.opentrades[0]
    if (close < stopLossLevel)
        strategy.close("Long", comment="Stop Loss Triggered")
    if (close * (1 - takeProfitPct) > strategy.opentrades.entry_price(strategy.opentrades - 1) )
        strategy.close("Long", comment="Take Profit Triggered")

Mais.