O recurso está a ser carregado... Carregamento...

Estratégia de impulso do RSI cruzado de média móvel dupla com sistema de otimização risco-recompensa

Autora:ChaoZhang, Data: 2024-11-12 16:00:58
Tags:SMARSIATRRR

img

Resumo

Esta é uma estratégia de negociação quantitativa que combina dupla média móvel crossover, condições de sobrecompra/supervenda RSI e gestão da relação risco-recompensa. A estratégia determina a direção da tendência do mercado através de crossovers de média móvel de curto e longo prazo, enquanto usa o indicador RSI para identificar zonas de sobrecompra/supervenda para filtragem de sinais comerciais mais precisa.

Princípios de estratégia

A estratégia emprega médias móveis de 9 dias e 21 dias como base para a determinação da tendência, com os indicadores RSI zonas sobrecompradas / sobrevendidas (35/65) para confirmação do sinal. As condições de entrada longa exigem o MA de curto prazo acima do MA de longo prazo e do RSI em território sobrevendido (abaixo de 35); a entrada curta requer o MA de curto prazo abaixo do MA de longo prazo e do RSI em território sobrecomprado (acima de 65). A estratégia usa 1,5 vezes o valor do ATR para a distância de stop-loss e calcula automaticamente metas de lucro com base em uma relação risco-recompensa de 2: 1.

Vantagens da estratégia

  1. Mecanismo de confirmação de sinais múltiplos melhora significativamente a fiabilidade do comércio
  2. As configurações dinâmicas de stop-loss adaptam-se à volatilidade do mercado
  3. Auxílios fixos em termos de rácio risco/benefício para uma rendibilidade estável a longo prazo
  4. O período mínimo de detenção evita efetivamente o excesso de negociação
  5. O sistema de marcação visual facilita a monitorização da estratégia e a análise dos backtests
  6. Mudanças de cor de fundo mostram o status da posição atual de forma intuitiva

Riscos estratégicos

  1. O sistema de dupla MA pode gerar falsos sinais em mercados variados
  2. O indicador RSI pode perder oportunidades de negociação em tendências fortes
  3. O rácio risco-retorno fixo pode não ser flexível em determinadas condições de mercado
  4. As paradas do ATR podem não responder suficientemente rapidamente a picos de volatilidade
  5. Período mínimo de detenção pode causar oportunidades de stop-loss perdidas

Orientações para a otimização da estratégia

  1. Introduzir a selecção de períodos de média móvel adaptativa com base nas condições de mercado
  2. Adicionar filtros de força de tendência para melhorar a qualidade do sinal
  3. Desenvolver um sistema dinâmico de ajustamento do rácio risco-retorno para diferentes ambientes de mercado
  4. Integrar indicadores de volume para melhorar a fiabilidade do sinal
  5. Adicionar módulo de análise de volatilidade de mercado para otimizar o tempo de negociação
  6. Incorporar algoritmos de aprendizagem de máquina para otimização de parâmetros

Resumo

Esta estratégia constrói um sistema de negociação relativamente completo através da coordenação de múltiplos indicadores técnicos. Ele se concentra não apenas na qualidade do sinal de entrada, mas também na gestão de riscos e na definição de metas de lucro.


/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-31 23:59:59
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("JakeJohn", overlay=true)

// Input parameters
smaShortLength = input(9, title="Short SMA Length")
smaLongLength = input(21, title="Long SMA Length")
lengthRSI = input(14, title="RSI Length")
rsiOverbought = input(65, title="RSI Overbought Level")
rsiOversold = input(35, title="RSI Oversold Level")
riskRewardRatio = input(2, title="Risk/Reward Ratio") // 2:1
atrMultiplier = input(1.5, title="ATR Multiplier") // Multiplier for ATR to set stop loss

// Calculate indicators
smaShort = ta.sma(close, smaShortLength)
smaLong = ta.sma(close, smaLongLength)
rsi = ta.rsi(close, lengthRSI)
atr = ta.atr(14)

// Entry conditions
longCondition = (smaShort > smaLong) and (rsi < rsiOversold) // Buy when short SMA is above long SMA and RSI is oversold
shortCondition = (smaShort < smaLong) and (rsi > rsiOverbought) // Sell when short SMA is below long SMA and RSI is overbought

// Variables for trade management
var float entryPrice = na
var float takeProfit = na
var int entryBarIndex = na

// Entry logic for long trades
if (longCondition and (strategy.position_size == 0))
    entryPrice := close
    takeProfit := entryPrice + (entryPrice - (entryPrice - (atr * atrMultiplier))) * riskRewardRatio
    strategy.entry("Buy", strategy.long)
    entryBarIndex := bar_index // Record the entry bar index
    label.new(bar_index, high, "BUY", style=label.style_label_up, color=color.green, textcolor=color.white, size=size.small)

// Entry logic for short trades
if (shortCondition and (strategy.position_size == 0))
    entryPrice := close
    takeProfit := entryPrice - (entryPrice - (entryPrice + (atr * atrMultiplier))) * riskRewardRatio
    strategy.entry("Sell", strategy.short)
    entryBarIndex := bar_index // Record the entry bar index
    label.new(bar_index, low, "SELL", style=label.style_label_down, color=color.red, textcolor=color.white, size=size.small)

// Manage trade duration and exit after a minimum of 3 hours
if (strategy.position_size != 0)
    // Check if the trade has been open for at least 3 hours (180 minutes)
    if (bar_index - entryBarIndex >= 180) // 3 hours in 1-minute bars
        if (strategy.position_size > 0)
            strategy.exit("Take Profit Long", from_entry="Buy", limit=takeProfit)
        else
            strategy.exit("Take Profit Short", from_entry="Sell", limit=takeProfit)

// Background colors for active trades
var color tradeColor = na
if (strategy.position_size > 0)
    tradeColor := color.new(color.green, 90) // Light green for long trades
else if (strategy.position_size < 0)
    tradeColor := color.new(color.red, 90) // Light red for short trades
else
    tradeColor := na // No color when no trade is active

bgcolor(tradeColor, title="Trade Background")

// Plotting position tools
if (strategy.position_size > 0)
    // Plot long position tool
    strategy.exit("TP Long", limit=takeProfit)
    
if (strategy.position_size < 0)
    // Plot short position tool
    strategy.exit("TP Short", limit=takeProfit)

// Plotting indicators
plot(smaShort, color=color.green, title="Short SMA", linewidth=2)
plot(smaLong, color=color.red, title="Long SMA", linewidth=2)

// Visual enhancements for RSI
hline(rsiOverbought, "Overbought", color=color.red)
hline(rsiOversold, "Oversold", color=color.green)
plot(rsi, color=color.blue, title="RSI", linewidth=2)

// Ensure there's at least one plot function
plot(close, color=color.black, title="Close Price", display=display.none) // Hidden plot for compliance


Relacionados

Mais.