High Low Lookback

korygill

korygill

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
#
AddChartBubble(
    currentBarNumber == HighestAll(highBarNumber),
    vHigh,
    "HIGH",
    Color.WHITE,
    yes);

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

AddChartBubble(
    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
#
AddLabel(yes,
 "mostRecentHigh: " + mostRecentHigh,
 Color.Gray);

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

BenTen

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

korygill

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

BenTen

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

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?
 

Top