The New 52-Week Highs and Lows indicator for ThinkorSwim measures the number of stocks hitting new highs or lows on a specified index.
It includes data from popular indices like the NYSE, Nasdaq, Amex, and Arca.
New Highs & Lows (NH-NL) may be used as a contrarian indicator to detect extreme sentiments among bullish and bearish investors.
New Highs – New Lows Indicator for ThinkorSwim
#
# Copyright 2022 Scott J. Johnson (https://scottjjohnson.com)
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS-IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
# ExchangeListedNetHighLow
#
# Shows the number of new 52-week highs - new 52-week lows by day for the selected exchange. If the
# number of lows is greater than the number of highs, the value will be negative. If highs are
# greater, the number will be positive. Exchange = "ETF" shows net highs - lows for all ETFs listed
# on the 4 exchanges.
#
# The TOS symbols don't appear to work at expected when the aggregation period is WEEK so this
# study is only for daily charts.
#
declare lower;
input exchange = {default "NYSE", "NASDAQ", "AMEX", "ARCA", "ETF"};
def ap = AggregationPeriod.DAY;
def diff;
switch (exchange){
case "NYSE":
diff = close(Symbol = "$NYHGH", period = ap) - close(Symbol = "$NYLOW", period = ap);
case "NASDAQ":
diff = close(Symbol = "$NAHGH", period = ap) - close(Symbol = "$NALOW", period = ap);
case "AMEX":
diff = close(Symbol = "$AMHGH", period = ap) - close(Symbol = "$AMLOW", period = ap);
case "ARCA":
diff = close(Symbol = "$ARHGH", period = ap) - close(Symbol = "$ARLOW", period = ap);
case "ETF":
diff = close(Symbol = "$ETFHIGH", period = ap) - close(Symbol = "$ETFLOW", period = ap);
}
plot hlp = if IsNaN(close) then Double.NaN else diff;
hlp.EnableApproximation();
hlp.SetPaintingStrategy(PaintingStrategy.HISTOGRAM);
hlp.SetLineWeight(5);
hlp.AssignValueColor(if hlp < 0 then Color.RED
else if hlp > 0 then Color.GREEN
else Color.CYAN);
plot zero = 0.0;
zero.SetDefaultColor(Color.WHITE);
zero.SetLineWeight(1);
zero.HideBubble();
zero.HideTitle();
Market sentiment is frequently represented using the NYSE and Nasdaq indices.
By default, the indicator will show the number of new 52-week highs – new 52-week lows by day for the NYSE exchange.
You can go into the indicator settings and and select another exchange from the dropdown.
Chart Example
The example below shows the S&P 500 Index (upper chart) with the Net New Highs – New Lows indicator, which is based on data from the NYSE exchange (bottom chart).
How to Trade with New Highs and Lows Indicator
There are many ways to utilize the 52-Week New Highs – New Lows indicator.
It can be used to determine market dominance. A reading above 0 suggests bulls are in control. If the value falls below 0, bears are in control of the market. A negative reading means more stocks are reaching 52-week lows than highs.
It is possible to interpret the number of new highs and lows in equities as a contrarian signal.
For example, during a bear market, when the indicator reaches an extremely low level, it often indicates a major market bottom.
Lastly, you can use the indicator to find divergences. A negative (bearish) divergence occurs when the actual index continues to move higher while fewer stocks are making new highs.
Bonus: Index New High – New Low Indicator
# This indicator uses the Index New highs and Index New lows to help gauge overall Market sentiment. It's a leading indicator.
# Index New High - New Low Indicator
# Mobius
declare lower;
input Symb = {default "NYSE", "NASDQ", "AMEX", "ARCA", "ETF"};
input length = 10;
input OverSold = 20;
input OverBought = 80;
Input AvgType = AverageType.Hull;
def agg = AggregationPeriod.Day;
def NYSEH = close(Symbol = "$NYHGH", period = agg);
def NYSEL = close(Symbol = "$NYLOW", period = agg);
def NASDQH = close(Symbol = "$NAHGH", period = agg);
def NASDQL = close(Symbol = "$NALOW", period = agg);
def AMEXH = close(Symbol = "$AMHGH", period = agg);
def AMEXL = close(Symbol = "$AMLOW", period = agg);
def ARCAH = close(Symbol = "$ARHGH", period = agg);
def ARCAL = close(Symbol = "$ARLOW", period = agg);
def ETFH = close(Symbol = "$ETFHGH", period = agg);
def ETFL = close(Symbol = "$ETFLOW", period = agg);
def P;
Switch (Symb){
case "NYSE":
P = NYSEH / (NYSEH + NYSEL) * 100;
case "NASDQ":
P = NASDQH / (NASDQH + NASDQL) * 100;
case "AMEX":
P = AMEXH / (AMEXH + AMEXL) * 100;
case "ARCA":
P = ARCAH / (ARCAH + ARCAL) * 100;
case "ETF":
P = ETFH / (ETFH + ETFL) * 100;
}
def price = if isNaN(P) then price[1] else P;
plot data = if isNaN(close) then double.nan else price;
data.EnableApproximation();
data.SetDefaultColor(Color.Cyan);
plot avg = MovingAverage(AvgType, data, length);
avg.EnableApproximation();
avg.AssignValueColor(if between(avg, OverSold, OverBought)
then Color.yellow
else if avg >= OverBought
then Color.Green
else Color.Red);
avg.SetLineWeight(2);
plot OB = if isNaN(close) then double.nan else OverBought;
OB.SetDefaultColor(Color.Red);
plot OS = if isNaN(close) then double.nan else OverSold;
OS.SetDefaultColor(Color.Green);
plot neutral = if isNaN(close) then double.nan else 50;
neutral.SetdefaultColor(Color.Dark_Gray);
addCloud(0, OS, CreateColor(250,0,0), CreateColor(250,0,0));
addCloud(OS, neutral, createColor(50,0,0), createColor(50,0,0));
addCloud(neutral, OB, createColor(0,50,0), createColor(0,50,0));
addCloud(OB, 100, CreateColor(0,250,0), createColor(0,250,0));
# End High - Low Index
Happy trading!
Is it possible to aggregate the exchanges? For example, view the indicator for all of NYSE, NASDAQ, and AMEX?
There are ticker symbols for that. For example, you can use “$NYHI1W” to view NYSE New Highs.
Very helpful. Thank you for sharing! It helped me find this list of High-Low indices in TOS Learning Center:
https://tlc.thinkorswim.com/center/release/rel-07-20-2013
I cannot get your script to work for Nh_NL, At what line do i copy and paste at?
From line 1 to line 58.
Great blog post. It appears that recently TOS added more built-in symbols that make this even simpler:
$NYHI1D-$NYLO1D
$ETFHI1D-$ETFLO1D
Hi Melvin:
I’m not using this indicator in the traditional way. I’m wondering if its possible to scan for green bars? I know there would be a million and three hits, but I would use in conjunction with other scan parameters to find certain things. Please let me know. thank you!
Hello came across your script for 52 week high/low i’ve been looking for a script for TOS a cumulative 4 week high/low. some traders that have TC2000 use T2123 seems to show market direction very well mostly when paired down to 15 min and 60 min time frame for swing trading. thanks for any help