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.
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 * ATR
para a faixa superior;close + Multiplier * ATR
Esta 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.
Esta estratégia de acompanhamento da tendência baseada em canais de indicadores tem as seguintes vantagens:
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.
Esta estratégia apresenta também alguns riscos:
Para controlar estes riscos, podemos tomar as seguintes medidas:
A estratégia pode ser melhorada:
Estas otimizações podem melhorar ainda mais a estabilidade e a rentabilidade da estratégia.
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