
Se trata de una estrategia de trading cuantitativa desarrollada basándose en el indicador de extorsión de dinámica de LazyBear. La estrategia integra la banda de Bryn, el canal de Kalkin y el indicador de dinámica, para lograr una combinación de indicadores técnicos que permiten un alto índice de ganancias en las operaciones de ruptura de dinámica.
El indicador central de esta estrategia es el indicador de la presión de LazyBear. Este indicador determina si el cinturón de Brin ha sido comprimido por el canal de Kalkin, y cuando ocurre la presión, representa que el mercado está entrando en un punto de explosión potencial.
Concretamente, la estrategia calcula primero la banda de Brin de 21 ciclos, con una amplitud de 2 veces la diferencia estándar del precio. Al mismo tiempo, se calcula el canal de Kalkin de 20 ciclos, con una amplitud de 1.5 veces la amplitud del precio. Cuando la banda de Brin es exprimiida por el anillo del canal de Kalkin, se emite una señal de expansión.
En la salida, la tendencia puede revertirse cuando el color del indicador de la dinámica se vuelve gris y se elimina la posición, lo que representa el fin del estado de expansión.
La estrategia integra el cinturón de Brin, el canal de Kalkin y los indicadores de dinámica, que pueden mejorar la precisión de las decisiones comerciales y reducir la probabilidad de transacciones erróneas al juzgar la relación integral de estos indicadores.
Las estrategias de extorsión de dinámica pueden capturar los puntos clave de las explosiones del mercado, que a menudo son los puntos de inflexión en los que el mercado toma decisiones importantes sobre la dirección, y si se hace correctamente, el período de operación posterior es más largo, por lo que la estrategia tiene un gran potencial de ganancias.
En comparación con los breakouts aleatorios, los puntos de entrada seleccionados por la estrategia se encuentran en los puntos de expansión de la Franja de Bryn y el Canal de Kalkin, lo que determina una alta tasa de éxito de las transacciones a través de la integración de indicadores.
Los parámetros de periodicidad y de ancho de banda de la banda de Bryn y el canal de Kalkin tienen un gran impacto en los resultados de las operaciones de la estrategia. Si los parámetros se establecen incorrectamente, puede causar error de juicio. Esto requiere encontrar el parámetro óptimo a través de una gran cantidad de repeticiones.
Cualquier breakout conlleva el riesgo de fracaso, y es posible que una vez que el precio haya superado el punto seleccionado por la estrategia, se vuelva a reajustar y cause pérdidas. Esto requiere un estricto control de pérdidas.
Cuando el estiramiento termina, la estrategia elimina todas las posiciones. Sin embargo, a veces la tendencia de los precios puede continuar, lo que genera el riesgo de una salida anticipada de la estrategia. Esto requiere optimizar la lógica de juicio de salida.
Se puede buscar un mejor ciclo de parámetros y una mejor configuración de ancho de banda para las bandas de Bryn y Calkin, a través de una mayor cantidad de datos de prueba de errores de retroalimentación, para mejorar la eficacia de la estrategia.
Se puede configurar un stop móvil o un stop oscilante, que se detiene rápidamente cuando el precio se invierte para controlar el máximo retiro de la estrategia.
Cuando la estrategia se retira de la posición, se pueden establecer ciertas condiciones de reingreso, y si la tendencia continúa, se puede volver a entrar en el campo.
Se puede intentar combinar más tipos diferentes de indicadores, como otros indicadores de volatilidad, indicadores de volumen de negocios, etc., para crear una estrategia de combinación de indicadores integrados para mejorar la precisión de la toma de decisiones.
La estrategia integra el cinturón de Bryn, el canal de Calderón y los indicadores de dinámica, y al juzgar la relación de estos indicadores, selecciona los puntos de entrada de ruptura con una alta tasa de éxito. Hay espacio para la optimización en varios aspectos, como la optimización de los parámetros, la estrategia de parada de pérdidas, las condiciones de reingreso y la integración de indicadores compuestos.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
//All credits to LazyBear. All I did was turn it into a strategy!
strategy(title = "SQZMOM STRAT", overlay=false)
// --- GENERAL INPUTS ---
FromMonth = input(defval = 4, title = "From Month", minval = 1, maxval = 12)
FromYear = input(defval = 2020, title = "From Year", minval = 2012)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToYear = input(defval = 9999, title = "To Year", minval = 2017)
FromDay = 1
ToDay = 1
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
window() => true
get_round(value, precision) => round(value * (pow(10, precision))) / pow(10, precision)
trade_leverage = input(1, title = "Trade - Leverage", step = 0.25)
trade_risk = input(100, title = "Trade - Risk Percent", type = input.float, step = 0.1, minval = 0.1, maxval = 100)
tradeType = input("LONG", title="What trades should be taken : ", options=["LONG", "SHORT", "BOTH"])
// --- SQZMOM CODE
length = input(21, title="BB Length")
mult = input(2.0,title="BB MultFactor")
lengthKC=input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")
useTrueRange = input(true, title="Use TrueRange (KC)", type=input.bool)
// Calculate BB
source = close
basis = sma(source, length)
dev = multKC * stdev(source, length)
upperBB = basis + dev
lowerBB = basis - dev
// Calculate KC
ma = sma(source, lengthKC)
range = useTrueRange ? tr : (high - low)
rangema = sma(range, lengthKC)
upperKC = ma + rangema * multKC
lowerKC = ma - rangema * multKC
sqzOn = (lowerBB > lowerKC) and (upperBB < upperKC)
sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC)
noSqz = (sqzOn == false) and (sqzOff == false)
val = linreg(source - avg(avg(highest(high, lengthKC), lowest(low, lengthKC)),sma(close,lengthKC)), lengthKC,0)
bcolor = color.gray
if (val > 0 and val > nz(val[1]))
bcolor := color.green
if (val < 0 and val < nz(val[1]))
bcolor := color.red
scolor = noSqz ? color.blue : sqzOn ? color.black : color.gray
plot(val, color=bcolor, style=plot.style_histogram, linewidth=4)
plot(0, color=scolor, style=plot.style_cross, linewidth=2)
// --- VWMA CODE ---
useVWMA = input(false, title = "Use VWMA to selectively long/short?", type = input.bool)
lengthVWMA=input(42, title = "VWMA Length", step = 1, minval = 1)
useCV=input(false, type=input.bool, title="Use Cumulative Volume for VWMA?")
nbfs = useCV ? cum(volume) : sum(volume, lengthVWMA)
medianSrc=close
calc_evwma(price, lengthVWMA, nb_floating_shares) => data = (nz(close[1]) * (nb_floating_shares - volume)/nb_floating_shares) + (volume*price/nb_floating_shares)
m=calc_evwma(medianSrc, lengthVWMA, nbfs)
// ---STRATEGY---
if ((tradeType == "LONG" or tradeType == "BOTH") and (m>0 or useVWMA == false))
longCondition = (val > 0 and noSqz == 0 and sqzOn == 0 and sqzOn[1] == 1)
if (longCondition)
contracts = get_round((strategy.equity * trade_leverage / close) * (trade_risk / 100), 4)
strategy.entry("LONG", strategy.long, qty = contracts, when = window())
if((tradeType == "SHORT" or tradeType == "BOTH") and (m<0 or useVWMA == false))
shortCondition = (val < 0 and noSqz == 0 and sqzOn == 0 and sqzOn[1] == 1)
if (shortCondition)
contracts = get_round((strategy.equity * trade_leverage / close) * (trade_risk / 100), 4)
strategy.entry("SHORT", strategy.short, qty = contracts, when = window())
if (bcolor == color.gray)
strategy.close("LONG")
strategy.close("SHORT")