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.
A estratégia avalia principalmente as seguintes quatro condições para decidir a entrada longa:
Quando estiverem preenchidas as seguintes duas condições de saída, a estratégia fechará as posições para parar perdas:
Assim, a estratégia suspende as perdas em tempo hábil e evita perdas enormes quando se obtém lucro ou retracement.
A maior vantagem desta estratégia reside na combinação de indicadores, dando pleno aproveitamento aos méritos de cada indicador:
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.
A sensibilidade do indicador do histograma MACD garante a captura atempada dos pontos de inflexão.
As médias móveis filtram o ruído do mercado a curto prazo e dão todo o efeito ao efeito do indicador.
Os principais riscos desta estratégia incluem:
O maior risco de média móvel como estratégias de tendência é o grande pullback causado pela reversão da tendência.
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.
A estratégia pode ser ainda melhorada nos seguintes aspectos:
Aumentar os filtros adicionais para evitar ainda mais sinais falsos, por exemplo, combinar com indicadores de volume, volatilidade, etc.
Diferenças de parâmetros de ensaio adequadas a mais produtos. Ajustar parâmetros para adaptar mais variedades.
Otimizar as definições dos parâmetros da média móvel.
Pesquise médias móveis adaptativas, altere diferentes conjuntos de parâmetros baseados em regimes de mercado.
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")