En la carga de los recursos... Cargando...

Estrategia ATR de la tendencia superior

El autor:¿ Qué pasa?, Fecha: 2024-03-29 11:29:15
Las etiquetas:

img

Resumen general

Esta es una estrategia basada en el indicador Supertrend y el indicador ATR. La idea principal de esta estrategia es utilizar el indicador Supertrend para determinar la dirección de tendencia actual del mercado y realizar operaciones cuando el indicador Supertrend cambia. Al mismo tiempo, esta estrategia utiliza el indicador ATR para calcular los precios de stop loss y take profit, y calcula el tamaño de la posición en función de un cierto porcentaje del saldo de la cuenta para controlar el riesgo.

Principio de la estrategia

Los principios de esta estrategia son los siguientes:

  1. Calcular el valor del indicador Supertrend y generar señales de compra o venta cuando el indicador Supertrend cambie.
  2. Utilice el indicador ATR para calcular los precios de stop loss y take profit. El precio de stop loss es el precio actual más o menos el valor ATR multiplicado por un múltiplo, y el precio de take profit es el precio de stop loss multiplicado por una relación riesgo-recompensa.
  3. Calcular el tamaño de la posición basándose en un cierto porcentaje del saldo de la cuenta y el precio de stop loss para controlar el riesgo de cada operación.
  4. Cuando se genere una señal de compra, abrir una posición larga, siendo el precio de stop loss el precio al que se genere la señal menos el valor ATR multiplicado por un múltiplo, y el precio de toma de ganancias el precio al que se genere la señal más el valor ATR multiplicado por un múltiplo y luego multiplicado por la relación riesgo-beneficio.
  5. Cuando se genere una señal de venta, abrir una posición corta, siendo el precio de stop loss el precio al que se genere la señal más el valor ATR multiplicado por un múltiplo, y el precio de toma de ganancia el precio al que se genere la señal menos el valor ATR multiplicado por un múltiplo y luego multiplicado por la relación riesgo-beneficio.

Ventajas estratégicas

Las ventajas de esta estrategia son las siguientes:

  1. Combina indicadores de seguimiento de tendencias y de volatilidad para captar de manera efectiva las tendencias y controlar el riesgo.
  2. El tamaño de la posición se calcula automáticamente en función del saldo de la cuenta y del nivel de riesgo, sin necesidad de ajuste manual, lo que facilita su aplicación.
  3. Los parámetros pueden ajustarse de forma flexible para adaptarse a diferentes mercados y productos.

Riesgos estratégicos

Los riesgos de esta estrategia son los siguientes:

  1. En un mercado volátil, las frecuentes señales de compra y venta pueden dar lugar a altos costes de transacción y deslizamiento.
  2. Las tasas fijas de stop loss y take profit pueden no ser capaces de adaptarse a los cambios del mercado, lo que resulta en stop loss prematuros o en pequeñas ganancias.
  3. El cálculo del tamaño de la posición depende de la volatilidad histórica, que puede dar lugar a grandes reducciones cuando la volatilidad aumenta repentinamente.

Para hacer frente a los riesgos mencionados anteriormente, pueden adoptarse las siguientes medidas:

  1. Añadir más condiciones de filtrado de señales para reducir la frecuencia de negociación.
  2. Optimizar el método de cálculo del stop loss y del take profit, por ejemplo, utilizando el stop loss de seguimiento o el take profit dinámico.
  3. Introducir factores de control del riesgo en el cálculo de las posiciones, como la reducción de las posiciones cuando se produzca una volatilidad.

Dirección de optimización de la estrategia

Esta estrategia puede optimizarse en las siguientes áreas:

  1. Introducir más indicadores técnicos, como el MACD, el RSI, etc., como condiciones auxiliares para el juicio de tendencias y el filtrado de señales para mejorar la precisión de las señales.
  2. Optimizar los parámetros del indicador Supertrend y del indicador ATR para diferentes mercados y productos para encontrar la mejor combinación de parámetros.
  3. Introducir más factores de control de riesgos en el cálculo de las posiciones, como la utilización máxima de la cuenta, el riesgo máximo por operación, etc., para mejorar la solidez de la estrategia.
  4. Añadir estrategias de obtención de ganancias, como obtención parcial de ganancias, obtención de ganancias tardías, etc., para permitir que las ganancias sigan creciendo.

Las optimizaciones anteriores pueden mejorar la rentabilidad y la estabilidad de la estrategia al tiempo que reducen su riesgo, haciéndola más adaptable a diferentes entornos de mercado.

Resumen de las actividades

Esta estrategia combina el indicador Supertrend y el indicador ATR para capturar efectivamente las tendencias mientras se controla el riesgo. Al calcular el tamaño óptimo de la posición, el riesgo de cada operación es controlable. Sin embargo, esta estrategia puede generar altos costos de transacción y reducciones en un mercado volátil. Al introducir más indicadores técnicos, optimizar parámetros, agregar factores de control de riesgos y mejorar las estrategias de toma de ganancias, el rendimiento de esta estrategia puede mejorarse aún más. En general, esta estrategia es una estrategia simple y efectiva de seguimiento de tendencias adecuada para su uso en mercados de tendencias.


/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
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/
// © tradez99

//@version=5
strategy('Supertrend', overlay=true, format=format.price, precision=2)

Periods = input(title='ATR Period', defval=10)
src = input(hl2, title='Source')
Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=3.0)
changeATR = input(title='Change ATR Calculation Method ?', defval=true)
showsignals = input(title='Show Buy/Sell Signals ?', defval=true)
highlighting = input(title='Highlighter On/Off ?', defval=true)
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='Up Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0))
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title='UpTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0))
plotshape(buySignal and showsignals ? up : na, title='Buy', text='Buy', 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='Down Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0))
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title='DownTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0))
plotshape(sellSignal and showsignals ? dn : na, title='Sell', text='Sell', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))
mPlot = plot(ohlc4, title='', style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? trend == 1 ? color.green : color.white : color.white
shortFillColor = highlighting ? trend == -1 ? color.red : color.white : color.white
//fill(mPlot, upPlot, title='UpTrend Highligter', color=longFillColor)
//fill(mPlot, dnPlot, title='DownTrend Highligter', color=shortFillColor)

multiplier = input.float(title="ATR multiplier", defval = 1.5)
rr           = input.float(title="Risk:Reward", defval=1.0)
riskPerTrade = input.float(title="Risk Per Trade %", defval=1.0)
atr3 = ta.atr(14)

//calculate stops and targets 
longstop = close - (atr3 * multiplier)
shortstop = close + (atr3 * multiplier)
longStopDistance  = close - longstop
shortStopDistance = shortstop - close
longTarget  = close + (longStopDistance * rr)
shortTarget = close - (shortStopDistance * rr)

// Save stops & targets
var t_stop = 0.0
var t_target = 0.0

longCondition = buySignal 
if (longCondition)
    t_stop := longstop
    t_target := longTarget
    positionSize = math.floor((strategy.equity * (riskPerTrade/100)) / (close - t_stop))
    strategy.entry("Long", strategy.long, qty = positionSize)

shortCondition = sellSignal 
if (shortCondition)
    t_stop := shortstop
    t_target := shortTarget
    positionSize = math.floor((strategy.equity * (riskPerTrade/100)) / (t_stop - close))  
    strategy.entry("Short", strategy.short, qty = positionSize)

strategy.exit(id="Long Exit", from_entry="Long", limit=t_target, stop=t_stop)
strategy.exit(id="Short Exit", from_entry="Short", limit=t_target, stop=t_stop)


Más.