Vector2DrawQuadLibrary   "Vector2DrawQuad" 
functions to handle vector2 Quad drawing operations.
 new(a, b, c, d, xloc, bg_color, line_color, line_style, line_width) 
  Draws a quadrilateral with background fill.
  Parameters:
     a : v2     . Vector2 object, in the form `(x, y)`.
     b : v2     . Vector2 object, in the form `(x, y)`.
     c : v2     . Vector2 object, in the form `(x, y)`.
     d : v2     . Vector2 object, in the form `(x, y)`.
     xloc : string . Type of axis unit, bar_index or time.
     bg_color : color  . Color of the background.
     line_color : color  . Color of the line.
     line_style : string . Style of the line.
     line_width : int    . Width of the line.
  Returns: Quad object.
 copy(this) 
  Copy a existing quad object.
  Parameters:
     this : Quad . Source quad.
  Returns: Quad.
 set_position_a(this, x, y) 
  Set the position of corner `a` (modifies source quad).
  Parameters:
     this : Quad . Source quad.
     x : int      . Value at the x axis.
     y : float    . Value at the y axis.
  Returns: Source Quad.
 set_position_a(this, position) 
  Set the position of corner `a` (modifies source quad).
  Parameters:
     this : Quad . Source quad.
     position : Vector2  . New position.
  Returns: Source Quad.
 set_position_b(this, x, y) 
  Set the position of corner `b` (modifies source quad).
  Parameters:
     this : Quad . Source quad.
     x : int      . Value at the x axis.
     y : float    . Value at the y axis.
  Returns: Source Quad.
 set_position_b(this, position) 
  Set the position of corner `b` (modifies source quad).
  Parameters:
     this : Quad . Source quad.
     position : Vector2  . New position.
  Returns: Source Quad.
 set_position_c(this, x, y) 
  Set the position of corner `c` (modifies source quad).
  Parameters:
     this : Quad . Source quad.
     x : int      . Value at the x axis.
     y : float    . Value at the y axis.
  Returns: Source Quad.
 set_position_c(this, position) 
  Set the position of corner `c` (modifies source quad).
  Parameters:
     this : Quad . Source quad.
     position : Vector2  . New position.
  Returns: Source Quad.
 set_position_d(this, x, y) 
  Set the position of corner `d` (modifies source quad).
  Parameters:
     this : Quad  . Source quad.
     x : int   . Value at the x axis.
     y : float . Value at the y axis.
  Returns: Source Quad.
 set_position_d(this, position) 
  Set the position of corner `d` (modifies source quad).
  Parameters:
     this : Quad    . Source quad.
     position : Vector2 . New position.
  Returns: Source Quad.
 set_style(this, bg_color, line_color, line_style, line_width) 
  Update quad style options (modifies Source quad).
  Parameters:
     this : Quad   . Source quad.
     bg_color : color  . Color of the background.
     line_color : color  . Color of the line.
     line_style : string . Style of the line.
     line_width : int    . Width of the line.
  Returns: Source Quad.
 set_bg_color(this, bg_color) 
  Update quad style options (modifies Source quad).
  Parameters:
     this : Quad  . Source quad.
     bg_color : color . Color of the background.
  Returns: Source Quad.
 set_line_color(this, line_color) 
  Update quad style options (modifies Source quad).
  Parameters:
     this : Quad  . Source quad.
     line_color : color . Color of the line.
  Returns: Source Quad.
 set_line_style(this, line_style) 
  Update quad style options (modifies Source quad).
  Parameters:
     this : Quad   . Source quad.
     line_style : string . Style of the line.
  Returns: Source Quad.
 set_line_width(this, line_width) 
  Update quad style options (modifies Source quad).
  Parameters:
     this : Quad . Source quad.
     line_width : int      . Width of the line.
  Returns: Source Quad.
 move(this, x, y) 
  Move quad by provided amount (modifies source quad).
  Parameters:
     this : Quad  . Source quad.
     x : float . Amount to move the vertices of the quad in the x axis.
     y : float . Amount to move the vertices of the quad in the y axis.
  Returns: Source Quad.
 move(this, amount) 
  Move quad by provided amount (modifies source quad).
  Parameters:
     this : Quad    . Source quad.
     amount : Vector2 . Amount to move the vertices of the quad in the x and y axis.
  Returns: Source Quad.
 rotate_around(this, center, angle) 
  Rotate source quad around a center (modifies source quad).
  Parameters:
     this : Quad    . Source quad.
     center : Vector2 . Center coordinates of the rotation.
     angle : float   . Value of angle in degrees.
  Returns: Source Quad.
 rotate_around(this, center_x, center_y, angle) 
  Rotate source quad around a center (modifies source quad).
  Parameters:
     this : Quad  . Source quad.
     center_x : int   . Center coordinates of the rotation.
     center_y : float . Center coordinates of the rotation.
     angle : float . Value of angle in degrees.
  Returns: Source Quad.
MATH
MathComplexNumbersThis is a Pine Script library for handling complex numbers without arrays. It contains several utility functions for performing various operations on complex numbers, including converting complex numbers into tuples, getting the real and imaginary parts of a complex number, adding and subtracting complex numbers, computing the conjugate, multiplying and dividing complex numbers, computing the reciprocal, the inverse, the negative, the exponential, the ceil and the radius of a complex number.
The library exports a complex data type which consists of two float values: re, the real part of the complex number, and im, the imaginary part of the complex number.
The complex_tuple function and ct function convert a complex number into a tuple, and the get_real, get_imaginary, re, and im functions return the real and imaginary parts of a complex number.
The add and subtract functions add and subtract two complex numbers, respectively, by performing the appropriate arithmetic operations on their real and imaginary parts. The conjugate function returns the complex conjugate of a given complex number, which is the same as the original number but with the sign of its imaginary part reversed. The multiply and divide functions multiply and divide two complex numbers, respectively, according to the rules of complex arithmetic. The reciprocal function computes the reciprocal or inverse of a given complex number, while the inverse function computes the inverse of a given complex number. The negative function returns the negative of a given complex number, and the exponential function computes the exponential of a given complex number. The ceil function rounds a given complex number up to a specified number of digits. The radius function computes the radius (magnitude) of a given complex number, which is defined as its distance from the origin (0,0) of the complex plane.
Vector2DrawTriangleLibrary   "Vector2DrawTriangle" 
Functions to draw a triangle and manipulate its properties.
 new(a, b, c, xloc, bg_color, line_color, line_style, line_width) 
  Draws a triangle with background fill using line prototype.
  Parameters:
     a : v2     . Vector2 object, in the form `(x, y)`.
     b : v2     . Vector2 object, in the form `(x, y)`.
     c : v2     . Vector2 object, in the form `(x, y)`.
     xloc : string . Type of axis unit, bar_index or time.
     bg_color : color  . Color of the background.
     line_color : color  . Color of the line.
     line_style : string . Style of the line.
     line_width : int    . Width of the line.
  Returns: Triangle object.
 copy(this) 
  Copy a existing triangle object.
  Parameters:
     this : Triangle . Source triangle.
  Returns: Triangle.
 set_position_a(this, x, y) 
  Set the position of corner `a` (modifies source triangle).
  Parameters:
     this : Triangle . Source triangle.
     x : int      . Value at the x axis.
     y : float    . Value at the y axis.
  Returns: Source Triangle.
 set_position_a(this, position) 
  Set the position of corner `a` (modifies source triangle).
  Parameters:
     this : Triangle . Source triangle.
     position : Vector2  . New position.
  Returns: Source Triangle.
 set_position_b(this, x, y) 
  Set the position of corner `b` (modifies source triangle).
  Parameters:
     this : Triangle . Source triangle.
     x : int      . Value at the x axis.
     y : float    . Value at the y axis.
  Returns: Source Triangle.
 set_position_b(this, position) 
  Set the position of corner `b` (modifies source triangle).
  Parameters:
     this : Triangle . Source triangle.
     position : Vector2  . New position.
  Returns: Source Triangle.
 set_position_c(this, x, y) 
  Set the position of corner `c` (modifies source triangle).
  Parameters:
     this : Triangle . Source triangle.
     x : int      . Value at the x axis.
     y : float    . Value at the y axis.
  Returns: Source Triangle.
 set_position_c(this, position) 
  Set the position of corner `c` (modifies source triangle).
  Parameters:
     this : Triangle . Source triangle.
     position : Vector2  . New position.
  Returns: Source Triangle.
 set_style(this, bg_color, line_color, line_style, line_width) 
  Update triangle style options (modifies Source triangle).
  Parameters:
     this : Triangle . Source triangle.
     bg_color : color    . Color of the background.
     line_color : color    . Color of the line.
     line_style : string   . Style of the line.
     line_width : int      . Width of the line.
  Returns: Source Triangle.
 set_bg_color(this, bg_color) 
  Update triangle style options (modifies Source triangle).
  Parameters:
     this : Triangle . Source triangle.
     bg_color : color    . Color of the background.
  Returns: Source Triangle.
 set_line_color(this, line_color) 
  Update triangle style options (modifies Source triangle).
  Parameters:
     this : Triangle . Source triangle.
     line_color : color    . Color of the line.
  Returns: Source Triangle.
 set_line_style(this, line_style) 
  Update triangle style options (modifies Source triangle).
  Parameters:
     this : Triangle . Source triangle.
     line_style : string   . Style of the line.
  Returns: Source Triangle.
 set_line_width(this, line_width) 
  Update triangle style options (modifies Source triangle).
  Parameters:
     this : Triangle . Source triangle.
     line_width : int      . Width of the line.
  Returns: Source Triangle.
 move(this, x, y) 
  Move triangle by provided amount (modifies source triangle).
  Parameters:
     this : Triangle . Source triangle.
     x : float    . Amount to move the vertices of the triangle in the x axis.
     y : float    . Amount to move the vertices of the triangle in the y axis.
  Returns: Source Triangle.
 move(this, amount) 
  Move triangle by provided amount (modifies source triangle).
  Parameters:
     this : Triangle . Source triangle.
     amount : Vector2  . Amount to move the vertices of the triangle in the x and y axis.
  Returns: Source Triangle.
 rotate_around(this, center, angle) 
  Rotate source triangle around a center (modifies source triangle).
  Parameters:
     this : Triangle . Source triangle.
     center : Vector2  . Center coordinates of the rotation.
     angle : float    . Value of angle in degrees.
  Returns: Source Triangle.
 rotate_around(this, center_x, center_y, angle) 
  Rotate source triangle around a center (modifies source triangle).
  Parameters:
     this : Triangle . Source triangle.
     center_x : int      . Center coordinates of the rotation.
     center_y : float    . Center coordinates of the rotation.
     angle : float    . Value of angle in degrees.
  Returns: Source Triangle.
CommonTypesDrawingLibrary   "CommonTypesDrawing" 
Provides a common library source for common types of used graphical drawing structures.
Includes: `Triangle, Quad, Polygon`
 Triangle 
  Representation of a triangle using lines and linefill.
  Fields:
     ab : Edge of point a to b.
     bc : Edge of point b to c.
     ca : Edge of point c to a.
     fill : Fill of the object.
     solid : Check if polygon should have a fill.
 Quad 
  Representation of a quadrilateral using lines and linefill.
  Fields:
     ab : Edge of point a to b.
     bc : Edge of point b to c.
     cd : Edge of point c to d.
     da : Edge of point d to a.
     fill : Fill of the object.
     solid : Check if polygon should have a fill.
 Polygon 
  Representation of a polygon using lines and linefill.
  Fields:
     edges : List of edges in the polygon.
     fills : Fills of the object.
     closed : Check if polygon line should connect last vertice to first.
     solid : Check if polygon should have a fill.
Vector2DrawLineLibrary   "Vector2DrawLine" 
Extends line type with methods for Vector2 and Segment2.
 new(origin, target, xloc, extend, color, style, width) 
  Draws a line using Segment type to hold its coordinate properties..
  Parameters:
     origin : Vector2 . Origin vector of the line.
     target : Vector2 . Target vector of the line.
     xloc : string
     extend : string
     color : color
     style : string
     width : int
  Returns: line object
 new(segment, xloc, extend, color, style, width) 
  Draws a line using Segment type to hold its coordinate properties..
  Parameters:
     segment : Segment2 . Segment with positional coordinates.
     xloc : string
     extend : string
     color : color
     style : string
     width : int
  Returns: line object
 rotate_around(this, center, angle) 
  Instance method to rotate line around center vector (modifies input line).
  Parameters:
     this : line    . Line object.
     center : Vector2 . Center of rotation.
     angle : float   . Rotation angle in degrees.
  Returns: line. Rotated line object.
Vector2Library   "Vector2" 
Representation of two dimensional vectors or points.
This structure is used to represent positions in two dimensional space or vectors,
for example in spacial coordinates in 2D space.
~~~
references:
docs.unity3d.com
gist.github.com
github.com
gist.github.com
gist.github.com
gist.github.com
~~~
 new(x, y) 
  Create a new Vector2 object.
  Parameters:
     x : float . The x value of the vector, default=0.
     y : float . The y value of the vector, default=0.
  Returns: Vector2. Vector2 object.
-> usage:
`unitx = Vector2.new(1.0) , plot(unitx.x)`
 from(value) 
  Assigns value to a new vector `x,y` elements.
  Parameters:
     value : float, x and y value of the vector.
  Returns: Vector2. Vector2 object.
-> usage:
`one = Vector2.from(1.0), plot(one.x)`
 from(value, element_sep, open_par, close_par) 
  Assigns value to a new vector `x,y` elements.
  Parameters:
     value : string . The `x` and `y` value of the vector in a `x,y` or `(x,y)` format, spaces and parentesis will be removed automatically.
     element_sep : string . Element separator character, default=`,`.
     open_par : string . Open parentesis character, default=`(`.
     close_par : string . Close parentesis character, default=`)`.
  Returns: Vector2. Vector2 object.
-> usage:
`one = Vector2.from("1.0,2"), plot(one.x)`
 copy(this) 
  Creates a deep copy of a vector.
  Parameters:
     this : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = Vector2.new(1.0) , b = a.copy() , plot(b.x)`
 down() 
  Vector in the form `(0, -1)`.
  Returns: Vector2. Vector2 object.
 left() 
  Vector in the form `(-1, 0)`.
  Returns: Vector2. Vector2 object.
 right() 
  Vector in the form `(1, 0)`.
  Returns: Vector2. Vector2 object.
 up() 
  Vector in the form `(0, 1)`.
  Returns: Vector2. Vector2 object.
 one() 
  Vector in the form `(1, 1)`.
  Returns: Vector2. Vector2 object.
 zero() 
  Vector in the form `(0, 0)`.
  Returns: Vector2. Vector2 object.
 minus_one() 
  Vector in the form `(-1, -1)`.
  Returns: Vector2. Vector2 object.
 unit_x() 
  Vector in the form `(1, 0)`.
  Returns: Vector2. Vector2 object.
 unit_y() 
  Vector in the form `(0, 1)`.
  Returns: Vector2. Vector2 object.
 nan() 
  Vector in the form `(float(na), float(na))`.
  Returns: Vector2. Vector2 object.
 xy(this) 
  Return the values of `x` and `y` as a tuple.
  Parameters:
     this : Vector2 . Vector2 object.
  Returns:  .
-> usage:
`a = Vector2.new(1.0, 1.0) ,   = a.xy() , plot(ax)`
 length_squared(this) 
  Length of vector `a` in the form. `a.x^2 + a.y^2`, for comparing vectors this is computationaly lighter.
  Parameters:
     this : Vector2 . Vector2 object.
  Returns: float. Squared length of vector.
-> usage:
`a = Vector2.new(1.0, 1.0) , plot(a.length_squared())`
 length(this) 
  Magnitude of vector `a` in the form. `sqrt(a.x^2 + a.y^2)`
  Parameters:
     this : Vector2 . Vector2 object.
  Returns: float. Length of vector.
-> usage:
`a = Vector2.new(1.0, 1.0) , plot(a.length())`
 normalize(a) 
  Vector normalized with a magnitude of 1, in the form. `a / length(a)`.
  Parameters:
     a : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = normalize(Vector2.new(3.0, 2.0)) , plot(a.y)`
 isNA(this) 
  Checks if any of the components is `na`.
  Parameters:
     this : Vector2 . Vector2 object.
  Returns: bool.
usage:
p = Vector2.new(1.0, na) , plot(isNA(p)?1:0)
 add(a, b) 
  Adds vector `b` to `a`, in the form `(a.x + b.x, a.y + b.y)`.
  Parameters:
     a : Vector2 . Vector2 object.
     b : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = one() , b = one() , c = add(a, b) , plot(c.x)`
 add(a, b) 
  Adds vector `b` to `a`, in the form `(a.x + b, a.y + b)`.
  Parameters:
     a : Vector2 . Vector2 object.
     b : float   . Value.
  Returns: Vector2. Vector2 object.
-> usage:
`a = one() , b = 1.0 , c = add(a, b) , plot(c.x)`
 add(a, b) 
  Adds vector `b` to `a`, in the form `(a + b.x, a + b.y)`.
  Parameters:
     a : float   . Value.
     b : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = 1.0 , b = one() , c = add(a, b) , plot(c.x)`
 subtract(a, b) 
  Subtract vector `b` from `a`, in the form `(a.x - b.x, a.y - b.y)`.
  Parameters:
     a : Vector2 . Vector2 object.
     b : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = one() , b = one() , c = subtract(a, b) , plot(c.x)`
 subtract(a, b) 
  Subtract vector `b` from `a`, in the form `(a.x - b, a.y - b)`.
  Parameters:
     a : Vector2 . vector2 object.
     b : float   . Value.
  Returns: Vector2. Vector2 object.
-> usage:
`a = one() , b = 1.0 , c = subtract(a, b) , plot(c.x)`
 subtract(a, b) 
  Subtract vector `b` from `a`, in the form `(a - b.x, a - b.y)`.
  Parameters:
     a : float   . value.
     b : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = 1.0 , b = one() , c = subtract(a, b) , plot(c.x)`
 multiply(a, b) 
  Multiply vector `a` with `b`, in the form `(a.x * b.x, a.y * b.y)`.
  Parameters:
     a : Vector2 . Vector2 object.
     b : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = one() , b = one() , c = multiply(a, b) , plot(c.x)`
 multiply(a, b) 
  Multiply vector `a` with `b`, in the form `(a.x * b, a.y * b)`.
  Parameters:
     a : Vector2 . Vector2 object.
     b : float   . Value.
  Returns: Vector2. Vector2 object.
-> usage:
`a = one() , b = 1.0 , c = multiply(a, b) , plot(c.x)`
 multiply(a, b) 
  Multiply vector `a` with `b`, in the form `(a * b.x, a * b.y)`.
  Parameters:
     a : float   . Value.
     b : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = 1.0 , b = one() , c = multiply(a, b) , plot(c.x)`
 divide(a, b) 
  Divide vector `a` with `b`, in the form `(a.x / b.x, a.y / b.y)`.
  Parameters:
     a : Vector2 . Vector2 object.
     b : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = from(3.0) , b = from(2.0) , c = divide(a, b) , plot(c.x)`
 divide(a, b) 
  Divide vector `a` with value `b`, in the form `(a.x / b, a.y / b)`.
  Parameters:
     a : Vector2 . Vector2 object.
     b : float   . Value.
  Returns: Vector2. Vector2 object.
-> usage:
`a = from(3.0) , b = 2.0 , c = divide(a, b) , plot(c.x)`
 divide(a, b) 
  Divide value `a` with vector `b`, in the form `(a / b.x, a / b.y)`.
  Parameters:
     a : float   . Value.
     b : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = 3.0 , b = from(2.0) , c = divide(a, b) , plot(c.x)`
 negate(a) 
  Negative of vector `a`, in the form `(-a.x, -a.y)`.
  Parameters:
     a : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = from(3.0) , b = a.negate , plot(b.x)`
 pow(a, b) 
  Raise vector `a` with exponent vector `b`, in the form `(a.x ^ b.x, a.y ^ b.y)`.
  Parameters:
     a : Vector2 . Vector2 object.
     b : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = from(3.0) , b = from(2.0) , c = pow(a, b) , plot(c.x)`
 pow(a, b) 
  Raise vector `a` with value `b`, in the form `(a.x ^ b, a.y ^ b)`.
  Parameters:
     a : Vector2 . Vector2 object.
     b : float   . Value.
  Returns: Vector2. Vector2 object.
-> usage:
`a = from(3.0) , b = 2.0 , c = pow(a, b) , plot(c.x)`
 pow(a, b) 
  Raise value `a` with vector `b`, in the form `(a ^ b.x, a ^ b.y)`.
  Parameters:
     a : float   . Value.
     b : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = 3.0 , b = from(2.0) , c = pow(a, b) , plot(c.x)`
 sqrt(a) 
  Square root of the elements in a vector.
  Parameters:
     a : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = from(3.0) , b = sqrt(a) , plot(b.x)`
 abs(a) 
  Absolute properties of the vector.
  Parameters:
     a : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = from(-3.0) , b = abs(a) , plot(b.x)`
 min(a) 
  Lowest element of a vector.
  Parameters:
     a : Vector2 . Vector2 object.
  Returns: float.
-> usage:
`a = new(3.0, 1.5) , b = min(a) , plot(b)`
 max(a) 
  Highest element of a vector.
  Parameters:
     a : Vector2 . Vector2 object.
  Returns: float.
-> usage:
`a = new(3.0, 1.5) , b = max(a) , plot(b)`
 vmax(a, b) 
  Highest elements of two vectors.
  Parameters:
     a : Vector2 . Vector2 object.
     b : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = new(3.0, 2.0) , b = new(2.0, 3.0) , c = vmax(a, b) , plot(c.x)`
 vmax(a, b, c) 
  Highest elements of three vectors.
  Parameters:
     a : Vector2 . Vector2 object.
     b : Vector2 . Vector2 object.
     c : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = new(3.0, 2.0) , b = new(2.0, 3.0) , c = new(1.5, 4.5) , d = vmax(a, b, c) , plot(d.x)`
 vmin(a, b) 
  Lowest elements of two vectors.
  Parameters:
     a : Vector2 . Vector2 object.
     b : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = new(3.0, 2.0) , b = new(2.0, 3.0) , c = vmin(a, b) , plot(c.x)`
 vmin(a, b, c) 
  Lowest elements of three vectors.
  Parameters:
     a : Vector2 . Vector2 object.
     b : Vector2 . Vector2 object.
     c : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = new(3.0, 2.0) , b = new(2.0, 3.0) , c = new(1.5, 4.5) , d = vmin(a, b, c) , plot(d.x)`
 perp(a) 
  Perpendicular Vector of `a`, in the form `(a.y, -a.x)`.
  Parameters:
     a : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = new(3.0, 1.5) , b = perp(a) , plot(b.x)`
 floor(a) 
  Compute the floor of vector `a`.
  Parameters:
     a : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = new(3.0, 1.5) , b = floor(a) , plot(b.x)`
 ceil(a) 
  Ceils vector `a`.
  Parameters:
     a : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = new(3.0, 1.5) , b = ceil(a) , plot(b.x)`
 ceil(a, digits) 
  Ceils vector `a`.
  Parameters:
     a : Vector2 . Vector2 object.
     digits : int     . Digits to use as ceiling.
  Returns: Vector2. Vector2 object.
 round(a) 
  Round of vector elements.
  Parameters:
     a : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = new(3.0, 1.5) , b = round(a) , plot(b.x)`
 round(a, precision) 
  Round of vector elements.
  Parameters:
     a : Vector2 . Vector2 object.
     precision : int     . Number of digits to round vector "a" elements.
  Returns: Vector2. Vector2 object.
-> usage:
`a = new(0.123456, 1.234567) , b = round(a, 2) , plot(b.x)`
 fractional(a) 
  Compute the fractional part of the elements from vector `a`.
  Parameters:
     a : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = new(3.123456, 1.23456) , b = fractional(a) , plot(b.x)`
 dot_product(a, b) 
  dot_product product of 2 vectors, in the form `a.x * b.x + a.y * b.y.
  Parameters:
     a : Vector2 . Vector2 object.
     b : Vector2 . Vector2 object.
  Returns: float.
-> usage:
`a = new(3.0, 1.5) , b = from(2.0) , c = dot_product(a, b) , plot(c)`
 cross_product(a, b) 
  cross product of 2 vectors, in the form `a.x * b.y - a.y * b.x`.
  Parameters:
     a : Vector2 . Vector2 object.
     b : Vector2 . Vector2 object.
  Returns: float.
-> usage:
`a = new(3.0, 1.5) , b = from(2.0) , c = cross_product(a, b) , plot(c)`
 equals(a, b) 
  Compares two vectors
  Parameters:
     a : Vector2 . Vector2 object.
     b : Vector2 . Vector2 object.
  Returns: bool. Representing the equality.
-> usage:
`a = new(3.0, 1.5) , b = from(2.0) , c = equals(a, b) ? 1 : 0 , plot(c)`
 sin(a) 
  Compute the sine of argument vector `a`.
  Parameters:
     a : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = new(3.0, 1.5) , b = sin(a) , plot(b.x)`
 cos(a) 
  Compute the cosine of argument vector `a`.
  Parameters:
     a : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = new(3.0, 1.5) , b = cos(a) , plot(b.x)`
 tan(a) 
  Compute the tangent of argument vector `a`.
  Parameters:
     a : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = new(3.0, 1.5) , b = tan(a) , plot(b.x)`
 atan2(x, y) 
  Approximation to atan2 calculation, arc tangent of `y/x` in the range (-pi,pi) radians.
  Parameters:
     x : float . The x value of the vector.
     y : float . The y value of the vector.
  Returns: float. Value with angle in radians. (negative if quadrante 3 or 4)
-> usage:
`a = new(3.0, 1.5) , b = atan2(a.x, a.y) , plot(b)`
 atan2(a) 
  Approximation to atan2 calculation, arc tangent of `y/x` in the range (-pi,pi) radians.
  Parameters:
     a : Vector2 . Vector2 object.
  Returns: float, value with angle in radians. (negative if quadrante 3 or 4)
-> usage:
`a = new(3.0, 1.5) , b = atan2(a) , plot(b)`
 distance(a, b) 
  Distance between vector `a` and `b`.
  Parameters:
     a : Vector2 . Vector2 object.
     b : Vector2 . Vector2 object.
  Returns: float.
-> usage:
`a = new(3.0, 1.5) , b = from(2.0) , c = distance(a, b) , plot(c)`
 rescale(a, length) 
  Rescale a vector to a new magnitude.
  Parameters:
     a : Vector2 . Vector2 object.
     length : float   . Magnitude.
  Returns: Vector2. Vector2 object.
-> usage:
`a = new(3.0, 1.5) , b = 2.0 , c = rescale(a, b) , plot(c.x)`
 rotate(a, radians) 
  Rotates vector by a angle.
  Parameters:
     a : Vector2 . Vector2 object.
     radians : float   . Angle value in radians.
  Returns: Vector2. Vector2 object.
-> usage:
`a = new(3.0, 1.5) , b = 2.0 , c = rotate(a, b) , plot(c.x)`
 rotate_degree(a, degree) 
  Rotates vector by a angle.
  Parameters:
     a : Vector2 . Vector2 object.
     degree : float   . Angle value in degrees.
  Returns: Vector2. Vector2 object.
-> usage:
`a = new(3.0, 1.5) , b = 45.0 , c = rotate_degree(a, b) , plot(c.x)`
 rotate_around(this, center, angle) 
  Rotates vector `target` around `origin` by angle value.
  Parameters:
     this 
     center : Vector2 . Vector2 object.
     angle : float   . Angle value in degrees.
  Returns: Vector2. Vector2 object.
-> usage:
`a = new(3.0, 1.5) , b = from(2.0) , c = rotate_around(a, b, 45.0) , plot(c.x)`
 perpendicular_distance(a, b, c) 
  Distance from point `a` to line between `b` and `c`.
  Parameters:
     a : Vector2 . Vector2 object.
     b : Vector2 . Vector2 object.
     c : Vector2 . Vector2 object.
  Returns: float.
-> usage:
`a = new(1.5, 2.6) , b = from(1.0) , c = from(3.0) , d = perpendicular_distance(a, b, c) , plot(d.x)`
 project(a, axis) 
  Project a vector onto another.
  Parameters:
     a : Vector2 . Vector2 object.
     axis : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = new(3.0, 1.5) , b = from(2.0) , c = project(a, b) , plot(c.x)`
 projectN(a, axis) 
  Project a vector onto a vector of unit length.
  Parameters:
     a : Vector2 . Vector2 object.
     axis : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = new(3.0, 1.5) , b = from(2.0) , c = projectN(a, b) , plot(c.x)`
 reflect(a, axis) 
  Reflect a vector on another.
  Parameters:
     a : Vector2 . Vector2 object.
     axis 
  Returns: Vector2. Vector2 object.
-> usage:
`a = new(3.0, 1.5) , b = from(2.0) , c = reflect(a, b) , plot(c.x)`
 reflectN(a, axis) 
  Reflect a vector to a arbitrary axis.
  Parameters:
     a : Vector2 . Vector2 object.
     axis 
  Returns: Vector2. Vector2 object.
-> usage:
`a = new(3.0, 1.5) , b = from(2.0) , c = reflectN(a, b) , plot(c.x)`
 angle(a) 
  Angle in radians of a vector.
  Parameters:
     a : Vector2 . Vector2 object.
  Returns: float.
-> usage:
`a = new(3.0, 1.5) , b = angle(a) , plot(b)`
 angle_unsigned(a, b) 
  unsigned degree angle between 0 and +180 by given two vectors.
  Parameters:
     a : Vector2 . Vector2 object.
     b : Vector2 . Vector2 object.
  Returns: float.
-> usage:
`a = new(3.0, 1.5) , b = from(2.0) , c = angle_unsigned(a, b) , plot(c)`
 angle_signed(a, b) 
  Signed degree angle between -180 and +180 by given two vectors.
  Parameters:
     a : Vector2 . Vector2 object.
     b : Vector2 . Vector2 object.
  Returns: float.
-> usage:
`a = new(3.0, 1.5) , b = from(2.0) , c = angle_signed(a, b) , plot(c)`
 angle_360(a, b) 
  Degree angle between 0 and 360 by given two vectors
  Parameters:
     a : Vector2 . Vector2 object.
     b : Vector2 . Vector2 object.
  Returns: float.
-> usage:
`a = new(3.0, 1.5) , b = from(2.0) , c = angle_360(a, b) , plot(c)`
 clamp(a, min, max) 
  Restricts a vector between a min and max value.
  Parameters:
     a : Vector2 . Vector2 object.
     min 
     max 
  Returns: Vector2. Vector2 object.
-> usage:
`a = new(3.0, 1.5) , b = from(2.0) , c = from(2.5) , d = clamp(a, b, c) , plot(d.x)`
 clamp(a, min, max) 
  Restricts a vector between a min and max value.
  Parameters:
     a : Vector2 . Vector2 object.
     min : float   . Lower boundary value.
     max : float   . Higher boundary value.
  Returns: Vector2. Vector2 object.
-> usage:
`a = new(3.0, 1.5) , b = clamp(a, 2.0, 2.5) , plot(b.x)`
 lerp(a, b, rate) 
  Linearly interpolates between vectors a and b by rate.
  Parameters:
     a : Vector2 . Vector2 object.
     b : Vector2 . Vector2 object.
     rate : float   . Value between (a:-infinity -> b:1.0), negative values will move away from b.
  Returns: Vector2. Vector2 object.
-> usage:
`a = new(3.0, 1.5) , b = from(2.0) , c = lerp(a, b, 0.5) , plot(c.x)`
 herp(a, b, rate) 
  Hermite curve interpolation between vectors a and b by rate.
  Parameters:
     a : Vector2 . Vector2 object.
     b : Vector2 . Vector2 object.
     rate : Vector2 . Vector2 object. Value between (a:0 > 1:b).
  Returns: Vector2. Vector2 object.
-> usage:
`a = new(3.0, 1.5) , b = from(2.0) , c = from(2.5) , d = herp(a, b, c) , plot(d.x)`
 transform(position, mat) 
  Transform a vector by the given matrix.
  Parameters:
     position : Vector2 . Source vector.
     mat : M32     . Transformation matrix
  Returns: Vector2. Transformed vector.
 transform(position, mat) 
  Transform a vector by the given matrix.
  Parameters:
     position : Vector2 . Source vector.
     mat : M44     . Transformation matrix
  Returns: Vector2. Transformed vector.
 transform(position, mat) 
  Transform a vector by the given matrix.
  Parameters:
     position : Vector2       . Source vector.
     mat : matrix . Transformation matrix, requires a 3x2 or a 4x4 matrix.
  Returns: Vector2. Transformed vector.
 transform(this, rotation) 
  Transform a vector by the given quaternion rotation value.
  Parameters:
     this : Vector2    . Source vector.
     rotation : Quaternion . Rotation to apply.
  Returns: Vector2. Transformed vector.
 area_triangle(a, b, c) 
  Find the area in a triangle of vectors.
  Parameters:
     a : Vector2 . Vector2 object.
     b : Vector2 . Vector2 object.
     c : Vector2 . Vector2 object.
  Returns: float.
-> usage:
`a = new(1.0, 2.0) , b = from(2.0) , c = from(1.0) , d = area_triangle(a, b, c) , plot(d.x)`
 random(max) 
  2D random value.
  Parameters:
     max : Vector2 . Vector2 object. Vector upper boundary.
  Returns: Vector2. Vector2 object.
-> usage:
`a = from(2.0) , b = random(a) , plot(b.x)`
 random(max) 
  2D random value.
  Parameters:
     max : float, Vector upper boundary.
  Returns: Vector2. Vector2 object.
-> usage:
`a = random(2.0) , plot(a.x)`
 random(min, max) 
  2D random value.
  Parameters:
     min : Vector2 . Vector2 object. Vector lower boundary.
     max : Vector2 . Vector2 object. Vector upper boundary.
  Returns: Vector2. Vector2 object.
-> usage:
`a = from(1.0) , b = from(2.0) , c = random(a, b) , plot(c.x)`
 random(min, max) 
  2D random value.
  Parameters:
     min : Vector2 . Vector2 object. Vector lower boundary.
     max : Vector2 . Vector2 object. Vector upper boundary.
  Returns: Vector2. Vector2 object.
-> usage:
`a = random(1.0, 2.0) , plot(a.x)`
 noise(a) 
  2D Noise based on Morgan McGuire @morgan3d.
  Parameters:
     a : Vector2 . Vector2 object.
  Returns: Vector2. Vector2 object.
-> usage:
`a = from(2.0) , b = noise(a) , plot(b.x)`
 to_string(a) 
  Converts vector `a` to a string format, in the form `"(x, y)"`.
  Parameters:
     a : Vector2 . Vector2 object.
  Returns: string. In `"(x, y)"` format.
-> usage:
`a = from(2.0) , l = barstate.islast ? label.new(bar_index, 0.0, to_string(a)) : label(na)`
 to_string(a, format) 
  Converts vector `a` to a string format, in the form `"(x, y)"`.
  Parameters:
     a : Vector2 . Vector2 object.
     format : string  . Format to apply transformation.
  Returns: string. In `"(x, y)"` format.
-> usage:
`a = from(2.123456) , l = barstate.islast ? label.new(bar_index, 0.0, to_string(a, "#.##")) : label(na)`
 to_array(a) 
  Converts vector to a array format.
  Parameters:
     a : Vector2 . Vector2 object. 
  Returns: array.
-> usage:
`a = from(2.0) , b = to_array(a) , plot(array.get(b, 0))`
 to_barycentric(this, a, b, c) 
  Captures the barycentric coordinate of a cartesian position in the triangle plane.
  Parameters:
     this : Vector2 . Source cartesian coordinate position.
     a : Vector2 . Triangle corner `a` vertice.
     b : Vector2 . Triangle corner `b` vertice.
     c : Vector2 . Triangle corner `c` vertice.
  Returns: bool.
 from_barycentric(this, a, b, c) 
  Captures the cartesian coordinate of a barycentric position in the triangle plane.
  Parameters:
     this : Vector2 . Source barycentric coordinate position.
     a : Vector2 . Triangle corner `a` vertice.
     b : Vector2 . Triangle corner `b` vertice.
     c : Vector2 . Triangle corner `c` vertice.
  Returns: bool.
 to_complex(this) 
  Translate a Vector2 structure to complex.
  Parameters:
     this : Vector2 . Source vector.
  Returns: Complex.
 to_polar(this) 
  Translate a Vector2 cartesian coordinate into polar coordinates.
  Parameters:
     this : Vector2 . Source vector.
  Returns: Pole. The returned angle is in radians.
Wave Generator Library (WGL)Library   "WaveGenerator" 
Wave Generator Library
 max(source) 
  max
  Parameters:
     source : is the input to take the maximum.
  Returns: foat
 min(source) 
  min
  Parameters:
     source : is the input to take the minimum.
  Returns: foat
 min_max(src, height) 
  min_max
  Parameters:
     src : is the input for the min/max
     height 
  Returns: float
 sine_wave(_wave_height, _wave_duration, _phase_shift, _phase_shift_2) 
  sine_wave
  Parameters:
     _wave_height : Maximum output level
     _wave_duration : Wave length
     _phase_shift : Number of harmonics
     _phase_shift_2 
  Returns: float
 triangle_wave(_wave_height, _wave_duration, _num_harmonics, _phase_shift) 
  triangle_wave
  Parameters:
     _wave_height : Maximum output level
     _wave_duration : Wave length
     _num_harmonics : Number of harmonics
     _phase_shift : Phase shift
  Returns: float
 saw_wave(_wave_height, _wave_duration, _num_harmonics, _phase_shift) 
  saw_wave
  Parameters:
     _wave_height : Maximum output level
     _wave_duration : Wave length
     _num_harmonics : Number of harmonics
     _phase_shift : Phase shift
  Returns: float
 ramp_saw_wave(_wave_height, _wave_duration, _num_harmonics, _phase_shift) 
  ramp_saw_wave
  Parameters:
     _wave_height : Maximum output level
     _wave_duration : Wave length
     _num_harmonics : Number of harmonics
     _phase_shift : Phase shift
  Returns: float
 square_wave(_wave_height, _wave_duration, _num_harmonics, _phase_shift) 
  square_wave
  Parameters:
     _wave_height : Maximum output level
     _wave_duration : Wave length
     _num_harmonics : Number of harmonics
     _phase_shift : Phase shift
  Returns: float
 wave_select(style, _wave_height, _wave_duration, _num_harmonics, _phase_shift) 
  wave_select
@peram style Select the style of wave. "Sine", "Triangle", "Saw", "Ramp Saw", "Square"
  Parameters:
     style 
     _wave_height : Maximum output level
     _wave_duration : Wave length
     _num_harmonics : Number of harmonics
     _phase_shift : Phase shift
  Returns: float
CommonTypesMathLibrary   "CommonTypesMath" 
Provides a common library source for common types of useful mathematical structures.
Includes: `complex, Vector2, Vector3, Vector4, Quaternion, Segment2, Segment3, Pole, Plane, M32, M44`
 complex 
  Representation of a Complex Number, a complex number `z` is a number in the form `z = x + yi`,
  Fields:
     re : Real part of the complex number.
     im : Imaginary part of the complex number.
 Vector2 
  Representation of a two dimentional vector with components `(x:float,y:float)`.
  Fields:
     x : Coordinate `x` of the vector.
     y : Coordinate `y` of the vector.
 Vector3 
  Representation of a three dimentional vector with components `(x:float,y:float,z:float)`.
  Fields:
     x : Coordinate `x` of the vector.
     y : Coordinate `y` of the vector.
     z : Coordinate `z` of the vector.
 Vector4 
  Representation of a four dimentional vector with components `(x:float,y:float,z:float,w:float)`.
  Fields:
     x : Coordinate `x` of the vector.
     y : Coordinate `y` of the vector.
     z : Coordinate `z` of the vector.
     w : Coordinate `w` of the vector.
 Quaternion 
  Representation of a four dimentional vector with components `(x:float,y:float,z:float,w:float)`.
  Fields:
     x : Coordinate `x` of the vector.
     y : Coordinate `y` of the vector.
     z : Coordinate `z` of the vector.
     w : Coordinate `w` of the vector, specifies the rotation component.
 Segment2 
  Representation of a line in two dimentional space.
  Fields:
     origin : Origin coordinates.
     target : Target coordinates.
 Segment3 
  Representation of a line in three dimentional space.
  Fields:
     origin : Origin coordinates.
     target : Target coordinates.
 Pole 
  Representation of polar coordinates `(radius:float,angle:float)`.
  Fields:
     radius : Radius of the pole.
     angle : Angle in radians of the pole.
 Plane 
  Representation of a 3D plane.
  Fields:
     normal : Normal vector of the plane.
     distance : Distance of the plane along its normal from the origin.
 M32 
  Representation of a 3x2 matrix.
  Fields:
     m11 : First element of the first row.
     m12 : Second element of the first row.
     m21 : First element of the second row.
     m22 : Second element of the second row.
     m31 : First element of the third row.
     m32 : Second element of the third row.
 M44 
  Representation of a 4x4 matrix.
  Fields:
     m11 : First element of the first row.
     m12 : Second element of the first row.
     m13 : Third element of the first row.
     m14 : fourth element of the first row.
     m21 : First element of the second row.
     m22 : Second element of the second row.
     m23 : Third element of the second row.
     m24 : fourth element of the second row.
     m31 : First element of the third row.
     m32 : Second element of the third row.
     m33 : Third element of the third row.
     m34 : fourth element of the third row.
     m41 : First element of the fourth row.
     m42 : Second element of the fourth row.
     m43 : Third element of the fourth row.
     m44 : fourth element of the fourth row.
UtilitiesLibrary   "Utilities" 
My utility functions library.
 toPips(_v) 
  Convert price to pips.
  Parameters:
     _v : Price
  Returns: Pips
 toPrice(_p) 
  Convert pips to price.
  Parameters:
     _p 
  Returns: Price
 price_range(_a, _b) 
  The difference will be returned.
  Parameters:
     _a 
     _b : @return Price as positive number
 get_day(_n, _lang) 
  Get the day of the week
  Parameters:
     _n : Number of day of week
     _lang : en or ja
 source(_name) 
  TODO: add function description here
  Parameters:
     _name 
  Returns: TODO: add what function returns
 clear_lines(_arr, _min) 
  Deletes the lines included in the array.
  Parameters:
     _arr : Array of lines
     _min : Deletes the lines included in the array.
 clear_labels(_arr, _min) 
  Deletes the labels included in the array.
  Parameters:
     _arr : Array of labels
     _min : Deletes the labels included in the array.
 clear_boxes(_arr, _min) 
  Deletes the boxes included in the array.
  Parameters:
     _arr : Array of boxes
     _min : Deletes the boxes included in the array.
MLExtensionsLibrary   "MLExtensions" 
 normalizeDeriv(src, quadraticMeanLength) 
  Returns the smoothed hyperbolic tangent of the input series.
  Parameters:
     src :  The input series (i.e., the first-order derivative for price).
     quadraticMeanLength :   The length of the quadratic mean (RMS).
  Returns: nDeriv  The normalized derivative of the input series.
 normalize(src, min, max) 
  Rescales a source value with an unbounded range to a target range.
  Parameters:
     src :  The input series
     min :  The minimum value of the unbounded range
     max :  The maximum value of the unbounded range
  Returns:  The normalized series
 rescale(src, oldMin, oldMax, newMin, newMax) 
  Rescales a source value with a bounded range to anther bounded range
  Parameters:
     src :  The input series
     oldMin :  The minimum value of the range to rescale from
     oldMax :  The maximum value of the range to rescale from
     newMin :  The minimum value of the range to rescale to
     newMax :  The maximum value of the range to rescale to 
  Returns:  The rescaled series
 color_green(prediction) 
  Assigns varying shades of the color green based on the KNN classification
  Parameters:
     prediction : Value (int|float) of the prediction 
  Returns: color 
 color_red(prediction) 
  Assigns varying shades of the color red based on the KNN classification
  Parameters:
     prediction : Value of the prediction
  Returns: color
 tanh(src) 
  Returns the the hyperbolic tangent of the input series. The sigmoid-like hyperbolic tangent function is used to compress the input to a value between -1 and 1.
  Parameters:
     src :  The input series (i.e., the normalized derivative).
  Returns: tanh  The hyperbolic tangent of the input series.
 dualPoleFilter(src, lookback) 
  Returns the smoothed hyperbolic tangent of the input series.
  Parameters:
     src :  The input series (i.e., the hyperbolic tangent).
     lookback :  The lookback window for the smoothing.
  Returns: filter  The smoothed hyperbolic tangent of the input series.
 tanhTransform(src, smoothingFrequency, quadraticMeanLength) 
  Returns the tanh transform of the input series.
  Parameters:
     src :  The input series (i.e., the result of the tanh calculation).
     smoothingFrequency 
     quadraticMeanLength 
  Returns: signal  The smoothed hyperbolic tangent transform of the input series.
 n_rsi(src, n1, n2) 
  Returns the normalized RSI ideal for use in ML algorithms.
  Parameters:
     src :  The input series (i.e., the result of the RSI calculation).
     n1 :  The length of the RSI.
     n2 :  The smoothing length of the RSI.
  Returns: signal  The normalized RSI.
 n_cci(src, n1, n2) 
  Returns the normalized CCI ideal for use in ML algorithms.
  Parameters:
     src :  The input series (i.e., the result of the CCI calculation).
     n1 :  The length of the CCI.
     n2 :  The smoothing length of the CCI.
  Returns: signal  The normalized CCI.
 n_wt(src, n1, n2) 
  Returns the normalized WaveTrend Classic series ideal for use in ML algorithms.
  Parameters:
     src :  The input series (i.e., the result of the WaveTrend Classic calculation).
     n1 
     n2 
  Returns: signal  The normalized WaveTrend Classic series.
 n_adx(highSrc, lowSrc, closeSrc, n1) 
  Returns the normalized ADX ideal for use in ML algorithms.
  Parameters:
     highSrc :  The input series for the high price.
     lowSrc :  The input series for the low price.
     closeSrc :  The input series for the close price.
     n1 :  The length of the ADX.
 regime_filter(src, threshold, useRegimeFilter) 
  Parameters:
     src 
     threshold 
     useRegimeFilter 
 filter_adx(src, length, adxThreshold, useAdxFilter) 
  filter_adx
  Parameters:
     src :  The source series.
     length :  The length of the ADX.
     adxThreshold :  The ADX threshold.
     useAdxFilter :  Whether to use the ADX filter.
  Returns:  The ADX.
 filter_volatility(minLength, maxLength, useVolatilityFilter) 
  filter_volatility
  Parameters:
     minLength :  The minimum length of the ATR.
     maxLength :  The maximum length of the ATR.
     useVolatilityFilter :  Whether to use the volatility filter.
  Returns:  Boolean indicating whether or not to let the signal pass through the filter.
 backtest(high, low, open, startLongTrade, endLongTrade, startShortTrade, endShortTrade, isStopLossHit, maxBarsBackIndex, thisBarIndex) 
  Performs a basic backtest using the specified parameters and conditions.
  Parameters:
     high :  The input series for the high price.
     low :  The input series for the low price.
     open :  The input series for the open price.
     startLongTrade :  The series of conditions that indicate the start of a long trade.`
     endLongTrade :  The series of conditions that indicate the end of a long trade.
     startShortTrade :  The series of conditions that indicate the start of a short trade.
     endShortTrade :  The series of conditions that indicate the end of a short trade.
     isStopLossHit :  The stop loss hit indicator.
     maxBarsBackIndex :  The maximum number of bars to go back in the backtest.
     thisBarIndex :  The current bar index.
  Returns:  A tuple containing backtest values
 init_table() 
  init_table()
  Returns: tbl  The backtest results.
 update_table(tbl, tradeStatsHeader, totalTrades, totalWins, totalLosses, winLossRatio, winrate, stopLosses) 
  update_table(tbl, tradeStats)
  Parameters:
     tbl :  The backtest results table.
     tradeStatsHeader :  The trade stats header.
     totalTrades :  The total number of trades.
     totalWins :  The total number of wins.
     totalLosses :  The total number of losses.
     winLossRatio :  The win loss ratio.
     winrate :  The winrate.
     stopLosses :  The total number of stop losses.
  Returns:  Updated backtest results table.
FibRatiosLibrary   "FibRatios" 
Library with calculation logic for fib retracement, extension and ratios
 retracement(a, b, ratio, logScale, precision) 
  Calculates the retracement for points a, b with given ratio and scale
  Parameters:
     a : Starting point a
     b : Second point b
     ratio : Ratio for which we need to calculate retracement c
     logScale : Flag to get calculations in log scale. Default is false
     precision : rounding precision. If set to netagive number, round_to_mintick is applied. Default is -1
  Returns: retracement point c for points a,b with given ratio and scale
 retracementRatio(a, b, c, logScale, precision) 
  Calculates the retracement ratio for points a, b, c with given scale
  Parameters:
     a : Starting point a
     b : Second point b
     c : Retracement point. c should be placed between a and b
     logScale : Flag to get calculations in log scale. Default is false
     precision : rounding precision. If set to netagive number, round_to_mintick is applied. Default is 3
  Returns: retracement ratio for points a,b,c on given scale
 extension(a, b, c, ratio, logScale, precision) 
  Calculates the extensions for points a, b, c with given ratio and scale
  Parameters:
     a : Starting point a
     b : Second point b
     c : Retracement point. c should be placed between a and b
     ratio : Ratio for which we need to calculate extension d
     logScale : Flag to get calculations in log scale. Default is false
     precision : rounding precision. If set to netagive number, round_to_mintick is applied. Default is -1
  Returns: extensoin point d for points a,b,c with given ratio and scale
 extensionRatio(a, b, c, d, logScale, precision) 
  Calculates the extension ratio for points a, b, c, d with given scale
  Parameters:
     a : Starting point a
     b : Second point b
     c : Retracement point. c should be placed between a and b
     d : Extension point. d should be placed beyond a, c. But, can be with b,c or beyond b
     logScale : Flag to get calculations in log scale. Default is false
     precision : rounding precision. If set to netagive number, round_to_mintick is applied. Default is 3
  Returns: extension ratio for points a,b,c,d on given scale
HiveLibraryLibrary   "HiveLibrary" 
: Custom library
 RoundDown(number, decimals) 
  RoundDown() rounds the specified number down to the given number
of decimal places.
  Parameters:
     number : is the argument for rounding down & decimals is the number of digits after dot
     decimals 
  Returns: return is the rounded down value of the number
JeeSauceScriptsLibrary   "JeeSauceScripts" 
 getupdnvol() 
 GetTotalUpVolume(upvolume) 
  Parameters:
     upvolume 
 GetTotalDnVolume(downvolume) 
  Parameters:
     downvolume 
 GetDelta(totalupvolume, totaldownvolume) 
  Parameters:
     totalupvolume 
     totaldownvolume 
 GetMaxUpVolume(upvolume) 
  Parameters:
     upvolume 
 GetMaxDnVolume(downvolume) 
  Parameters:
     downvolume 
 Getcvd() 
 Getcvdopen(cvd) 
  Parameters:
     cvd 
 Getcvdhigh(cvd, maxvolumeup) 
  Parameters:
     cvd 
     maxvolumeup 
 Getcvdlow(cvd, maxvolumedown) 
  Parameters:
     cvd 
     maxvolumedown 
 Getcvdclose(cvd, delta) 
  Parameters:
     cvd 
     delta 
 CombineData(data1, data2, data3, data4, data5, data6) 
  Parameters:
     data1 
     data2 
     data3 
     data4 
     data5 
     data6 
 FindData(data, find) 
  Parameters:
     data 
     find
TurntLibraryLibrary   "TurntLibrary" 
Collection of functions created for simplification/easy referencing. Includes variations of moving averages, length value oscillators, and a few other simple functions based upon HH/LL values.
 ma(source, length, type) 
  Apply a moving average to a float value
  Parameters:
     source : Value to be used 
     length : Number of bars to include in calculation
     type : Moving average type to use ("SMA","EMA","RMA","WMA","VWAP","SWMA","LRC")
  Returns: Smoothed value of initial float value
 curve(src, len, lb1, lb2) 
  Exaggerates curves of a float value designed for use as an exit signal.
  Parameters:
     src : Initial value to curve
     len : Number of bars to include in calculation
     lb1 : (Default = 1) First lookback length 
     lb2 : (Default = 2) Second lookback length 
  Returns: Curved Average
 fragma(src, len, space, str) 
  Average of a moving average and the previous value of the moving average
  Parameters:
     src : Initial float value to use
     len : Number of bars to include in calculation
     space : Lookback integer for second half of average
     str : Moving average type to use ("SMA","EMA","RMA","WMA","VWAP","SWMA","LRC")
  Returns: Fragmented Average
 maxmin(x, y) 
  Difference of 2 float values, subtracting the lowest from the highest
  Parameters:
     x : Value 1
     y : Value 2
  Returns: The +Difference between 2 float values
 oscLen(val, type) 
  Variable Length using a oscillator value and a corresponding slope shape ("Incline",Decline","Peak","Trough")
  Parameters:
     val : Oscillator Value to use 
     type : Slope of length curve ("Incline",Decline","Peak","Trough")
  Returns: Variable Length Integer
 hlAverage(val, smooth, max, min, type, include) 
  Average of HH,LL with variable lengths based on the slope shape ("Incline","Decline","Trough") value relative to highest and lowest
  Parameters:
     val : Source Value to use 
     smooth 
     max 
     min 
     type 
     include : Add "val" to the averaging process, instead of more weight to highest or lowest value  
  Returns: Variable Length Average of Highest Lowest "val"
 pct(val) 
  Convert a positive float / price to a percentage of it's highest value on record
  Parameters:
     val : Value To convert to a percentage of it's highest value ever 
  Returns: Percentage
 hlrange(x, len) 
  Difference between Highest High and Lowest Low of float value
  Parameters:
     x : Value to use in calculation
     len : Number of bars to include in calculation
  Returns: Difference
 midpoint(x, len, smooth) 
  The average value of the float's Highest High and Lowest Low in a number of bars
  Parameters:
     x : Value to use in calculation 
     len 
     smooth : (Default=na) Optional smoothing type to use ("SMA","EMA","RMA","WMA","VWAP","SWMA","LRC")
  Returns: Midpoint
BinaryInsertionSortLibrary   "BinaryInsertionSort" 
Library containing functions which can help create sorted array based on binary insertion sort.
This sorting will be quicker than array.sort function if the sorting needs to be done on every bar and the size of the array is comparatively big.
This is created with the intention of using this to solve a bigger problem posted by @lejmer. Wish me luck!!
 binary_insertion_sort(sortedArray, item, order) 
  binary insertion sort - inserts item into sorted array while maintaining sort order
  Parameters:
     sortedArray : array which is assumed to be sorted in the requested order
     item : float|int item which needs to be inserted into sorted array
     order : Sort order - positive number means ascending order whereas negative number represents descending order
  Returns: int index at which the item is inserted into sorted array
 update_sort_indices(sortIndices, newItemIndex) 
  adds the sort index of new item added to sorted array and also updates existing sort indices.
  Parameters:
     sortIndices : array containing sort indices of an array.
     newItemIndex : sort index of new item added to sorted array
  Returns: void
 get_array_of_series(item, order) 
  Converts series into array and sorted array.
  Parameters:
     item : float|int series
     order : Sort order - positive number means ascending order whereas negative number represents descending order
  Returns:  
 get_sorted_arrays(item, order) 
  Converts series into array and sorted array. Also calculates the sort order of the value array
  Parameters:
     item : float|int series
     order : Sort order - positive number means ascending order whereas negative number represents descending order
  Returns: 
Slope_TKLibrary   "Slope_TK" 
This library calculate the slope of a serie between two points
The serie can be ta.ema(close,200) for example
The size is the number of bars between the two points for the slope calculation, for example it can be 10
slope_of_ema200 = slope(t a.eam(close, 200) , 10 )
 slope( float serie, int size )
String_Encoder_DecoderLibrary   "String_Encoder_Decoder" 
String encoder and decoder to use in internal data tranfer in script calculations. 
In example,  script encode 125 values once and then decode them every candle.
 encode(array or values (val1,val2,val3,val4,val5,val6) 
  encode: encode some values into string
  Parameters:
     array : of values  or values1, value2 (up to 6 values)
              (input values must be stringified)
  Returns: encoded value
 decode(val) 
  decode: decode  into string
  Parameters:
     val : value to decode, must be stringified
  Returns: decoded array of stringified values
fast_utilsLibrary   "fast_utils" 
This library contains my favourite functions. Will be updated frequently
 count_int_digits() 
  Count int digits in number
  Returns: : number of int digits in number
 count_float_digits() 
  Count float digits in number
  Returns: : number of float digits in number
 stringify() 
  Convert values in array or matrix into string values
  Returns: : array or matrix of string values
 arrcompare() 
  Compare values in arrays
  Returns: : bool value
 arrdedup() 
  Remove duplicate values in array
  Returns: : array without duplicates
 ResInMins() 
  Converts current resolution in minutes
  Returns: : return float number of minuted
 MultOfRes(res, mult) 
  Convert current float TF in minutes to target string TF in "timeframe.period" format.
  Parameters:
     res : : current resolution in minutes
     mult : : Multiple of current TF to be calculated.
  Returns: : timeframe format string
fractionLibrary   "fraction" 
Fraction Creation and Basic Operations.
Cracked a tough problem in making this Polarity Agnostic Decimal without a cheating "abs * sign of input".
it's quite fast, however still test for errors before production use. 
>>  Big Neon Sign on  1/0  value.  <<
 
  Int Array (LOC 0/1).. 
  To/From Decimal(float)
  Comparison ( < / == / >)
  Add / Sub / Mult / Div
  Invert polarity +/-
  String output with 2 formats ..
 
 make(_numerator, _denominator, _val) 
  Parameters:
     _numerator : (int) above the line integer ie: ____ of (___ / bottom )
     _denominator : (int) below the line integer ie: ____ of (top / ______ )
     _val : (int) OPTIONAL (for no real reason including it) integer to multiply
  Returns: array where index 0 is Numerator, 1 is Denominator
 add(_fraction, _fraction2) 
  Perform add operation (left adds right onto )
  Parameters:
     _fraction : (array) left side  Fraction Object
     _fraction2 : (array) right side Fraction Object
  Returns: array where index 0 is Numerator, 1 is Denominator
 subtract(_fraction, _fraction2) 
  Perform subtract operation (left subtracts right from )
  Parameters:
     _fraction : (array) left side  Fraction Object
     _fraction2 : (array) right side Fraction Object
  Returns: array where index 0 is Numerator, 1 is Denominator
 multiply(_fraction, _fraction2) 
  Perform multiply operation (left multiplies by right )
  Parameters:
     _fraction : (array) left side  Fraction Object
     _fraction2 : (array) right side Fraction Object
  Returns: array where index 0 is Numerator, 1 is Denominator
 divide(_fraction, _fraction2) 
  Perform divide operation (left divides by right )
  Parameters:
     _fraction : (array) left side  Fraction Object
     _fraction2 : (array) right side Fraction Object
  Returns: array where index 0 is Numerator, 1 is Denominator
 negative(_fraction) 
  Perform Negative number inversion ie: (-1/2 => 1/2) or (3/5 => -3/5)
  Parameters:
     _fraction : (array) Fraction Object to invert to/from negative
  Returns: array where index 0 is Numerator, 1 is Denominator
 isSmaller(_fraction, _fraction2) 
  Check if first fraction is smaller
  Parameters:
     _fraction : (array) left side  Fraction Object
     _fraction2 : (array) right side Fraction Object
  Returns: True if smaller, false if bigger
 isLarger(_fraction, _fraction2) 
  Check if first fraction is larger
  Parameters:
     _fraction : (array) left side  Fraction Object
     _fraction2 : (array) right side Fraction Object
  Returns: True if smaller, false if bigger
 isEqual(_fraction, _fraction2) 
  Check if first fraction is equal
  Parameters:
     _fraction : (array) left side  Fraction Object
     _fraction2 : (array) right side Fraction Object
  Returns: True if smaller, false if bigger
 fromDec(_input, _epsilon, _iterations) 
  Convert Decimal to Fraction array
   note :   this is my own Negative Number Capable (tiny speed loss)
  adaptation of the fastest algo out there
  Exclusive for Tradingview. 
  Parameters:
     _input : (float)    Decimal Input
     _epsilon : (int)    (OPTIONAL) to precision 0's after dec 0.0000 -> epsilon 0's
     _iterations : (int) (OPTIONAL) Maximum iterations Till give up
  Returns: array where index 0 is Numerator, 1 is Denominator
 toDec() 
  Convert Fraction to Decimal Output
  Returns: Float of fration
 toString(_fraction) 
  Create "A/B" or "A and B/C" String Value of Fraction.
  Parameters:
     _fraction : (array) Fraction Object to invert to/from negative
  Returns: String as  (-)? A and B/C format
Encoder DecoderLibrary   "EncoderDecoder" 
 Simple example how to encode some values into float number and then decode it back to original values 
 f_calctype() 
  Encode parameter
  Returns: encoded value
 f_calctype() 
  Decode parameter
  Returns: decoded value
 f_srctype() 
  Encode parameter
  Returns: encoded value
 f_srctype() 
  Decode parameter
  Returns: decoded value
 f_encode(calc_type, src_type, tf, length) 
  Encodes 4 paramters into float number
  Parameters:
     calc_type : 1st paramter to encode   (its values defined  in f_calctype functions) max number of values that can be encoded = 100
     src_type :   2nd paramter to encode  (its values defined  in f_src_type functions) max number of values that can be encoded = 100
     tf :             3rd paramter to encode   (may be int number with format.price precision length!)
     length : 	4th paramter to encode   (may be any int number)
  Returns: float number
 f_decode() 
  Decodes 4 paramters into tuple
  Returns: tuple 
kNNLibrary   "kNN" 
Collection of experimental kNN functions. This is a work in progress, an improvement upon my original kNN script: 
The script can be recreated with this library. Unlike the original script, that used multiple arrays, this has been reworked with the new Pine Script matrix features.
To make a kNN prediction, the following data should be supplied to the wrapper:
 
   kNN : filter type. Right now either  Binary  or  Percent .  Binary  works like in the original script: the system stores whether the price has increased (+1) or decreased (-1) since the previous knnStore event (called when either long or short condition is supplied).  Percent  works the same, but the values stored are the difference of prices in percents. That way larger differences in prices would give higher scores.
   k : number k. This is how many nearest neighbors are to be selected (and summed up to get the result).
   skew : kNN minimum difference. Normally, the prediction is done with a simple majority of the neighbor votes. If  skew  is given, then more than a simple majority is needed for a prediction. This also means that there are inputs for which no prediction would be given (if the majority votes are between -skew and +skew). Note that in  Percent  mode more profitable trades will have higher voting power.
   depth : kNN matrix size limit. Originally, the whole available history of trades was used to make a prediction. This not only requires more computational power, but also neglects the fact that the market conditions are changing. This setting restricts the memory matrix to a finite number of past trades.
   price : price series
   long : long condition. True if the long conditions are met, but filters are not yet applied. For example, in my original script, trades are only made on crossings of fast and slow MAs. So, whenever it is possible to go long, this value is set true. False otherwise.
   short : short condition. Same as  long , but for short condition.
   store : whether the inputs should be stored. Additional filters may be applied to prevent bad trades (for example, trend-based filters), so if you only need to consult kNN without storing the trade, this should be set to false.
   feature1 : current value of feature 1. A feature in this case is some kind of data derived from the price. Different features may be used to analyse the price series. For example, oscillator values. Not all of them may be used for kNN prediction. As the current kNN implementation is 2-dimensional, only two features can be used.
   feature2 : current value of feature 2.
 
The wrapper returns a tuple:  [ longOK, shortOK ]. This is a pair of filters. When  longOK  is true, then kNN predicts a long trade may be taken. When shortOK is true, then kNN predicts a short trade may be taken. The kNN filters are returned whenever long or short conditions are met. The trade is supposed to happen when long or short conditions are met and when the kNN filter for the desired direction is true.
 Exported functions :
 knnStore(knn, p1, p2, src, maxrows) 
  Store the previous trade; buffer the current one until results are in. Results are binary: up/down
  Parameters:
     knn : knn matrix
     p1 : feature 1 value
     p2 : feature 2 value
     src : current price
     maxrows : limit the matrix size to this number of rows (0 of no limit)
  Returns: modified knn matrix
 knnStorePercent(knn, p1, p2, src, maxrows) 
  Store the previous trade; buffer the current one until results are in. Results are in percents
  Parameters:
     knn : knn matrix
     p1 : feature 1 value
     p2 : feature 2 value
     src : current price
     maxrows : limit the matrix size to this number of rows (0 of no limit)
  Returns: modified knn matrix
 knnGet(distance, result) 
  Get neighbours by getting k results with the smallest distances
  Parameters:
     distance : distance array
     result : result array
  Returns: array slice of k results
 knnDistance(knn, p1, p2) 
  Create a distance array from the two given parameters
  Parameters:
     knn : knn matrix
     p1 : feature 1 value
     p2 : feature 2 value
  Returns: distance array
 knnSum(knn, p1, p2, k) 
  Make a prediction, finding k nearest neighbours and summing them up
  Parameters:
     knn : knn matrix
     p1 : feature 1 value
     p2 : feature 2 value
     k : sum k nearest neighbors
  Returns: sum of k nearest neighbors
 doKNN(kNN, k, skew, depth, price, long, short, store, feature1, feature2) 
  execute kNN filter
  Parameters:
     kNN : filter type
     k : number k
     skew : kNN minimum difference
     depth : kNN matrix size limit
     price : series
     long : long condition
     short : short condition
     store : store the supplied features (if false, only checks the results without storage)
     feature1 : feature 1 value
     feature2 : feature 2 value
  Returns:   filter output
fibo_levelsLibrary   "Fibo_levels" 
Calculate Fibo levels from any 2 levels. Your need know only 2 price of 2 levels for calculate any level of Fibo: function 'fibo_lvl', 
or calculate array of price Fibo levels : function 'fibo_lvls'
 fibo_lvl(fibo_lvl1, price1, fibo_lvl2, price2, calc_level) 
  Parameters:
     fibo_lvl1 : First of any level of fibo from 0 to 1 (example 0.236)
     price1 : Price for 1th any level (example 2356.1)
     fibo_lvl2 : Second of any level of fibo from 0 to 1 (example 0.382)
     price2 : Price for 2th any level (example 2497.4)
     calc_level : Price for level to calculate (example 0.5)
  Returns: return price for calc_level fibo
 fibo_lvls(bars, time1, time2, fibo_lvl1, price1, fibo_lvl2, price1) 
  Parameters:
     fibo_lvl1 : First of any level of fibo from 0 to 1 (example 0.236)
     price1 : Price for 1th any level (example 2356.1)
     fibo_lvl2 : Second of any level of fibo from 0 to 1 (example 0.382)
     price1 : Price for 2th any level (example 2497.4)
  Returns: array of price for fibo levels : (0.0, 0.118, 0.236, 0.384, 0.5, 0.618, 0.786, 1.0, 1.27,-0.27,1.618,-0.618)
LibIndicadoresUteisLibrary   "LibIndicadoresUteis" 
Collection of useful indicators. This collection does not do any type of plotting on the graph, as the methods implemented can and should be used to get the return of mathematical formulas, in a way that speeds up the development of new scripts. The current version contains methods for stochastic return, slow stochastic, IFR, leverage calculation for B3 futures market, leverage calculation for B3 stock market, bollinger bands and the range of change.
 estocastico(PeriodoEstocastico) 
  Returns the value of stochastic
  Parameters:
     PeriodoEstocastico : Period for calculation basis
  Returns: Float with the stochastic value of the period
 estocasticoLento(PeriodoEstocastico, PeriodoMedia) 
  Returns the value of slow stochastic
  Parameters:
     PeriodoEstocastico : Stochastic period for calculation basis
     PeriodoMedia : Average period for calculation basis
  Returns: Float with the value of the slow stochastic of the period
 ifrInvenenado(PeriodoIFR, OrigemIFR) 
  Returns the value of the RSI/IFR Poisoned of Guima
  Parameters:
     PeriodoIFR : RSI/IFR period for calculation basis
     OrigemIFR : Source of RSI/IFR for calculation basis
  Returns: Float with the RSI/IFR value for the period
 calculoAlavancagemFuturos(margem, alavancagemMaxima) 
  Returns the number of contracts to work based on margin
  Parameters:
     margem : Margin for contract unit
     alavancagemMaxima : Maximum number of contracts to work
  Returns: Integer with the number of contracts suggested for trading
 calculoAlavancagemAcoes(alavancagemMaxima) 
  Returns the number of batches to work based on the margin
  Parameters:
     alavancagemMaxima : Maximum number of batches to work
  Returns: Integer with the amount of lots suggested for trading
 bandasBollinger(periodoBB, origemBB, desvioPadrao) 
  Returns the value of bollinger bands
  Parameters:
     periodoBB : Period of bollinger bands for calculation basis
     origemBB : Origin of bollinger bands for calculation basis
     desvioPadrao : Standard Deviation of bollinger bands for calculation basis
  Returns: Two-position array with upper and lower band values respectively
 theRoc(periodoROC, origemROC) 
  Returns the value of Rate Of Change
  Parameters:
     periodoROC : Period for calculation basis
     origemROC : Source of calculation basis
  Returns: Float with the value of Rate Of Change






















