Estrategia ATR de supertendencia


Fecha de creación: 2024-03-29 11:29:15 Última modificación: 2024-03-29 11:29:15
Copiar: 2 Número de Visitas: 707
1
Seguir
1617
Seguidores

Estrategia ATR de supertendencia

Descripción general

Se trata de una estrategia basada en indicadores de tendencia súper y indicadores de ATR. La idea principal de la estrategia es: usar indicadores de tendencia súper para determinar la dirección de la tendencia en el mercado actual y operar cuando los indicadores de tendencia súper cambian. Al mismo tiempo, la estrategia utiliza el indicador de ATR para calcular los precios de parada y parada y calcular el tamaño de la posición en función de una proporción del saldo de la cuenta para controlar el riesgo.

Principio de estrategia

El principio de esta estrategia es el siguiente:

  1. Calcular el valor de un indicador de tendencia súper, que genera una señal de compra o venta cuando el indicador de tendencia súper cambia.
  2. El indicador ATR se utiliza para calcular el precio de parada y el precio de parada, el precio de parada es el precio actual más el valor de reducción de ATR multiplicado por un múltiplo, el precio de parada es el precio de parada multiplicado por un riesgo-beneficio.
  3. El tamaño de la posición se calcula en función de una cierta proporción del saldo de la cuenta y el precio de parada para controlar el riesgo de cada operación.
  4. Cuando se genera una señal de compra, se abre una posición más, el precio de parada es el precio de generación de la señal menos el valor de ATR multiplicado por un múltiplo, el precio de parada es el precio de generación de la señal más el valor de ATR multiplicado por un múltiplo multiplicado por el riesgo de ganancias.
  5. Cuando se genera una señal de venta, se abre una posición a la baja, el precio de parada es el precio de la señal de producción más el valor de ATR multiplicado por un múltiplo, el precio de parada es el precio de la señal de producción menos el valor de ATR multiplicado por un múltiplo multiplicado por el riesgo de ganancia.

Ventajas estratégicas

Las ventajas de esta estrategia son las siguientes:

  1. La combinación de seguimiento de tendencias y indicadores de volatilidad permite capturar tendencias de manera eficiente 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 el nivel de riesgo, sin necesidad de ajuste manual, y es fácil de implementar.
  3. Los parámetros se pueden ajustar con flexibilidad para diferentes mercados y variedades.

Riesgo estratégico

Los riesgos de esta estrategia son los siguientes:

  1. En un mercado convulso, las frecuentes señales de compra y venta pueden generar altos costos de transacción y puntos de deslizamiento.
  2. Las proporciones fijas de stop loss y stop loss pueden no adaptarse a los cambios en el mercado, lo que provoca un stop loss prematuro o una ganancia demasiado pequeña.
  3. El cálculo del tamaño de la posición depende de la volatilidad histórica, que puede conducir a un retiro mayor si la volatilidad aumenta repentinamente.

Las siguientes medidas pueden ser tomadas para hacer frente a estos riesgos:

  1. Aumentar las condiciones de filtración de señales y reducir la frecuencia de las transacciones.
  2. Optimización de los métodos de cálculo de los paros y paradas, como el uso de paradas móviles o paradas dinámicas.
  3. Introducir factores de control de riesgo en el cálculo de la posición, como la reducción de la posición en caso de ruptura de la volatilidad.

Dirección de optimización de la estrategia

La estrategia puede ser optimizada en los siguientes aspectos:

  1. La introducción de más indicadores técnicos, como MACD, RSI, etc., como condiciones auxiliares para el juicio de tendencias y filtración de señales, mejora la precisión de las señales.
  2. Optimización de los parámetros de los indicadores de tendencias súper y ATR para encontrar la combinación óptima de parámetros para diferentes mercados y variedades.
  3. La introducción de más factores de control de riesgo en el cálculo de posiciones, como el máximo retiro de la cuenta, el máximo riesgo de una sola transacción, etc., mejora la solidez de la estrategia.
  4. Aumentar las estrategias de suspensión, como la suspensión parcial, la suspensión móvil, etc., para que las ganancias crezcan continuamente.

Las optimizaciones anteriores pueden mejorar la rentabilidad y la estabilidad de las estrategias, al tiempo que reducen el riesgo de las estrategias y las hacen más adaptables a los diferentes entornos del mercado.

Resumir

La estrategia combina indicadores de supertrend y indicadores de ATR para capturar tendencias de manera efectiva y controlar el riesgo. Calcula el tamaño de la posición óptima, lo que hace que el riesgo de cada operación sea controlado. Sin embargo, la estrategia puede generar costos de negociación y retrocesos más altos en mercados convulsos.

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