
A estratégia é uma combinação de estratégias que utilizam o RSI, o MACD e as médias móveis. Ele combina o sinal de supercompra do RSI, a sensibilidade do MACD e o efeito do indicador das médias móveis para determinar o momento de entrada no mercado.
A estratégia baseia-se em quatro critérios:
A estratégia se encerra quando as seguintes duas condições de saída são preenchidas:
Assim, a estratégia de parar o prejuízo no momento da retirada dos lucros evita grandes perdas.
A maior vantagem da estratégia reside na combinação de indicadores, que exercem as vantagens de cada indicador, especificamente:
A estratégia tem dois riscos principais:
O maior risco para estratégias de tendência, como as médias móveis, é o maior retorno causado pela reversão do mercado. O retorno pode ser controlado ativamente reduzindo o tamanho da posição e a configuração de parada de perda.
Otimizar os parâmetros é muito difícil. A configuração e otimização dos parâmetros da estratégia de combinação de múltiplos indicadores são muito difíceis. Pode-se usar métodos de otimização de parâmetros, como algoritmos passo a passo e genéticos, para determinar os parâmetros ótimos.
A estratégia pode ser melhorada nos seguintes aspectos:
Adição de condições adicionais para filtrar ainda mais os falsos sinais. Por exemplo, a combinação de indicadores de volume de transação, indicadores de volatilidade, etc.
Teste as diferenças de configuração de parâmetros de diferentes variedades. Ajuste os parâmetros para mais variedades.
Optimizar a configuração dos parâmetros da média móvel. Teste as diferenças entre os parâmetros de diferentes comprimentos.
O estudo usava uma média móvel adaptativa que mudava de combinação de parâmetros de acordo com a situação do mercado.
Esta estratégia é, em geral, uma versão otimizada da típica estratégia de acompanhamento de tendências e médias móveis. Ela absorve os benefícios de vários indicadores principais, como MACD, RSI, e é única em determinar o tempo de entrada e parada.
/*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")