Estratégia do índice de força relativa média móvel

Autora:ChaoZhang, Data: 2023-11-28 14:07:46
Tags:

img

Resumo

A Estratégia do Índice de Força Relativa da Média Móvel é uma estratégia quantitativa de negociação que utiliza as linhas médias móveis e o Índice de Força Relativa (RSI) como sinais de negociação para capturar oportunidades nas tendências do mercado.

Estratégia lógica

Esta estratégia baseia-se principalmente em dois indicadores:

  1. Média móvel simples (SMA): reflete a tendência média dos preços.
  2. Relative Strength Index (RSI): reflete a força ou fraqueza do desempenho dos preços.

A lógica central da estratégia é a seguinte:

Quando a linha do indicador RSI está abaixo da linha da média móvel, ela está na região de sobrevenda e indica que o estoque está subestimado, gerando um sinal de compra.

Em outras palavras, a linha da média móvel reflete o justo valor da ação até certo ponto, enquanto o indicador RSI representa a força ou fraqueza atual do preço.

Especificamente, esta estratégia gera sinais de negociação através das seguintes etapas:

  1. Calcule o valor do RSI e a média móvel simples do preço das ações.
  2. Comparar a relação entre o valor do RSI e a linha da média móvel.
  3. Um sinal de venda é gerado quando a linha RSI cruza acima da linha da média móvel.
  4. Um sinal de compra é desencadeado quando a linha RSI cruza abaixo da linha da média móvel.
  5. Configurar stop loss e trailing stop para controlar os riscos.

Vantagens da estratégia

Ao combinar o julgamento da tendência das médias móveis e a indicação de sobrecompra/supervenda do RSI, esta estratégia pode determinar efetivamente os pontos de inflexão no mercado alavancando os pontos fortes de diferentes indicadores.

As principais vantagens são:

  1. As médias móveis podem indicar efetivamente as tendências dos preços.
  2. O RSI pode refletir condições de sobrecompra/supervenda.
  3. A combinação de dois indicadores melhora a precisão da identificação dos pontos de virada do mercado.
  4. O stop loss pode ser utilizado para controlar os riscos.

Riscos da Estratégia

Há também alguns riscos com esta estratégia:

  1. Há uma probabilidade de sinais falsos dos indicadores, o que pode causar perdas desnecessárias.
  2. O stop loss pode ser desencadeado durante oscilações violentas do mercado, levando a grandes perdas.
  3. Ajustes de parâmetros inadequados também podem afetar o desempenho da estratégia.

Para gerir os riscos, as otimizações podem ser feitas das seguintes maneiras:

  1. Ajustar os parâmetros da média móvel e do RSI para tornar os sinais do indicador mais fiáveis.
  2. Definição de um limite de perda adequadamente mais amplo para evitar um disparo demasiado frequente.
  3. Adotar um stop loss dinâmico para tornar o stop loss mais flexível.

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

Outras orientações de otimização incluem:

  1. Teste diferentes combinações de parâmetros em diferentes prazos para encontrar parâmetros ideais.
  2. Adicionar outros indicadores como volume para filtro para melhorar a confiabilidade do sinal.
  3. Otimizar as estratégias de stop loss para tornar a stop loss mais dinâmica e razoável.
  4. Incorporar modelos de aprendizagem profunda para otimização de parâmetros adaptativos.
  5. Adicionar um módulo de dimensionamento de posições para ajustar dinamicamente as posições com base nas condições do mercado.

Através da otimização de parâmetros, otimização de indicadores, otimização de gestão de riscos, etc., a estabilidade e rentabilidade desta estratégia podem ser continuamente melhoradas.

Conclusão

A estratégia de RSI de média móvel utiliza a tendência de preços e a análise de sobrecompra/supervenda para identificar efetivamente pontos de virada do mercado e capturar oportunidades de reversão.


/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-24 06:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2

strategy(title = "RSI versus SMA", shorttitle = "RSI vs SMA", overlay = false, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, currency = currency.GBP)

// Revision:        1
// Author:          @JayRogers
//
// *** USE AT YOUR OWN RISK ***
// - Nothing is perfect, and all decisions by you are on your own head. And stuff.
//
// Description:
//  - It's RSI versus a Simple Moving Average.. Not sure it really needs much more description.
//  - Should not repaint - Automatically offsets by 1 bar if anything other than "open" selected as RSI source.

// === INPUTS ===
// rsi
rsiSource   = input(defval = open, title = "RSI Source")
rsiLength   = input(defval = 8, title = "RSI Length", minval = 1)
// sma
maLength    = input(defval = 34, title = "MA Period", minval = 1)
// invert trade direction
tradeInvert = input(defval = false, title = "Invert Trade Direction?")
// risk management
useStop     = input(defval = false, title = "Use Initial Stop Loss?")
slPoints    = input(defval = 25, title = "Initial Stop Loss Points", minval = 1)
useTS       = input(defval = true, title = "Use Trailing Stop?")
tslPoints   = input(defval = 120, title = "Trail Points", minval = 1)
useTSO      = input(defval = false, title = "Use Offset For Trailing Stop?")
tslOffset   = input(defval = 20, title = "Trail Offset Points", minval = 1)
// === /INPUTS ===

// === BASE FUNCTIONS ===
// delay for direction change actions
switchDelay(exp, len) =>
    average = len >= 2 ? sum(exp, len) / len : exp[1]
    up      = exp > average
    down    = exp < average
    state   = up ? true : down ? false : up[1]
// === /BASE FUNCTIONS ===

// === SERIES and VAR ===
// rsi
shunt = rsiSource == open ? 0 : 1
rsiUp = rma(max(change(rsiSource[shunt]), 0), rsiLength)
rsiDown = rma(-min(change(rsiSource[shunt]), 0), rsiLength)
rsi = (rsiDown == 0 ? 100 : rsiUp == 0 ? 0 : 100 - (100 / (1 + rsiUp / rsiDown))) - 50 // shifted 50 points to make 0 median
// sma of rsi
rsiMa   = sma(rsi, maLength)
// self explanatory..
tradeDirection = tradeInvert ? 0 <= rsiMa ? true : false : 0 >= rsiMa ? true : false
// === /SERIES ===

// === PLOTTING ===
barcolor(color = tradeDirection ? green : red, title = "Bar Colours")
// hlines
medianLine  = hline(0, title = 'Median', color = #996600,  linewidth = 1)
limitUp     = hline(25, title = 'Limit Up', color = silver,  linewidth = 1)
limitDown   = hline(-25, title = 'Limit Down', color = silver,  linewidth = 1)
// rsi and ma
rsiLine     = plot(rsi, title = 'RSI', color = purple, linewidth = 2, style = line, transp = 50)
areaLine    = plot(rsiMa, title = 'Area MA', color = silver, linewidth = 1, style = area, transp = 70)
// === /PLOTTING ===

goLong() => not tradeDirection[1] and tradeDirection
killLong() => tradeDirection[1] and not tradeDirection
strategy.entry(id = "Buy", long = true, when = goLong())
strategy.close(id = "Buy", when = killLong())

goShort() => tradeDirection[1] and not tradeDirection
killShort() => not tradeDirection[1] and tradeDirection
strategy.entry(id = "Sell", long = false, when = goShort())
strategy.close(id = "Sell", when = killShort())

if (useStop)
    strategy.exit("XSL", from_entry = "Buy", loss = slPoints)
    strategy.exit("XSS", from_entry = "Sell", loss = slPoints)
// if we're using the trailing stop
if (useTS and useTSO) // with offset
    strategy.exit("XSL", from_entry = "Buy", trail_points = tslPoints, trail_offset = tslOffset)
    strategy.exit("XSS", from_entry = "Sell", trail_points = tslPoints, trail_offset = tslOffset)
if (useTS and not useTSO) // without offset
    strategy.exit("XSL", from_entry = "Buy", trail_points = tslPoints)
    strategy.exit("XSS", from_entry = "Sell", trail_points = tslPoints)

Mais.