Previous Day High/Low/Close For ThinkOrSwim

Previous Day OHLC For ThinkOrSwim
This is a great script I have been using for awhile.

However, my charts have evolved a bit and I am looking to reduce the number of lines on my screen. Is there a way to modify this so the previous day candle OHLC lines only appear in the gray shaded premarket hours?

Code:
input aggregationPeriod = AggregationPeriod.DAY;
input length = 1;
#input displace = -1;
input displace_amount = {default zero, negative_one};
input price = open;

def displacement;
switch (displace_amount) {
case zero:
displacement = 0;
case negative_one:
displacement = -1;}

input showOnlyLastPeriod = yes;

plot PrevDayOpen;
plot PrevDayHigh;
plot PrevDayLow;
plot PrevDayClose;

if showOnlyLastPeriod and !IsNaN(open(period = aggregationPeriod)[-1]) and !IsNaN(high(period = aggregationPeriod)[-1]) and !IsNaN(low(period = aggregationPeriod)[-1]) and !IsNaN(close(period = aggregationPeriod)[-1]){
PrevDayOpen = Double.NaN;
PrevDayHigh = Double.NaN;
PrevDayLow = Double.NaN;
PrevDayClose = Double.NaN;}else{
PrevDayOpen = Highest(open(period = aggregationPeriod)[displace_amount], length);
PrevDayHigh = Highest(high(period = aggregationPeriod)[displace_amount], length);
PrevDayLow = Highest(low(period = aggregationPeriod)[displace_amount], length);
PrevDayClose = Highest(close(period = aggregationPeriod)[displace_amount], length);}
PrevDayOpen.SetDefaultColor(GetColor(4));
PrevDayOpen.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
PrevDayHigh.SetDefaultColor(GetColor(4));
PrevDayHigh.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
PrevDayLow.SetDefaultColor(GetColor(4));
PrevDayLow.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
PrevDayClose.SetDefaultColor(GetColor(4));
PrevDayClose.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);

input PlotOverNightExtremes = yes;

def o = open;
def h = high;
def l = low;
def c = close;
def v = volume;

def bar = BarNumber();
def GlobeX = GetTime() < RegularTradingStart(GetYYYYMMDD());
def vol = if GlobeX and !Globex[1]
then v
else if GlobeX
then vol[1] + v
else Double.NaN;

def GlobeX_Volume = vol;
def ONhigh = if GlobeX and !Globex[1]
then h
else if Globex and
h > ONhigh[1]
then h
else ONhigh[1];
def ONhighBar = if GlobeX and h == ONhigh
then Bar
else double.nan;

def ONlow = if GlobeX and !GlobeX[1]
then l
else if GlobeX and
l < ONlow[1]
then l
else ONlow[1];

def ONlowBar = if GlobeX and l == ONlow
then Bar
else double.nan;
def OverNightHigh = if BarNumber() == HighestAll(ONhighBar)
then ONhigh
else OverNightHigh[1];
def OverNightLow = if BarNumber() == HighestAll(ONlowBar)

then ONlow
else OverNightLow[1];

plot ONH = if OverNightHigh > 0

then OverNightHigh
else Double.NaN;
ONH.SetHiding(!PlotOverNightExtremes);
ONH.SetPaintingStrategy(PaintingStrategy.SQUARES);
ONH.SetDefaultColor(Color.BLUE);
ONH.HideBubble();
ONH.HideTitle();

plot ONL = if OverNightLow > 0
then OverNightLow
else Double.NaN;

ONL.SetHiding(!PlotOverNightExtremes);
ONL.SetPaintingStrategy(PaintingStrategy.SQUARES);
ONL.SetDefaultColor(Color.LIGHT_GRAY);
ONL.HideBubble();
ONL.HideTitle();

def MaxBar = Max(HighestAll(ONhighBar), HighestAll(ONlowBar));

##Sound Alerts

#alert ( (price crosses below PrevDayHigh) , "Price broke #it's Support for time period", Alert.BAR, #Sound.Ding);

#alert ( (price crosses above PrevDayHigh) , "Price broke #it's Resistance for time period", Alert.BAR,#Sound.Ding);

#alert ( (price crosses below PrevDayLow) , "Price broke #it's Support for time period", Alert.BAR, #Sound.Ding);

#alert ( (price crosses above PrevDayLow) , "Price broke #it's Resistance for time period", Alert.BAR,
#Sound.Ding);

#alert ( (price crosses below ONH) , "Price broke it's #Support for time period", Alert.BAR,
#Sound.Ding);

#alert ( (price crosses above ONH) , "Price broke it's #Resistance for time period", Alert.BAR,
#Sound.Ding);

#alert ( (price crosses below ONL) , "Price broke it's #Support for time period", Alert.BAR,
#Sound.Ding);

#alert ( (price crosses above ONL) , "Price broke it's #Resistance for time period", Alert.BAR,
#Sound.Ding);

#?

# End Code
 
Last edited by a moderator:

Join useThinkScript to post your question to a community of 21,000+ developers and traders.

How to create a study script that sound alerts you when candle is near previous Day High/Low/Close on the chart you are currently on?
 
Last edited:
How to create a study script that sound alerts you when candle is near previous Day High/Low/Close on the chart you are currently on?
Code:
# Previous Day Scan
# Assembled by @MerryDay at UseThinkScript.com

input percent = 0.99;
input aggregationPeriod = AggregationPeriod.DAY;

def prevhigh = high(period = aggregationPeriod)[1];
def pullback = high - (high * percent) ;

plot highLine = highestAll(if isNaN(close[-1]) then prevhigh else Double.NaN);
plot pullback_line = highestAll(if isNaN(close[-1]) then pullback else Double.NaN);

highLine.SetLineWeight(2);
highLine.SetDefaultColor(color.blue) ;
pullback_line.SetLineWeight(2);
pullback_line.SetDefaultColor(color.blue) ;

plot scan = close <= pullback ;
scan.hide();

Alert(pullback, "pullback", Alert.Bar, Sound.Chimes);

AddLabel(yes, Concat("Prev High = ", prevhigh), color.blue);
AddLabel(yes, Concat("Pullback = ", round(pullback,2)), color.blue);
# End Code
 
Code:
# Previous Day Scan
# Assembled by @MerryDay at UseThinkScript.com

input percent = 0.99;
input aggregationPeriod = AggregationPeriod.DAY;

def prevhigh = high(period = aggregationPeriod)[1];
def pullback = high - (high * percent) ;

plot highLine = highestAll(if isNaN(close[-1]) then prevhigh else Double.NaN);
plot pullback_line = highestAll(if isNaN(close[-1]) then pullback else Double.NaN);

highLine.SetLineWeight(2);
highLine.SetDefaultColor(color.blue) ;
pullback_line.SetLineWeight(2);
pullback_line.SetDefaultColor(color.blue) ;

plot scan = close <= pullback ;
scan.hide();

Alert(pullback, "pullback", Alert.Bar, Sound.Chimes);

AddLabel(yes, Concat("Prev High = ", prevhigh), color.blue);
AddLabel(yes, Concat("Pullback = ", round(pullback,2)), color.blue);
# End Code
I get alerted even when the price is far away from yesterday levels. How to fix this bug?
 
I'm sorry if this is a silly question...could you tell me how you get just the label text for the plots, and not in a callout bubble? It looks so clean on the screenshot!
 
Hi, anyone can help please, modify this indicator with bubble with name (color changeable) of the yesterday High / Low / Closing line?
Bubble name : Yesterday High, Yesterday Low, Yesterday Closing

Code:
#Study:Common Level
#by thetrader.top
declare hide_on_daily;
declare once_per_bar;

input timeFrame = {default DAY, WEEK, MONTH};

plot high = If(GetAggregationPeriod() <= AggregationPeriod.FIFTEEN_MIN, high(period = timeFrame)[1], Double.NaN);
plot Low = If(GetAggregationPeriod() <= AggregationPeriod.FIFTEEN_MIN, low(period = timeFrame)[1], Double.NaN);
plot Close = If(GetAggregationPeriod() <= AggregationPeriod.FIFTEEN_MIN, close(period = timeFrame)[1], Double.NaN);

high.SetDefaultColor (Color.GREEN);
high.SetPaintingStrategy(PaintingStrategy.DASHES);
Low.SetDefaultColor(Color.RED);
Low.SetPaintingStrategy(PaintingStrategy.DASHES);
Close.SetDefaultColor (Color.GRAY);
Close.SetPaintingStrategy(PaintingStrategy.DASHES);
 
Hi, anyone can help please, modify this indicator with bubble with name (color changeable) of the yesterday High / Low / Closing line?
Bubble name : Yesterday High, Yesterday Low, Yesterday Closing

Code:
#Study:Common Level
#by thetrader.top
declare hide_on_daily;
declare once_per_bar;

input timeFrame = {default DAY, WEEK, MONTH};

plot high = If(GetAggregationPeriod() <= AggregationPeriod.FIFTEEN_MIN, high(period = timeFrame)[1], Double.NaN);
plot Low = If(GetAggregationPeriod() <= AggregationPeriod.FIFTEEN_MIN, low(period = timeFrame)[1], Double.NaN);
plot Close = If(GetAggregationPeriod() <= AggregationPeriod.FIFTEEN_MIN, close(period = timeFrame)[1], Double.NaN);

high.SetDefaultColor (Color.GREEN);
high.SetPaintingStrategy(PaintingStrategy.DASHES);
Low.SetDefaultColor(Color.RED);
Low.SetPaintingStrategy(PaintingStrategy.DASHES);
Close.SetDefaultColor (Color.GRAY);
Close.SetPaintingStrategy(PaintingStrategy.DASHES);

This provides movable (sideways) bubbles. Make sure you have enough bars in expansion in chart settings/time axis to display the bubbles

Code:
#Study:Common Level
#by thetrader.top
declare hide_on_daily;
declare once_per_bar;

input timeFrame = {default DAY, WEEK, MONTH};

plot High = If(GetAggregationPeriod() <= AggregationPeriod.FIFTEEN_MIN, high(period = timeFrame)[1], Double.NaN);
plot Low = If(GetAggregationPeriod() <= AggregationPeriod.FIFTEEN_MIN, low(period = timeFrame)[1], Double.NaN);
plot C = If(GetAggregationPeriod() <= AggregationPeriod.FIFTEEN_MIN, close(period = timeFrame)[1], Double.NaN);

High.SetDefaultColor (Color.GREEN);
High.SetPaintingStrategy(PaintingStrategy.DASHES);
Low.SetDefaultColor(Color.RED);
Low.SetPaintingStrategy(PaintingStrategy.DASHES);
C.SetDefaultColor (Color.GRAY);
C.SetPaintingStrategy(PaintingStrategy.DASHES);



input bubblemover = 3;
def b = bubblemover;
def b1 = b + 1;

AddChartBubble(!IsNaN(close[b1]) and IsNaN(close[b]), High[b1], "Yesterday High", Color.YELLOW, no);
AddChartBubble(!IsNaN(close[b1]) and IsNaN(close[b]), Low[b1], "Yesterday Low" , Color.YELLOW);
AddChartBubble(!IsNaN(close[b1]) and IsNaN(close[b]), C[b1], "Yesterday Closing" , Color.YELLOW, no);
 
  • 100 %
Reactions: LLP
Can you please make the bubble color changeable? This one is showing FIX yellow

The bubble code's color is changeable. It is just whether you want to do it in the code or at the input screen.

See the image where you can change the color within the code. Click the color at the left arrow and the parameter box will appear. Click the dropdown for color to see a list to choose from.

The following code example for High, using global color will allow you to change the color at the input screen. Make similar changes for Low and Close using the example.

Capture.jpg

Code:
defineglobalColor("H",color.yellow);

AddChartBubble(!IsNaN(close[b1]) and IsNaN(close[b]), High[b1], "Yesterday High", globalcolor("H"), no);
 
  • Clanking Beer Mugs
Reactions: LLP
Hi. Does anyone have a prior day/month open, high, and low with a 1 displacement that works on mobile and shows as a horizontal line? The indicators I use don’t work on mobile for some reason. I do have a premarket open price that can show horizontal so I know it can be done but I can’t figure out what’s the problem is.
 
Try this code. It has been working for me. It does HLC of the previous day and seems to work on all instruments.

Code:
input aggregationPeriod = AggregationPeriod.DAY;
input length = 1;
input displace = -1;
input showOnlyLastPeriod = yes;
plot PrevDayHigh;
plot PrevDayLow;
plot PrevDayClose;

if showOnlyLastPeriod and !IsNaN(high(period = aggregationPeriod)[-1]) and !IsNaN(low(period = aggregationPeriod)[-1]) and !IsNaN(close(period = aggregationPeriod)[-1])
{
    PrevDayHigh = Double.NaN;
    PrevDayLow = Double.NaN;
    PrevDayClose = Double.NaN;
}
else
{
    PrevDayHigh = Highest(high(period = aggregationPeriod)[-displace], length);
    PrevDayLow = Highest(low(period = aggregationPeriod)[-displace], length);
    PrevDayClose = Highest(close(period = aggregationPeriod)[-displace], length);
}
PrevDayHigh.SetDefaultColor(CreateColor(0,255,255));
PrevDayHigh.SetPaintingStrategy(PaintingStrategy.LINE);

PrevDayLow.SetDefaultColor(CreateColor(0,255,255));
PrevDayLow.SetPaintingStrategy(PaintingStrategy.LINE);

PrevDayClose.SetDefaultColor(CreateColor(116,189,239));
PrevDayClose.SetPaintingStrategy(PaintingStrategy.LINE);
PrevDayClose.SetStyle(Curve.LONG_DASH);
What part of the code would I have to change so the H/L horizontal lines are actually plotted as soon as regular market hours close on the daily chart and will still extend through AH into PM?
 
What part of the code would I have to change so the H/L horizontal lines are actually plotted as soon as regular market hours close on the daily chart and will still extend through AH into PM?
Thanks, but im looking for something that works on "MOLBILE". This doesn't seem to work on mobile. Also, looking for High Low and Open.
 
I like to find ways to remove clutter from the charts so I came up with this. Figured others might find it appealing as well. Plots previous day's high, low and close, as well as the current days open on expansion. these values are taken from the daily aggregation.

l7aR37M.png


Code:
#[email protected]
def NA = Double.NaN;

input agg = AggregationPeriod.DAY;
input showOnlyLastPeriod = no;
input showBubbles = yes;
input showValuesInBubbles = yes;
input spaceBetween = 1;
plot currentOpen;
plot prevDayClose;
plot prevDayLow;
plot prevDayHigh;
def exp = IsNaN(close[spaceBetween]);

currentOpen = if exp then open("period"=agg) else NA;
prevDayClose = if exp then close("period"=agg)[1] else NA;
prevDayLow = if exp then low("period"=agg)[1] else NA;
prevDayHigh = if exp then high("period"=agg)[1] else NA;

AddChartBubble(showBubbles, if IsNaN(currentOpen[1]) and !IsNaN(currentOpen) then currentOpen else NA, if showValuesInBubbles then "CurrOpen $"+currentOpen else "CurrOpen", Color.WHITE, yes);
AddChartBubble(showBubbles, if IsNaN(prevDayClose[1]) and !IsNaN(prevDayClose) then prevDayClose else NA, if showValuesInBubbles then "PrevClose $"+prevDayClose else "PrevClose", Color.YELLOW, yes);
AddChartBubble(showBubbles, if IsNaN(prevDayLow[1]) and !IsNaN(prevDayLow) then prevDayLow else NA, if showValuesInBubbles then "PrevLow $"+prevDayLow else "PrevLow", Color.RED, yes);
AddChartBubble(showBubbles, if IsNaN(prevDayHigh[1]) and !IsNaN(prevDayHigh) then prevDayHigh else NA, if showValuesInBubbles then "PrevHigh $"+prevDayHigh else "PrevHigh", Color.GREEN, yes);

currentOpen.SetDefaultColor(Color.WHITE);
prevDayLow.SetDefaultColor(Color.RED);
prevDayHigh.SetDefaultColor(Color.GREEN);
prevDayClose.SetDefaultColor(Color.YELLOW);
currentOpen.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
prevDayLow.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
prevDayHigh.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
prevDayClose.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);

I am very thankful to all of you that provided the scripts to this site. Without it, I would not have found the 4 scripts that work.

I would like help on modifying the script to look clean like the one above.
1.Option to remove clutter from the chart or extend lines on chart.
2.Option to select/deselect to Show value in the bubbles.

The script I am currently using is below.
http://tos.mx/PcdyViP

Thank you.
 
I tried several ONH/ONL indicators before settling on the one below, and wondered if someone could help me modify it so the indicator lines show only in the right expansion area, like the excellent indicator here:

https://usethinkscript.com/threads/previous-day-high-low-close-for-thinkorswim.3494/


Here is the overnight indicator code I'm looking to modify:

Ruby:
# GlobeX or Overnight High / Low

input agg = AggregationPeriod.DAY;
input PlotOverNightExtremes = yes;


def h = high;
def l = low;
def c = close;
def bar = BarNumber();
def Intraday = if GetAggregationPeriod() < 86400000
               then 1
               else 0;
def OverNightActive =  if (SecondsFromTime(1600) >= 0 and
                           SecondsTillTime(0000) <= 0)
                          or
                          (SecondsFromTime(0000) >= 0 and
                           SecondsFromTime(0930) < 0)
                        then 1
                       else Double.NaN;
def ONhigh = if !IsNaN(OverNightActive) and IsNaN(OverNightActive[1])
             then h
             else if !IsNaN(OverNightActive) and
                     h > ONhigh[1]
                  then h
                  else ONhigh[1];
def ONhighBar = if !IsNaN(OverNightActive) and h == ONhigh
                then BarNumber()
                else ONhighBar[1];
def ONlow = if !IsNaN(OverNightActive) and IsNaN(OverNightActive[1]) and IsNaN(ONlow[1])
            then l
            else if IsNaN(OverNightActive)
                 then Double.NaN
            else if !IsNaN(OverNightActive) and
                    l < ONlow[1]
                 then l
                 else ONlow[1];
def ONlowBar = if !IsNaN(OverNightActive) and l == ONlow
               then BarNumber()
               else ONlowBar[1];
def OverNightHigh = if BarNumber() == HighestAll(ONhighBar)
                    then h
                    else OverNightHigh[1];
def OverNightLow = if BarNumber() == HighestAll(ONlowBar)
                   then l
                   else OverNightLow[1];
plot ONH = if Intraday
           then OverNightHigh
           else Double.NaN;
ONH.SetHiding(!PlotOverNightExtremes);
ONH.SetPaintingStrategy(PaintingStrategy.SQUARES);
ONH.SetDefaultColor(Color.BLUE);
plot ONL = if Intraday
           then OverNightLow
           else Double.NaN;
ONL.SetHiding(!PlotOverNightExtremes);
ONL.SetPaintingStrategy(PaintingStrategy.SQUARES);
ONL.SetDefaultColor(Color.GRAY);
#AddChartBubble(bar == ONhighBar and PlotOverNightExtremes, ONH, "ONH", Color.BLUE);
#AddChartBubble(bar == ONlowBar and PlotOverNightExtremes, ONL, "ONL", Color.GRAY, 0);

plot ONO = open (period = agg);
ONO.setPaintingStrategy(PaintingStrategy.SQUARES);
ONO.setDefaultColor(color.black);
 
I tried several ONH/ONL indicators before settling on the one below, and wondered if someone could help me modify it so the indicator lines show only in the right expansion area, like the excellent indicator here:

https://usethinkscript.com/threads/previous-day-high-low-close-for-thinkorswim.3494/


Here is the overnight indicator code I'm looking to modify:

Ruby:
# GlobeX or Overnight High / Low

input agg = AggregationPeriod.DAY;
input PlotOverNightExtremes = yes;


def h = high;
def l = low;
def c = close;
def bar = BarNumber();
def Intraday = if GetAggregationPeriod() < 86400000
               then 1
               else 0;
def OverNightActive =  if (SecondsFromTime(1600) >= 0 and
                           SecondsTillTime(0000) <= 0)
                          or
                          (SecondsFromTime(0000) >= 0 and
                           SecondsFromTime(0930) < 0)
                        then 1
                       else Double.NaN;
def ONhigh = if !IsNaN(OverNightActive) and IsNaN(OverNightActive[1])
             then h
             else if !IsNaN(OverNightActive) and
                     h > ONhigh[1]
                  then h
                  else ONhigh[1];
def ONhighBar = if !IsNaN(OverNightActive) and h == ONhigh
                then BarNumber()
                else ONhighBar[1];
def ONlow = if !IsNaN(OverNightActive) and IsNaN(OverNightActive[1]) and IsNaN(ONlow[1])
            then l
            else if IsNaN(OverNightActive)
                 then Double.NaN
            else if !IsNaN(OverNightActive) and
                    l < ONlow[1]
                 then l
                 else ONlow[1];
def ONlowBar = if !IsNaN(OverNightActive) and l == ONlow
               then BarNumber()
               else ONlowBar[1];
def OverNightHigh = if BarNumber() == HighestAll(ONhighBar)
                    then h
                    else OverNightHigh[1];
def OverNightLow = if BarNumber() == HighestAll(ONlowBar)
                   then l
                   else OverNightLow[1];
plot ONH = if Intraday
           then OverNightHigh
           else Double.NaN;
ONH.SetHiding(!PlotOverNightExtremes);
ONH.SetPaintingStrategy(PaintingStrategy.SQUARES);
ONH.SetDefaultColor(Color.BLUE);
plot ONL = if Intraday
           then OverNightLow
           else Double.NaN;
ONL.SetHiding(!PlotOverNightExtremes);
ONL.SetPaintingStrategy(PaintingStrategy.SQUARES);
ONL.SetDefaultColor(Color.GRAY);
#AddChartBubble(bar == ONhighBar and PlotOverNightExtremes, ONH, "ONH", Color.BLUE);
#AddChartBubble(bar == ONlowBar and PlotOverNightExtremes, ONL, "ONL", Color.GRAY, 0);

plot ONO = open (period = agg);
ONO.setPaintingStrategy(PaintingStrategy.SQUARES);
ONO.setDefaultColor(color.black);
Add the following lines:
input showOnRight = yes;
def exp = if showOnRight then IsNaN(close[1]) else yes;

and then change the plot lines to:

plot ONH = if Intraday and exp then OverNightHigh else Double.NaN;
and
plot ONL = if Intraday and exp then OverNightLow else Double.NaN;

Switching the showOnRight variable from yes to no will show them the way they are now...
 
Add the following lines:
input showOnRight = yes;
def exp = if showOnRight then IsNaN(close[1]) else yes;

and then change the plot lines to:

plot ONH = if Intraday and exp then OverNightHigh else Double.NaN;
and
plot ONL = if Intraday and exp then OverNightLow else Double.NaN;

Switching the showOnRight variable from yes to no will show them the way they are now...

This works beautifully! Also gives me a framework for modifying other line based chart studies for right expansion, much appreciate your time and help.
 

Not the exact question you're looking for?

Start a new thread and receive assistance from our community.

87k+ Posts
349 Online
Create Post

The Market Trading Game Changer

Join 2,500+ subscribers inside the useThinkScript VIP Membership Club
  • Exclusive indicators
  • Proven strategies & setups
  • Private Discord community
  • ‘Buy The Dip’ signal alerts
  • Exclusive members-only content
  • Add-ons and resources
  • 1 full year of unlimited support

Frequently Asked Questions

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?
VIP members get exclusive access to these proven and tested premium indicators: Buy the Dip, Advanced Market Moves 2.0, Take Profit, and Volatility Trading Range. In addition, VIP members get access to over 50 VIP-only custom indicators, add-ons, and strategies, private VIP-only forums, private Discord channel to discuss trades and strategies in real-time, customer support, trade alerts, and much more. Learn all about VIP membership here.
How can I access the premium indicators?
To access the premium indicators, which are plug and play ready, sign up for VIP membership here.
Back
Top