Стратегия плавной волатильности

Автор:Чао Чжан, Дата: 2024-01-29 16:22:14
Тэги:

img

Обзор

Эта стратегия генерирует ценовые диапазоны на основе сглаженной волатильности цены и производит торговые сигналы, когда цена проходит через диапазоны.

Логика стратегии

Стратегия сначала рассчитывает средний диапазон волатильности цены за определенный период, а затем сглаживает диапазон волатильности с использованием экспоненциальной скользящей средней для получения сглаженной волатильности. Сглаженная волатильность, умноженная на коэффициент, дает диапазон полос. Когда цена превышает верхнюю полосу, генерируется сигнал покупки. Когда цена превышает нижнюю полосу, генерируется сигнал продажи.

В частности, сглаженная волатильность smrng рассчитывается с помощью функции smoothrng. Верхняя полоса hband и нижняя полоса lband ценовых диапазонов затем рассчитываются на основе smrng. На основе этого настраиваются долгое условие longCondition и короткое условие shortCondition. Когда выполняется longCondition, генерируется сигнал покупки. Когда выполняется shortCondition, генерируется сигнал продажи.

Анализ преимуществ

Преимущества этой стратегии:

  1. Использование волатильности цен для построения торговых сигналов может эффективно отслеживать изменения рынка.

  2. Сглаживание волатильности с экспоненциальной скользящей средней может фильтровать шум и генерировать более надежные торговые сигналы.

  3. Диапазон диапазонов может быть скорректирован с помощью коэффициента волатильности, что делает стратегию более гибкой.

  4. В сочетании с прорывным суждением, он может своевременно поймать торговые возможности, когда происходит изменение тренда.

Анализ рисков

В этой стратегии также есть некоторые риски:

  1. При ненормальной волатильности рынка сглаженная волатильность может не отражать точно фактическую волатильность, что приводит к неправильным сигналам.

  2. Неправильное настройка диапазона диапазона может привести к перегрузке или недостаточному сигналу.

  3. В сигналах прорыва наблюдается временная задержка, которая может привести к преждевременному или позднему входу.

Руководство по оптимизации

Стратегия может быть оптимизирована посредством:

  1. Испытание различных циклов данных о ценах для определения наиболее подходящего периода для расчета волатильности.

  2. Пробовал разные алгоритмы скользящей средней, например, взвешенную скользящую среднюю.

  3. Введение объема торговли или других показателей для подтверждения сигналов прорыва.

  4. Установка стоп-лосса или стоп-последования для контроля потерь по сделке.

  5. Оптимизация коэффициента волатильности для определения оптимального диапазона полосы.

Резюме

Общая логика этой стратегии ясна, используя волатильность цен для построения диапазонов и прорывов цен для генерации торговых сигналов, которые могут эффективно отслеживать изменения тренда рынка.


/*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")

Больше