# Average True Range (ATR) Breakouts Indicator for ThinkorSwim

Staff member
Staff
VIP

### thinkScript Code

Code:
``````# ATR Breakouts
# Assembled by BenTen at useThinkScript.com

def long_entry = (expAverage(close, 50)) + (2 * atr(20));
def short_entry = (expAverage(close, 50)) - (2 * atr(20));

def short_stop_loss = (expAverage(close, 50)) + (atr(20));
def long_stop_loss = (expAverage(close, 50)) - (atr(20));

plot b_entry = long_entry;
plot s_entry = short_entry;
plot s_stop = short_stop_loss;
plot l_stop = long_stop_loss;

b_entry.SetDefaultColor(GetColor(6));
s_entry.SetDefaultColor(GetColor(5));
s_stop.SetDefaultColor(GetColor(1));
l_stop.SetDefaultColor(GetColor(0));``````

#### Attachments

• 6IUxLTA.png
138.6 KB · Views: 236
Last edited:
I need help with a scanner that checks how many ATR a stock price is above a certain moving average?

Average True Range Breakout
https://tos.mx/pmrY0uz
Ruby:
``````#+-------------------------------------------------------------+
# |Example: ATR Breakout                                       |
# |Rleased to the public.... verifyed  12/19/2020              |
# |robert payne                                                |
# |funwiththinkscript.com                                      |
# |I added credit to the coder___12/19/2020                    |
# +------------------------------------------------------------+
#

# white - entry point
# green - first profit target to scale out
# yellow - opening range
# orange - ATR breakout confirmation level

#  ------------------------------------
# for extended hours
#script OpenRange {
#   input ORtime = 5 ;
#    def FirstBar = secondsfromtime(0930) >= 0 and secondsfromtime(0930) < 60;
#    def RangeTime = SecondsFromTime(0930) >= 0 and SecondsFromTime(0930) < 60 * ORtime;
#    def Rhigh = if FirstBar then high else if RangeTime and high > Rhigh[1] then high else Rhigh[1];
#    def Rlow = if FirstBar then low else if RangeTime and low < Rlow[1] then low else Rlow[1];
#    plot h = if RangeTime or secondstilltime(0930) > 0 then Double.NaN else Rhigh;
#    plot l = if RangeTime or secondstilltime(0930) > 0then Double.NaN else Rlow; }
#  ------------------------------------

# -------------------------------------
# marketForecast hours
script OpenRange {
input ORtime = 5;
def FirstBar = GetDay() != GetDay()[1];
def RangeTime = SecondsFromTime(0930) >= 0 and SecondsFromTime(0930) < 60 * ORtime;
def Rhigh = if FirstBar then high else if RangeTime and high > Rhigh[1] then high else Rhigh[1];
def Rlow = if FirstBar then low else if RangeTime and low < Rlow[1] then low else Rlow[1];
plot h = if RangeTime then Double.NaN else Rhigh;
plot l = if RangeTime then Double.NaN else Rlow;
}

# ------------------------------------

def first30 = SecondsFromTime(0930) >= 0 and SecondsTillTime(1000) >= 0;
def today = GetLastDay() == GetDay();
def ATR = Average(TrueRange(high,  close,  low),  10);
plot yHigh = if !today then Double.NaN else high(period = "day" )[1];
yHigh.SetDefaultColor(Color.CYAN);
plot yLow = if !today then Double.NaN else low(period = "day" )[1];
yLow.SetDefaultColor(Color.PINK);
plot h5 = if !today then Double.NaN else if !first30 then Double.NaN else OpenRange(5).h;
h5.SetDefaultColor(Color.YELLOW);
plot l5 = if !today then Double.NaN else if !first30 then Double.NaN else OpenRange(5).l;
l5.SetDefaultColor(Color.YELLOW);
plot h30 = if !today then Double.NaN else OpenRange(30).h;
h30.SetDefaultColor(Color.YELLOW);
plot l30 = if !today then Double.NaN else OpenRange(30).l;
l30.SetDefaultColor(Color.YELLOW);
def lowConf = if first30 then Min(yLow, l5) - ATR else Min(yLow, l30) - ATR;
def highConf = if first30 then Max(yHigh, h5) + ATR else Max(yHigh, h30) + ATR;
plot lc1 = if first30 then lowConf else Double.NaN;
lc1.SetDefaultColor(Color.ORANGE);
plot lc2 = if !first30 then lowConf else Double.NaN;
lc2.SetDefaultColor(Color.ORANGE);
plot hc1 = if first30 then highConf else Double.NaN;
hc1.SetDefaultColor(Color.ORANGE);
plot hc2 = if !first30 then highConf else Double.NaN;
hc2.SetDefaultColor(Color.ORANGE);
def decisionL = if close > lowConf then Double.NaN else if close crosses below lowConf then low else decisionL[1];
def decisionH = if close < highConf then Double.NaN else if close crosses above highConf then high else decisionH[1];
plot dL = if !today then Double.NaN else decisionL;
dL.SetDefaultColor(Color.WHITE);
plot dH = if !today then Double.NaN else decisionH;
dH.SetDefaultColor(Color.WHITE);
def TL = CompoundValue(1, if IsNaN(dL) then Double.NaN else if !IsNaN(TL[1]) then TL[1] else if close crosses below dL then dL - 2 * ATR else Double.NaN, Double.NaN);
def SL = CompoundValue(1, if IsNaN(dL) then Double.NaN else if !IsNaN(SL[1]) then SL[1] else if close crosses below dL then dL + 2 * ATR else Double.NaN, Double.NaN);
plot Target1Low = if !today then Double.NaN else TL;
Target1Low.SetDefaultColor(Color.GREEN);
Target1Low.SetStyle(Curve.SHORT_DASH);
plot Stop1Low = if !today then Double.NaN else SL;
Stop1Low.SetDefaultColor(Color.RED);
Stop1Low.SetLineWeight(2);
AddChartBubble(IsNaN(TL[1]) and !IsNaN(TL), TL, "Target 1\n" + Round(TL, 2), Color.GREEN, no);
AddChartBubble(IsNaN(SL[1]) and !IsNaN(SL), SL, "Stop\n" + Round(SL, 2), Color.RED);

def alertup = close[1] crosses above hc1 or close[1] crosses above hc2;
def alertdn = close[1] crosses below lc1 or close[1] crosses below lc2;

Last edited by a moderator:
@J007RMC thank you, it's like a treasure hunt every time I see you posting.

I'm hoping someone can help me with a script to color any candles blue if they exceed 30% of ATR. Thanks in advance.

@mosdef213 Gonna assume you meant 1.3x ATR and not .3x ATR.
Code:
``assignPriceColor(if high-low > 1.3 * atr() then color.blue else color.current);``

87k+ Posts
729 Online

## The Market Trading Game Changer

Join 2,500+ subscribers inside the useThinkScript VIP Membership Club
• Exclusive indicators
• Proven strategies & setups
• Private Discord community
• Exclusive members-only content
• 1 full year of unlimited support

What is useThinkScript?

useThinkScript is the #1 community of stock market investors using indicators and other tools to power their trading strategies. Traders of all skill levels use our forums to learn about scripting and indicators, help each other, and discover new ways to gain an edge in the markets.

How do I get started?

We get it. Our forum can be intimidating, if not overwhelming. With thousands of topics, tens of thousands of posts, our community has created an incredibly deep knowledge base for stock traders. No one can ever exhaust every resource provided on our site.

If you are new, or just looking for guidance, here are some helpful links to get you started.

What are the benefits of VIP Membership?