10:11 Mobius: AD (Advance/Decline Line) is an Intraday indicator. It's daily closing value isn't of any value since where it closes in relation to the closing price has no correlation.

# 10:14 Mobius: here is an AD label that includes the open, high and low of the day with bubbles plotted at those price locations on the chart.

#10:18 Mobius: Here's AD Scaled to Price and plotted along with a plot of the AD zero line at price where crosses. Which is often a price pivot area.

#10:22 MTS1: Thanks Mobius!

#10:26 binh4984: Thank you very much Mobius for your help.

#10:33 Mobius: yw And, bin... you might consider the fact that AD is an oscillator that ranges around 0. So taking a daily average of it's closing value would be that same as taking the daily closing average of any oscillator

#10:35 Mobius: won't tell you anything of value. Now you could write a binary momentum indicator using AD on a daily basis that would tell you when a trend is in place and the momentum of that trend

#10:36 Mobius: See the True Momentum Indicator for a method to do that and adding a weight adjusted by the closing value of AD might be useful

#10:37 MTS1: I guess an average on a cumulative AD could be some sort of signal line. I know some analysts look at longer term MI's like that, also # stocks above or below an MA, new highs/lows etc. But I think AD / VOLD etc are probably more useful intraday.

(I would not endorse #3 of 3 as I don't see it's utility: markos)

Code:

```
#
# TD Ameritrade IP Company, Inc. (c) 2010-2020
#
declare lower;
input type = {default "Advance/Decline Line", "Advance/Decline Line (Breadth)", "Advance/Decline Line (Daily)", "Advance/Decline Ratio", "Advance/Decline Spread (Issues)", "Absolute Breadth Index"};
input exchange = {default NYSE, NASDAQ, AMEX};
def advances;
def declines;
switch (exchange) {
case NYSE:
advances = close("$ADVN");
declines = close("$DECN");
case NASDAQ:
advances = close("$ADVN/Q");
declines = close("$DECN/Q");
case AMEX:
advances = close("$ADVA");
declines = close("$DECA");
}
def advnDecl;
def level;
switch (type){
case "Advance/Decline Line":
advnDecl = advnDecl[1] + if !IsNaN(advances - declines) then advances - declines else 0;
level = 0;
case "Advance/Decline Line (Breadth)":
advnDecl = advances / (advances + declines);
level = 0.5;
case "Advance/Decline Line (Daily)":
advnDecl = (advances - declines) / (advances + declines);
level = 0;
case "Advance/Decline Ratio":
advnDecl = advances / declines;
level = 1;
case "Advance/Decline Spread (Issues)":
advnDecl = advances - declines;
level = 0;
case "Absolute Breadth Index":
advnDecl = AbsValue(advances - declines);
level = 0;
}
plot AD = if !IsNaN(close) then advnDecl else Double.NaN;
plot LevelLine = level;
AD.DefineColor("Up", Color.UPTICK);
AD.DefineColor("Down", Color.DOWNTICK);
AD.AssignValueColor(if advnDecl > advnDecl[1] then AD.color("Up") else AD.color("Down"));
LevelLine.SetDefaultColor(GetColor(7));
AddLabel(type == type."Advance/Decline Ratio", (if advances > declines then round(advances / declines, 2) else round(-declines / advances, 2)) + ":1 Ratio");
```

**Plots the Advance Decline Line Scaled to Current Price with a horizontal line at the RTH Open.**
Code:

```
# AD Line Scaled and Plotted on Upper Graph
# Mobius
input sym = "$ADSPD"; #hint sym: Symbol to be scaled to current price chart.
def AD = close(symbol = sym);
def Min = lowestAll(low);
def Max = highestAll(high);
def bar = barNumber();
def Today = getDay() == getLastDay();
script ScaleFunction{
input c = 0;
input Min = -1;
input Max = 1;
def hh = HighestAll(c);
def ll = LowestAll(c);
plot Range = (((Max - Min) * (c - ll)) / (hh - ll)) + Min;
}
script LinePlot {
input LineLimit = 0;
input OnExpansion = yes;
input data = close;
input bar = 0;
def ThisBar = HighestAll(bar);
def cLine = if bar == ThisBar
then data
else Double.NaN;
def cond1 = CompoundValue(1, if IsNaN(data)
then cond1[1]
else data, data);
plot P = if ThisBar - LineLimit <= bar
then HighestAll(cLine)
else Double.NaN;
}
plot ADline = if Today
then scaleFunction(c = AD,
Min = Min,
Max = Max)
else double.nan;
ADline.SetDefaultColor(Color.gray);
def RTH_Bar1 = if SecondsTillTime(0930) == 0 and
SecondsFromTime(0930) == 0
then bar
else RTH_Bar1[1];
def OpenAD = if bar == RTH_Bar1
then ADline
else OpenAD[1];
def ADLimit = if bar != RTH_Bar1
then bar - RTH_Bar1
else if bar == RTH_Bar1
then Double.NaN
else ADLimit[1];
plot AD_RTH_open = LinePlot(LineLimit = ADLimit,
data = OpenAD,
bar = RTH_Bar1);
AD_RTH_open.SetDefaultColor(Color.gray);
AddLabel(1, "AD = " + AD, if AD > 0
then color.green
else color.red);
# End Code AD Chart Line
```

**Advance/Decline as Label on chart**# 10:14 Mobius: here is an AD label that includes the open, high and low of the day with bubbles plotted at those price locations on the chart.

Code:

```
# AD Label
# Mobius
# V01
def RTH = getTime() >= regularTradingStart(getYYYYMMDD()) and
getTime() <= regularTradingEnd(getYYYYMMDD());
def o = if RTH and !RTH[1]
then open("$ADSPD")
else o[1];
def c = if isNaN(close("$ADSPD"))
then c[1]
else close("$ADSPD");
def x = barNumber();
def sumx = if RTH and !RTH[1]
then 1
else if RTH then sumx[1] + 1
else if !RTH
then sumx[1]
else sumx[1];
def sumAD = if RTH and !RTH[1]
then c
else if RTH
then sumAD[1] + c
else sumAD[1];
def h = if isNaN(high("$ADSPD", "DAY"))
then h[1]
else high("$ADSPD", "DAY");
def ADHighBar = if high("$ADSPD") == h
then x
else double.nan;
AddChartBubble(barNumber() == HighestAll(ADHighBar),
high + (2 * TickSize()),
"AD",
color.cyan);
def l = if isNaN(low("$ADSPD", "DAY"))
then l[1]
else low("$ADSPD", "DAY");
def ADLowBar = if low("$ADSPD") == l
then x
else double.nan;
AddChartBubble(barNumber() == HighestAll(ADLowBar),
low - (2 * TickSize()),
"AD",
color.orange,
no);
def Avg = Round(sumAD / sumx, 0);
addLabel(1, "AD open " + o +
" high " + h +
" low " + l +
" close " + c +
" Avg " + Avg, if c < 0
then color.red
else color.green);
# End Code AD Label
```

**Code # 2 of 3**#10:18 Mobius: Here's AD Scaled to Price and plotted along with a plot of the AD zero line at price where crosses. Which is often a price pivot area.

Code:

```
# AD Scaled To Price
# Mobius
# Changed original code to use RegularTrading(Start, End) functions. Use RTH Only.
# V02 2019
script Scale {
input h = high;
input l = low;
input c = close;
def RTH = getTime() >= RegularTradingStart(getYYYYMMDD()) and
getTime() <= RegularTradingEnd(getYYYYMMDD());
def max = if RTH and !RTH[1]
then high
else if RTH and high > max[1]
then high
else max[1];
def min = if RTH and !RTH[1]
then low
else if RTH and low < min[1]
then low
else min[1];
def hh = if RTH and !RTH[1]
then h
else if RTH and h > hh[1]
then h
else hh[1];
def ll = if RTH and !RTH[1]
then l
else if RTH and l < ll[1]
then l
else ll[1];
plot Range = (((Max - Min) * (c - ll)) / (hh - ll)) + Min;
}
plot Scaled_Symbol = scale(high("$ADSPD"), low("$ADSPD"), close("$ADSPD"));
Scaled_Symbol.AssignValueColor(if Scaled_Symbol > Scaled_Symbol[1]
then color.green
else color.red);
Scaled_Symbol.SetLineWeight(2);
Scaled_Symbol.HideBubble();
Scaled_Symbol.HideTitle();
def zero = if close("$ADSPD") crosses 0
then close
else zero[1];
def zero_bar = if close("$ADSPD") crosses 0
then barNumber()
else double.nan;
plot zeroLine = if barNumber() >= highestAll(zero_bar)
then highestAll(if isNaN(close[-1])
then zero
else double.nan)
else double.nan;
zeroLine.SetDefaultColor(Color.Light_Gray);
zeroLine.SetStyle(Curve.Points);
zeroLine.SetLineWeight(2);
zeroLine.HideBubble();
zeroLine.HideTitle();
AddChartBubble(barNumber() == HighestAll(barNumber()),
zeroLine,
"AD 0",
zeroLine.TakeValueColor());
# End Code
```

#10:22 MTS1: Thanks Mobius!

#10:26 binh4984: Thank you very much Mobius for your help.

#10:33 Mobius: yw And, bin... you might consider the fact that AD is an oscillator that ranges around 0. So taking a daily average of it's closing value would be that same as taking the daily closing average of any oscillator

#10:35 Mobius: won't tell you anything of value. Now you could write a binary momentum indicator using AD on a daily basis that would tell you when a trend is in place and the momentum of that trend

#10:36 Mobius: See the True Momentum Indicator for a method to do that and adding a weight adjusted by the closing value of AD might be useful

#10:37 MTS1: I guess an average on a cumulative AD could be some sort of signal line. I know some analysts look at longer term MI's like that, also # stocks above or below an MA, new highs/lows etc. But I think AD / VOLD etc are probably more useful intraday.

(I would not endorse #3 of 3 as I don't see it's utility: markos)

**Cumulative AD**
Code:

```
#10:42 Mobius:
# Cumulative AD
declare lower;
plot Data = TotalSum(close("$ADSPD"));
plot "0" = 0;
#EOC#
```

Last edited: