Super ATR Tendência Seguindo a Estratégia

Autora:ChaoZhang, Data: 2024-02-19 11:41:20
Tags:

img

Resumo

A Super ATR Trend Following Strategy é uma estratégia de tendência baseada em indicadores ATR. Usa o indicador ATR para medir a volatilidade do mercado e define stop loss com base em vários ATRs para rastrear tendências.

Estratégia lógica

A estratégia primeiro calcula o indicador ATR, que é a média móvel da volatilidade dos preços nos últimos N dias, para representar o risco e a volatilidade do mercado.

Em seguida, as faixas superior e inferior são calculadas com base no valor ATR multiplicado por um fator, ou seja:close - Multiplier * ATRpara a faixa superior;close + Multiplier * ATREsta forma um canal de tendência baseado em ATR.

Em seguida, julgamos se o preço atual quebra a faixa superior ou inferior do canal. Se o preço quebra a faixa superior, ele é julgado como entrando em uma tendência de queda; se o preço quebra a faixa inferior, ele é julgado como entrando em uma tendência de alta. Quando há uma quebra de tendência, fazemos a compra e venda correspondentes.

Além disso, a estratégia estabeleceu uma janela de tempo de negociação para negociar apenas no intervalo de tempo de data especificado.

Análise das vantagens

Esta estratégia de acompanhamento da tendência baseada em canais de indicadores tem as seguintes vantagens:

  1. A utilização do indicador ATR para ajustar automaticamente a posição de stop loss controla eficazmente os riscos
  2. ATR considera a volatilidade dos preços, mais razoável stop loss
  3. Aumentar a precisão de entrada através da ruptura do canal
  4. Permite o ajustamento do método de cálculo do ATR, mais flexível
  5. A definição da janela de negociação evita o fracasso da estratégia durante eventos significativos

Em geral, trata-se de uma tendência simples e prática que segue uma estratégia que pode controlar eficazmente os riscos e obter bons retornos.

Análise de riscos

Esta estratégia apresenta também alguns riscos:

  1. O mercado pode ter mudanças violentas que a ATR não consegue reagir em tempo hábil, resultando em stop loss muito solto
  2. O preço pode variar no canal quando o sentimento diverge, aumentando o risco comercial
  3. O múltiplo fixo pode não corresponder a todos os produtos, sendo necessário ajustá-lo em conformidade
  4. setWindow limita oportunidades de negociação, pode perder boas negociações se não for definido corretamente

Para controlar estes riscos, podemos tomar as seguintes medidas:

  1. Combinar outros indicadores para determinar a situação do mercado, evitar a dependência exclusiva do ATR
  2. Adicionar filtros para evitar uma ruptura inválida que introduzisse um risco comercial
  3. Selecionar o multiplicador adequado de acordo com as características históricas dos diferentes produtos
  4. Otimizar e testar os parâmetros da janela para garantir a configuração correta

Optimização

A estratégia pode ser melhorada:

  1. Introduzir algoritmos de aprendizagem de máquina para otimizar dinamicamente o multiplicador
  2. Incorporar indicadores de sentimento etc. para otimizar a gama de canais
  3. Adicionar confirmação de volume ou volatilidade para evitar uma ruptura inválida
  4. Utilize o quadro de estratégia avançado baseado no tempo para backtest

Estas otimizações podem melhorar ainda mais a estabilidade e a rentabilidade da estratégia.

Conclusão

No geral, esta é uma estratégia de tendência muito prática. Ela constrói um canal adaptável usando o indicador ATR e determina entradas por rupturas de canal. A estratégia é simples e eficaz para controlar riscos, adequada para rastrear tendências de médio e longo prazo. Também propusemos mais sugestões de controle de risco e otimização para tornar a estratégia mais robusta.


/*backtest
start: 2023-02-12 00:00:00
end: 2024-02-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('B厂长 @超级趋势精简优化版', overlay=true)
Periods = input(title='ATR周期', defval=10)
src = input(hl2, title='价格数据源')
Multiplier = input.float(title='ATR 乘数', step=0.1, defval=3.0)
changeATR = input(title='更改ATR计算方法', defval=true,tooltip = '默认为art否则sma(ta.tr,ATR周期)')
showsignals = input(title='显示买入/卖出信号', defval=false)
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = src - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title='上涨趋势', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0))
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal and showsignals ? up : na, title='买点', text='买点', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0))
dnPlot = plot(trend == 1 ? na : dn, title='下跌趋势', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0))
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal and showsignals ? dn : na, title='卖点', text='卖点', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))
FromMonth = input.int(defval=9, title='From Month', minval=1, maxval=12)
FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31)
FromYear = input.int(defval=2018, title='From Year', minval=999)
ToMonth = input.int(defval=1, title='To Month', minval=1, maxval=12)
ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31)
ToYear = input.int(defval=9999, title='To Year', minval=999)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)
window() =>
    time >= start and time <= finish ? true : false
longCondition = buySignal
if longCondition and window()
    strategy.entry('BUY', strategy.long, comment = '做多')
shortCondition = sellSignal
if shortCondition and window()
    strategy.entry('SAL', strategy.short, comment = '做空')

buy1 = ta.barssince(buySignal)
sell1 = ta.barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na



Mais.