Индикатор импульса сжатия

Автор:Чао Чжан, Дата: 2022-05-06 17:19:10
Тэги:SMA

Это производный показатель волатильности TTM Squeeze Джона Картера, о котором говорится в его книге Mastering the Trade (глава 11).

Черные кресты на средней линии показывают, что рынок только что вошел в сжатие (полосы Боллинджера находятся в канале Келтнера). Это означает низкую волатильность, рынок готовится к взрывному движению (вверх или вниз). Серые кресты означают Squeeze release.

Мистер Картер предлагает подождать до первого серого цвета после черного креста и занять позицию в направлении импульса (например, если значение импульса выше нуля, идите на длинный). Выйти из позиции, когда импульс меняется (увеличение или уменьшение, обозначаемое изменением цвета). Мой (ограниченный) опыт с этим показывает, что дополнительный индикатор, такой как ADX / WaveTrend, необходим, чтобы не пропустить хорошие точки входа. Кроме того, Мистер Картер использует простой индикатор импульса, в то время как я использовал другой метод (на основе правила) для составления гистограммы.

Проверка

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) 
       
    
    

Связанные

Больше