Indicador de impulso de compresión

El autor:¿ Qué pasa?, Fecha: 2022-05-06 17:19:10
Las etiquetas:La SMA

Este es un derivado del indicador de volatilidad TTM Squeeze de John Carter, como se discute en su libro Mastering the Trade (capítulo 11).

Las cruces negras en la línea media muestran que el mercado acaba de entrar en una compresión (las bandas de Bollinger están en el canal de Keltner). Esto significa baja volatilidad, el mercado se prepara para un movimiento explosivo (hacia arriba o hacia abajo). Las cruces grises significan Squeeze release.

El Sr. Carter sugiere esperar hasta el primer gris después de una cruz negra, y tomar una posición en la dirección del impulso (por ejemplo, si el valor del impulso está por encima de cero, ir largo). Salir de la posición cuando el impulso cambia (aumento o disminución indicado por un cambio de color). Mi (limitada) experiencia con esto muestra, un indicador adicional como ADX / WaveTrend, es necesario para no perder buenos puntos de entrada. También, el Sr. Carter utiliza un simple indicador de impulso, mientras que he utilizado un método diferente (basado en reglinas) para trazar el histograma.

Las pruebas

img


/*backtest
start: 2021-05-05 00:00:00
end: 2022-05-04 23:59:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/

//
// @author LazyBear 
// List of all my indicators: https://www.tradingview.com/v/4IneGo8h/
//
study(shorttitle = "SQZMOM_LB", title="Squeeze Momentum Indicator [LazyBear]", overlay=false)

length = input(20, title="BB Length")
mult = input(2.0,title="BB MultFactor")
lengthKC=input(14, title="KC Length")
multKC = input(1.5, title="KC MultFactor")

useTrueRange = input(true, title="Use TrueRange (KC)",defval=true)

// Calculate BB
source = close
basis = ta.sma(source, length)
dev = multKC * ta.stdev(source, length)
upperBB = basis + dev
lowerBB = basis - dev

// Calculate KC
ma = ta.sma(source, lengthKC)
range = useTrueRange ? ta.tr : (high - low)
rangema = ta.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 = ta.linreg(source  -  math.avg(math.avg(ta.highest(high, lengthKC), ta.lowest(low, lengthKC)),ta.sma(close,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 = 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)

if val >0 and val < nz(val[1])
    strategy.entry("entry short", strategy.short)
else if val <0 and val > nz(val[1]) 
    strategy.entry("entry long", strategy.long) 
       
    
    

Relacionados

Más.