Стратегия блокировки широкополосных колебаний


Дата создания: 2024-02-22 13:43:14 Последнее изменение: 2024-02-22 13:43:14
Копировать: 0 Количество просмотров: 462
1
Подписаться
1234
Подписчики

Стратегия блокировки широкополосных колебаний

Обзор

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

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

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

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

После покупки мы активируем мобильную стратегию остановки убытков с двойным ATR в качестве стоп-дистанции. Это эффективно контролирует убытки.

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

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

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

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

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

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

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

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

Другой путь заключается в тестировании влияния различных параметров на результаты, таких как настройки, такие как цикл Брюлинга, цикл ATR и мобильный стоп-мобиль. Нам нужно использовать пошаговую оптимизацию, чтобы найти оптимальную комбинацию параметров.

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

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

Исходный код стратегии
/*backtest
start: 2023-02-15 00:00:00
end: 2024-02-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © DojiEmoji

//@version=4
strategy("[KL] Bollinger Bands Consolidation Strategy",overlay=true,pyramiding=1)

// Timeframe {
backtest_timeframe_start = input(defval = timestamp("01 Apr 2016 13:30 +0000"), title = "Backtest Start Time", type = input.time)
USE_ENDTIME = input(false,title="Define backtest end-time (If false, will test up to most recent candle)")
backtest_timeframe_end = input(defval = timestamp("19 Apr 2021 19:30 +0000"), title = "Backtest End Time (if checked above)", type = input.time)
within_timeframe = true
// }

// Indicator: BOLL bands {
BOLL_length = 20//input(20,title="Periods to lookback for BOLL and ATR calc. (default 20)")
BOLL_src = close
BOLL_center = sma(BOLL_src, BOLL_length)
BOLL_sDEV_x2 = 2 * stdev(BOLL_src, BOLL_length)
BOLL_upper = BOLL_center + BOLL_sDEV_x2
BOLL_lower = BOLL_center - BOLL_sDEV_x2
plot(BOLL_center, "Basis", color=#872323, offset = 0)
BOLL_p1 = plot(BOLL_upper, "Upper", color=color.navy, offset = 0, transp=50)
BOLL_p2 = plot(BOLL_lower, "Lower", color=color.navy, offset = 0, transp=50)
fill(BOLL_p1, BOLL_p2, title = "Background", color=#198787, transp=85)
// }
// ATR and volatility Indicator {
ATR_x2 = atr(BOLL_length) * 2 // multiplier aligns with BOLL
avg_volat = sma(ATR_x2, BOLL_length)
//}

// Trailing stop loss {
var entry_price = float(0)
var trailing_SL_buffer = float(0)
var stop_loss_price = float(0)
trail_profit_line_color = color.green
UPDATE_ATR_TSL = false
if strategy.position_size == 0 or not within_timeframe // make TSL line less visible
    trail_profit_line_color := color.black
    stop_loss_price := close - trailing_SL_buffer
else if strategy.position_size > 0
    if UPDATE_ATR_TSL and ATR_x2 < trailing_SL_buffer
        trailing_SL_buffer := ATR_x2
    stop_loss_price := max(stop_loss_price, close[1] - trailing_SL_buffer)
plot(stop_loss_price,color=trail_profit_line_color)
// }


IGNORE_BOLL_SHAPE = false//input(false,title="Ignore BOLL (vs ATR) during entry (experimental)")
IGNORE_VOLATILITY = false///input(false,title="Ignore average ATR during entry (experimental)")
// Main:
if within_timeframe
    // ENTRY:
    if (ATR_x2 > BOLL_sDEV_x2 or IGNORE_BOLL_SHAPE) and (avg_volat < avg_volat[1] or IGNORE_VOLATILITY)
        if strategy.position_size == 0
            entry_price := close
            trailing_SL_buffer := ATR_x2
            stop_loss_price := close - ATR_x2
            strategy.entry("Long",strategy.long, comment="enter")
        if strategy.position_size > 0
            strategy.entry("Long",strategy.long, comment="+")

    // EXIT:
    if strategy.position_size > 0
        if low <= stop_loss_price
            if close > entry_price
                strategy.close("Long", comment="take profit")
            else if low <= entry_price
                strategy.close("Long", comment="stop loss")
    
            if strategy.position_size == 0
                entry_price := 0