Estrategia de seguimiento de tendencias de ruptura del canal ATR

El autor:¿ Qué pasa?, Fecha: 2024-01-03 11:53:52
Las etiquetas:

img

Resumen general

Esta estrategia utiliza el canal ATR y la teoría de la ruptura para seguir las tendencias al entrar cuando se rompe el canal. Pertenece a las estrategias de seguimiento de tendencias. La estrategia es simple y fácil de entender, utilizando canales promedio móvil e indicadores ATR para determinar la dirección de la tendencia y emitir señales comerciales en puntos clave.

Principio

Esta estrategia construye bandas superiores e inferiores con precios altos, bajos, cerrados e indicador ATR para formar un canal ATR. El ancho del canal está determinado por el tamaño del parámetro ATR. Cuando el precio atraviesa el canal, se juzga como el comienzo de una tendencia, en los puntos en los que se ingresan posiciones largas o cortas. La estrategia tiene dos niveles de señales comerciales. Cuando el precio atraviesa un ancho ATR, se considera una tendencia emergente, lo que desencadena el primer nivel de puntos de compra / venta. Cuando el precio atraviesa dos anchos ATR, se considera una tendencia acelerada, lo que desencadena el segundo nivel de puntos de compra / venta.

Análisis de ventajas

Las principales ventajas de esta estrategia son las siguientes:

  1. El uso de indicadores ATR para construir canales considera mejor la volatilidad del mercado que las simples medias móviles.
  2. Los puntos de compra/venta de dos niveles permiten una entrada por etapas con riesgos controlables.
  3. La teoría de la ruptura localiza con precisión los puntos clave de la tendencia.
  4. El código conciso es fácil de entender e implementar.

Análisis de riesgos

Los principales riesgos de esta estrategia son:

  1. La dependencia de un único indicador significa una alta probabilidad de fallo si el ATR falla.
  2. La falta de stop loss y de gestión de posiciones conduce a un control insuficiente del riesgo.
  3. La utilidad necesita verificación y puede tener un rendimiento inferior en condiciones de negociación en vivo.
  4. Los parámetros inadecuados pueden causar golpes o sobreventa.

Direcciones de optimización

Las direcciones de optimización para esta estrategia incluyen:

  1. Añadir filtros con múltiples indicadores para evitar errores de juicio.
  2. Añadir módulos de stop loss para mejorar el control de riesgos.
  3. Añadir control de posición y gestión de dinero.
  4. Ajuste de parámetros para diferentes productos.
  5. Reducción de la frecuencia de negociación y del tamaño de las posiciones para la negociación en vivo.

Resumen de las actividades

El marco general de esta estrategia es claro y utilizable como prueba de concepto. Pero hay lagunas en el comercio en vivo que permiten optimizaciones sustanciales. Si los controles de riesgo y las frecuencias de negociación se pueden mejorar aún más, las perspectivas de aplicación serían buenas.


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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Myhaj_Lito

//@version=5
strategy("Renko Trend Strategy",shorttitle = "RENKO-Trend str.",overlay = true)
TF = input.timeframe(title='TimeFrame', defval="60")
ATRlength = input.int(title="ATR length", defval=60, minval=2, maxval=1000)

HIGH = request.security(syminfo.tickerid, TF, high)
LOW = request.security(syminfo.tickerid, TF, low)
CLOSE = request.security(syminfo.tickerid, TF, close)
ATR = request.security(syminfo.tickerid, TF, ta.atr(ATRlength))


RENKOUP = float(na)
RENKODN = float(na)
H = float(na)
COLOR = color(na)
BUY = int(na)
SELL = int(na)
UP = bool(na)
DN = bool(na)
CHANGE = bool(na)

RENKOUP := na(RENKOUP[1]) ? (HIGH + LOW) / 2 + ATR / 2 : RENKOUP[1]
RENKODN := na(RENKOUP[1]) ? (HIGH + LOW) / 2 - ATR / 2 : RENKODN[1]
H := na(RENKOUP[1]) or na(RENKODN[1]) ? RENKOUP - RENKODN : RENKOUP[1] - RENKODN[1]
COLOR := na(COLOR[1]) ? color.white : COLOR[1]
BUY := na(BUY[1]) ? 0 : BUY[1]
SELL := na(SELL[1]) ? 0 : SELL[1]
UP := false
DN := false
CHANGE := false

// calculating 
if not CHANGE and close >= RENKOUP[1] + H * 2
    CHANGE := true
    UP := true
    RENKOUP := RENKOUP[1] + ATR * 2
    RENKODN := RENKOUP[1] + ATR
    COLOR := color.rgb(0, 255, 170,60)
    SELL := 0
    BUY += 2
    BUY


if not CHANGE and close >= RENKOUP[1] + H
    CHANGE := true
    UP := true
    RENKOUP := RENKOUP[1] + ATR
    RENKODN := RENKOUP[1]
    COLOR := color.rgb(0, 230, 38,60)
    SELL := 0
    BUY += 1
    BUY

if not CHANGE and close <= RENKODN[1] - H * 2
    CHANGE := true
    DN := true
    RENKODN := RENKODN[1] - ATR * 2
    RENKOUP := RENKODN[1] - ATR
    COLOR := color.rgb(255, 92, 43,60)
    BUY := 0
    SELL += 2
    SELL
if not CHANGE and close <= RENKODN[1] - H
    CHANGE := true
    DN := true
    RENKODN := RENKODN[1] - ATR
    RENKOUP := RENKODN[1]
    COLOR := color.rgb(245, 69, 69,60)
    BUY := 0
    SELL += 1
    SELL
//// STRATEGY 
if(UP)
    strategy.entry("Long",strategy.long)
if(DN)
    strategy.entry("Short",strategy.short)


// ploting 

bgcolor(COLOR)


Más.