Эта стратегия генерирует ценовые диапазоны на основе сглаженной волатильности цены и производит торговые сигналы, когда цена проходит через диапазоны.
Стратегия сначала рассчитывает средний диапазон волатильности цены за определенный период, а затем сглаживает диапазон волатильности с использованием экспоненциальной скользящей средней для получения сглаженной волатильности. Сглаженная волатильность, умноженная на коэффициент, дает диапазон полос. Когда цена превышает верхнюю полосу, генерируется сигнал покупки. Когда цена превышает нижнюю полосу, генерируется сигнал продажи.
В частности, сглаженная волатильность smrng рассчитывается с помощью функции smoothrng. Верхняя полоса hband и нижняя полоса lband ценовых диапазонов затем рассчитываются на основе smrng. На основе этого настраиваются долгое условие longCondition и короткое условие shortCondition. Когда выполняется longCondition, генерируется сигнал покупки. Когда выполняется shortCondition, генерируется сигнал продажи.
Преимущества этой стратегии:
Использование волатильности цен для построения торговых сигналов может эффективно отслеживать изменения рынка.
Сглаживание волатильности с экспоненциальной скользящей средней может фильтровать шум и генерировать более надежные торговые сигналы.
Диапазон диапазонов может быть скорректирован с помощью коэффициента волатильности, что делает стратегию более гибкой.
В сочетании с прорывным суждением, он может своевременно поймать торговые возможности, когда происходит изменение тренда.
В этой стратегии также есть некоторые риски:
При ненормальной волатильности рынка сглаженная волатильность может не отражать точно фактическую волатильность, что приводит к неправильным сигналам.
Неправильное настройка диапазона диапазона может привести к перегрузке или недостаточному сигналу.
В сигналах прорыва наблюдается временная задержка, которая может привести к преждевременному или позднему входу.
Стратегия может быть оптимизирована посредством:
Испытание различных циклов данных о ценах для определения наиболее подходящего периода для расчета волатильности.
Пробовал разные алгоритмы скользящей средней, например, взвешенную скользящую среднюю.
Введение объема торговли или других показателей для подтверждения сигналов прорыва.
Установка стоп-лосса или стоп-последования для контроля потерь по сделке.
Оптимизация коэффициента волатильности для определения оптимального диапазона полосы.
Общая логика этой стратегии ясна, используя волатильность цен для построения диапазонов и прорывов цен для генерации торговых сигналов, которые могут эффективно отслеживать изменения тренда рынка.
/*backtest start: 2023-01-22 00:00:00 end: 2024-01-28 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("1SmSm1 Strategy", shorttitle="1SmSm1", overlay=true) // Source src = input(defval=close, title="Source") // Sampling Period per = input(defval=100, minval=1, title="Sampling Period") // Range Multiplier mult = input(defval=3.0, minval=0.1, title="Range Multiplier") // Smooth Average Range smoothrng(x, t, m) => wper = (t * 2) - 1 avrng = ema(abs(x - x[1]), t) smoothrng = ema(avrng, wper) * m smoothrng smrng = smoothrng(src, per, mult) // Range Filter rngfilt(x, r) => rngfilt = x rngfilt := x > nz(rngfilt[1]) ? ((x - r) < nz(rngfilt[1]) ? nz(rngfilt[1]) : (x - r)) : ((x + r) > nz(rngfilt[1]) ? nz(rngfilt[1]) : (x + r)) rngfilt filt = rngfilt(src, smrng) // Filter Direction upward = 0.0 upward := filt > filt[1] ? nz(upward[1]) + 1 : filt < filt[1] ? 0 : nz(upward[1]) downward = 0.0 downward := filt < filt[1] ? nz(downward[1]) + 1 : filt > filt[1] ? 0 : nz(downward[1]) // Target Bands hband = filt + smrng lband = filt - smrng // Breakouts longCondition = (src > filt) and (src > src[1]) and (upward > 0) shortCondition = (src < filt) and (src < src[1]) and (downward > 0) strategy.entry("Buy", strategy.long, when = longCondition) strategy.entry("Sell", strategy.short, when = shortCondition) // Plotting plot(filt, color=upward > 0 ? color.lime : downward > 0 ? color.red : color.orange, linewidth=3, title="Range Filter") hbandplot = plot(hband, color=color.aqua, transp=100, title="High Target") lbandplot = plot(lband, color=color.fuchsia, transp=100, title="Low Target") // Fills fill(hbandplot, lbandplot, color=color.aqua, title="Target Range") // Bar Color barcolor(longCondition ? color.green : shortCondition ? color.red : na) // Alerts alertcondition(longCondition, title="Buy Alert", message="BUY") alertcondition(shortCondition, title="Sell Alert", message="SELL")