Количественные торговые стратегии, основанные на LazyBear Compressed Mobility Indicator

Автор:Чао Чжан, Дата: 2024-02-05 14:48:01
Тэги:

基于LazyBear压缩动量指标的量化交易策略

Обзор

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

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

Эта стратегия использует индикаторы Блинн-Бэнд и Кельтнер-Паннель для расчета ценового коридора, который, когда цена проходит через коридор, рассматривается как сигнал повышенной волатильности. Она сочетает в себе индикатор сжатого движения 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)



Больше информации