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