Esta estrategia es un sistema de negociación de tiempo dinámico basado en la volatilidad, que combina características de seguimiento de tendencias y gestión de riesgos. El núcleo de la estrategia utiliza un canal de volatilidad para identificar cambios en la tendencia del mercado mientras incorpora un mecanismo de gestión de posiciones dinámicas basado en ATR para lograr un control preciso de los riesgos comerciales.
La lógica central de la estrategia se basa en los siguientes componentes clave: 1. Cálculo del canal de volatilidad: utiliza el indicador ATR (Rango verdadero promedio) para medir la volatilidad del mercado y construye un canal de volatilidad dinámica. Mecanismo de determinación de tendencia: Determina la dirección de la tendencia a través de la posición relativa del precio al canal de volatilidad. 3. Sistema de gestión de posiciones: calcula dinámicamente el tamaño de la posición en función del capital inicial y el riesgo preestablecido por operación, combinado con la distancia de stop-loss en tiempo real, lo que garantiza una exposición al riesgo constante para cada operación. Mecanismo de control de riesgos: Implementa un stop-loss dinámico basado en el canal de volatilidad, cerrando posiciones automáticamente cuando el precio alcanza el nivel de stop y forzando el cierre de posiciones antes del cierre del mercado para evitar el riesgo de la noche a la mañana.
Este es un sistema de trading completo que combina volatilidad, seguimiento de tendencias y gestión de riesgos. La estrategia captura los cambios de tendencia a través de canales de volatilidad mientras emplea métodos científicos de gestión de capital para controlar el riesgo. Aunque el rendimiento puede ser subóptimo en mercados variados, a través de la optimización adecuada de parámetros y mecanismos de filtrado adicionales, puede operar de manera estable en la mayoría de los entornos de mercado.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-10 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("BNF FUT 5 min Volatility Strategy", overlay=true) // Inputs length = input.int(20, "Length", minval=2) src = input.source(close, "Source") factor = input.float(2.0, "Multiplier", minval=0.25, step=0.25) initial_capital = input.float(100000, "Initial Capital ($)") risk_per_trade = input.float(1.0, "Risk per Trade (%)", minval=0.1, maxval=10.0) // Volatility Stop Function volStop(src, atrlen, atrfactor) => if not na(src) var max = src var min = src var uptrend = true var float stop = na atrM = nz(ta.atr(atrlen) * atrfactor, ta.tr) max := math.max(max, src) min := math.min(min, src) stop := nz(uptrend ? math.max(stop, max - atrM) : math.min(stop, min + atrM), src) uptrend := src - stop >= 0.0 if uptrend != nz(uptrend[1], true) max := src min := src stop := uptrend ? max - atrM : min + atrM [stop, uptrend] // Calculate Volatility Stop [vStop, uptrend] = volStop(src, length, factor) // Plot Volatility Stop plot(vStop, "Volatility Stop", style=plot.style_cross, color=uptrend ? #009688 : #F44336) // Risk Management and Position Sizing atr = ta.atr(length) stop_distance = math.abs(close - vStop) // Distance to stop level position_size = (initial_capital * (risk_per_trade / 100)) / stop_distance // Position size based on risk per trade position_size := math.max(position_size, 1) // Ensure minimum size of 1 // Strategy Logic if not na(vStop) if uptrend and not uptrend[1] // Transition to uptrend strategy.close("Short") strategy.entry("Long", strategy.long, qty=position_size) if not uptrend and uptrend[1] // Transition to downtrend strategy.close("Long") strategy.entry("Short", strategy.short, qty=position_size) // Exit on Stop Hit if strategy.position_size > 0 and low < vStop // Exit long if stop hit strategy.close("Long", comment="Stop Hit") if strategy.position_size < 0 and high > vStop // Exit short if stop hit strategy.close("Short", comment="Stop Hit") if (hour == 15 and minute == 15) strategy.close_all()