AddVerticalLine for Start and End Times in thinkScript


I would like to have a (ThinkScript) vertical line created each day for the Asian, European and US Markets open and close. Does anyone have one available to share?


Well-known member
Here's one version that I have - run this on say a 15 minute aggregation. Remember this is an intraday study, so do not load on the daily

# Global Market Opens and Closes
# Vertical lines mark all open and closes
# Horizontal lines mark US, AUD opens and closes
# ThinkScript Chat Room Group 
# Added Close / Open Lines for US and AUD

declare hide_on_daily;

input Plot_Verticle_Line = yes;
input Show_US = yes;
input Show_London = yes;
input Show_Sydney = yes;
input Show_Asian = yes; #HINT Show_Asian: IMPORTANT, BE SURE to adjust for part of year where USA goes to Daylight Savings but Asia remains on Standard time
input US_Open = 0930;
input US_Close = 1600;
input GBP_Open = 0300;
input GBP_Close = 1130;
input AUD_Open = 1800;
input AUD_Close = 0000;
input JPY_Open = 1900; #HINT JPY_Open: IMPORTANT, BE SURE to adjust for part of year where USA goes to Daylight Savings but Asia remains on Standard time
input JPY_Close = 0100; #HINT JPT_Close: IMPORTANT, BE SURE to adjust for part of year where USA goes to Daylight Savings but Asia remains on Standard time
input US_Bond_Close = 1500;
input Metals_Futures_Close = 1700;

  AddVerticalLine(secondsFromTime(US_Open)[1] < 0 && secondsFromTime(US_Open) >= 0 and
                  Plot_Verticle_Line and 
                  Show_US, concat("US_Open", ""), Color.Green, curve.POINTS);
  AddVerticalLine(secondsFromTime(US_Close)[1] < 0 && secondsFromTime(US_Close) >= 0 and
                  Plot_Verticle_Line and 
                  Show_US, concat("US_Close", ""), Color.Green, curve.POINTS);
   def AUDopen = if secondsFromTime(AUD_Open)[1] < 0 && 
                    secondsFromTime(AUD_Open) >= 0 
                 then barnumber() 
                 else AUDopen[1];
   def DataAUDopenLine = if barnumber()-1 == AudOpen 
                         then if IsNaN(barnumber()) 
                              then HighestAll(open[1]) 
                              else open[1] 
                         else DataAUDopenLine[1];

  AddVerticalLine(secondsFromTime(AUD_Open)[1] < 0 && 
                  secondsFromTime(AUD_Open) >= 0 and 
                  Plot_Verticle_Line and 
                  Show_Sydney, concat("AUD_Open", " "), Color.Yellow, curve.POINTS);

   def AUDclose = if secondsFromTime(AUD_Close)[1] < 0 && 
                    secondsFromTime(AUD_Close) >= 0 
                  then barnumber() 
                  else AUDclose[1];
   def DataAUDcloseLine = if barnumber()-1 == Audclose 
                          then if IsNaN(barnumber()) 
                               then HighestAll(close[1]) 
                               else close[1] 
                          else DataAUDcloseLine[1];
AddVerticalLine(secondsFromTime(AUD_Close)[1]<0 && secondsFromTime(AUD_Close) >=0 and
                Plot_Verticle_Line and 
                Show_Sydney, concat("AUD_Close",""),Color.Yellow, curve.POINTS);
  AddVerticalLine(secondsFromTime(JPY_Open)[1] < 0 && 
                  secondsFromTime(JPY_Open) >= 0 and 
                  Plot_Verticle_Line and 
                  Show_Asian, concat("JPY_Open", ""), Color.Red, curve.POINTS);

  AddVerticalLine(secondsFromTime(JPY_Close)[1] < 0 && 
                  secondsFromTime(JPY_Close) >= 0 and 
                  Plot_Verticle_Line and 
                  Show_Asian, concat("JPY_Close", ""), Color.Red, curve.POINTS);
  AddVerticalLine(secondsFromTime(GBP_Open)[1] < 0 && 
                  secondsFromTime(GBP_Open) >= 0 and 
                  Plot_Verticle_Line and 
                  Show_London, concat("GBP_Open", ""), Color.Blue, curve.POINTS);

  AddVerticalLine(secondsFromTime(GBP_Close)[1] < 0 && 
                  secondsFromTime(GBP_Close) >= 0 and 
                  Plot_Verticle_Line and 
                  Show_London, concat("GBP_Close", ""), Color.Blue, curve.POINTS);
# US Bond Close
  AddVerticalLine(secondsFromTime(US_Bond_Close)[1] < 0 && 
                  secondsFromTime(US_Bond_Close) >= 0 and 
                  Plot_Verticle_Line and 
                  Show_London, concat("US_Bond_Close", ""), Color.Plum, curve.POINTS);
# Metals Futures Close
  AddVerticalLine(secondsFromTime(Metals_Futures_Close)[1] < 0 && 
                  secondsFromTime(Metals_Futures_Close) >= 0 and 
                  Plot_Verticle_Line and 
                  Show_London, concat("Metal_Futs_Close", ""), Color.Orange, curve.POINTS);
# End Code


Well-known member
Hi MBF, I don't get here much lately. Use the format below as a template to put the Globex open / close on your chart.

# Time Reminders
AddVerticalLine(secondsTillTime(0930) == 0, "RTH", color.cyan, Curve.Short_Dash);
AddVerticalLine(secondsTillTime(1030) == 0, "End EU", color.cyan, Curve.Short_Dash);
AddVerticalLine(secondsTillTime(1200) == 0, "Lunch", color.cyan, Curve.Short_Dash);
AddVerticalLine(secondsTillTime(1500) == 0, "Lst Hr", color.cyan, Curve.Short_Dash);
AddVerticalLine(secondsTillTime(1615) == 0, "RTH End", color.cyan, Curve.Short_Dash);


New member
Hello. I am new to ThinkScript, but hardly new to programming (30+ years).

I want to draw a collection of vertical lines, separated by a user-defined number of days, that can be placed on a day chart and dragged to different locations on that chart.

For example, I want to draw a vertical line at 9 days, 19 days, 43 days, and 65 days starting from an arbitrary, dragable point. The relative position of each would be a parameter in the scripts (using the Input keyword). In effect, I want to create a drawing surface that can be moved, and on that surface draw vertical lines (using, I suppose, the AddVerticalLine function).

Is this possible? If so, can someone please point me to a tutorial or example that might help me get started? Thanks in advance for all suggestions.


New member
Thanks. I had no idea that there was a built-in drawing tool that does this. I will investigate more. And thanks also for the link; I will check that out, as well. It seems that what I want is really a new drawing tool. Drawing tools place their lines on a movable canvas that can be moved independently from the chart. I don't see a way to create one programatically.


Staff member
@jrfinkel You’re absolutely correct. I totally forgot about that. The drawings are draggables but you have to activate them first. I was thinking of another concept. My apology.

yazeed k

New member

Hello my friends
how are you
I am new to the site and do not know where to start
But I have a simple strategy that I tried to work on and I couldn't implement

I want vertical lines that the distance between them and the last bar (close ) on any frame is (10 bar-20bar-50bar-100bar-150bar-200bar ago from close) , I think using the simple mean and declare upper
finlly thanks for this web

i know my english very bad 😁
Last edited by a moderator:


New member
I am trying to figure out how to plot a vertical line (AddVerticalLine()) for a specific day of the week and time. For example, if I hypothetically wanted to automatically plot a line for every Monday at 3pm, what would that look like?

def example = GetDayofWeek(1) + SecondsTillTime(1500) == 0;
AddVerticalLine(example, "", Color.BLUE, Curve.firm);

But it only plots a line every day at 3pm rather than every Monday at 3pm. Any ideas?