본문 바로가기
전략

스퀴즈 모멘텀 전략(1) [Squeez Momentum Indicator, LazyBear]

by 태짱S2 2025. 1. 2.
반응형

트레이딩뷰에서 지표를 누르면 커뮤니티에서 가장 좋아요를 많이 받은 전략이 있다. 트레이딩뷰를 사용하는 사람이라면 한번쯤은 보았을 법한 LazyBear라는 사람이 만든 지표이다. 25년 1월 1일 기준으로 라이크 수가 압도적으로 많다.


 코드는 트레이딩뷰를 통해서 공개되어 있다. 아래코드를 보면 Indicator대신 Study함수로 쓰여있다. 트레이딩뷰에서 지표로서 확인하는 데에는 문제가 없지만 깔끔하게 버전5로 바꿔서 저장하는게 마음 편하다. 

//
// @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(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")

useTrueRange = input(true, title="Use TrueRange (KC)", type=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 = iff( val > 0,
            iff( val > nz(val[1]), lime, green),
            iff( val < nz(val[1]), red, maroon))
scolor = noSqz ? blue : sqzOn ? black : gray
plot(val, color=bcolor, style=histogram, linewidth=4)
plot(0, color=scolor, style=cross, linewidth=2)

Chat gpt를 통해서 스크립트를 업그레이드 해달라고 했다. Study 등 몇 번의 시행착오를 거쳐서 아래의 코드를 얻어냈다. 

// @author LazyBear
// List of all my indicators: https://www.tradingview.com/v/4IneGo8h/

//@version=5
indicator(title="Squeeze Momentum Indicator [LazyBear]", shorttitle="SQZMOM_LB", overlay=false)

// Input variables
length = input.int(20, title="BB Length")
mult = input.float(2.0, title="BB MultFactor")
lengthKC = input.int(20, title="KC Length")
multKC = input.float(1.5, title="KC MultFactor")
useTrueRange = input.bool(true, title="Use TrueRange (KC)")

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

// Calculate KC
ma = ta.sma(source, lengthKC)
kcRange = useTrueRange ? ta.tr : (high - low)
kcRangeMa = ta.sma(kcRange, lengthKC)
upperKC = ma + kcRangeMa * multKC
lowerKC = ma - kcRangeMa * multKC

// Squeeze conditions
sqzOn = (lowerBB > lowerKC) and (upperBB < upperKC)
sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC)
noSqz = not sqzOn and not sqzOff

// Linear regression value
val = ta.linreg(source - ((ta.highest(high, lengthKC) + ta.lowest(low, lengthKC)) / 2 + ta.sma(close, lengthKC)) / 2, lengthKC, 0)

// Colors
bcolor = val > 0 ? (val > nz(val[1]) ? color.lime : color.green) : (val < nz(val[1]) ? color.red : color.maroon)
scolor = noSqz ? color.blue : sqzOn ? color.black : color.gray

// Plots
plot(val, color=bcolor, style=plot.style_histogram, linewidth=4)
plot(0, color=scolor, style=plot.style_cross, linewidth=2)

그런데 잘보니 Version5가 최신인줄 알았는데 나도모르는 사이에 Version6가 나와있었다.. 그래서 트레이딩뷰 자체 Convert기능을 통해서 스크립트를 수정해줬다. 아래가 수정한 최종본

// @author LazyBear
// List of all my indicators: https://www.tradingview.com/v/4IneGo8h/

//@version=6
indicator(title = 'Squeeze Momentum Indicator [LazyBear]', shorttitle = 'SQZMOM_LB', overlay = false)

// Input variables
length = input.int(20, title = 'BB Length')
mult = input.float(2.0, title = 'BB MultFactor')
lengthKC = input.int(20, title = 'KC Length')
multKC = input.float(1.5, title = 'KC MultFactor')
useTrueRange = input.bool(true, title = 'Use TrueRange (KC)')

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

// Calculate KC
ma = ta.sma(source, lengthKC)
kcRange = useTrueRange ? ta.tr : high - low
kcRangeMa = ta.sma(kcRange, lengthKC)
upperKC = ma + kcRangeMa * multKC
lowerKC = ma - kcRangeMa * multKC

// Squeeze conditions
sqzOn = lowerBB > lowerKC and upperBB < upperKC
sqzOff = lowerBB < lowerKC and upperBB > upperKC
noSqz = not sqzOn and not sqzOff

// Linear regression value
val = ta.linreg(source - ((ta.highest(high, lengthKC) + ta.lowest(low, lengthKC)) / 2 + ta.sma(close, lengthKC)) / 2, lengthKC, 0)

// Colors
bcolor = val > 0 ? val > nz(val[1]) ? color.lime : color.green : val < nz(val[1]) ? color.red : color.maroon
scolor = noSqz ? color.blue : sqzOn ? color.black : color.gray

// Plots
plot(val, color = bcolor, style = plot.style_histogram, linewidth = 4)
plot(0, color = scolor, style = plot.style_cross, linewidth = 2)

아래에서 위는 원래 LazyBear의 지표고, 아래는 그 지표를 Chat GPT를 통해 개선?하고 Convert한 결과물이다. 다행히 지표를 최신버전으로 업그레이드는 성공했다. 물론 지표로만 쓰려면은 이런 업그레이드를 안해도 되지만, 지표를 전략으로 바꾸어서 매매에 적용하려면 최신버전으로 하는게 깔끔하고 뒤탈이 없다. 

 

 


일단 코드는 완성했고 본격적으로 위 지표를 전략으로 만들어 보기 전에 위 지표를 분석한 결과는 아래와 같다. 아래 분석글로 포스팅을 마치며 다음시간에는 스퀴즈 모멘텀 지표를 활용하여 유용한 전략을 만들어보기로하자. 사실 전략을 만든다라기 보다는 지표에 숟가락을 얹는것과 같다. 만든 전략은 추후에 공유해주겠다.


💡 Squeeze Momentum Indicator [LazyBear] 분석

이 지표는 무엇을 하는가?
Squeeze Momentum Indicator(SQZMOM)는 시장의 변동성 변화와 방향성을 감지하기 위한 도구입니다. Bollinger Bands와 Keltner Channels를 결합하여 시장이 "수축(squeeze)" 상태인지 또는 "확장(release)" 상태인지 파악하고, 가격의 움직임 방향을 시각적으로 제공합니다.


📌 주요 구성 요소

1. Bollinger Bands (BB)

  • BB Length: 기간 설정 (기본값 20)
  • BB MultFactor: 표준편차 계수 (기본값 2.0)
  • 중심선(basis)은 단순 이동평균(SMA), 상단과 하단 밴드는 표준편차를 이용해 계산합니다.

2. Keltner Channels (KC)

  • KC Length: 기간 설정 (기본값 20)
  • KC MultFactor: 계수 (기본값 1.5)
  • True Range(TR)을 사용하여 채널의 폭을 계산하며, 사용 여부는 설정에서 선택 가능합니다.

3. Squeeze 조건

  • Squeeze On: Bollinger Bands가 Keltner Channels 안으로 들어오는 경우 → 시장이 압축 상태.
  • Squeeze Off: Bollinger Bands가 Keltner Channels를 벗어나는 경우 → 시장이 확장 상태.
  • No Squeeze: 위 두 조건이 모두 아닌 경우.

🔎 핵심 계산 및 시각화

1. Linear Regression (선형 회귀)

지표는 가격의 변화량을 선형 회귀값(val)으로 계산합니다.

  • 양수(val > 0)일 때: 상승 추세.
  • 음수(val < 0)일 때: 하락 추세.

2. 컬러 시각화

  • 히스토그램(bcolor):
    • Lime/Green: 상승 추세.
    • Red/Maroon: 하락 추세.
  • 0선(scolor):
    • Blue: No Squeeze.
    • Black: Squeeze On.
    • Gray: Squeeze Off.

📈 결과 플롯

  • plot(val): 가격 변화량을 히스토그램으로 표시.
  • plot(0): 0선을 기준으로 상태를 시각화.

📝 요약

  • 시장의 변동성이 줄어들어 에너지가 축적되는 시점을 찾고자 한다면, 이 지표가 유용합니다.
  • Squeeze On 상태는 돌파 직전의 신호로, Squeeze Off는 시장이 움직이기 시작한 상태를 나타냅니다.
  • 컬러와 히스토그램을 활용해 상승/하락 방향성을 직관적으로 확인할 수 있습니다.

이 지표는 단순히 추세를 따르기보다는 변동성의 변화와 움직임 방향을 결합해 더 전략적인 트레이딩 결정을 도와줍니다. 🚀


궁금한 점이나 활용 방법을 더 알고 싶으시면 댓글로 알려주세요! 😊

 

❤️ [수수료 할인] OKX 거래소 가입 링 :  https://okx.com/join/41769626

 

Welcome Bonus | Register in OKX | Cryptocurrency Bitcoin Registration | 41769626

Sign up and log in to the OKX app to get exciting rewards.

www.okx.com

 

❤️ 트레이딩 뷰 가입 링크 :  https://kr.tradingview.com/pricing/?share_your_love=kto6459

 

트레이딩뷰에 가입하고 $15를 적립하세요!

내 링크로 트레이딩뷰에 가입하세요. 전 세계 60 백만 명 이상의 트레이더와 투자자와 함께 최고의 차트 도구와 커뮤니티를 경험하세요.

kr.tradingview.com

 

반응형