High Low Lookback

korygill

Active member
VIP
Warehouse
I was working on a request from a friend for highlighting a bar a given number of bars back, and then tracking the subsequent highest high and lowest low from that bar.

This ties into some other work I can share later where you can see where the most recent bars are relative to a lookback period like you might use in a SMA or Stochastic, etc.

Here is what the study looks like on a Ford (F) 1Y 1D chart.

Some things to notice:
• labels
• chart bubble at (high+low)/2 on the lookback bar
• purple squares at high and low on the lookback bar
• purple squares have Bubbles hidden (on the right vertical axis)
• LOW chart bubble
• LOW line
• HIGH chart bubble
• HIGH line
Keeping track of and calculating which bar numbers are meaningful is fairly straightforward, but did take me a few attempts to get right. Debugging with labels helps a lot to troubleshoot some issues, and plotting values can also be a good diagnostic tool.

Code for HighLowLookback

Code:
``````#
# HighLowLookback
#
# Study to show the highest high and lowest low after a given number of bars back.
#
# Author: Kory Gill, @korygill
#
# VERSION HISTORY (sortable date and time (your local time is fine), and your initials
# 20190710-2200-KG    - created
# ...
# ...
#

#
# Inputs
#
input length = 13;

#
# Common Variables that may also reduce calls to server
#
def vClose = close;
def vLow = low;
def vHigh = high;
def nan = double.NaN;

#
# Logic
#
def currentBarNumber = if !IsNaN(vClose) then BarNumber() else nan;
def lastBarNumber = HighestAll(currentBarNumber);
def lookbackBar = lastBarNumber - length + 1;
def doPlot = if currentBarNumber >= lookbackBar then 1 else 0;

def mostRecentHigh = CompoundValue(1, if doPlot && vHigh > mostRecentHigh[1] then vHigh else mostRecentHigh[1],double.NEGATIVE_INFINITY);
def highBarNumber  = CompoundValue(1, if doPlot && vHIgh > mostRecentHigh[1] then currentBarNumber else highBarNumber[1],0);
plot mrh = if currentBarNumber >= HighestAll(highBarNumber) then mostRecentHigh else nan;
mrh.SetDefaultColor(Color.GREEN);

def mostRecentLow = CompoundValue(1, if doPlot && vLow < mostRecentLow[1] then vLow else mostRecentLow[1],double.POSITIVE_INFINITY);
def lowBarNumber  = CompoundValue(1, if doPlot && vLow < mostRecentLow[1] then currentBarNumber else lowBarNumber[1],0);
plot mrl = if currentBarNumber >= HighestAll(lowBarNumber) then mostRecentLow else nan;
mrl.SetDefaultColor(Color.RED);

#
# Visualizations
#
currentBarNumber == HighestAll(highBarNumber),
vHigh,
"HIGH",
Color.WHITE,
yes);

currentBarNumber == HighestAll(lowBarNumber),
vLow,
"LOW",
Color.WHITE,
no);

currentBarNumber == lookbackBar,
(vHigh+vLow)/2,
length+"\nBar",
Color.GRAY,
yes);

plot bbH = if currentBarNumber == lookbackBar then vHigh + TickSize()*1 else nan;
bbH.SetPaintingStrategy(PaintingStrategy.SQUARES);
bbH.SetDefaultColor(Color.MAGENTA);
bbH.SetLineWeight(5);
bbH.HideBubble();

plot bbL = if currentBarNumber == lookbackBar then vLow - TickSize()*1 else nan;
bbL.SetPaintingStrategy(PaintingStrategy.SQUARES);
bbL.SetDefaultColor(Color.MAGENTA);
bbL.SetLineWeight(5);
bbL.HideBubble();

#
# Labels
#
"mostRecentHigh: " + mostRecentHigh,
Color.Gray);

"mostRecentLow: " + mostRecentLow,
Color.Gray);``````
Shareable Link to flexgrid and code
http://tos.mx/lNzBi8

BenTen

Staff
VIP
Warehouse
This is awesome. Might be able to do something with this indicator.

M

mo2020

New member
Hello can make a scanner from this great indicator

korygill

Active member
VIP
Warehouse
Hello can make a scanner from this great indicator
For a scanner, would need to know what it would scan for... Right now, this is just an example of how you can keep track of older bars, and carry those forward for new calculations. Maybe @BenTen has some plans for how he uses this into a study/scanner.

BenTen

Staff
VIP
Warehouse
@mo2020 I’m still working on it. But will definitely include a scanner. Thanks for the foundation @korygill

markos

Well-known member
VIP
Warehouse
@mo2020 did you read the authors post? Please read it again. What would you like to scan for?

J

Jorge_Ocampo

New member
Hi good day. I follow the \$ VOLSPD movement What code do I have to use for my label to show if the \$ VOLSPD candle is increasing in volume or decreasing?
Do you have any tutorials for this?

R

Robert_J

New member
@korygill, hi I try to use options to hide this study after I put this study in. It won't work or won't hide this study even if you check off "show study". Is there a fix for this issue? Thanks.

korygill

Active member
VIP
Warehouse
"show study" does not appear to hide chart bubbles and labels. you'd have to add a new input and add that to the conditions for those things (and the plots).

K

katsrx

New member
I was working on a request from a friend for highlighting a bar a given number of bars back, and then tracking the subsequent highest high and lowest low from that bar.

This ties into some other work I can share later where you can see where the most recent bars are relative to a lookback period like you might use in a SMA or Stochastic, etc.

Here is what the study looks like on a Ford (F) 1Y 1D chart.

Some things to notice:
• labels
• chart bubble at (high+low)/2 on the lookback bar
• purple squares at high and low on the lookback bar
• purple squares have Bubbles hidden (on the right vertical axis)
• LOW chart bubble
• LOW line
• HIGH chart bubble
• HIGH line
Keeping track of and calculating which bar numbers are meaningful is fairly straightforward, but did take me a few attempts to get right. Debugging with labels helps a lot to troubleshoot some issues, and plotting values can also be a good diagnostic tool.

Code for HighLowLookback

Code:
``````#
# HighLowLookback
#
# Study to show the highest high and lowest low after a given number of bars back.
#
# Author: Kory Gill, @korygill
#
# VERSION HISTORY (sortable date and time (your local time is fine), and your initials
# 20190710-2200-KG    - created
# ...
# ...
#

#
# Inputs
#
input length = 13;

#
# Common Variables that may also reduce calls to server
#
def vClose = close;
def vLow = low;
def vHigh = high;
def nan = double.NaN;

#
# Logic
#
def currentBarNumber = if !IsNaN(vClose) then BarNumber() else nan;
def lastBarNumber = HighestAll(currentBarNumber);
def lookbackBar = lastBarNumber - length + 1;
def doPlot = if currentBarNumber >= lookbackBar then 1 else 0;

def mostRecentHigh = CompoundValue(1, if doPlot && vHigh > mostRecentHigh[1] then vHigh else mostRecentHigh[1],double.NEGATIVE_INFINITY);
def highBarNumber  = CompoundValue(1, if doPlot && vHIgh > mostRecentHigh[1] then currentBarNumber else highBarNumber[1],0);
plot mrh = if currentBarNumber >= HighestAll(highBarNumber) then mostRecentHigh else nan;
mrh.SetDefaultColor(Color.GREEN);

def mostRecentLow = CompoundValue(1, if doPlot && vLow < mostRecentLow[1] then vLow else mostRecentLow[1],double.POSITIVE_INFINITY);
def lowBarNumber  = CompoundValue(1, if doPlot && vLow < mostRecentLow[1] then currentBarNumber else lowBarNumber[1],0);
plot mrl = if currentBarNumber >= HighestAll(lowBarNumber) then mostRecentLow else nan;
mrl.SetDefaultColor(Color.RED);

#
# Visualizations
#
currentBarNumber == HighestAll(highBarNumber),
vHigh,
"HIGH",
Color.WHITE,
yes);

currentBarNumber == HighestAll(lowBarNumber),
vLow,
"LOW",
Color.WHITE,
no);

currentBarNumber == lookbackBar,
(vHigh+vLow)/2,
length+"\nBar",
Color.GRAY,
yes);

plot bbH = if currentBarNumber == lookbackBar then vHigh + TickSize()*1 else nan;
bbH.SetPaintingStrategy(PaintingStrategy.SQUARES);
bbH.SetDefaultColor(Color.MAGENTA);
bbH.SetLineWeight(5);
bbH.HideBubble();

plot bbL = if currentBarNumber == lookbackBar then vLow - TickSize()*1 else nan;
bbL.SetPaintingStrategy(PaintingStrategy.SQUARES);
bbL.SetDefaultColor(Color.MAGENTA);
bbL.SetLineWeight(5);
bbL.HideBubble();

#
# Labels
#
"mostRecentHigh: " + mostRecentHigh,
Color.Gray);

"mostRecentLow: " + mostRecentLow,
Color.Gray);``````
Shareable Link to flexgrid and code
http://tos.mx/lNzBi8
I was actually looking for something like this. but is there a way to add a code that changes automatically the input length to the desire time frame. Example when I look at the min, 5 min or 15 minute I want to see the last day period the high and low lines

R

Robert_J

New member
@korygill added an input and fixed my issue. Thanks.