Estratégia de acompanhamento da tendência da média móvel do canal dinâmico

Autora:ChaoZhang, Data: 2024-02-22 15:51:48
Tags:

img

Resumo

Esta estratégia é projetada com base no princípio do canal dinâmico e do rastreamento da tendência da média móvel. Ele calcula o canal de preço dinâmico, julga a direção da tendência através dos trilhos superior e inferior do canal e gera sinais de negociação combinando a média móvel para filtrar a volatilidade do preço. Esta estratégia é adequada para negociação de tendência de médio e curto prazo.

Princípio

Os principais princípios desta estratégia são:

  1. Calcule o canal de preços dinâmico. A linha do meio do canal é calculada a partir do preço mais alto e do preço mais baixo. O trilho superior é a linha do meio + volatilidade do preço MA, e o trilho inferior é a linha do meio - volatilidade do preço MA.

  2. Julgue a direção da tendência. Quando o preço atravessa o trilho superior, é definido como de alta. Quando o preço atravessa o trilho inferior, é definido como de baixa.

  3. Filtrar ruído: utilizar a MA da volatilidade de preços de um determinado período para filtrar o ruído das flutuações aleatórias de preços.

  4. Gerar sinais de negociação. Quando bullish, um sinal de compra é gerado quando o preço de fechamento é menor que o preço de abertura naquele período. Quando bearish, um sinal de venda é gerado quando o preço de fechamento é maior que o preço de abertura.

Vantagens

As vantagens desta estratégia são as seguintes:

  1. O canal dinâmico pode capturar a tendência do preço em tempo real.
  2. O filtro MA pode reduzir os falsos sinais.
  3. A combinação da direção da tendência e da direção da entidade da linha K para gerar sinais de negociação evita ficar preso.

Riscos

Os riscos desta estratégia são:

  1. A selecção inadequada do Param pode conduzir a um sobreajuste.
  2. É fácil gerar sinais errados durante a volatilidade lateral.
  3. Não pode prever flutuações extremas de preços.

Soluções:

  1. Seleção e testes rigorosos para o Param.
  2. Adicionar condições de filtragem para identificar lateralmente.
  3. Estabelecer o paragem de perdas/lucro para controlar os riscos.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Estabilidade de ensaio de diferentes parâmetros de período.
  2. Adicionar indicadores de VOLUME ou volatilidade para avaliar o momento.
  3. Combinar bandas, canais, etc. para determinar entrada e saída.

Resumo

Esta estratégia integra as ideias do canal dinâmico e do julgamento da tendência MA, e tem um bom desempenho na captura de direções de tendência a médio e curto prazo.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=2
strategy("Noro's Bands Strategy v1.0", shorttitle = "NoroBands str 1.0", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
color = input(true, "Color")
needbb = input(false, defval = false, title = "Show Bands")
needbg = input(false, defval = false, title = "Show Background")
src = close

//PriceChannel 1
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//dist
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma

//Trend
trend = close < ld and high < hd ? -1 : close > hd and low > ld ? 1 : trend[1]

//Lines
colo = needbb == false ? na : black
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band")

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 90)

//up =  and trend == 1 ? 1 : 0
//dn =  and trend == -1 ? 1 : 0 

up = close < hd and trend == 1 and (close < open or color == false) ? 1 : 0
dn = close > ld and trend == -1 and (close > open or color == false) ? 1 : 0 

longCondition = up == 1
if (longCondition)
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

shortCondition = dn == 1
if (shortCondition)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)

Mais.