The Automatic Quadrant Lines is a trading strategy upper indicator that projects where price might go in the future. Use weekly/daily/4 hr chart for swing trading. Use 30 min or less for day trading. This indicator shows you the long entry and long target. It shows you a short entry and short target. In the indicator, L/E is Long Entry, and S/E is Short Entry. The targets show the price in the chart bubble. There is a break down target line (dark green) that indicates if price breaks lower than the support line, this is where price may break down to. The indicator includes an up and down arrow that indicates when price breaks through the Long or Short Entry line. There are also alerts built in when the arrows appear.

Long strategy lines are dashed and have a (2) weight while short strategy are solid and single weighted lines.

(NOTE: If price breaks down or up from the dark red support and resistance lines, a new set of lines will appear. There are no guarantees price will hit the target.)

Here are some examples.

/RTY on 4 hr chart.

/ES on 15m chart. Price broke above target on FED news.

/NQ on 4 hr chart. Hit target.

Tesla on 4 hr chart. Above the 50% line. Target at $751.80.

/SI on 10 min chart. Hit target.

http://tos.mx/2pnajoG

http://tos.mx/3Jppd0g

http://tos.mx/KGlOVLi

Long strategy lines are dashed and have a (2) weight while short strategy are solid and single weighted lines.

(NOTE: If price breaks down or up from the dark red support and resistance lines, a new set of lines will appear. There are no guarantees price will hit the target.)

Here are some examples.

/RTY on 4 hr chart.

/ES on 15m chart. Price broke above target on FED news.

/NQ on 4 hr chart. Hit target.

Tesla on 4 hr chart. Above the 50% line. Target at $751.80.

/SI on 10 min chart. Hit target.

**Shareable Link:**http://tos.mx/2pnajoG

**Long Entry Scan Alert**http://tos.mx/3Jppd0g

**Short Entry Scan Alert**http://tos.mx/KGlOVLi

**CODE:**
Code:

```
#Automatic Quadrant Lines
#based on Mobius's Fractal Pivot Strategy
#developed by Chewie76 on 8/27/2021
# User Inputs
input n = 20;
input FractalEnergyLength = 8;
input FractalEnergyThreshold = .68;
input AtrMult = .70;
input nATR = 4;
input AvgType = AverageType.HULL;
input LabelsOn = yes;
input AlertsOn = yes;
# Variables
def o = open;
def h = high;
def l = low;
def c = close;
def bar = BarNumber();
def TS = TickSize();
def nan = double.nan;
def ATR = Round((MovingAverage(AvgType, TrueRange(h, c, l), nATR)) / TS, 0) * TS;
def risk = if Between(c, 0, 1500)
then ATR
else if Between(c, 1500, 3500)
then 2
else if Between(c, 3500, 5500)
then 4
else 6;
def FE = Log(Sum((Max(h, c[1]) - Min(l, c[1])), FractalEnergyLength) /
(Highest(h, FractalEnergyLength) - Lowest(l, FractalEnergyLength)))
/ Log(FractalEnergyLength);
# Parent Aggregation Pivot High
# Pivot High Variables
def p_hh = fold i = 1 to n + 1
with p = 1
while p
do h > GetValue(h, -1);
def p_PivotH = if (bar > n and
h == Highest(h, n) and
p_hh)
then h
else NaN;
def p_PHValue = if !IsNaN(p_PivotH)
then p_PivotH
else p_PHValue[1];
def p_PHBar = if !IsNaN(p_PivotH)
then bar
else nan;
# Pivot High and Pivot High Exit Variables
# Pivot High Variables
def hh = fold ii = 1 to n + 1
with pp = 1
while pp
do h > GetValue(h, -1);
def PivotH = if (bar > n and
h == Highest(h, n) and
hh)
then h
else Double.NaN;
def PHValue = if !IsNaN(PivotH)
then PivotH
else PHValue[1];
def PHBar = if !IsNaN(PivotH)
then bar
else nan;
# Pivot High Exit Variables
def PHExit = if (bar > n and
h == Highest(h, n) and
hh)
then if l[1] < l
then l[1]
else fold r = 0 to 20
with a = NaN
while IsNaN(a)
do if GetValue(l[1], r) < l
then GetValue(l[1], r)
else NaN
else Double.NaN;
def PHExitValue = if !IsNaN(PHExit)
then PHExit
else PHExitValue[1];
def PHExitBar = if (bar > n and
h == Highest(h, n) and
hh)
then if l[1] < l
then bar - 1
else fold d = 0 to 20
with y = NaN
while IsNaN(y)
do if GetValue(l[1], d) < l
then GetValue(bar - 1, d)
else NaN
else NaN;
# Pivot Low and Pivot Low Entry Variables
# Parent Pivot Low Variables
def p_ll = fold j = 1 to n + 1
with q = 1
while q
do l < GetValue(l, -1);
def p_PivotL = if (bar > n and
l == Lowest(l, n) and
p_ll)
then l
else NaN;
def p_PLValue = if !IsNaN(p_PivotL)
then p_PivotL
else p_PLValue[1];
def p_PLBar = if !IsNaN(p_PivotL)
then bar
else nan;
# Pivot Low Variables
def ll = fold jj = 1 to n + 1
with qq = 1
while qq
do l < GetValue(l, -1);
def PivotL = if (bar > n and
l == Lowest(l, n) and
ll)
then l
else NaN;
def PLValue = if !IsNaN(PivotL)
then PivotL
else PLValue[1];
def PLBar = if !IsNaN(PivotL)
then bar
else nan;
# Pivot Low Entry Variables
def PLEntry = if (bar > n and
l == Lowest(l, n) and
ll)
then if h[1] > h
then h[1]
else fold t = 0 to 20
with w = NaN
while IsNaN(w)
do if GetValue(h[1], t) > h
then GetValue(h[1], t)
else NaN
else NaN;
def PLEntryValue = if !IsNaN(PLEntry)
then PLEntry
else PLEntryValue[1];
def PLEntryBar = if (bar > n and
l == Lowest(l, n) and
ll)
then if h[1] > h
then bar - 1
else fold u = 0 to 20
with z = NaN
while IsNaN(z)
do if GetValue(h[1], u) > h
then GetValue(bar - 1, u)
else NaN
else NaN;
# Plots
plot R1 = if bar >= HighestAll(PHBar)
then HighestAll(if isNaN(close[-1])
then PHValue
else nan)
else nan;
R1.SetDefaultColor(Color.dark_red);
R1.SetLineWeight(1);
plot ShortEntry = if bar >= HighestAll(PHexitBar)
then HighestAll(if isNaN(close[-1])
then PHExitValue
else nan)
else nan;
ShortEntry.SetDefaultColor(Color.red);
def SE =(if isNaN(ShortEntry[1]) then ShortEntry else Double.NaN);
addchartBubble(LabelsOn and ShortEntry, SE,"S/E",color.red);
plot S1 = if bar >= HighestAll(PLBar)
then HighestAll(if isNaN(c[-1])
then PLValue
else nan)
else nan;
S1.SetDefaultColor(Color.dark_red);
S1.SetLineWeight(3);
plot LongEntry = if bar >= HighestAll(PLEntryBar)
then HighestAll(if isNaN(c[-1])
then PLEntryValue
else nan)
else nan;
LongEntry.SetDefaultColor(Color.GREEN);
LongEntry.SetStyle(Curve.long_DASH);
LongEntry.SetLineWeight(2);
def LE =(if isNaN(LongEntry[1]) then LongEntry else Double.NaN);
addchartBubble(LabelsOn and LongEntry, LE,"L/E",color.green);
plot UpArrow = if c crosses above LongEntry and FE > .5
then l
else Double.NaN;
UpArrow.SetPaintingStrategy(PaintingStrategy.ARROW_UP);
UpArrow.SetLineWeight(5);
UpArrow.SetDefaultColor(Color.GREEN);
plot DnArrow = if c crosses below ShortEntry and ((FE > .618)
or (FE < .382))
then h
else Double.NaN;
DnArrow.SetPaintingStrategy(PaintingStrategy.ARROW_DOWN);
DnArrow.SetLineWeight(5);
DnArrow.SetDefaultColor(Color.RED);
plot Fifty = (LongEntry - S1) + LongEntry;
Fifty.setdefaultcolor(color.yellow);
Fifty.SetStyle(Curve.long_DASH);
Fifty.setlineweight(2);
plot SeventyFive = (LongEntry - S1) + Fifty;
SeventyFive.setdefaultcolor(color.cyan);
SeventyFive.SetStyle(Curve.long_DASH);
SeventyFive.setlineweight(2);
plot Target = (LongEntry - S1) + SeventyFive;
Target.setdefaultcolor(color.red);
Target.SetStyle(Curve.long_DASH);
Target.setlineweight(3);
def LT =(if isNaN(TARGET[1]) then Target else Double.NaN);
addchartBubble(LabelsOn and Target, LT,"LONG TARGET: " + asDollars(LT),color.red);
plot BreakDownTarget = S1 -(LongEntry - S1);
BreakDownTarget.setdefaultcolor(color.dark_Green);
BreakDownTarget.SetStyle(Curve.long_DASH);
BreakDownTarget.setlineweight(3);
plot S_Fifty = ShortEntry - (R1 - ShortEntry);
S_Fifty.setdefaultcolor(color.yellow);
S_Fifty.setlineweight(1);
plot S_SeventyFive = S_Fifty - (R1 - ShortEntry);
S_SeventyFive.setdefaultcolor(color.cyan);
S_SeventyFive.setlineweight(1);
plot S_ShortTarget = S_SeventyFive - (R1 - ShortEntry);
S_ShortTarget.setdefaultcolor(color.green);
S_ShortTarget.setlineweight(1);
def ST =(if isNaN(S_ShortTarget[1]) then S_ShortTarget else Double.NaN);
addchartBubble(LabelsOn and S_ShortTarget, ST,"SHORT TARGET: " + asDollars(ST),color.light_green);
# Alerts
Alert(AlertsOn and UpArrow, " ", Alert.Bar, Sound.ding);
Alert(AlertsOn and DnArrow, " ", Alert.Bar, Sound.ding);
```

Last edited: