For those of you who enjoy using the TTM Squeeze & Momentum indicator, this should be a handy addition to your ThinkorSwim chart setup. The script will add the status of the TTM Squeeze for stocks on your watchlist via a new column. You can select whichever timeframe you would like to scan for TTM squeeze.
Stocks usually break out of consolidations and by having the TTM Squeeze on your watchlist it helps to alert when they do.
Here is what each signal and labels represent:
Credits:
Stocks usually break out of consolidations and by having the TTM Squeeze on your watchlist it helps to alert when they do.
Here is what each signal and labels represent:
- Bright Red: The stock is in Buy zone
- Dark Red: Market compression is currently in this time period. The number reveals the amount of dots on your TTM Squeeze indicator.
- Dark Green: The squeeze has fired. The number notes how many dots (up to 5) and whether the squeeze signaled Long or Short.
- Black: No squeeze on this time frame
thinkScript Code
Code:
# Squeeze watchlist column
# Red Background - Squeeze is building in the time period - number indicates how many dots
# w/ white "B" - Squeeze is building, stock is within "buy zone"
# Green Background - Squeeze has fired - number indicates how many dots (up to 5 dots)
# and whether Squeeze fired L(ong) or S(hort)
# Black Background - No Squeeze in play
# Original code by Eric Purdy of Simpler Trading 2017
# Modified code by Rich Stratmann to put in background colors and shorten column values
# Updates by dmccuskey
# - change background colors to aid content scanning
# - add "B" to time frames which are in the Buy Zone - between 8 & 21 EMA
# - change "0" to " " <space> so that the content doesn't show when row is highlighted
#ToS Share Code: https://tos.mx/IPrEhH
def sqz = !TTM_Squeeze().SqueezeAlert;
def direction = TTM_Squeeze()>TTM_Squeeze()[1];
def count = if sqz and !sqz[1] then 1 else count[1]+1;
def isFired = if !sqz and sqz[1] then 1 else 0;
def firedCount = if isFired then 1 else firedCount[1]+1;
def firedDirection = if isFired then direction else firedDirection[1];
def sumIsFired = sum(isFired,5);
def isFiredDir = sumIsFired && firedDirection;
# look for close buy zone
def ema8 = reference movAvgExponential(length=8);
def ema21 = reference movAvgExponential(length=21);
def currPrice = close();
def highVal = Max(ema8, ema21);
def lowVal = Min(ema8, ema21);
def inBuyZone = currPrice >= lowVal && currPrice <= highVal;
def sqzBuy = sqz && inBuyZone;
def sqzNoBuy = sqz && !inBuyZone;
addLabel(yes, Concat(if sqzBuy then "B " else "", if sqz then "" + count else if sumIsFired then “” + firedCount + if firedDirection then ” L” else ” S” else “ ”), if sqzBuy then color.white else color.black);
AssignBackgroundColor(if sqzNoBuy then CreateColor(170, 6, 0) else if sqzBuy then color.red else if sumIsFired then CreateColor(28, 105, 3) else color.black);
Shareable Link
https://tos.mx/uXplYiCredits:
- Eric Purdy and Rich Stratmann
- dmccuskey
Attachments
Last edited: