Esta estrategia identifica oportunidades largas utilizando el indicador SuperTrend. Utiliza ATR y un multiplicador para determinar los niveles de soporte dinámico para la entrada larga.
Las bandas superior e inferior se calculan en función del período ATR, multiplicador.
La tendencia actual se sigue, con 1 para tendencia alcista y -1 para tendencia bajista.
Un promedio móvil se agrega como un filtro de tendencia. Comprar solo si el precio está por encima de MA al romper por encima de la banda superior. Vender solo si el precio está por debajo de MA al romper por debajo de la banda inferior. Esto evita las rupturas falsas.
Los ayudantes visuales destacan tendencias, señales, etc. para ayudar a la toma de decisiones.
Las ventajas de esta estrategia:
SuperTrend realiza un seguimiento dinámico de los cambios de precios y refleja los cambios de tendencia a tiempo.
El ATR stop loss ajusta las paradas en función de la volatilidad del mercado, ayudando a obtener ganancias.
El filtro MA elimina las señales falsas del ruido en mercados variados.
El diseño visual presenta intuitivamente la mecánica de la estrategia y la situación del mercado.
Solo las inversiones de tendencia de las operaciones lo hacen adecuado para la tenencia a largo plazo.
Los principales riesgos son:
SuperTrend es sensible a los parámetros.
En mercados agitados, las paradas pueden desencadenarse con frecuencia.
Sin tener en cuenta los costos de negociación, las cuentas pequeñas sufren mayor impacto.
No hay stop loss significa un alto riesgo de extracción.
El filtro de tendencias puede perder algunas oportunidades.
Los riesgos pueden reducirse:
Optimizando los parámetros de ATR para una frecuencia de ajuste de banda más baja.
Añadir un filtro de barras equivalente para evitar paradas por oscilaciones menores de alta frecuencia.
Implementar stop loss y tomar ganancias para proteger las ganancias.
Ajuste del período promedio móvil para el efecto de filtrado de equilibrio.
Optimización de la gestión del dinero para reducir los impactos de los costes comerciales.
La estrategia puede mejorarse en los siguientes aspectos:
Prueba diferentes fuentes de precios como cerrado, alto, etc.
Pruebe otros indicadores dinámicos de stop loss como Chandelier Exit.
Añadir el tamaño de la posición para optimizar la utilización del capital.
Incorporar indicadores de volatilidad para refinar las entradas.
Implementar stop loss y tomar ganancias para controlar los riesgos.
Ajustar los parámetros para diferentes mercados.
Explorar el aprendizaje automático para la optimización de parámetros.
Combinar otros indicadores para mejorar la precisión del filtro.
Esta estrategia utiliza SuperTrend con paradas dinámicas para determinar tendencias y agrega un filtro MA para identificar entradas largas.
/*backtest start: 2020-09-13 00:00:00 end: 2023-09-19 00:00:00 period: 3d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("SuperTrend Long Strategy", overlay=true, initial_capital=50000, currency=currency.USD, default_qty_type=strategy.cash, default_qty_value=50000) Periods = input(title="ATR Period", type=input.integer, defval=10) src = input(hl2, title="Source") Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0) changeATR = input(title="Change ATR Calculation Method ?", type=input.bool, defval=true) showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=false) highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true) barcoloring = input(title="Bar Coloring On/Off ?", type=input.bool, defval=true) atr2 = sma(tr, Periods) atr = changeATR ? atr(Periods) : atr2 up = src - (Multiplier * atr) up1 = nz(up[1], up) up := close[1] > up1 ? max(up, up1) : up dn = src + (Multiplier * atr) dn1 = nz(dn[1], dn) dn := close[1] < dn1 ? 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 // Moving Average as Trend Filter periodes_ma = input(title="Moving Average Period", type=input.integer, defval=20) src_ma = input(title="Moving Average Source", type=input.source, defval=close) ma = sma(src_ma, periodes_ma) upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green) buySignal = trend == 1 and trend[1] == -1 and close > ma 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)) dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red) sellSignal = trend == -1 and trend[1] == 1 and close < ma 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)) mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0) longFillColor = highlighting ? (trend == 1 ? color.new(color.green, 70) : color.white) : color.white shortFillColor = highlighting ? (trend == -1 ? color.new(color.red, 70) : color.white) : color.white fill(mPlot, upPlot, title="UpTrend Highlighter", color=longFillColor) fill(mPlot, dnPlot, title="DownTrend Highlighter", color=shortFillColor) FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2018, title = "From Year", minval = 999) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(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) strategy.entry("BUY", strategy.long, when = window()) shortCondition = sellSignal if (shortCondition) strategy.close("BUY") strategy.entry("SELL", strategy.short, when = window()) buy1 = barssince(buySignal) sell1 = barssince(sellSignal) color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na barcolor(barcoloring ? color1 : na)