Indicador de momento de compressão

Autora:ChaoZhang, Data: 2022-05-06 17:19:10
Tags:SMA

Este é um derivado do indicador de volatilidade TTM Squeeze de John Carter, conforme discutido em seu livro Mastering the Trade (capítulo 11).

Os cruzes pretas na linha média mostram que o mercado acabou de entrar em um aperto (Bandas de Bollinger estão no canal de Keltner). Isso significa baixa volatilidade, o mercado se preparando para um movimento explosivo (para cima ou para baixo). Cruzes cinzentas significam Squeeze release.

O Sr. Carter sugere esperar até o primeiro cinza após uma cruz preta e tomar uma posição na direção do momento (por exemplo, se o valor do momento estiver acima de zero, vá longo). Saia da posição quando o momento mudar (aumento ou diminuição significado por uma mudança de cor). Minha experiência (limitada) com isso mostra que um indicador adicional como o ADX / WaveTrend é necessário para não perder bons pontos de entrada. Além disso, o Sr. Carter usa um indicador de momento simples, enquanto eu usei um método diferente (baseado em reglinas) para traçar o histograma.

Revisão

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

Mais.