Эта стратегия представляет собой динамическую систему торговли, основанную на волатильности, сочетающую в себе тенденции и функции управления рисками. Ядро стратегии использует канал волатильности для выявления изменений тенденций рынка, включая механизм управления динамическими позициями на основе ATR для достижения точного контроля торговых рисков. Эта стратегия особенно подходит для работы в очень волатильной рыночной среде и может адаптировать владения к волатильности рынка.
Основная логика стратегии основана на следующих ключевых компонентах:
Это полная торговая система, сочетающая волатильность, следование трендам и управление рисками. Стратегия фиксирует изменения тренда через каналы волатильности, используя при этом методы управления научным капиталом для контроля риска. Хотя производительность может быть не оптимальной на различных рынках, благодаря правильной оптимизации параметров и дополнительным механизмам фильтрации она может стабильно работать в большинстве рыночных условиях. Основные преимущества стратегии заключаются в ее адаптивности и возможностях контроля риска, что делает ее подходящей в качестве основной структуры для расширения и оптимизации средне- и долгосрочной стратегии.
/*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()