
Esta estrategia se basa en el indicador de la dinámica de compresión de LazyBear, con la adición de filtros de dinámica, el cambio de fuentes de datos y la adición de un sistema de gestión de riesgos con períodos de tiempo de retroceso personalizables, diseñados para capturar explosiones de precios después de la compresión de la volatilidad.
La estrategia utiliza el indicador de bandas de Brin y el indicador de canales de Keltner para calcular el canal de precios, que se considera una señal de aumento de la volatilidad cuando el precio rompe el canal. Se combina con el indicador de movimiento de compresión de LazyBear, que utiliza un método de regresión lineal para determinar la dirección del movimiento de los precios.
La estrategia incluye un filtro de dinámica, que emite una señal de negociación solo cuando el valor absoluto de dinámica supera el umbral. Cuando la compresión de volatilidad (que se ajusta dentro del canal) y el filtro de dinámica pasa, la estrategia determina la dirección de la tendencia, hace más o vacío. Al mismo tiempo, establece paros, paradas y paradas de seguimiento para controlar el riesgo.
La estrategia integra varios indicadores de evaluación, es más completa; incorpora un mecanismo de gestión de riesgos, que permite limitar las pérdidas individuales; puede determinar la dirección de la tendencia de los precios en el momento oportuno después de la compresión de la volatilidad; los parámetros se pueden personalizar y son más adaptables.
Los riesgos principales son: Falsa ruptura que conduce a un juicio erróneo; Parámetros mal configurados, no revertir en el tiempo; El stop loss se expande por la ruptura que causa pérdidas. Se pueden optimizar los parámetros, ajustar los parámetros de gestión de riesgos, elegir la variedad y el período de negociación adecuados para reducir estos riesgos.
Se puede considerar la combinación de otras señales de filtración de indicadores, como el indicador de volumen de transacciones; ajustar los valores de pérdida dinámica con mayor precisión; establecer paradas de retiro para controlar aún más el riesgo; probar los efectos de más variedades de datos. Estas optimizaciones pueden hacer que las estrategias sean más estables y generalizadas.
Esta estrategia es más completa para juzgar la tendencia y la volatilidad de los precios, tiene un alto grado de integración, las medidas de control de riesgo son más completas, se puede mejorar aún más de acuerdo con la dirección de optimización, y tiene una gran capacidad de adaptación a los estallidos de precios después de la compresión de la volatilidad.
/*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)