Estratégia de cruzamento de média móvel dupla

Autora:ChaoZhang, Data: 2023-12-01 18:18:16
Tags:

img

Resumo

Esta estratégia baseia-se no sistema de dupla média móvel de cruzamento de tendências, que combina média móvel simples rápida (SMA) e média móvel ponderada lenta (VWMA) e gera sinais de negociação quando as duas linhas se cruzam.

Quando a SMA rápida cruza acima da VWMA lenta, um sinal de compra é gerado. Quando a SMA rápida cruza abaixo da VWMA lenta, um sinal de venda é gerado. A estratégia também emprega um mecanismo de stop loss para controlar riscos.

Estratégia lógica

A lógica central desta estratégia assenta no sistema duplo de cruzamento das médias móveis, que utiliza especificamente os seguintes indicadores técnicos:

  1. A média móvel simples (SMA): média aritmética dos preços de fechamento nos últimos n dias, refletindo o preço médio recente.
  2. Média móvel ponderada (VWMA): média ponderada dos preços de fechamento nos últimos n dias, atribuindo ponderações mais elevadas aos preços mais recentes, reagindo mais rapidamente às alterações de preços.

O SMA rápido tem um período de retorno mais curto para reagir rapidamente às mudanças de preço, enquanto o VWMA lento tem um período de retorno mais longo para suavizar.

A estratégia também estabelece mecanismos de stop loss, reduzindo as perdas no tempo quando o preço se move em direções desfavoráveis.

Análise das vantagens

  1. Responder rapidamente ao rastreamento das tendências do mercado
  2. Bom controlo da utilização com mecanismos eficazes de suspensão das perdas
  3. Simples e intuitivos, fáceis de compreender e implementar
  4. Parâmetros otimizáveis em diferentes ambientes de mercado

Análise de riscos

  1. As estratégias de MA dupla tendem a dar sinais falsos em mercados de alta
  2. Ajuste inadequado dos parâmetros pode levar a perdas
  3. Acidentes ocasionais podem causar perdas.

Gestão de riscos:

  1. Utilização de indicadores de filtragem de tendências para confirmação
  2. Optimize as configurações dos parâmetros
  3. Adotar uma estratégia de stop loss para controlar razoavelmente a perda única

Orientações de otimização

A estratégia pode ser reforçada nos seguintes aspectos:

  1. Incorporar outros indicadores como RSI, Bollinger Bands para aumentar a precisão do sinal
  2. Otimizar a duração das médias móveis em ciclos
  3. Combinar indicadores de volume, negociação em pontos com fluxos de capital significativos
  4. Ajustar os parâmetros com base nos resultados do backtest para encontrar o ideal
  5. Empregar stop loss dinâmicos, ajustando os stops com base na volatilidade do mercado

Conclusão

Em conclusão, esta é uma estratégia muito prática de seguir tendências. Ele usa cruzamento intuitivo de média móvel dupla para gerar sinais de negociação, capturando as mudanças de tendência efetivamente com a coordenação de médias móveis rápidas e lentas. O mecanismo de stop loss também garante um bom controle de risco. Com indicadores complementares e otimização de parâmetros, a estratégia pode alcançar um desempenho comercial ainda melhor.


/*backtest
start: 2023-11-23 00:00:00
end: 2023-11-28 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//strategy(title="Bitlinc Entry v0.1 VWMA / SMA / MRSI SQQQ 94M", overlay=true, initial_capital=10000, currency='USD')

strategy(title="Bitlinc Entry v0.1 VWMA / SMA / MRSI SQQQ 94M", overlay=true)

// Credit goes to this developer for the "Date Range Code"
// https://www.tradingview.com/script/62hUcP6O-How-To-Set-Backtest-Date-Range/

// === GENERAL INPUTS ===
// short ma
maFastSource   = input(defval = close, title = "Simple MA Source")
maFastLength   = input(defval = 6, title = "Simple MA Length", minval = 1)
// long ma
maSlowSource   = input(defval = high, title = "VW MA Source")
maSlowLength   = input(defval = 7, title = "VW MA Period", minval = 1)


// === SERIES SETUP ===
// a couple of ma's...
maFast = sma(maFastSource, maFastLength)
maSlow = vwma(maSlowSource, maSlowLength)


// === PLOTTING ===
fast = plot(maFast, title = "Fast MA", color = color.green, linewidth = 2, style = plot.style_line, transp = 30)
slow = plot(maSlow, title = "Slow MA", color = color.red, linewidth = 2, style = plot.style_line, transp = 30)

// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

// === LOGIC ===
enterLong = crossover(maFast, maSlow)
exitLong = crossover(maSlow, maFast)
//enterLong = crossover(maSlow, maFast)
//exitLong = crossover(maFast, maSlow)

// Entry //
strategy.entry(id="Long Entry", long=true, when=window() and enterLong)
strategy.entry(id="Short Entry", long=false, when=window() and exitLong)

// === FILL ====
fill(fast, slow, color = maFast > maSlow ? color.green : color.red)

// === MRSI ===
//
//

basis = rsi(close, input(50))

ma1 = ema(basis, input(2))
ma2 = ema(basis, input(27))

oversold = input(32.6)
overbought = input(63)

//plot(ma1, title="RSI EMA1", color=blue)
//plot(ma2, title="RSI EMA2", color=yellow)

obhist = ma1 >= overbought ? ma1 : overbought
oshist = ma1 <= oversold ? ma1 : oversold

//plot(obhist, title="Overbought Highligth", style=columns, color=color.maroon, histbase=overbought)
//plot(oshist, title="Oversold Highligth", style=columns, color=color.yellow, histbase=oversold)

//i1 = hline(oversold, title="Oversold Level", color=white)
//i2 = hline(overbought, title="Overbought Level", color=white)

//fill(i1, i2, color=olive, transp=100)

// === LOGIC ===
enterLongMrsi = crossover(ma1, oversold)
exitLongMrsi = crossover(ma1, overbought)

// Entry //
strategy.entry(id="MRSI Long Entry", long=true, when=window() and enterLongMrsi)
strategy.entry(id="MRSI Short Entry", long=false, when=window() and exitLongMrsi)

//hline(50, title="50 Level", color=white)

Mais.