In TradingView we can create several input types, like those for numerical values, session time ranges, and even symbol search inputs. But what’s a ‘resolution input’ and how do we add it to our scripts?

In this article:

Adding a resolution drop-down menu in TradingView

In TradingView scripts we can work with variables whose value is set by an input option. That makes changing a certain value used in the script’s code easy: instead of having to edit the script’s source code, we simply go to the script’s input settings and change the option’s value.

We create those manual input options with the input() function (TradingView, n.d.). This function not only adds a setting to the script’s ‘Inputs’ window, it also returns the current value of that input option (Pine Script Language Tutorial, n.d.). When we store that value in a variable with the assignment operator (=), then we can use the variable anywhere in the script’s code to refer to the current value of the input option.

One kind of input that we can make in TradingView is a drop-down menu with different resolution values (see image further down below). For that we set the type argument of the input() function to resolution (Pine Script Language Tutorial, n.d.). Let’s take a closer look at how creating such an input with the input() function works.

Default syntax for creating a resolution input option

The basic pattern that creates a resolution input with input() is:

resolutionString = input(title, type=resolution, defval, confirm)

When the type argument is set to resolution, the input() function returns a string with the number of minutes that correspond to the input’s value. That returned value can then be used later on in the code.

So with the input option set to ‘2h’, the value that’s returned by input() is "120". An exception are the ‘1d’ and ‘1w’ values from the resolution drop-down menu; the function returns for those "D" and "W".

The different arguments of the input() function that we can use when creating a resolution input are (TradingView, n.d.):

Argument Description
title Optional argument that specifies which text is placed before the input option in the script’s settings (like title="Resolution setting").
type Required argument that, when set to resolution, makes input() create a resolution pull-down menu. The input() function then returns the current resolution value as a string.
defval Required argument that sets the input’s default value. With resolution, defval needs to be set to a string with a minute, day, or week value (see table below). With a default value, the script can begin calculating as soon we add it to a chart.
confirm Optional argument that, when set to true, asks the user to confirm the input option(s) before the script is added to the chart. Only one input() statement needs to have confirm set to true before the ‘Inputs’ window with all input settings displays forcibly. This argument defaults to false, meaning that the input options don’t require confirmation when confirm isn’t specified.
Note: The input() function returns the current value of its input option; by assigning this value to a variable we’re able to use the input’s value later on in the script.

The pull-down menu that resolution makes looks as follows:

Example of the resolution pull-down menu in TradingView

Setting the default value of a resolution input in TradingView

We set the default value of a resolution input with the defval argument of the input() function (TradingView, n.d.). This argument accepts a string with minutes, day, or week values.

The different values in the pull-down menu correspond to the following defval values:

Value in the pull-down menu Required defval value
1 defval="1"
2 defval="2"
3 defval="3"
5 defval="5"
15 defval="15"
30 defval="30"
45 defval="45"
1h defval="60"
2h defval="120"
3h defval="180"
1d defval="D"
1w defval="W"
Note: We can only set the default value of a resolution input to a value from the pull-down menu. In other words, specifying a default value of 10 minutes (defval="10") or 4 hours (defval="240") doesn’t work; the resolution pull-down menu simply defaults to ‘1’ then. With a text box input we have the flexibility to choose other resolutions also.

Example: plotting highs and lows from another time frame

In the programming example below we create a resolution input option to specify another time frame. Then, with the help of that input’s value, we retrieve the high, low, and EMA (Exponential Moving Average) from that time frame. We then plot those three values on the chart. A glance of the indicator is given below; after discussing the script’s code we examine its appearance in detail.

Example of the TradingView indicator added to a crude oil chart
study(title="Data from another time frame", overlay=true,
     shorttitle="Higher time frame")

// Add the inputs
timeFrame = input(title="Other time frame", type=resolution,
     defval="180")

emaLength = input(title="EMA length", type=integer, 
     defval=21, minval=5, maxval=100)

// Retrieve the higher time frame's data
symbolHigh = security(tickerid, timeFrame, high)
symbolLow  = security(tickerid, timeFrame, low)

emaClose = ema(security(tickerid, timeFrame, close), 
     emaLength)

// Plot the other time frame's data
plot(series=symbolHigh, color=green, linewidth=3, style=circles)
plot(series=symbolLow, color=red, linewidth=3, style=cross)
plot(series=emaClose, color=orange, linewidth=2)

We first set the indicator properties with study(). We use the title and shorttitle arguments to name the indicator, while we display the indicator on the chart’s instrument by setting overlay to true.

Then we create two input options:

timeFrame = input(title="Other time frame", type=resolution,
     defval="180")

emaLength = input(title="EMA length", type=integer, 
     defval=21, minval=5, maxval=100)

We make these input options with the input() function, and store the value returned by this function in a variable with the assignment operator (=).

The first input is named “Other time frame” with the input() function’s title argument, and we set this one to a resolution input option (type=resolution). Its default value (defval) is "180" (meaning, 180 minutes or 3 hours), and we track its current value with the timeFrame variable.

The other input is a numerical integer input named “EMA length”. This one has a standard value of 21 with an allowed range of 5 (minval=5) to 100 (maxval=100). We store this input’s value in the emaLength variable to use later on.

Next we load the price data from the other time frame:

symbolHigh = security(tickerid, timeFrame, high)
symbolLow  = security(tickerid, timeFrame, low)

emaClose = ema(security(tickerid, timeFrame, close), 
     emaLength)

With the security() function we can retrieve data from another symbol and/or resolution other than the one that the script calculates on (Pine Script Language Tutorial, n.d.; TradingView, n.d.). We use this function here with three arguments. These are the symbol with the accompanying exchange, the resolution to load, and the expression that security() should return (TradingView, n.d.).

There are two similarities between the three security() function calls. First, each specifies the symbol to load with tickerid. That built-in variable returns the symbol name and exchange prefix of the instrument that the script is currently added to (see TradingView, n.d.). The other similarity is that each uses the timeFrame input variable to specify which resolution security() should load. This way our “Other Time Frame” input option affects which data is loaded here.

There are differences too. The first security() function call loads high prices for the instrument’s other time frame, and stores the values returned by security() in the symbolHigh variable. The next security() function call loads low prices from that time frame which we then assign to the symbolLow variable.

The third use of security() is a bit different. Now we don’t store the returned values in a variable but use these with ema(). That function computes an Exponential Moving Average (EMA) with two arguments: a series of values to process alongside an integer with the moving average’s length (TradingView, n.d.). For the first argument we use the values returned by security(), whereas the second is set to the emaLength input variable. That variable of our “EMA Length” input option has a standard value of 21.

This way we don’t calculate the EMA based on the chart’s time frame, but with the time frame that we loaded with security() and specified with the timeFrame resolution input variable. We store those EMA values in the emaClose variable for now.

With the values computed, we plot them on the chart:

plot(series=symbolHigh, color=green, linewidth=3, style=circles)
plot(series=symbolLow, color=red, linewidth=3, style=cross)
plot(series=emaClose, color=orange, linewidth=2)

The plot() function displays the data of its series argument on the chart (TradingView, n.d.). With the function’s color argument we set the plot’s colour and linewidth sets the plot size, starting from 1 for the default size (TradingView, n.d.).

The first plot() statement displays the high prices from the other time frame (series=symbolHigh). This plot is coloured with the green basic TradingView colour and, with linewidth=3, made a few steps bigger than the default size. With the style argument set to circles we display these values as little dots on the chart.

The next plot() statement shows the other time frame’s low prices (series=symbolLow). These values appear as small ‘+’ signs (style=cross) coloured in red (color=red).

With the last plot() function call we display the EMA values (series=emaClose) in the orange standard TradingView colour on the chart. Since we don’t set the style of this plot, it appears as a line by default (TradingView, n.d.).

Example: using data from a higher time frame in TradingView

Now let’s examine how our example script looks. First, it creates two input options in the script’s settings: a resolution and numerical input.

Input options of the example TradingView script

The indicator shows the high and low from the ‘Other Time Frame’ input option, besides the EMA of closing prices from that time frame. So when added to a 5-minute Crude Oil chart, it looks like:

Example of the TradingView indicator added to a 5-minute chart

When a new time period (as set by the ‘Other Time Frame’ input option begins), those high and low prices are plotted in the right side of the chart as they develop:

New highs and lows from the other TradingView time frame The TradingView script updates the high and low prices in real-time

If we change the script’s input options to an ‘Other Time Frame’ value of ‘1h’ (instead of the default ‘180’, or 3 hours) and set the ‘EMA Length’ option to 12, then the chart changes to:

Example chart after changing the TradingView script's input options

Summary

Adding inputs to an indicator or strategy is done with input(). This function returns the input option’s current value, and we can store that value in a variable for use later on in the script. The kind of input that input() makes is set with this function’s type argument. When we set that argument to resolution, the script adds a pull-down menu with several resolution values to the input settings. This way we can easily choose a resolution by hand (like 15 minutes, an hour, or a day). With resolution inputs, the input() function returns a string with the resolution setting (like "120" for 2 hours). The function’s defval argument, which sets the option’s default value, uses a string value as well. The default value can, however, only be set to one of the values that are already available in the pull-down menu.

Learn more:

  • Besides creating a resolution drop-down menu, we can also use the input() function to add a numerical input option or a true/false checkbox to the settings of an indicator or trading strategy.
  • Another time-related input option is a session time range input. That input makes it possible to manually configure a time interval (like 8:00 till 18:00 hour).

References

Pine Script Language Tutorial (n.d.). Retrieved on August 13, 2015, from https://docs.google.com/document/d/1sCfC873xJEMV7MGzt1L70JTStTE9kcG2q-LDuWWkBeY/

TradingView (n.d.). Script Language Reference Manual. Retrieved on October 16, 2015, from https://www.tradingview.com/study-script-reference/