Estratégia de acompanhamento de tendência de média móvel dupla


Data de criação: 2023-12-21 11:45:35 última modificação: 2023-12-21 11:45:35
cópia: 0 Cliques: 653
1
focar em
1621
Seguidores

Estratégia de acompanhamento de tendência de média móvel dupla

Visão geral

A estratégia de acompanhamento de tendências de média móvel dupla é uma estratégia de negociação quantitativa para acompanhar as tendências dos preços das ações. A estratégia usa um sistema de médias móveis de dois índices para determinar a direção da tendência dos preços e, combinada com a intensidade de determinação da tendência do indicador ADX, captura a tendência dos preços na linha média e longa.

Princípio da estratégia

A estratégia baseia-se principalmente em um sistema de médias móveis de dois índices para determinar a direção da tendência do preço. A estratégia usa EMAs rápidas e lentas de dois parâmetros diferentes. A EMA1 da linha rápida responde à mudança de preço mais rapidamente e a EMA2 da linha lenta responde à mudança de preço mais atrasada.

Além disso, a estratégia também introduziu o indicador ADX para avaliar a força da tendência. O ADX é usado para avaliar a força da tendência, calculando as flutuações de preços. Quando o ADX aumenta, a tendência está se fortalecendo; Quando o ADX diminui, a tendência está se enfraquecendo.

Em particular, as regras de geração de sinais de negociação da estratégia são:

  1. Faça mais na linha rápida e faça menos na linha lenta
  2. ADX>25 é o limite de vazio

Isso pode filtrar os sinais de inatividade de tendências mais fracas, aumentando ainda mais a estabilidade do sistema de negociação.

Vantagens estratégicas

A estratégia tem as seguintes vantagens:

  1. Capturar tendências de preços de linhas médias e longasO sistema de médias duplas EMA é capaz de discernir com eficiência as tendências de longo prazo dos preços, evitando a interferência do ruído do mercado de curto prazo.

  2. Falsa ruptura do filtroO indicador ADX é usado para avaliar a força da tendência e evitar perdas desnecessárias de falsas rupturas que surgem perto de pontos de tendência.

  3. Parâmetros de otimização de espaço grande: A combinação de parâmetros de linhas rápidas e lentas, os parâmetros ADX, etc. têm espaço para otimização, e podem obter melhores efeitos de negociação através da combinação de parâmetros.

  4. Altamente adaptávelA estratégia é válida para a maioria das ações e períodos de tempo e foi comprovada em vários mercados.

  5. Fácil de implementarA estratégia requer apenas indicadores de média simples, é menos dispendiosa em recursos, é fácil de programar e tem baixo custo de implementação.

Risco estratégico

A estratégia também apresenta alguns riscos, que se concentram nos seguintes aspectos:

  1. Risco de reversão de tendênciaA estratégia de tendência não é perfeita para determinar o ponto de reversão da tendência, e quando a verdadeira reversão da tendência ocorre, é inevitável sofrer grandes perdas.

  2. Parâmetros de otimização de risco excessivoA otimização dos parâmetros ao extremo também pode levar a estratégias que se ajustam exageradamente aos dados históricos, o que reduz a estabilidade das estratégias e a sua eficácia no campo de batalha.

  3. Risco de emergênciaOs principais eventos surpreendentes quebram o padrão original de tendência de preços, quando o indicador de média móvel é inoperante e precisa de intervenção manual ou de um stop loss para controlar os perdas.

Para os riscos acima mencionados, podemos otimizar em alguns aspectos:

  1. A introdução de indicadores adicionais para determinar o ponto de mudança de preço. Por exemplo, a introdução de volume de transação, o volume de transação será amplificado ao mesmo tempo em que a mudança de preço.

  2. A liberalização apropriada dos parâmetros ADX assegura que as oportunidades também sejam aproveitadas no início da tendência. Também pode ser introduzido um indicador de julgamento auxiliar, como o MACD.

  3. Teste de treinamento de múltiplos conjuntos de parâmetros, selecione parâmetros que sejam bons em termos de estabilidade e eficácia em campo. Evite o risco de otimização excessiva de um único conjunto de parâmetros.

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

A estratégia também tem algumas melhorias:

  1. Apresentando um mecanismo de stop lossAtivar o stop loss móvel ou o stop loss percentual para evitar perdas excessivas na posse.

  2. Indicador de volume de transaçõesPor exemplo, o volume de transações evita sinais errados em pontos de inflexão de preços com maior volume de transações.

  3. Parâmetros de adaptação e otimizaçãoA estabilidade da estratégia pode ser melhorada ao permitir que os parâmetros do indicador se ajustem de acordo com as mudanças do mercado em tempo real, em vez de parâmetros estáticos fixos.

  4. Introdução ao aprendizado de máquinaA utilização de algoritmos de aprendizagem de máquina para analisar uma grande quantidade de dados históricos, para determinar os parâmetros das médias móveis e ADX, e até mesmo para prever o movimento futuro dos preços. Esta é uma direção na evolução da estratégia de médias móveis.

  5. Optimização de cicloA configuração de parâmetros pode variar de acordo com o período de transação, permitindo testar a configuração ideal de parâmetros para cada ciclo.

Resumir

A estratégia de acompanhamento de tendências de média móvel dupla é, em geral, uma estratégia de pensamento estável e madura. A estratégia capta tendências de longo prazo de preços através do sistema de média móvel dupla EMA e tem indicadores ADX para filtrar os sinais, podendo capturar efetivamente as tendências de preços de ações e evitar a interferência do ruído do mercado de curto prazo.

Código-fonte da estratégia
/*backtest
start: 2022-12-14 00:00:00
end: 2023-11-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Kitaec Strategy4", shorttitle = "Kitaec str4", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(14, defval=14, minval=1, maxval=1000, title="Smoothing")
len2 = input(14, defval=14, minval=1, maxval=1000, title="Smoothing2")
len3=input(550)
src = close
ema1=ema(src, len)
ema2=ema(ema1, len2)
d=ema1-ema2
zlema=ema1+d

ema21=ema(src, (len/3)*2)
ema22=ema(ema21, (len2/3)*2)
d2=ema21-ema22
zlema2=ema21+d2

ema31=ema(src, len3)
ema32=ema(ema21, len3)
d3=ema31-ema32
zlema3=ema31+d2

fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//MAs
//ma1 = security(tickerid, "60", vwma(src, len)[1])
//ma2 = security(tickerid, "120", vwma(src, len)[1])
//plot(ma1, linewidth = 2, color = blue, title = "MA")
//plot(ma2, linewidth = 2, color = red, title = "MA2")

// ADX
lenadx = 14
lensig = 14
limadx = 18

up = change(high)
down = -change(low)
trur = rma(tr, lenadx)
plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, lenadx) / trur)
minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, lenadx) / trur)
sum = plus + minus 
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), lensig)
adx2 = ema(adx, 14)
adx2i = ema(adx2,14)
dadx2 = adx2 - adx2i
zladx2 = adx2 + dadx2
plus2 = ema(plus, 14)
plus2i = ema (plus2, 14)
dplus2 = plus2 - plus2i
zlplus2 = plus2 + dplus2

minus2 = ema(minus, 14)
minus2i = ema (minus2, 14)
dminus2 = minus2 - minus2i
zlminus2 = minus2 + dminus2

vwma = vwma(close, 150)
vwma2 = ema(vwma, 9)
vwma2i = ema(vwma2, 9)
dvwma2 = vwma2 - vwma2i
zlvwma2 = vwma2 + dvwma2


rmax=rma(src, len)
rmax2=rma(rmax, len2)
rmd=rmax-rmax2
zlrmax=rmax+rmd
rmaxz=rma(src, (len/3)*2)
rmaxz2=rma(rmaxz, (len2/3)*2)
rmzd=rmaxz-rmaxz2
zlrmaxz=rmaxz+rmzd
rmaxcol2=zlrmaxz[1] > zlema2[1] ? red:lime
rmaxcol= zlrmax[1] > zlema[1] ? red:lime


rmazlema3=rma(zlema3, 100)
plot(rmazlema3, color=gray, linewidth=2)
plot(zlema, color=green)
plot(zlema2, color=yellow)
plot(zlema3, color=teal, linewidth=2)
plot(ema2, color=na)
plot(rmax, color=rmaxcol2, linewidth=3)
plot(zlrmax, color=rmaxcol, linewidth=3)


//Trading
size = strategy.position_size
lot = 0.0 
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]

if zlrmax[1] < zlema[1]
    strategy.entry("Buy", strategy.long, needlong ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if zlrmax[1] > zlema[1]
    strategy.entry("Sell", strategy.short, needshort ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))