Estratégia de Média Móvel e RSI


Data de criação: 2023-11-28 14:07:46 última modificação: 2023-11-28 14:07:46
cópia: 0 Cliques: 663
1
focar em
1621
Seguidores

Estratégia de Média Móvel e RSI

Visão geral

A estratégia de índice de força relativa de média móvel é uma estratégia de negociação quantitativa que utiliza uma média móvel e um índice de força relativa como sinais de negociação. A estratégia gera sinais de negociação para capturar oportunidades em tendências de mercado, comparando a média móvel dos preços e os valores dos indicadores de força relativa.

Princípio da estratégia

A estratégia baseia-se em dois indicadores:

  1. Média móvel simples (SMA): reflete a tendência média dos preços.
  2. Indicador de força relativa (RSI): reflete a força fraca dos preços.

A lógica central da estratégia é:

Quando a linha do indicador RSI está abaixo da média móvel, é considerada uma zona de sobrevenda, e a ação é subvalorizada, gerando um sinal de compra; quando a linha do indicador RSI está acima da média móvel, é considerada uma zona de sobrevenda, e a ação é supervalorizada, gerando um sinal de venda.

Isto é, a média móvel reflete, em certa medida, o valor justo das ações, e o RSI representa a forte e fraca tendência atual das ações. Um RSI acima ou abaixo da média móvel significa que há uma chance de reversão.

Em particular, a estratégia gera sinais de negociação através dos seguintes passos:

  1. Calcular o valor do índice RSI das ações, bem como a média móvel simples
  2. Comparação entre o valor do indicador RSI e a relação de magnitude da média móvel
  3. Quando o RSI cruza a média móvel, gera um sinal de venda
  4. Quando o RSI atravessa a média móvel abaixo, gera um sinal de compra
  5. Estabelecer um ponto de parada e mover a parada para controlar o risco

Vantagens estratégicas

A estratégia combina a avaliação de tendências das médias móveis com a avaliação de overbought e oversold do RSI, aproveitando de forma integrada as vantagens dos diferentes indicadores para avaliar com eficácia os pontos de inflexão do mercado.

As principais vantagens são:

  1. As médias móveis são indicadores eficazes de tendências de preços
  2. O RSI pode refletir sobrecompra e sobrevenda
  3. Combinação de dois indicadores para uma maior precisão na determinação dos pontos de inflexão do mercado
  4. Pode-se definir um ponto de parada para controlar o risco

Risco estratégico

A estratégia também apresenta alguns riscos:

  1. A probabilidade de um indicador produzir um sinal falso, que pode levar a perdas desnecessárias
  2. No caso de uma onda de choque, o stop loss pode ser ultrapassado, causando grandes perdas.
  3. Parâmetros mal definidos também podem afetar a performance da política

Para controlar os riscos, pode-se fazer otimizar as coisas da seguinte forma:

  1. Ajustar os parâmetros das médias móveis e do RSI para tornar os sinais do indicador mais confiáveis
  2. Relaxar o ponto de parada adequadamente, evitando que o ponto de parada seja acionado com demasiada frequência
  3. A utilização de stop loss móvel, como o stop loss DYNAMIC, permite uma maior flexibilidade no stop loss

Direção de otimização da estratégia

A estratégia pode ser melhorada ainda mais se:

  1. Testar combinações de parâmetros de diferentes períodos para encontrar o melhor parâmetro
  2. Adição de filtros para outros indicadores, como o volume de transação, para aumentar a confiabilidade do sinal
  3. Optimizar a estratégia de stop loss para torná-la mais dinâmica e racional
  4. Desenvolver mecanismos de otimização de parâmetros adaptativos, combinados com tecnologias como a aprendizagem profunda
  5. Adição de módulo de gerenciamento de posições para ajustar posições de forma dinâmica de acordo com a situação do mercado

A estabilidade e a rentabilidade da estratégia podem ser continuamente melhoradas por meio de otimização de parâmetros, otimização de indicadores e otimização de gerenciamento de risco.

Resumir

A estratégia de média móvel e indicador de força relativa, ao mesmo tempo que usa o julgamento de tendências de preços e o julgamento de sobrevenda e sobrevenda, pode determinar efetivamente os pontos de inflexão do mercado e aproveitar as oportunidades de reversão. A estratégia é simples, prática, de risco controlado e é uma estratégia de negociação quantitativa prática.

Código-fonte da estratégia
/*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)