Количественная торговая стратегия на основе индикатора компрессионного импульса LazyBear


Дата создания: 2024-02-05 14:48:01 Последнее изменение: 2024-02-05 14:48:01
Копировать: 0 Количество просмотров: 1698
1
Подписаться
1617
Подписчики

Количественная торговая стратегия на основе индикатора компрессионного импульса LazyBear

Обзор

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

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

Эта стратегия использует индикатор Брин-Бенда и индикатор Keltner-Channel для расчета ценового канала, который рассматривается как сигнал повышенной волатильности, когда цена прорывается через канал. Она объединяет индикатор сжатия LazyBear, который использует метод линейной регрессии для определения направления ценового движения.

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

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

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

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

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

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

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

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

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

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

// @version=4
// Strategy based on LazyBear Squeeze Momentum Indicator
// © Bitduke
// All scripts: https://www.tradingview.com/u/Bitduke/#published-scripts

strategy(shorttitle="SMS", title="Squeeze Momentum Strategy", overlay=false )

length = input(12, title="BB Length")
mult = input(2.0, title="BB MultFactor")
lengthKC = input(16, title="KC Length")
mult_kc = input(1.5, title="KC MultFactor")


//FILTERS
useMomAverage = input(false, title="Filter for Momenutum value", type=input.bool)
MomentumMin = input(20, title="Min for momentum")

// Calculate BB
src = ohlc4

ma_1 = sma(src, length)
ma_2 = sma(src, lengthKC)
range_ma = sma(high - low, lengthKC)

dev = mult * stdev(src, length)

upper_bb = ma_1 + dev
lower_bb = ma_1 - dev

upper_kc = ma_2 + range_ma * mult_kc
lower_kc = ma_2 - range_ma * mult_kc

sqz_on = lower_bb > lower_kc and upper_bb < upper_kc
sqz_off = lower_bb < lower_kc and upper_bb > upper_kc
no_sqz = sqz_on == false and sqz_off == false

val = linreg(src - avg(avg(highest(hl2, lengthKC), lowest(low, lengthKC)), sma(hl2, lengthKC)), lengthKC, 0)

bcolor = iff(val > 0, iff(val > nz(val[1]), color.lime, color.green), iff(val < nz(val[1]), color.red, color.maroon))
scolor = no_sqz ? color.blue : sqz_on ? color.black : color.aqua
plot(val, color=bcolor, style=plot.style_histogram, linewidth=4)
plot(0, color=scolor, style=plot.style_cross, linewidth=2)

//LOGIC
//momentum filter
filterMom = useMomAverage ? abs(val) > MomentumMin / 100000 ? true : false : true

//standard condition
longCondition = scolor[1] != color.aqua and scolor == color.aqua and bcolor == color.lime and filterMom
exitLongCondition = bcolor == color.green
shortCondition = scolor[1] != color.aqua and scolor == color.aqua and bcolor == color.red and filterMom
exitShortCondition = bcolor == color.maroon

// Risk Management Sysyem
stop_loss = input(defval = 600, title="Stop Loss", minval = 0)
take_profit = input(defval = 1000, title="Take Profit", minval = 0)
trailing_stop = input(defval = 20, title="Trailing Stop", minval = 0)
// If the zero value is set for stop loss, take profit or trailing stop, then the function is disabled
s_loss = stop_loss >= 1 ? stop_loss : na
tk_profit = take_profit >= 1 ? take_profit : na
tr_stop = trailing_stop >= 1 ? trailing_stop : na


//STRATEGY
strategy.entry("SQ_Long", strategy.long, when=longCondition)
strategy.exit("Exit Long", from_entry = "SQ_Long", profit = take_profit, trail_points = trailing_stop, loss = s_loss)
strategy.close("SQ_Long", exitLongCondition)

strategy.entry("SQ_Short", strategy.short, when=shortCondition)
strategy.exit("Exit Short", from_entry = "SQ_Short", profit = take_profit, trail_points = trailing_stop, loss = s_loss )
strategy.close("SQ_Short", when=exitShortCondition)