def <result> = fold <index> = <start> to <end> [ with <variable> [ = <init> ] ] [ while <condition> ] do <expression>;
fold operator allows you to perform iterated calculations. The list below explains the operator's logic (variable names are taken from the sample syntax above):
1. The purpose of the
fold operator is to perform an iterated calculation and assign the final value to the
index variable serves as a loop counter.
3. With each iteration, the
index value increases by
1; the initial value of
index is set by the
4. Iterated calculations will be performed while the
index value is less than the
end parameter. Once the
index value becomes equal to the
end parameter, the loop is terminated without calculation.
5. Within each iteration, the operator calculates the
expression and assigns the result to the
variable. In the
expression, you are free to use the value of
index and also reference the previous value of the
variable can be specified with the
init parameter. If none is specified, then the
variable is assigned a value of
0 before the first iteration.
variable value is thus re-written after each iteration; after the last iteration, its final value is assigned to the
7. You can also add a condition within the
while block of the operator. If this condition is violated, the
t is assigned the last known value of
variable and the loop is terminated.
input n = 10;
plot factorial = fold index = 1 to n + 1 with p = 1 do p * index;
This example script calculates the factorial of a number.
factorial variable stores the result value of the calculation;
index is the counter and its values are increased by
p is the variable whose value is re-written over iterations; its initial value is set to
1. The expression is the product of
index. After the first iteration,
1*1=1. After the second iteration, it is equal to its current value (
1) multiplied by current
2. After the third iteration, its current value (
2) is multiplied by current
6. Since the input
n is set to
10, there will be 10 iterations (the loop is terminated when the
index becomes equal to
n+1=11), so the last value of
p will be equal to
3,628,800 (a product of all numbers from 1 through 10). This is the value that is assigned to the
factorial variable after the loop is complete.
input price = close;
input length = 9;
plot SMA = (fold n = 0 to length with s do s + getValue(price, n, length - 1)) / length;
This example script calculates a simple moving average using
plot NextHigh = fold i = 0 to 100 with price = Double.NaN while IsNaN(price) do if getValue(high, -i, -99) > 40 then getValue(high, -i, -99) else Double.NaN;
This example script plots the closest high price value greater than 40 out of the next 100 bars.