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

Autora:ChaoZhang, Data: 21-12-2023 11:45:35
Tags:

img

Resumo

A estratégia de rastreamento de tendências de média móvel dupla é uma estratégia quantitativa de negociação que rastreia as tendências de preços das ações.

Princípio da estratégia

Esta estratégia baseia-se principalmente no sistema de média móvel exponencial dupla para determinar a direção da tendência do preço. A estratégia usa duas EMAs rápidas e lentas com parâmetros diferentes, a EMA1 rápida reage às mudanças de preço mais rapidamente e a EMA2 lenta responde às mudanças de preço mais lentamente. Quando a linha rápida cruza acima da linha lenta, é um sinal de compra indicando que o preço começou a subir; quando a linha rápida cruza abaixo da linha lenta, é um sinal de venda indicando que o preço começou a cair.

Além disso, a estratégia também introduz o indicador ADX para julgar a força da tendência. ADX calcula as flutuações de preços para julgar a força da tendência. Quando o ADX sobe, significa que a tendência está se fortalecendo; quando o ADX cai, significa que a tendência está enfraquecendo. A estratégia define condições de filtro de negociação através do indicador ADX, emitindo sinais de negociação apenas quando a força da tendência é relativamente forte.

Especificamente, as regras de geração de sinais da estratégia são:

  1. Ir longo quando a linha rápida cruza acima da linha lenta, e ir curto quando a linha rápida cruza abaixo da linha lenta
  2. Só é permitido longo e curto quando o ADX>25

Isto pode efetivamente filtrar sinais inválidos com uma tendência mais fraca, melhorando ainda mais a estabilidade do sistema de negociação.

Vantagens da estratégia

Esta estratégia tem as seguintes vantagens principais:

  1. Captura as tendências dos preços a médio e longo prazo: O sistema dual EMA pode determinar eficazmente as tendências dos preços a médio e longo prazo e evitar interferências do ruído do mercado a curto prazo.

  2. Filtros de falhas: Ao avaliar a força da tendência através do indicador ADX, evita perdas desnecessárias causadas por falsas rupturas em torno dos pontos de virada da tendência.

  3. Espaço de otimização de parâmetros grande: Parâmetros de linha rápida e lenta, parâmetros ADX e mais têm espaço para otimização que podem produzir melhores resultados de negociação através de combinações de parâmetros.

  4. Alta adaptabilidade: Esta estratégia é adequada para a maioria das acções e dos prazos e foi verificada em vários mercados.

  5. Fácil de implementar: Esta estratégia requer apenas indicadores de média móvel simples, consome poucos recursos, é fácil de programar e tem baixos custos práticos de aplicação.

Riscos da Estratégia

Esta estratégia apresenta também alguns riscos, concentrados principalmente nos seguintes domínios:

  1. Risco de inversão da tendência: Qualquer estratégia de tendência não pode determinar perfeitamente os pontos de reversão da tendência, e é obrigada a sofrer perdas maiores quando a tendência real realmente se inverte.

  2. Risco de superação da otimização: A otimização dos parâmetros ao extremo pode também conduzir a uma adaptação excessiva da estratégia aos dados históricos, o que reduzirá a estabilidade e o efeito prático da estratégia.

  3. Risco de ocorrência de cisne negro: Grandes eventos inesperados quebrarão o modelo de tendência de preços original, fazendo com que o indicador da média móvel falhe, exigindo intervenção manual ou configurações de stop loss para controlar as perdas.

Para enfrentar os riscos acima, podemos otimizar a partir dos seguintes aspectos:

  1. Introduzir indicadores adicionais para determinar pontos de viragem dos preços, por exemplo, introduzir o volume de negociação, que será amplificado quando os pontos de viragem dos preços aparecerem.

  2. Relaxar adequadamente os parâmetros do ADX para garantir que as oportunidades possam ser capturadas nos estágios iniciais de uma tendência.

  3. Realizar treinamento e testes de combinações de parâmetros em vários grupos e selecionar combinações com boa estabilidade e efeito prático, evitando assim riscos de otimização excessiva de grupos de parâmetros individuais.

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

Há também algumas direcções em que esta estratégia pode ser otimizada:

  1. Introduzir mecanismos de stop lossA taxa de prejuízo é a taxa de prejuízo de um produto ou de um serviço.

  2. Combinar indicadores de volume de negociaçãoPor exemplo, volume de negociação, que pode evitar sinais errados quando o volume de negociação aumenta em pontos de virada de preços.

  3. Optimização auto-adaptativa de parâmetros: permitir que os parâmetros dos indicadores sejam ajustados de forma adaptativa de acordo com as alterações do mercado em tempo real, em vez de parâmetros estáticos fixos, o que pode melhorar consideravelmente a estabilidade das estratégias.

  4. Introduzir o aprendizado de máquina: Usar algoritmos de aprendizagem de máquina para analisar grandes quantidades de dados históricos para determinar parâmetros para as médias móveis e ADX, e até mesmo prever movimentos futuros de preços.

  5. Optimização do ciclo cruzado: Diferentes parâmetros do ciclo de negociação podem ser definidos de forma diferente e a configuração ideal pode ser testada em cada ciclo.

Resumo

Em geral, a estratégia de rastreamento de tendência de média móvel dupla é uma idéia de estratégia madura e estável. Esta estratégia captura tendências de preços de médio a longo prazo através do sistema de EMA dupla, e tem o indicador ADX para filtrar sinais, o que pode efetivamente capturar tendências de preços de ações e evitar interferências do ruído do mercado de curto prazo. Ao mesmo tempo, esta estratégia também tem certos riscos, exigindo otimização de combinações de parâmetros e métodos de stop loss, e pode até mesmo introduzir mais indicadores auxiliares e algoritmos de aprendizado de máquina para melhorar a estabilidade 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)))


Mais.