Estrategia de negociación de impulso de compresión basada en el indicador LazyBear

El autor:¿ Qué pasa?, Fecha: 2024-02-05 14:48:01
Las etiquetas:

img

Resumen general

Esta estrategia se basa en el Indicador de Momentum Squeeze de LazyBear, con filtros de impulso añadidos, fuente de datos cambiada, y sistema de gestión de riesgos mejorado y marco de tiempo de backtesting personalizable, con el objetivo de detectar brotes de precios después de la reducción de volatilidad.

Estrategia lógica

La estrategia utiliza bandas de Bollinger y canales de Keltner para calcular los canales de precios.

La estrategia agrega filtros de impulso, solo se negocia cuando el impulso absoluto excede un umbral. En la compresión de volatilidad (aplazamiento del canal) con el filtro de impulso pasado, juzga la dirección de la tendencia para largo / corto. También establece stop loss, take profit y trailing stop para controlar los riesgos.

Análisis de ventajas

La estrategia integra múltiples indicadores para un juicio integral. Limita las pérdidas por comercio con mecanismos de gestión de riesgos. Puede juzgar oportunamente las tendencias de precios posteriores a la compresión. Los parámetros personalizables lo hacen adaptable.

Análisis de riesgos

Los principales riesgos incluyen: rupturas falsas que causan juicios erróneos; no revertir a tiempo con ajustes de parámetros inadecuados; violaciones de stop loss que aumentan las pérdidas.

Direcciones de optimización

Considere la combinación de otros filtros de indicadores como volumen; ajuste fino del umbral de impulso para una mayor precisión; agregue stop loss de reducción para un control más estricto del riesgo; prueba de la efectividad en más productos. Estas optimizaciones pueden hacer que la estrategia sea más robusta y generalizada.

Resumen de las actividades

La estrategia evalúa las tendencias de los precios y la volatilidad de manera relativamente exhaustiva, con un alto grado de integración y mejoras en las medidas de control de riesgos.


/*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)



Más.