Esta estratégia é um sistema de negociação de tempo dinâmico baseado na volatilidade, combinando características de acompanhamento de tendências e gestão de riscos. O núcleo da estratégia usa um canal de volatilidade para identificar mudanças de tendência do mercado, incorporando um mecanismo de gestão de posição dinâmica baseado em ATR para alcançar um controle preciso dos riscos de negociação. Esta estratégia é particularmente adequada para operar em ambientes de mercado altamente voláteis e pode adaptar as participações à volatilidade do mercado.
A lógica central da estratégia baseia-se nos seguintes componentes essenciais:
A estratégia é um sistema de negociação completo que combina volatilidade, acompanhamento de tendências e gerenciamento de riscos. A estratégia capta mudanças de tendência por meio de canais de volatilidade, enquanto emprega métodos científicos de gerenciamento de capital para controlar o risco. Embora o desempenho possa ser subóptimo em mercados variados, por meio de otimização adequada de parâmetros e mecanismos de filtragem adicionais, ela pode operar de forma estável na maioria dos ambientes de mercado. As principais vantagens da estratégia estão em sua capacidade de adaptabilidade e controle de risco, tornando-a adequada como uma estrutura de base para expansão e otimização de estratégias de médio a longo prazo.
/*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()