PineJS Utility Functions
Custom Study Constructor is able to use utility functions from PineJS object (an argument of custom_indicators_getter function).
Functions ported from Pine
na(x)
Test value if it's a NaN.
Returns
true
if x
is not a valid number (x
is NaN), otherwise false
.
nz(x, y)
Replaces NaN values with zeros (or given value) in a series.
Returns
x
if it's a valid (not NaN) number, otherwise y
and(expr1, expr2)
Logical AND. Applicable to boolean expressions.
Returns
Boolean value, or series of boolean values.
or(expr1, expr2)
Logical OR. Applicable to boolean expressions.
Returns
Boolean value, or series of boolean values.
not(expr)
Logical negation (NOT). Applicable to boolean expressions.
Returns
Boolean value, or series of boolean values.
max(x1, x2, ..., x10)
Returns
The greatest of multiple values
min(x1, x2, ..., x10)
Returns
The smallest of multiple given values.
pow(base, exponent)
Mathematical power function.
Returns
x
raised to the power of y
. If x
is a series, it is calculated elementwise.
Arguments
base
(series[float]) Specify the base to use.exponent
(float) Specifies the exponent.
abs(x)
Absolute value of x
is x
if x >= 0
, or -x
otherwise.
Returns
The absolute value of x
log(x)
Natural logarithm of any x > 0
is the unique y
such that e^y = x
Returns
The natural logarithm of x.
log10(x)
Base 10 logarithm of any x > 0
is the unique y
such that 10^y = x
Returns
The base 10 logarithm of x.
sqrt(x)
Square root of any x >= 0
is the unique y >= 0
such that y^2 = x
Returns
The square root of x.
sign(x)
Sign (signum) of x
is zero if the x
is zero, 1.0
if the x
is greater than zero, -1.0
if the x
is less than zero.
Returns
The sign of the argument.
exp(x)
The exp function of x
is e^x
, where x
is the argument and e
is Euler's number.
Returns
A number representing e^x.
sin(x)
The sin
function returns the trigonometric sine of an angle.
Returns
The trigonometric sine of an angle.
Arguments
x
(series[float]) Angle, in radians.
cos(x)
The cos function returns the trigonometric cosine of an angle.
Returns
The trigonometric cosine of an angle.
Arguments
x
(series[float]) Angle, in radians.
tan(x)
The tan function returns the trigonometric tangent of an angle.
Returns
The trigonometric tangent of an angle.
Arguments
x
(series[float]) Angle, in radians.
asin(x)
The asin function returns the arcsine (in radians) of number such that sin(asin(y)) = y
for y
in range [-1, 1]
.
Returns
The arcsine of a value; the returned angle is in the range [-Pi/2, Pi/2]
, or na if y is outside of range [-1, 1]
.
acos(x)
The acos function returns the arccosine (in radians) of number such that cos(acos(y)) = y
for y
in range [-1, 1]
.
Returns
The arc cosine of a value; the returned angle is in the range [0, Pi]
, or na
if y
is outside of range [-1, 1]
.
atan(x)
The atan function returns the arctangent (in radians) of number such that tan(atan(y)) = y
for any y
.
Returns
The arc tangent of a value; the returned angle is in the range [-Pi/2, Pi/2]
.
floor(x)
Returns
The largest integer less than or equal to the given number.
ceil(x)
The ceil function returns the smallest (closest to negative infinity) integer that is greater than or equal to the argument.
Returns
The smallest integer greater than or equal to the given number.
round(x)
Returns
The value of x
rounded to the nearest integer, with ties rounding up. If the precision parameter is used, returns a float value rounded to that number of decimal places.
avg(x1, x2, ..., x10)
Calculates average of all given series (elementwise).
Returns
Average.
open(context)
Current open price.
Arguments
context
PineJS execution context.
high(context)
Current high price.
Arguments
context
PineJS execution context.
low(context)
Current low price.
Arguments
context
PineJS execution context.
close(context)
Close price of the current bar when it has closed, or last traded price of a yet incomplete, realtime bar.
Arguments
context
PineJS execution context.
hl2(context)
Is a shortcut for (high + low)/2
Arguments
context
PineJS execution context.
hlc3(context)
Is a shortcut for (high + low + close)/3
Arguments
context
PineJS execution context.
ohlc4(context)
Is a shortcut for (open + high + low + close)/4
Arguments
context
PineJS execution context.
volume(context)
Current bar volume.
Arguments
context
PineJS execution context.
period(context)
Resolution string, e.g. 60
- 60 minutes, D
- daily, W
- weekly, M
- monthly, 5D
- 5 days, 12M
- one year, 3M
- one quarter
Arguments
context
PineJS execution context.
tickerid(context)
Arguments
context
PineJS execution context.
year(context)
Current bar year in exchange timezone.
Arguments
context
PineJS execution context.
month(context)
Current bar month in exchange timezone.
Arguments
context
PineJS execution context.
weekofyear(context)
Week number of current bar time in exchange timezone.
Arguments
context
PineJS execution context.
dayofmonth(context)
Date of current bar time in exchange timezone.
Arguments
context
PineJS execution context.
dayofweek(context)
Day of week for current bar time in exchange timezone.
Arguments
context
PineJS execution context.
hour(context)
Current bar hour in exchange timezone.
Arguments
context
PineJS execution context.
minute(context)
Current bar minute in exchange timezone.
Arguments
context
PineJS execution context.
second(context)
Current bar second in exchange timezone.
Arguments
context
PineJS execution context.
iff(condition, then, _else)
If ... then ... else ...
Remarks
iff
does exactly the same thing as ternary conditional operator ?:
but in a functional style. Also iff is slightly less efficient than operator ?:
rising(series, length)
Test if the series
is now rising for length
bars long.
Returns
true
if current x
is greater than any previous x
for length
bars back, false
otherwise.
Arguments
series
(series[float]) Series of values to process.length
(integer) Number of bars (length).
falling(series, length)
Test if the series
is now falling for length
bars long.
Returns
true
if current x
is less than any previous x
for length
bars back, false
otherwise.
Arguments
series
(series[float]) Series of values to process.length
(integer) Number of bars (length).
rsi(upper, lower)
Relative strength index. It is calculated based on rma's of upward and downward change of x.
Returns
Relative strength index.
Arguments
upper
(float) Series of values to process.lower
(float) Number of bars (length).
sum(source, length, context)
The sum function returns the sliding sum of last y values of x.
Returns
Sum of x for y bars back.
Arguments
source
(series[float]) Series of values to process.length
(integer) Number of bars (length).context
PineJS execution context.
sma(source, length, context)
The sma function returns the moving average, that is the sum of last length
values of source
, divided by length
.
Returns
Simple moving average of x for y bars back.
Arguments
source
(series[float]) Series of values to process.length
(integer) Number of bars (length).context
PineJS execution context.
rma(source, length, context)
Moving average used in RSI. It is the exponentially weighted moving average with alpha = 1 / length.
Returns
Exponential moving average of x with alpha = 1 / y.
Arguments
source
(series[float]) Series of values to process.length
(integer) Number of bars (length).context
PineJS execution context.
fixnan(current, context)
For a given series replaces NaN values with previous nearest non-NaN value.
Returns
Series without na
gaps.
Arguments
current
(series[float]) Series of values to process.context
PineJS execution context.
tr(handle_nan, context)
Returns
True range. It is max(high - low, abs(high - close[1]), abs(low - close[1]))
Arguments
handle_nan
(bool) How NaN values are handled. iftrue
, and previous day's close is NaN thentr
would be calculated as current day high-low. Otherwise (iffalse
)tr
would return NaN in such cases. Also note, that atr usestr(true)
.context
PineJS execution context.
atr(length, context)
Function atr (average true range) returns the RMA of true range. True range is max(high - low, abs(high - close[1]), abs(low - close[1]))
Returns
Average true range.
Arguments
length
(integer) Length (number of bars back).context
PineJS execution context.
ema(series, length, context)
The ema function returns the exponentially weighted moving average. In ema weighting factors decrease exponentially. It calculates by using a formula: EMA = alpha * x + (1 - alpha) * EMA[1]
, where alpha = 2 / (y + 1)
Returns
Exponential moving average of x with alpha = 2 / (y + 1)
Arguments
source
(series[float]) Series of values to process.length
(integer) Number of bars (length).context
PineJS execution context.
wma(source, length, context)
The wma function returns weighted moving average of source
for length
bars back. In wma weighting factors decrease in arithmetical progression.
Returns
Weighted moving average of series
for length
bars back.
Arguments
source
(series[float]) Series of values to process.length
(integer) Number of bars (length).context
PineJS execution context.
vwma(source, length, context)
The vwma
function returns volume-weighted moving average of source
for length
bars back. It is the same as: sma(x * volume, y) / sma(volume, y)
Returns
Volume-weighted moving average of source
for length
bars back.
Arguments
source
(series[float]) Series of values to process.length
(integer) Number of bars (length).context
PineJS execution context.
swma(source, context)
Symmetrically weighted moving average with fixed length: 4. Weights: [1/6, 2/6, 2/6, 1/6]
.
Returns
Symmetrically weighted moving average
Arguments
source
(series[float]) Source series.context
PineJS execution context.
lowestbars(source, length, context)
Lowest value offset for a given number of bars back.
Returns
Offset to the lowest bar.
Arguments
source
(series[float]) Series of values to process.length
(integer) Number of bars (length).context
PineJS execution context.
lowest(source, length, context)
Lowest value for a given number of bars back.
Returns
Lowest value.
Arguments
source
(series[float]) Series of values to process.length
(integer) Number of bars (length).context
PineJS execution context.
highestbars(source, length, context)
Highest value offset for a given number of bars back.
Returns
Offset to the highest bar.
Arguments
source
(series[float]) Series of values to process.length
(integer) Number of bars (length).context
PineJS execution context.
highest(source, length, context)
Highest value for a given number of bars back.
Returns
Highest value.
Arguments
source
(series[float]) Series of values to process.length
(integer) Number of bars (length).context
PineJS execution context.
cum(x, context)
Cumulative (total) sum of x
. In other words it's a sum of all elements of x
.
Returns
Total sum series.
Arguments
x
(series[float]) Series of values to process.context
PineJS execution context.
accdist(context)
Accumulation/distribution index.
Arguments
context
PineJS execution context.
correlation(source_a, source_b, length, context)
Correlation coefficient. Describes the degree to which two series tend to deviate from their sma
values.
Returns
Correlation coefficient.
Arguments
source_a
(series[float]) Source series.source_b
(series[float]) Target series.length
(integer) Length (number of bars back).context
PineJS execution context.
stoch(source, high, low, length, context)
Stochastic. It is calculated by a formula: 100 * (close - lowest(low, length)) / (highest(high, length) - lowest(low, length))
Returns
Stochastic.
Arguments
source
(series[float]) Source series.high
(series[float]) Series of high.low
(series[float]) Series of low.length
(integer) Length (number of bars back).context
PineJS execution context.
tsi(source, short_length, long_length, context)
True strength index. It uses moving averages of the underlying momentum of a financial instrument.
Returns
True strength index. A value in range [-1, 1]
Arguments
source
(series[float]) Source series.short_length
(integer) Short length.long_length
(integer) Long length.context
PineJS execution context.
cross(x, y, context)
Returns
true
if two series have crossed each other, otherwise false
.
Arguments
x
(series[float]) First series.y
(series[float]) Second series.context
PineJS execution context.
linreg(source, length, offset)
Linear regression curve. A line that best fits the prices specified over a user-defined time period. It is calculated using the least squares method. The result of this function is calculated using the formula: linreg = intercept + slope * (length - 1 - offset)
, where intercept and slope are the values calculated with the least squares method on source series (x argument).
Returns
Linear regression curve.
Arguments
source
(series[float]) Source series.length
(integer)offset
(integer) Offset.
sar(start, inc, max, context)
Parabolic SAR (parabolic stop and reverse) is a method devised by J. Welles Wilder, Jr., to find potential reversals in the market price direction of traded goods.
Returns
Parabolic SAR.
Arguments
start
(series[float]) Start.inc
(integer) Increment.max
(integer) Maximum.context
PineJS execution context.
alma(series, length, offset, sigma)
Arnaud Legoux Moving Average. It uses Gaussian distribution as weights for moving average.
Returns
Arnaud Legoux Moving Average.
Arguments
series
(series[float]) Series of values to process.length
(integer) Number of bars (length).offset
(float) Controls tradeoff between smoothness (closer to 1) and responsiveness (closer to 0).sigma
(float) Changes the smoothness of ALMA. The larger sigma the smoother ALMA.
change(source)
Difference between current value and previous, x - x[1]
.
Returns
The result of subtraction.
Arguments
source
(series[float])
roc(source, length)
Function roc (rate of change) showing the difference between current value of source
and the value of source
that was length
days ago.
It is calculated by the formula: 100 * change(src, length) / src[length]
.
Returns
The rate of change of source
for length
bars back.
Arguments
source
(series[float]) Series of values to process.length
(integer) Number of bars (length).
dev(source, length, context)
Measure of difference between the series and it's sma
.
Returns
Deviation of source
for length
bars back.
Arguments
source
(series[float]) Series of values to process.length
(integer) Number of bars (length).context
PineJS execution context.
stdev(source, length, context)
Returns
Standard deviation.
Arguments
source
(series[float]) Series of values to process.length
(integer) Number of bars (length).context
PineJS execution context.
Remarks
This is a biased estimation of standard deviation.
variance(source, length, context)
Variance is the expectation of the squared deviation of a series from its mean sma
, and it informally measures how far a set of numbers are spread out from their mean.
Returns
Variance of source
for length
bars back.
Arguments
source
(series[float]) Series of values to process.length
(integer) Number of bars (length).context
PineJS execution context.
Remarks
This is a biased estimation of sample variance.
percentrank(source, length)
Percent rank is the percents of how many previous values was less than or equal to the current value of given series.
Returns
Percent rank of source
for length
bars back.
Arguments
source
(series[float]) Series of values to process.length
(integer) Number of bars (length).
dmi(diLength, adxSmoothingLength, context)
Calculates the directional movement values +DI, -DI, DX, ADX, and ADXR.
Returns
An array of the +DI, -DI, DX, ADX, and ADXR values with diLength
smoothing for the (+/-)DI values and adxSmoothingLength
for the ADX value.
Arguments
diLength
(integer) Number of bars (length) used when calculating the +DI and -DI values.adxSmoothingLength
(integer) Number of bars (length) used when calculating the ADX value.context
PineJS execution context.
Functions specific to the library
isZero(number)
- boolean, shows whether thenumber
equals zero or almost zerotoBool(number)
- boolean,true
if a number is finite and not equals zeroeq(arg1, arg2)
- boolean,true
if argument numbers are equalneq(arg1, arg2)
- boolean,true
if argument numbers are not equalge(arg1, arg2)
- boolean,true
if first argument number is greater or equal to secondgt(arg1, arg2)
- boolean,true
if first argument number is greater than secondle(arg1, arg2)
- boolean,true
if first argument number is lesser or equal to secondlt(arg1, arg2)
- boolean,true
if first argument is lesser than secondupdatetime(context)
- string, symbol update timeticker(context)
- string, symbol name without exchange prefix, e.g. 'MSFT'interval(context)
- returns symbol interval stringisdwm(context)
- boolean, returnstrue
if current resolution is a daily or weekly or monthly resolutionisintraday(context)
- boolean, returns true if current resolution is an intraday (minutes or seconds) resolutionisdaily(context)
- boolean, returnstrue
if current resolution is a daily resolutionisweekly(context)
- boolean, returnstrue
if current resolution is a weekly resolutionismonthly(context)
- boolean, returnstrue
if current resolution is a monthly resolutionadd_days_considering_dst(timezone, utcTime, daysCount)
selectSessionBreaks(context, times)
- select session breaks for intraday resolutions onlytimepart(symbol, field, time)
wvap(source, context)
createNewSessionCheck(context)
error(message)
- returns study error withmessage
specifiedtime(context, period)
- returns UNIX time of current bar