
La estrategia es un sistema de comercio de opciones a tiempo dinámico basado en la volatilidad, que combina las características de seguimiento de tendencias y gestión de riesgos. El núcleo de la estrategia es identificar los cambios en las tendencias del mercado a través de canales de volatilidad, al mismo tiempo que se introduce un mecanismo de gestión de posiciones dinámicas basado en ATR, que permite un control preciso del riesgo de negociación. La estrategia es especialmente adecuada para operar en entornos de mercado de gran volatilidad y puede adaptarse a las fluctuaciones del mercado para ajustar la posición.
La lógica central de la estrategia se basa en los siguientes componentes clave:
Es un sistema de negociación completo que combina volatilidad, seguimiento de tendencias y gestión de riesgos. La estrategia capta los cambios de tendencia a través de los canales de volatilidad y controla el riesgo mediante el uso de métodos científicos de gestión de fondos. Aunque puede tener un mal desempeño en mercados convulsos, puede operar de manera estable en la mayoría de los entornos de mercado a través de una optimización razonable de los parámetros y un mecanismo de filtración adicional.
/*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()