Стратегия сглаженного целевого диапазона волатильности


Дата создания: 2024-01-29 16:22:14 Последнее изменение: 2024-01-29 16:22:14
Копировать: 0 Количество просмотров: 591
1
Подписаться
1617
Подписчики

Стратегия сглаженного целевого диапазона волатильности

Обзор

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

Стратегический принцип

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

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

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

Эта стратегия имеет следующие преимущества:

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

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

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

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

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

Однако эта стратегия также несет в себе некоторые риски:

  1. При аномальных колебаниях на рынке, скольжение может не точно отражать реальные колебания, что приводит к ошибочным сигналам. Модель может быть оптимизирована путем корректировки параметров.

  2. Целевой диапазон, если он неправильно установлен, может привести к слишком высокой частоте или недостаточному сигналу. Можно протестировать различные параметры, чтобы найти оптимальный диапазон.

  3. Определение прорывного сигнала задержкой времени может привести к досрочному или позднему поступлению. Подтверждение может быть осуществлено в сочетании с другими показателями.

Направление оптимизации

Эта стратегия может быть оптимизирована в следующих направлениях:

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

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

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

  4. Установка стоп-листов или trailing stops для контроля одиночных стопов.

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

Подвести итог

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

Исходный код стратегии
/*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")