Indicateur de momentum de compression

Auteur:ChaoZhang est là., Date: 2022-05-06 17:19:10
Les étiquettes:SMA

Il s'agit d'un dérivé de l'indicateur de volatilité TTM Squeeze de John Carter, tel que décrit dans son livre Mastering the Trade (chapitre 11).

Les croix noires sur la ligne médiane montrent que le marché vient d'entrer dans une contraction (les bandes de Bollinger sont avec dans le canal Keltner). Cela signifie une faible volatilité, le marché se préparant à un mouvement explosif (haut ou bas). Les croix grises signifient Squeeze release.

M.Carter suggère d'attendre le premier gris après une croix noire, et de prendre une position dans le sens de la dynamique (par exemple, si la valeur de la dynamique est supérieure à zéro, aller long). Sortir de la position lorsque la dynamique change (augmentation ou diminution signifiée par un changement de couleur). Mon expérience (limitée) avec cela montre, un indicateur supplémentaire comme ADX / WaveTrend, est nécessaire pour ne pas manquer de bons points d'entrée.

Réécriture

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) 
       
    
    

Relationnée

Plus de