Estratégia de supercontrole de tendências de vários prazos

Autora:ChaoZhang, Data: 2024-01-15 11:35:47
Tags:

img

Resumo

Esta estratégia usa o indicador ATR para construir um canal de tendência dinâmica de vários prazos para rastrear tendências.

Estratégia lógica

A estratégia usa o indicador ATR para construir um canal de tendência de alta e um canal de tendência de baixa. Especificamente, a linha do canal de tendência de alta é o preço de fechamento menos N vezes o indicador ATR; a linha do canal de tendência de baixa é o preço de fechamento mais N vezes o indicador ATR. O valor N pode ser ajustado através de parâmetros.

Quando o preço atravessa o canal de tendência de alta, um sinal de compra é gerado; quando o preço atravessa o canal de tendência de baixa, um sinal de venda é gerado.

Além disso, a estratégia também define uma variável de tendência para determinar se a corrente está em uma tendência ascendente ou descendente.

Vantagens

  • Utiliza canais dinâmicos para rastrear tendências e negociar junto com as tendências
  • Evitar a perseguição de níveis elevados e a venda de níveis baixos, reduzindo o risco de inversão do mercado
  • Parâmetros de canal ajustáveis, elevada adaptabilidade
  • Configurações mais flexíveis de quadros de tempo múltiplos

Riscos

  • O rastreamento excessivamente agressivo pode aumentar o risco de perda
  • Configurações incorretas dos parâmetros do canal levam a menos ou mais sinais incorretos
  • Requer fortes habilidades de programação para ajustar parâmetros

Melhoria:

  • Reduzir adequadamente o multiplicador ATR para uma magnitude de rastreamento mais baixa
  • Optimize os parâmetros para encontrar a melhor combinação
  • Adicionar estratégia de stop loss para reduzir a perda por negociação

Orientações de otimização

  • Adicionar outros indicadores para filtro para sinais mais confiáveis
  • Adicionar uma estratégia de stop loss para reduzir o risco
  • Realizar otimização de parâmetros para encontrar o ideal
  • Otimizar o calendário de entrada e saída para melhorar a taxa de lucro

Resumo

No geral, esta é uma estratégia de rastreamento de tendências decente. Ele se ajusta dinamicamente ao comércio junto com as tendências e evita perseguir altos e baixos de venda. Com otimização de parâmetros e melhorias adequadas, as vantagens da estratégia podem ser melhoradas e os riscos reduzidos para alcançar melhores resultados.


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

//@version=5
strategy('超级趋势精简优化版', 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.close('BUY',comment = '卖出')
buy1 = ta.barssince(buySignal)
sell1 = ta.barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na



Mais.