Estrategia de seguimiento de tendencias basada en ATR e índice de volatilidad


Fecha de creación: 2024-01-04 15:31:34 Última modificación: 2024-01-04 15:31:34
Copiar: 1 Número de Visitas: 590
1
Seguir
1621
Seguidores

Estrategia de seguimiento de tendencias basada en ATR e índice de volatilidad

Descripción general

La estrategia utiliza la amplitud real promedio (ATR) y el índice de volatilidad (CHOP) como indicadores técnicos principales para identificar y rastrear las tendencias. Cuando el índice se rompe en la vía descendente, la combinación de la dirección de la tendencia es la señal de entrada; cuando el índice vuelve a entrar en la zona de la cinta, toma una posición de parada de pérdida o parada de salida.

Principio de estrategia

  1. Utiliza ATR para calcular el tamaño de la caja, construir el canal de Ripple y determinar la dirección de la tendencia de los precios.
  2. Aplicar el indicador CHOP para determinar si el mercado es apto para el comercio, que combina el precio más alto, el precio más bajo y el ATR, indica que el mercado fluctúa suavemente cuando está en el rango 38.2-61.8; de lo contrario, indica que el mercado fluctúa mucho y no es apto para el comercio.
  3. Cuando el indicador CHOP se rompe hacia abajo desde la vía superior de 61.8, los precios entran en una tendencia descendente, y si los EMA rápidos a corto plazo también muestran un liderazgo en los precios, se hace un hueco; por el contrario, cuando el CHOP se rompe hacia arriba desde la vía inferior de 38.2 y los precios de los EMA a corto plazo se elevan, se hace más.
  4. Utiliza una estrategia de stop loss para detener o detener el precio cuando vuelve a entrar en la zona de bandas 38.2-61.8 de CHOP.

Análisis de las ventajas estratégicas

La estrategia combina el juicio de tendencias y el control de la volatilidad para capturar las tendencias de precios y controlar el riesgo, una estrategia de seguimiento de tendencias relativamente estable.

  1. La aplicación del canal Ripple construido por ATR permite un seguimiento eficaz de las tendencias de los precios.
  2. El indicador CHOP determina la volatilidad del mercado y evita las transacciones erróneas durante las fuertes fluctuaciones.
  3. En combinación con una rápida evaluación de la dirección de la tendencia a corto plazo por parte de las EMA, se evita la inversión.
  4. Las estrategias de stop loss controlan las pérdidas individuales.

Análisis de riesgos

Los principales riesgos de esta estrategia son:

  1. En situaciones de convulsión, los canales ATR y el indicador CHOP pueden generar señales erróneas. Se pueden ajustar los parámetros adecuadamente para eliminar las señales erróneas.
  2. Una sola combinación de indicadores técnicos no puede evitar las pérdidas por completo y requiere la intervención humana para determinar las grandes tendencias.
  3. La posición de parada de pérdidas se establece con demasiada flexibilidad y las pérdidas individuales pueden ser excesivas. Se debe reducir la amplitud de parada de pérdidas adecuadamente.

Dirección de optimización de la estrategia

La estrategia puede ser optimizada en los siguientes aspectos:

  1. Añadir otros indicadores auxiliares para juzgar la señal, como la forma de la línea K, el volumen de tráfico, etc., para mejorar la precisión de la señal.
  2. Optimización de los parámetros de ATR y CHOP para capturar mejor las fluctuaciones de precios.
  3. Configuración de la posición de la parada de pérdida dinámica para que el espacio de parada sea más grande y la parada de pérdida sea más rápida.
  4. Después de juzgar la tendencia a gran escala, relaje adecuadamente el margen de pérdida para obtener más ganancias en la tendencia.

Resumir

La estrategia integra indicadores técnicos de uso común, es sencilla y práctica. Con la optimización de ajustes de parámetros, se puede obtener un buen efecto de seguimiento. Sin embargo, se requiere que los humanos juzguen las grandes tendencias y no se pueden automatizar por completo. Se puede utilizar como herramienta de decisión auxiliar o como referencia para otras estrategias.

Código Fuente de la Estrategia
/*backtest
start: 2022-12-28 00:00:00
end: 2024-01-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © sharatgbhat

//@version=4
strategy("Weis Chop Strategy", overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 10,max_lines_count = 500, max_labels_count = 500)
maxIdLossPcnt = input(1, "Max Intraday Loss(%)", type=input.float)
// strategy.risk.max_intraday_loss(maxIdLossPcnt, strategy.percent_of_equity)

method = input(defval="ATR", options=["ATR", "Traditional", "Part of Price"], title="Renko Assignment Method")
methodvalue = input(defval=14.0, type=input.float, minval=0, title="Value")
pricesource = input(defval="Close", options=["Close", "Open / Close", "High / Low"], title="Price Source")
useClose = pricesource == "Close"
useOpenClose = pricesource == "Open / Close" or useClose
useTrueRange = input(defval="Auto", options=["Always", "Auto", "Never"], title="Use True Range instead of Volume")
isOscillating = input(defval=false, type=input.bool, title="Oscillating")
normalize = input(defval=false, type=input.bool, title="Normalize")
vol = useTrueRange == "Always" or useTrueRange == "Auto" and na(volume) ? tr : volume
op = useClose ? close : open
hi = useOpenClose ? close >= op ? close : op : high
lo = useOpenClose ? close <= op ? close : op : low

if method == "ATR"
    methodvalue := atr(round(methodvalue))
if method == "Part of Price"
    methodvalue := close / methodvalue

currclose = float(na)
prevclose = nz(currclose[1])
prevhigh = prevclose + methodvalue
prevlow = prevclose - methodvalue
currclose := hi > prevhigh ? hi : lo < prevlow ? lo : prevclose

direction = int(na)
direction := currclose > prevclose ? 1 : currclose < prevclose ? -1 : nz(direction[1])
directionHasChanged = change(direction) != 0
directionIsUp = direction > 0
directionIsDown = direction < 0

barcount = 1
barcount := not directionHasChanged and normalize ? barcount[1] + barcount : barcount
vol := not directionHasChanged ? vol[1] + vol : vol
res = barcount > 1 ? vol / barcount : vol

plot(isOscillating and directionIsDown ? -res : res, style=plot.style_columns, color=directionIsUp ? color.green : color.red, transp=75, linewidth=3, title="Wave Volume")

length = input(14, minval=1)
ci = 100 * log10(sum(atr(1), length) / (highest(length) - lowest(length))) / log10(length)
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)
plot(ci, "CHOP", color=#2962FF, offset = offset)
band1 = hline(61.8, "Upper Band", color=#787B86, linestyle=hline.style_dashed)
band0 = hline(38.2, "Lower Band", color=#787B86, linestyle=hline.style_dashed)
fill(band1, band0, color = color.rgb(33, 150, 243, 90), title = "Background")

MomentumBull = close>ema(close,8)
MomentumBear = close<ema(close,8)
Tradecon = crossunder(ci,61.8)

if (MomentumBull and directionIsUp and Tradecon)
	strategy.entry("Buy", strategy.long)
if (MomentumBear and directionIsDown and Tradecon )
    strategy.entry("Sell", strategy.short)
    strategy.exit("exit","Buy",when=directionIsDown,qty_percent=100,profit=20,loss=10)
    strategy.exit("exit","Sell",when=directionIsUp,qty_percent=100,profit=20,loss=10)