Стратегия торговли Squeeze Momentum на основе индикатора LazyBear

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

img

Обзор

Эта стратегия основана на Squeeze Momentum Indicator 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)



Больше