Прорыв полос Боллинджера с помощью стратегии фильтра волатильности

Автор:Чао Чжан, Дата: 2024-03-08 15:28:05
Тэги:

img

Обзор стратегии

Стратегия Bollinger Bands Breakout with Volatility Filter - это торговая стратегия, основанная на индикаторе Bollinger Bands. Она использует Bollinger Bands для определения позиции и волатильности цены относительно скользящей средней, таким образом, решая о точках входа и выхода.

Принципы стратегии

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

Условия входа в стратегию основаны на позиции цены закрытия по отношению к полосам Боллинджера. Если направление торговли установлено на длинный (tradeDirection>=0) и цена закрытия прорывается ниже нижней полосы на определенный процент (lower_breakout_pct), открывается длинная позиция; если направление торговли установлено на короткий (tradeDirection<=0) и цена закрытия прорывается выше верхней полосы на определенный процент (upper_breakout_pct), открывается короткая позиция. Параметры процента прорыва позволяют цене слегка прорваться через полосы Боллинджера, прежде чем ввести позицию для подтверждения тренда.

С другой стороны, если скорость изменения двух последовательных свечей превышает установленный порог волатильности (Волатильность), текущая волатильность рынка считается высокой, и стратегия не откроет новых позиций.

Если цена закрытия длинной позиции достигнет верхней полосы (верхней зоны),long_win_pct), или цена закрытия короткой позиции достигает ближайшей нижней полосы (нижняя + область)Кроме того, если нереализованный убыток позиции превышает предопределенный максимальный процент вывода (max_drawdown_percent), стратегия также закрывает позицию для остановки убытков.

Преимущества стратегии

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

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

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

  4. Стратегия использует механизмы получения прибыли и остановки убытков для активного управления позициями и закрытия их, когда цены возвращаются на ключевые уровни.

Стратегические риски

  1. По сути, полосы Боллинджера являются отстающим индикатором и имеют определенную задержку в реакции на рынок.

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

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

  4. Стратегия не предусматривает остановки остановки потерь или остановки безубыточности после открытия позиций, что может привести к некоторому снижению прибыли.

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

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

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

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

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

Резюме

Стратегия Bollinger Bands Breakout с фильтром волатильности использует характеристику ценовой позиции и волатильности Bollinger Bands для построения двусторонней торговой стратегии. Уникальным аспектом этой стратегии является фильтр волатильности, который избегает торговли на чрезвычайно волатильных рынках, а также устанавливает относительно простые условия получения прибыли и остановки потери. В целом стратегия включает в себя достаточно полную логику входа и выхода и контроль рисков, но есть возможность для дальнейшей оптимизации с точки зрения адаптации к изменениям рынка, применимости параметров и эффективности остановки. Если можно ввести больше технических индикаторов, динамических параметров и оптимизации управления позициями, надежность и рентабельность стратегии могут быть улучшены.


/*backtest
start: 2024-02-29 00:00:00
end: 2024-03-07 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("[Oppen Chow] Super BBS 1.0", default_qty_type = strategy.percent_of_equity, default_qty_value =100, initial_capital=500, commission_type=strategy.commission.percent, commission_value=0.08, pyramiding=2 )

// Input parameters
length = 20
mult = 2
max_drawdown_percent = input(5.5, "Maximum Acceptable Drawdown") / 100
upper_breakout_pct = input(50, "Short Entry Breakout Percentage") / 100
lower_breakout_pct = input(25, "Long Entry Breakout Percentage") / 100
tradeDirection = input(1, title="Trade Direction")
Volatility = input(0.5, title="Volatility") / 100
long_win_pct = input(-0.15, title = "Long Settlement Rate Near Boll Upper Limit")
short_win_pct = input(0.4, title = "Short Settlement Rate Near Boll Lower Limit")

// Bollinger Bands calculation
basis = ta.sma(close, length)
dev = mult * ta.stdev(close, length)
upper = basis + dev
lower = basis - dev
area = upper - lower

// Calculate the rate of change for two consecutive candlesticks
var float change1 = na
var float change2 = na
change1 := change2
change2 := ((close - open) / open) 

// Check for two or more consecutive candlesticks with a change rate greater than 0.5%
var bool highVolatility = false
highVolatility := change2 > Volatility

// Trading logic
var float highestPriceSinceOpen = na
var float lowestPriceSinceOpen = na
var int profitableDrawbackCount = 1


// Entry logic - In the absence of high volatility
if not highVolatility and strategy.position_size == 0
    if (tradeDirection >= 0) and (close < lower - area * lower_breakout_pct)
        strategy.entry("Long", strategy.long)
        highestPriceSinceOpen := close
        profitableDrawbackCount := 0
    if (tradeDirection <= 0) and (close > upper + area * upper_breakout_pct)
        strategy.entry("Short", strategy.short)
        lowestPriceSinceOpen := close
        profitableDrawbackCount := 0


if strategy.position_size > 0 and close > upper - area * long_win_pct
    strategy.close("Long", comment = "Take Profit")
if strategy.position_size < 0 and close < lower + area * short_win_pct
    strategy.close("Short", comment = "Take Profit")

// Stop loss logic - Based on drawdown percentage
if strategy.position_size > 0
    if (strategy.position_avg_price - close)/strategy.position_avg_price >= max_drawdown_percent
        strategy.close("Long", comment = "Drawdown Stop Loss")
else if strategy.position_size < 0
    if (close - strategy.position_avg_price)/strategy.position_avg_price >= max_drawdown_percent
        strategy.close("Short", comment = "Drawdown Stop Loss")


Больше