Estrategia de seguimiento de supertendencias en múltiples marcos temporales


Fecha de creación: 2024-01-15 11:35:47 Última modificación: 2024-01-15 11:35:47
Copiar: 0 Número de Visitas: 556
1
Seguir
1617
Seguidores

Estrategia de seguimiento de supertendencias en múltiples marcos temporales

Descripción general

La estrategia es una estrategia que utiliza el indicador ATR para construir un canal de tendencia dinámica de varios marcos temporales y lograr el seguimiento de la tendencia. La estrategia genera señales cuando los precios rompen el canal para capturar una tendencia más grande mediante el ajuste continuo del canal.

Principio de estrategia

La estrategia utiliza el indicador ATR para construir un canal de tendencia ascendente y un canal de tendencia descendente. En concreto, la línea de canal ascendente es el precio de cierre menos N veces el indicador ATR; la línea de canal descendente es el precio de cierre más N veces el indicador ATR. El valor de N se puede ajustar mediante parámetros.

Cuando el precio rompe el canal de subida, genera una señal de compra; cuando el precio rompe el canal de bajada, genera una señal de venta. El canal se ajusta según la última dinámica de precios, lo que permite el seguimiento de la tendencia.

Además, la estrategia también define una variable de tendencia para determinar si la tendencia actual es ascendente o descendente. La variable de tendencia se usa junto con la línea de canal para evitar la generación de señales erróneas.

Ventajas estratégicas

  • El uso de canales dinámicos para el seguimiento de tendencias, de acuerdo a la situación.
  • Evita el alza y la baja y reduce el riesgo de un cambio de tendencia
  • Parámetros de canal ajustables y adaptativos
  • Más flexibilidad en la configuración de marcos de tiempo múltiples

Riesgo estratégico

  • El seguimiento demasiado radical puede aumentar el riesgo de pérdidas
  • Parámetros de canal mal configurados, menos señales o más señales erróneas
  • Se requiere una gran capacidad de programación para ajustar los parámetros

Mejoramiento:

  • Reducir adecuadamente el coeficiente ATR para reducir el seguimiento
  • Optimización de parámetros para encontrar la combinación óptima de parámetros
  • Aumentar las estrategias de detener las pérdidas y reducir las pérdidas individuales

Dirección de optimización de la estrategia

  • Se añaden filtros de otros indicadores para garantizar una señal más fiable
  • Aumentar las estrategias de detener pérdidas y reducir el riesgo
  • Optimización de parámetros para encontrar el mejor parámetro
  • Optimización de los tiempos de entrada y salida para mejorar la rentabilidad

Resumir

La estrategia en general es una buena estrategia de seguimiento de tendencias. Es capaz de ajustar dinámicamente y, por lo tanto, evitar perseguir los altos y bajos. A través de la optimización de los parámetros y la mejora adecuada, se puede aumentar aún más la ventaja de la estrategia, reducir el riesgo y, por lo tanto, obtener mejores resultados.

Código Fuente de la Estrategia
/*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