Esta estratégia combina o indicador de impulso MACD com o indicador de sobrecompra / sobrevenda RSI. Quando o MACD cruza para cima ou para baixo, verifica se o RSI também completa a reversão inferior/superior correspondente durante o período de retrospectiva para gerar sinais de negociação mais confiáveis.
Calcule o MACD DIFF, DEA e histograma. O cruzamento do DIFF acima do DEA dá sinal de cruzamento de alta e o cruzamento abaixo dá sinal de cruzamento de morte.
Calcule o RSI para identificar rebotes de sobrevenda e vendas de sobrecompra.
Quando ocorre um cruzamento de alta do MACD, se o RSI se recuperou de uma sobrevenda dentro da janela de retrocesso, é gerado um sinal longo.
O valor da posição em risco deve ser definido como o valor da posição em risco.
O MACD identifica de forma sensível as mudanças de tendência.
Requerendo ambos os sinais MACD e RSI filtra sinais falsos.
A janela de retrospecção melhora a fiabilidade do sinal.
O stop loss ajuda na gestão de riscos.
O atraso do MACD e do RSI pode causar entradas ótimas perdidas.
Menor probabilidade de sinal de indicador duplo significa menos negociações.
Não considerar uma direcção de tendência mais ampla corre o risco de ficar preso.
A regulação da perda de parada pode ser demasiado larga ou demasiado apertada.
Soluções possíveis:
Ajustar os parâmetros MACD e RSI para reduzir o atraso.
Ampliar os intervalos de limiar do indicador para fornecer mais sinais.
Adicionar um filtro de tendência para evitar entradas contra tendência.
Teste diferentes parâmetros de stop loss para níveis ideais.
Teste a SMA e outras médias móveis.
Adicione stop loss para paradas flexíveis.
Incorporar a força da tendência para julgar a qualidade da entrada.
Usar aprendizagem de máquina para prever os movimentos dos indicadores.
Combine mais fatores para otimizar o tempo de entrada.
Esta estratégia filtra sinais de reversão confiáveis usando MACD e RSI coordenados. A lógica é clara e os parâmetros flexíveis para melhorias como seleção de indicadores, filtros de tendência, técnicas de stop loss etc. para adquirir mais negócios mantendo a estabilidade, mas os riscos de otimização excessiva precisam ser evitados.
/*backtest start: 2023-08-24 00:00:00 end: 2023-09-23 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 //based on Range Strat - MACD/RSI // strategy("MACD/RSI - edited", // overlay=true, // default_qty_type=strategy.percent_of_equity, // default_qty_value=10, precision=2, initial_capital=100000, // pyramiding=2, // commission_value=0.05) //Backtest date range StartDate = input(timestamp("13 Jun 2022"), title="Start Date") EndDate = input(timestamp("13 Jun 2024"), title="Start Date") inDateRange = true // RSI Input Settings rsisrc = input(title="RSI Source", defval=close, group="RSI Settings") length = input(title="Length", defval=14, group="RSI Settings" ) overSold = input(title="Over Sold Threshold", defval=30, group="RSI Settings" ) overBought = input(title="Over Bought Threshold", defval=70, group="RSI Settings" ) rsi_lookback = input(title="RSI cross lookback period", defval=7, group="RSI Settings") // Calculating RSI vrsi = ta.rsi(rsisrc, length) co = ta.crossover(vrsi, overSold) cu = ta.crossunder(vrsi, overBought) // Function looking for a happened condition during lookback period f_somethingHappened(_cond, _lookback) => bool _crossed = false for i = 1 to _lookback if _cond[i] _crossed := true _crossed coCheck = f_somethingHappened(co, rsi_lookback) cuCheck = f_somethingHappened(cu, rsi_lookback) // MACD Input Settings macdsrc = input(title="MACD Source", defval=close, group="MACD Settings") fast_length = input(title="Fast Length", defval=12, group="MACD Settings") slow_length = input(title="Slow Length", defval=26, group="MACD Settings") signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 50, defval = 9, group="MACD Settings") sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"], group="MACD Settings") sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"], group="MACD Settings") // Calculating MACD fast_ma = sma_source == "SMA" ? ta.sma(macdsrc, fast_length) : ta.ema(macdsrc, fast_length) slow_ma = sma_source == "SMA" ? ta.sma(macdsrc, slow_length) : ta.ema(macdsrc, slow_length) macd = fast_ma - slow_ma signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length) delta = macd - signal MACDcrossover = ta.crossover(delta, 0) MACDcrossunder = ta.crossunder(delta, 0) // Stop Loss Input Settings longLossPerc = input(title="Long Stop Loss (%)", defval=15, group="Stop Loss Settings") * 0.01 shortLossPerc = input(title="Short Stop Loss (%)", defval=15, group="Stop Loss Settings") * 0.01 // Calculating Stop Loss longStopPrice = strategy.position_avg_price * (1 - longLossPerc) shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc) // Strategy Entry if (not na(vrsi)) if (inDateRange and MACDcrossover and coCheck) strategy.entry("LONG", strategy.long, comment="LONG") if (inDateRange and MACDcrossunder and cuCheck) strategy.entry("SHORT", strategy.short, comment="SHORT") // Submit exit orders based on calculated stop loss price if (strategy.position_size > 0) strategy.exit(id="LONG STOP", stop=longStopPrice) if (strategy.position_size < 0) strategy.exit(id="SHORT STOP", stop=shortStopPrice)