Angled Gann Time-Price Squares with S/RThis is a Pine Script indicator that implements Angled Gann Time-Price Squares based on W.D. Gann's trading theory. Here's what it does:
Core Functionality
Detects pivot highs and lows using a configurable lookback period
Creates angled squares by connecting pivot points to current price action when specific geometric conditions are met
Validates square formation by checking if the price movement follows proper Gann angles (typically 45°, 135°, etc.) within a tolerance range
Key Features
Real-time square tracking: Shows both completed squares and forming squares in progress
Support/Resistance levels: Automatically generates S/R lines from:
Square edge extensions
Diagonal extensions (pivot centers)
Quarter/half levels within squares (25%, 50%, 75%)
Visual feedback: Color-coded squares (green for up, red for down, orange for forming)
Projection lines: Predicts where squares might complete based on Gann angle theory
Gann Theory Application
The indicator follows Gann's principle that time and price move in geometric harmony. It looks for price movements that form perfect squares when plotted on a chart, where the diagonal of the square represents the natural flow of price and time at specific angles.
The generated support/resistance levels are particularly valuable because they're based on completed geometric patterns rather than just horizontal price levels, making them potentially more significant according to Gann methodology.
Vector
PVSRA Volume Suite with Volume DeltaPVSRA Volume Suite with Volume Delta
🔹 Overview
This indicator is a Volume Suite that enhances PVSRA (Price, Volume, Support, Resistance Analysis) by incorporating Volume Delta and AI-driven predictive alerts. It is designed to help traders analyze volume pressure, market trends, and price movements with color-coded visualizations.
📌 Key Features
 PVSRA Volume Color Coding – Highlights vector candles based on extreme volume/spread conditions.
 Volume Delta Analysis – Tracks buying/selling pressure using up/down volume data.
AI-Powered Predictive Alerts – Identifies potential trend shifts based on volume and trend context.
 Volatility-Adjusted Thresholds – Dynamically adapts volume conditions based on ATR (Average True Range).
Customizable MA & Symbol Overrides – Allows traders to tweak settings for personalized market insights.
Debug & Diagnostic Labels – Shows statistical z-scores, thresholds, and volume dynamics.
 How It Works
    PVSRA Color Coding – The script classifies candles into four categories based on volume and spread analysis:
        🔴 Red Vector → Extreme bearish volume/spread
        🟢 Green Vector → Extreme bullish volume/spread
        🟣 Violet Vector → Above-average bearish volume
        🔵 Blue Vector → Above-average bullish volume
    Volume Delta Calculation – Uses lower timeframe volume analysis to estimate up/down volume differentials.
    Trend & Predictive Alerts – Combines EMA crossovers with statistical volume analysis to detect potential trend shifts.
    Volatility Adaptation – Adjusts volume thresholds based on ATR, making signals more reliable in changing market conditions.
    Custom Symbol Override – Fetches PVSRA data from a different instrument, useful for index-based volume analysis.
 Customizable Inputs
    PVSRA Color Settings – Modify candle color schemes for better visual clarity.
    Volume Delta Colors – Customize delta volume body, wick, and border colors.
    AI Settings – Tune z-score thresholds, lookback periods, and enable predictive alerts.
    Symbol Overrides – Analyze volume from a different market or asset.
    Moving Average (MA) Settings – Display a volume-based moving average for trend confirmation.
 Important Notes
    Works best on intraday timeframes where volume data is reliable.
    Lower timeframe volume delta estimates might not be precise for all assets.
    No guarantees of accuracy – Use alongside other confluence tools for decision-making.
 Credits & Open-Source Notice
This script is based on PVSRA methodologies and integrates Volume Delta analysis. Special thanks to Traders Reality and TradingView for their contributions to volume-based analysis.
Geo. Geo.
This library provides a comprehensive set of geometric functions based on 2 simple types for point and line manipulation, point array calculations, some vector operations (Borrowed from @ricardosantos ), angle calculations, and basic polygon analysis.  It offers tools for creating, transforming, and analyzing geometric shapes and their relationships.  
View the source code for detailed documentation on each function and type.
═════════════════════════════════════════════════════════════════════════
█  OVERVIEW 
This library enhances TradingView's Pine Script with robust geometric capabilities. It introduces the  Point  and  Line  types, along with a suite of functions for various geometric operations. These functionalities empower you to perform advanced calculations, manipulations, and analyses involving points, lines, vectors, angles, and polygons directly within your Pine scripts. The example is  at the bottom of the script. ( Commented out )
█  CONCEPTS 
This library revolves around two fundamental types:
 •  Point:  Represents a point in 2D space with x and y coordinates, along with optional 'a' (angle) and 'v' (value) fields for versatile use.  Crucially, for plotting, utilize the `.to_chart_point()` method to convert Points into plottable chart.point objects.
 •  Line:  Defined by a starting  Point  and a  slope , enabling calculations like getting y for a given x, or finding intersection points.
█  FEATURES 
 •  Point Manipulation:   Perform operations like addition, subtraction, scaling, rotation, normalization, calculating distances, dot products, cross products, midpoints, and more with  Point  objects.
 •  Line Operations:  Create lines, determine their slope, calculate y from x (and vice versa), and find the intersection points of two lines.
 •  Vector Operations:  Perform vector addition, subtraction, multiplication, division, negation, perpendicular vector calculation, floor, fractional part, sine, absolute value, modulus, sign, round, scaling, rescaling, rotation, and ceiling operations.
 •  Angle Calculations:   Compute angles between points in degrees or radians, including signed, unsigned, and 360-degree angles.
 •  Polygon Analysis:  Calculate the area, perimeter, and centroid of polygons. Check if a point is inside a given polygon and determine the convex hull perimeter.
 •  Chart Plotting:  Conveniently convert  Point  objects to  chart.point  objects for plotting lines and points on the chart.  The library also includes functions for plotting lines between individual and series of points.
 •  Utility Functions:  Includes helper functions such as square root, square, cosine, sine, tangent, arc cosine, arc sine, arc tangent, atan2, absolute distance, golden ratio tolerance check, fractional part, and safe index/check for chart plotting boundaries.
█  HOW TO USE 
1 — Include the library in your script using:
 
import kaigouthro/geo/1
 
2 — Create  Point  and  Line  objects:
 
p1 = geo.Point(bar_index, close)
p2 = geo.Point(bar_index , open)
myLine = geo.Line(p1, geo.slope(p1, p2))
// maybe use that line to detect a crossing for an alert ... hmmm
 
3 — Utilize the provided functions:
 
distance = geo.distance(p1, p2)
intersection = geo.intersection(line1, line2)
 
4 — For plotting labels, lines, convert  Point  to  chart.point :
 
label.new(p1.to_chart_point(), " Hi ")
line.new(p1.to_chart_point(),p2.to_chart_point())
 
█  NOTES 
This description provides a concise overview. Consult the library's source code for in-depth documentation, including detailed descriptions, parameter types, and return values for each function and method. The source code is structured with comprehensive comments using the `//@` format for seamless integration with TradingView's auto-documentation features.
█  Possibilities.. 
  
  
Library   "geo" 
This library provides a comprehensive set of geometric functions and types, including point and line manipulation, vector operations, angle calculations, and polygon analysis. It offers tools for creating, transforming, and analyzing geometric shapes and their relationships.
 sqrt(value) 
  Square root function
  Parameters:
     value (float) : (float) - The number to take the square root of
  Returns: (float) - The square root of the input value
 sqr(x) 
  Square function
  Parameters:
     x (float) : (float) - The number to square
  Returns: (float) - The square of the input value
 cos(v) 
  Cosine function
  Parameters:
     v (float) : (series float) - The value to find the cosine of
  Returns: (series float) - The cosine of the input value
 sin(v) 
  Sine function
  Parameters:
     v (float) : (series float) - The value to find the sine of
  Returns: (series float) - The sine of the input value
 tan(v) 
  Tangent function
  Parameters:
     v (float) : (series float) - The value to find the tangent of
  Returns: (series float) - The tangent of the input value
 acos(v) 
  Arc cosine function
  Parameters:
     v (float) : (series float) - The value to find the arc cosine of
  Returns: (series float) - The arc cosine of the input value
 asin(v) 
  Arc sine function
  Parameters:
     v (float) : (series float) - The value to find the arc sine of
  Returns: (series float) - The arc sine of the input value
 atan(v) 
  Arc tangent function
  Parameters:
     v (float) : (series float) - The value to find the arc tangent of
  Returns: (series float) - The arc tangent of the input value
 atan2(dy, dx) 
  atan2 function
  Parameters:
     dy (float) : (float) - The y-coordinate
     dx (float) : (float) - The x-coordinate
  Returns: (float) - The angle in radians
 gap(_value1, __value2) 
  Absolute distance between any two float values
  Parameters:
     _value1 (float) : First value
     __value2 (float) 
  Returns: Absolute Positive Distance
 phi_tol(a, b, tolerance) 
  Check if the ratio is within the tolerance of the golden ratio
  Parameters:
     a (float) : (float) The first number
     b (float) : (float) The second number
     tolerance (float) : (float) The tolerance percennt as 1 = 1 percent
  Returns: (bool) True if the ratio is within the tolerance, false otherwise
 frac(x) 
  frad Fractional
  Parameters:
     x (float) : (float) - The number to convert to fractional
  Returns: (float) - The number converted to fractional
 safeindex(x, limit) 
  limiting int to hold the value within the chart range
  Parameters:
     x (float) : (float) - The number to limit
     limit (int) 
  Returns: (int) - The number limited to the chart range
 safecheck(x, limit) 
  limiting int check if within the chartplottable range
  Parameters:
     x (float) : (float) - The number to limit
     limit (int) 
  Returns: (int) - The number limited to the chart range
 interpolate(a, b, t) 
  interpolate between two values
  Parameters:
     a (float) : (float) - The first value
     b (float) : (float) - The second value
     t (float) : (float) - The interpolation factor (0 to 1)
  Returns: (float) - The interpolated value
 gcd(_numerator, _denominator) 
  Greatest common divisor of two integers
  Parameters:
     _numerator (int) 
     _denominator (int) 
  Returns: (int) The greatest common divisor
 method set_x(self, value) 
  Set the x value of the point, and pass point for chaining
  Namespace types: Point
  Parameters:
     self (Point) : (Point) The point to modify
     value (float) : (float) The new x-coordinate
 method set_y(self, value) 
  Set the y value of the point, and pass point for chaining
  Namespace types: Point
  Parameters:
     self (Point) : (Point) The point to modify
     value (float) : (float) The new y-coordinate
 method get_x(self) 
  Get the x value of the point
  Namespace types: Point
  Parameters:
     self (Point) : (Point) The point to get the x-coordinate from
  Returns: (float) The x-coordinate
 method get_y(self) 
  Get the y value of the point
  Namespace types: Point
  Parameters:
     self (Point) : (Point) The point to get the y-coordinate from
  Returns: (float) The y-coordinate
 method vmin(self) 
  Lowest element of the point
  Namespace types: Point
  Parameters:
     self (Point) : (Point) The point
  Returns: (float) The lowest value between x and y
 method vmax(self) 
  Highest element of the point
  Namespace types: Point
  Parameters:
     self (Point) : (Point) The point
  Returns: (float) The highest value between x and y
 method add(p1, p2) 
  Addition
  Namespace types: Point
  Parameters:
     p1 (Point) : (Point) - The first point
     p2 (Point) : (Point) - The second point
  Returns: (Point) - the add of the two points
 method sub(p1, p2) 
  Subtraction
  Namespace types: Point
  Parameters:
     p1 (Point) : (Point) - The first point
     p2 (Point) : (Point) - The second point
  Returns: (Point) - the sub of the two points
 method mul(p, scalar) 
  Multiplication by scalar
  Namespace types: Point
  Parameters:
     p (Point) : (Point) - The point
     scalar (float) : (float) - The scalar to multiply by
  Returns: (Point) - the multiplied point of the point and the scalar
 method div(p, scalar) 
  Division by scalar
  Namespace types: Point
  Parameters:
     p (Point) : (Point) - The point
     scalar (float) : (float) - The scalar to divide by
  Returns: (Point) - the divided point of the point and the scalar
 method rotate(p, angle) 
  Rotate a point around the origin by an angle (in degrees)
  Namespace types: Point
  Parameters:
     p (Point) : (Point) - The point to rotate
     angle (float) : (float) - The angle to rotate by in degrees
  Returns: (Point) - the rotated point
 method length(p) 
  Length of the vector from origin to the point
  Namespace types: Point
  Parameters:
     p (Point) : (Point) - The point
  Returns: (float) - the length of the point
 method length_squared(p) 
  Length squared of the vector
  Namespace types: Point
  Parameters:
     p (Point) : (Point) The point
  Returns: (float) The squared length of the point
 method normalize(p) 
  Normalize the point to a unit vector
  Namespace types: Point
  Parameters:
     p (Point) : (Point) - The point to normalize
  Returns: (Point) - the normalized point
 method dot(p1, p2) 
  Dot product
  Namespace types: Point
  Parameters:
     p1 (Point) : (Point) - The first point
     p2 (Point) : (Point) - The second point
  Returns: (float) - the dot of the two points
 method cross(p1, p2) 
  Cross product result (in 2D, this is a scalar)
  Namespace types: Point
  Parameters:
     p1 (Point) : (Point) - The first point
     p2 (Point) : (Point) - The second point
  Returns: (float) - the cross of the two points
 method distance(p1, p2) 
  Distance between two points
  Namespace types: Point
  Parameters:
     p1 (Point) : (Point) - The first point
     p2 (Point) : (Point) - The second point
  Returns: (float) - the distance of the two points
 method Point(x, y, a, v) 
  Point Create Convenience
  Namespace types: series float, simple float, input float, const float
  Parameters:
     x (float) 
     y (float) 
     a (float) 
     v (float) 
  Returns: (Point) new point
 method angle(p1, p2) 
  Angle between two points in degrees
  Namespace types: Point
  Parameters:
     p1 (Point) : (Point) - The first point
     p2 (Point) : (Point) - The second point
  Returns: (float) - the angle of the first point and the second point
 method angle_between(p, pivot, other) 
  Angle between two points in degrees from a pivot point
  Namespace types: Point
  Parameters:
     p (Point) : (Point) - The point to calculate the angle from
     pivot (Point) : (Point) - The pivot point
     other (Point) : (Point) - The other point
  Returns: (float) - the angle between the two points
 method translate(p, from_origin, to_origin) 
  Translate a point from one origin to another
  Namespace types: Point
  Parameters:
     p (Point) : (Point) - The point to translate
     from_origin (Point) : (Point) - The origin to translate from
     to_origin (Point) : (Point) - The origin to translate to
  Returns: (Point) - the translated point
 method midpoint(p1, p2) 
  Midpoint of two points
  Namespace types: Point
  Parameters:
     p1 (Point) : (Point) - The first point
     p2 (Point) : (Point) - The second point
  Returns: (Point) - The midpoint of the two points
 method rotate_around(p, angle, pivot) 
  Rotate a point around a pivot point by an angle (in degrees)
  Namespace types: Point
  Parameters:
     p (Point) : (Point) - The point to rotate
     angle (float) : (float) - The angle to rotate by in degrees
     pivot (Point) : (Point) - The pivot point to rotate around
  Returns: (Point) - the rotated point
 method multiply(_a, _b) 
  Multiply vector _a with _b
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The first point
     _b (Point) : (Point) The second point
  Returns: (Point) The result of the multiplication
 method divide(_a, _b) 
  Divide vector _a by _b
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The first point
     _b (Point) : (Point) The second point
  Returns: (Point) The result of the division
 method negate(_a) 
  Negative of vector _a
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The point to negate
  Returns: (Point) The negated point
 method perp(_a) 
  Perpendicular Vector of _a
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The point
  Returns: (Point) The perpendicular point
 method vfloor(_a) 
  Compute the floor of argument vector _a
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The point
  Returns: (Point) The floor of the point
 method fractional(_a) 
  Compute the fractional part of the elements from vector _a
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The point
  Returns: (Point) The fractional part of the point
 method vsin(_a) 
  Compute the sine of argument vector _a
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The point
  Returns: (Point) The sine of the point
 lcm(a, b) 
  Least common multiple of two integers
  Parameters:
     a (int) : (int) The first integer
     b (int) : (int) The second integer
  Returns: (int) The least common multiple
 method vabs(_a) 
  Compute the absolute of argument vector _a
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The point
  Returns: (Point) The absolute of the point
 method vmod(_a, _b) 
  Compute the mod of argument vector _a
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The point
     _b (float) : (float) The mod
  Returns: (Point) The mod of the point
 method vsign(_a) 
  Compute the sign of argument vector _a
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The point
  Returns: (Point) The sign of the point
 method vround(_a) 
  Compute the round of argument vector _a
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The point
  Returns: (Point) The round of the point
 method normalize_y(p, height) 
  normalizes the y value of a point to an input height
  Namespace types: Point
  Parameters:
     p (Point) : (Point)      - The point to normalize
     height (float) : (float) - The height to normalize to
  Returns: (Point)      - the normalized point
 centroid(points) 
  Calculate the centroid of multiple points
  Parameters:
     points (array) : (array) The array of points
  Returns: (Point) The centroid point
 random_point(_height, _width, _origin, _centered) 
  Random Point in a given height and width
  Parameters:
     _height (float) : (float) The height of the area to generate the point in
     _width (float) : (float) The width of the area to generate the point in
     _origin (Point) : (Point) The origin of the area to generate the point in (default: na, will create a Point(0, 0))
     _centered (bool) : (bool) Center the origin point in the area, otherwise, positive h/w (default: false)
  Returns: (Point) The random point in the given area
 random_point_array(_origin, _height, _width, _centered, _count) 
  Random Point Array in a given height and width
  Parameters:
     _origin (Point) : (Point) The origin of the area to generate the array (default: na, will create a Point(0, 0))
     _height (float) : (float) The height of the area to generate the array
     _width (float) : (float) The width of the area to generate the array
     _centered (bool) : (bool) Center the origin point in the area, otherwise, positive h/w (default: false)
     _count (int) : (int) The number of points to generate (default: 50)
  Returns: (array) The random point array in the given area
 method sort_points(points, by_x) 
  Sorts an array of points by x or y coordinate
  Namespace types: array
  Parameters:
     points (array) : (array) The array of points to sort
     by_x (bool) : (bool) Whether to sort by x-coordinate (true) or y-coordinate (false)
  Returns: (array) The sorted array of points
 method equals(_a, _b) 
  Compares two points for equality
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The first point
     _b (Point) : (Point) The second point
  Returns: (bool) True if the points are equal, false otherwise
 method max(origin, _a, _b) 
  Maximum of two points from origin, using dot product
  Namespace types: Point
  Parameters:
     origin (Point) 
     _a (Point) : (Point) The first point
     _b (Point) : (Point) The second point
  Returns: (Point) The maximum point
 method min(origin, _a, _b) 
  Minimum of two points from origin, using dot product
  Namespace types: Point
  Parameters:
     origin (Point) 
     _a (Point) : (Point) The first point
     _b (Point) : (Point) The second point
  Returns: (Point) The minimum point
 method avg_x(points) 
  Average x of point array
  Namespace types: array
  Parameters:
     points (array) : (array) The array of points
  Returns: (float) The average x-coordinate
 method avg_y(points) 
  Average y of point array
  Namespace types: array
  Parameters:
     points (array) : (array) The array of points
  Returns: (float) The average y-coordinate
 method range_x(points) 
  Range of x values in point array
  Namespace types: array
  Parameters:
     points (array) : (array) The array of points
  Returns: (float) The range of x-coordinates
 method range_y(points) 
  Range of y values in point array
  Namespace types: array
  Parameters:
     points (array) : (array) The array of points
  Returns: (float) The range of y-coordinates
 method max_x(points) 
  max of x values in point array
  Namespace types: array
  Parameters:
     points (array) : (array) The array of points
  Returns: (float) The max of x-coordinates
 method min_y(points) 
  min of x values in point array
  Namespace types: array
  Parameters:
     points (array) : (array) The array of points
  Returns: (float) The min of x-coordinates
 method scale(_a, _scalar) 
  Scale a point by a scalar
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The point to scale
     _scalar (float) : (float) The scalar value
  Returns: (Point) The scaled point
 method rescale(_a, _length) 
  Rescale a point to a new magnitude
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The point to rescale
     _length (float) : (float) The new magnitude
  Returns: (Point) The rescaled point
 method rotate_rad(_a, _radians) 
  Rotate a point by an angle in radians
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The point to rotate
     _radians (float) : (float) The angle in radians
  Returns: (Point) The rotated point
 method rotate_degree(_a, _degree) 
  Rotate a point by an angle in degrees
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The point to rotate
     _degree (float) : (float) The angle in degrees
  Returns: (Point) The rotated point
 method vceil(_a, _digits) 
  Ceil a point to a certain number of digits
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The point to ceil
     _digits (int) : (int) The number of digits to ceil to
  Returns: (Point) The ceiled point
 method vpow(_a, _exponent) 
  Raise both point elements to a power
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The point
     _exponent (float) : (float) The exponent
  Returns: (Point) The point with elements raised to the power
 method perpendicular_distance(_a, _b, _c) 
  Distance from point _a to line between _b and _c
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The point
     _b (Point) : (Point) The start point of the line
     _c (Point) : (Point) The end point of the line
  Returns: (float) The perpendicular distance
 method project(_a, _axis) 
  Project a point onto another
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The point to project
     _axis (Point) : (Point) The point to project onto
  Returns: (Point) The projected point
 method projectN(_a, _axis) 
  Project a point onto a point of unit length
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The point to project
     _axis (Point) : (Point) The unit length point to project onto
  Returns: (Point) The projected point
 method reflect(_a, _axis) 
  Reflect a point on another
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The point to reflect
     _axis (Point) : (Point) The point to reflect on
  Returns: (Point) The reflected point
 method reflectN(_a, _axis) 
  Reflect a point to an arbitrary axis
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The point to reflect
     _axis (Point) : (Point) The axis to reflect to
  Returns: (Point) The reflected point
 method angle_rad(_a) 
  Angle in radians of a point
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The point
  Returns: (float) The angle in radians
 method angle_unsigned(_a, _b) 
  Unsigned degree angle between 0 and +180 by given two points
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The first point
     _b (Point) : (Point) The second point
  Returns: (float) The unsigned angle in degrees
 method angle_signed(_a, _b) 
  Signed degree angle between -180 and +180 by given two points
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The first point
     _b (Point) : (Point) The second point
  Returns: (float) The signed angle in degrees
 method angle_360(_a, _b) 
  Degree angle between 0 and 360 by given two points
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The first point
     _b (Point) : (Point) The second point
  Returns: (float) The angle in degrees (0-360)
 method clamp(_a, _vmin, _vmax) 
  Restricts a point between a min and max value
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The point to restrict
     _vmin (Point) : (Point) The minimum point
     _vmax (Point) : (Point) The maximum point
  Returns: (Point) The restricted point
 method lerp(_a, _b, _rate_of_move) 
  Linearly interpolates between points a and b by _rate_of_move
  Namespace types: Point
  Parameters:
     _a (Point) : (Point) The starting point
     _b (Point) : (Point) The ending point
     _rate_of_move (float) : (float) The rate of movement (0-1)
  Returns: (Point) The interpolated point
 method slope(p1, p2) 
  Slope of a line between two points
  Namespace types: Point
  Parameters:
     p1 (Point) : (Point) - The first point
     p2 (Point) : (Point) - The second point
  Returns: (float) - The slope of the line
 method gety(self, x) 
  Get y-coordinate of a point on the line given its x-coordinate
  Namespace types: Line
  Parameters:
     self (Line) : (Line) - The line
     x (float) : (float) - The x-coordinate
  Returns: (float) - The y-coordinate
 method getx(self, y) 
  Get x-coordinate of a point on the line given its y-coordinate
  Namespace types: Line
  Parameters:
     self (Line) : (Line) - The line
     y (float) : (float) - The y-coordinate
  Returns: (float) - The x-coordinate
 method intersection(self, other) 
  Intersection point of two lines
  Namespace types: Line
  Parameters:
     self (Line) : (Line) - The first line
     other (Line) : (Line) - The second line
  Returns: (Point) - The intersection point
 method calculate_arc_point(self, b, p3) 
  Calculate a point on the arc defined by three points
  Namespace types: Point
  Parameters:
     self (Point) : (Point) The starting point of the arc
     b (Point) : (Point) The middle point of the arc
     p3 (Point) : (Point) The end point of the arc
  Returns: (Point) A point on the arc
 approximate_center(point1, point2, point3) 
  Approximate the center of a spiral using three points
  Parameters:
     point1 (Point) : (Point) The first point
     point2 (Point) : (Point) The second point
     point3 (Point) : (Point) The third point
  Returns: (Point) The approximate center point
 createEdge(center, radius, angle) 
  Get coordinate from center by radius and angle
  Parameters:
     center (Point) : (Point) - The center point
     radius (float) : (float) - The radius of the circle
     angle (float) : (float) - The angle in degrees
  Returns: (Point) - The coordinate on the circle
 getGrowthFactor(p1, p2, p3) 
  Get growth factor of spiral point
  Parameters:
     p1 (Point) : (Point) - The first point
     p2 (Point) : (Point) - The second point
     p3 (Point) : (Point) - The third point
  Returns: (float) - The growth factor
 method to_chart_point(point) 
  Convert Point to chart.point using chart.point.from_index(safeindex(point.x), point.y)
  Namespace types: Point
  Parameters:
     point (Point) : (Point) - The point to convert
  Returns: (chart.point) - The chart.point representation of the input point
 method plotline(p1, p2, col, width) 
  Draw a line from p1 to p2
  Namespace types: Point
  Parameters:
     p1 (Point) : (Point) First point
     p2 (Point) : (Point) Second point
     col (color) 
     width (int) 
  Returns: (line) Line object
 method drawlines(points, col, ignore_boundary) 
  Draw lines between points in an array
  Namespace types: array
  Parameters:
     points (array) : (array) The array of points
     col (color) : (color) The color of the lines
     ignore_boundary (bool) : (bool) The color of the lines
 method to_chart_points(points) 
  Draw an array of points as chart points on the chart with line.new(chartpoint1, chartpoint2, color=linecolor)
  Namespace types: array
  Parameters:
     points (array) : (array) - The points to draw
  Returns: (array) The array of chart points
 polygon_area(points) 
  Calculate the area of a polygon defined by an array of points
  Parameters:
     points (array) : (array) The array of points representing the polygon vertices
  Returns: (float) The area of the polygon
 polygon_perimeter(points) 
  Calculate the perimeter of a polygon
  Parameters:
     points (array) : (array) Array of points defining the polygon
  Returns: (float) Perimeter of the polygon
 is_point_in_polygon(point, _polygon) 
  Check if a point is inside a polygon
  Parameters:
     point (Point) : (Point) The point to check
     _polygon (array) 
  Returns: (bool) True if the point is inside the polygon, false otherwise
 method perimeter(points) 
  Calculates the convex hull perimeter of a set of points
  Namespace types: array
  Parameters:
     points (array) : (array) The array of points
  Returns: (array) The array of points forming the convex hull perimeter
 Point 
  A Point, can be used for vector, floating calcs, etc. Use the cp method for plots
  Fields:
     x (series float) : (float) The x-coordinate
     y (series float) : (float) The y-coordinate
     a (series float) : (float) An Angle storage spot
     v (series float) : (float) A Value
 Line 
  Line
  Fields:
     point (Point) : (Point) The starting point of the line
     slope (series float) : (float) The slope of the line
GOMTRY.
True VolumeThis indicator is designed to provide in-depth analysis of volume data from multiple sources and distinguish highly liquid candles by measuring the density of the volume. By focusing on the density and concentration of volume, rather than just the volume itself, it offers a more nuanced view of the market. This can be particularly beneficial in markets like cryptocurrencies, where understanding the role of market makers versus retail traders is crucial for strategic trading.
 This is how it works: 
Multiple Asset Integration:
Unlike standard volume indicators, True Volume allows the inclusion of up to four different assets (or the same asset from various exchanges) into its volume calculations. This feature provides a broader and more accurate total volume representation, essential in markets like cryptocurrencies where volume is dispersed across multiple exchanges.
Adjustable Time Anchors:
It offers various time anchor options, allowing traders to analyze volume data over different time periods or a specific amount of lookback candles. This flexibility helps in understanding volume trends over both short and long-term time frames.
Volume Density Analysis:
The core of this indicator is the innovative concept of Volume Density. It's calculated using a sigmoid function that normalizes the volume-to-price movement ratio in a unique way without needing a max cap or having the density column spike off the chart. This method helps in distinguishing between normal volume fluctuations and those that are unusually dense for the given price movement. This distinction is key in identifying potential market maker activities.
The Visuals:
The Volume Density is displayed in a unique way without compromising the original volume bars or cap the density. Infinite density can essentially be represented without having an infinitely large bar or caping out the density data. There's also two different color themes, optional bar color, and an option to flip the density bars up-side down for a different representation. Each of the original volume sources can be displayed separately as well. All colors as customizable as well for your own preference.
Price Volume Trend (PVT):
Included in this indicator is also the Price Volume Trend, which cumulatively measures the density delta, offering insights into the longer-term momentum of the market.
 How do I trade it? 
This indicator aims to give you insight into 'the other side of the trade', the Market Makers. When you buy, they provide liquidity by selling to you. That drives the Volume Density up.
Consider whether the market maker is currently long or short and might need to cover their position by wicking price back, or "adjust inventory". Especially towards the end of a market session.
Consider dense candles during market gaps or weekends to be market manipulation moves.
The density also goes up when stop losses are hit. If price makes a higher high or lower low, high density could indicate a liquidation event.
WIPTensorLibrary   "WIPTensor" 
A Tensor or 3 dimensional array structure and interface.
---
Note: im just highjacking the name to use it as a 3d array on a project..
there is no optimization attempts or tensor specific functionality within.
 to_string(this) 
  Convert `Tensor` to a string format.
  Parameters:
     this : Tensor data.
  Returns: string.
 to_vector(this) 
  Convert `Tensor` to a one dimension array.
  Parameters:
     this : Tensor data.
  Returns: New array with flattened `Tensor` data.
 new(x, y, z, initial_value) 
  Create a new `Tensor` with provided shape.
  Parameters:
     x : Dimension `X` size.
     y : Dimension `Y` size.
     z : Dimension `Z` size.
     initial_value : Value to fill the `Tensor`.
  Returns: New `Tensor`.
 new(shape, initial_value) 
  Create a new `Tensor` with provided shape.
  Parameters:
     shape : Shape of dimensions size.
     initial_value : Value to fill the `Tensor`.
  Returns: New `Tensor`.
 from(expression, sepx, sepy, sepz) 
  Create a `Tensor` from provided array and shape.
  Parameters:
     expression 
     sepx 
     sepy 
     sepz 
  Returns: New `Tensor`.
 from(vector, x, y, z) 
  Create a `Tensor` from provided array and shape.
  Parameters:
     vector : Data with flattened dimensions.
     x 
     y 
     z 
  Returns: New `Tensor`.
 from(vector, shape) 
  Parameters:
     vector 
     shape 
 get(this, x, y, z) 
  Get the value at position.
  Parameters:
     this : `Tensor` data.
     x 
     y 
     z 
  Returns: Value at position.
 get(this, position) 
  Parameters:
     this 
     position 
 set(this, x, y, z, value) 
  Set the value at position.
  Parameters:
     this : `Tensor` data.
     x 
     y 
     z 
     value : New Value.
 set(this, position, value) 
  Parameters:
     this 
     position 
     value 
 Vector 
  Helper type for 3d structure.
  Fields:
     v : Vector of the 3rd dimension.
 Tensor 
  A Tensor is a three dimensional array were the 3rd dimension accounts for time.
  Fields:
     m : Matrix that holds the vectors.
Vector2FunctionClipLibrary   "Vector2FunctionClip" 
Sutherland-Hodgman polygon clipping algorithm.
reference:
.
rosettacode.org
.
 clip(source, reference) 
  Perform Clip operation on a vector with another.
  Parameters:
     source : array . Source polygon to be clipped.
     reference : array . Reference polygon to clip source.
  Returns: array.
Vector2ArrayLibrary   "Vector2Array" 
functions to handle vector2 Array operations.
.
references:
docs.unity3d.com
gist.github.com
github.com
gist.github.com
gist.github.com
gist.github.com
.
 from(source, prop_sep, vect_sep) 
  Generate array of vector2 from string.
  Parameters:
     source : string Source string of the vectors.
     prop_sep : string Separator character of the vector properties (x`,`y).
     vect_sep : string Separator character of the vectors ((x,y)`;`(x,y)).
  Returns: array.
 max(vectors) 
  Combination of the highest elements in column of a array of vectors.
  Parameters:
     vectors : array, Array of Vector2 objects.
  Returns: Vector2.Vector2, Vector2 object.
-> usage:
`a = Vector2.from(1.0) , b = Vector2.from(2.0), c = Vector2.from(3.0), d = max(array.from(a, b, c)) , plot(d.x)`
 min(vectors) 
  Combination of the lowest elements in column of a array of vectors.
  Parameters:
     vectors : array, Array of Vector2 objects.
  Returns: Vector2.Vector2, Vector2 object.
-> usage:
`a = Vector2.from(1.0) , b = Vector2.from(2.0), c = Vector2.from(3.0), d = min(array.from(a, b, c)) , plot(d.x)`
 sum(vectors) 
  Total sum of all vectors.
  Parameters:
     vectors : array, ID of the vector2 array.
  Returns: Vector2.Vector2, vector2 object.
-> usage:
`a = Vector2.from(1.0) , b = Vector2.from(2.0), c = Vector2.from(3.0), d = sum(array.from(a, b, c)) , plot(d.x)`
 center(vectors) 
  Finds the vector center of the array.
  Parameters:
     vectors : array, ID of the vector2 array.
  Returns: Vector2.Vector2, vector2 object.
-> usage:
`a = Vector2.from(1.0) , b = Vector2.from(2.0), c = Vector2.from(3.0), d = center(array.from(a, b, c)) , plot(d.x)`
 rotate(vectors, center, degree) 
  Rotate Array vectors around origin vector by a angle.
  Parameters:
     vectors : array, ID of the vector2 array.
     center : Vector2.Vector2       , Vector2 object. Center of the rotation.
     degree : float                 , Angle value.
  Returns: rotated points array.
-> usage:
`a = Vector2.from(1.0) , b = Vector2.from(2.0), c = Vector2.from(3.0), d = rotate(array.from(a, b, c), b, 45.0)`
 scale(vectors, center, rate) 
  Scale Array vectors based on a origin vector perspective.
  Parameters:
     vectors : array, ID of the vector2 array.
     center : Vector2.Vector2       , Vector2 object. Origin center of the transformation.
     rate : float                 , Rate to apply transformation.
  Returns: rotated points array.
-> usage:
`a = Vector2.from(1.0) , b = Vector2.from(2.0), c = Vector2.from(3.0), d = scale(array.from(a, b, c), b, 1.25)`
 move(vectors, center, rate) 
  Move Array vectors by a rate of the distance to center position (LERP).
  Parameters:
     vectors : array, ID of the vector2 array.
     center 
     rate 
  Returns: Moved points array.
-> usage:
`a = Vector2.from(1.0) , b = Vector2.from(2.0), c = Vector2.from(3.0), d = move(array.from(a, b, c), b, 1.25)`
 to_string(id, separator) 
  Reads a array of vectors into a string, of the form ` `.
  Parameters:
     id : array, ID of the vector2 array.
     separator : string separator for cell splitting.
  Returns: string Translated complex array into string.
-> usage:
`a = Vector2.from(1.0) , b = Vector2.from(2.0), c = Vector2.from(3.0), d = to_string(array.from(a, b, c))`
 to_string(id, format, separator) 
  Reads a array of vectors into a string, of the form ` `.
  Parameters:
     id : array, ID of the vector2 array.
     format : string   , Format to apply transformation.
     separator : string   , Separator for cell splitting.
  Returns: string Translated complex array into string.
-> usage:
`a = Vector2.from(1.234) , b = Vector2.from(2.23), c = Vector2.from(3.1234), d = to_string(array.from(a, b, c), "#.##")`
Segment2Library   "Segment2" 
Structure representation of a directed straight line in two dimensions from origin to target vectors.
.
reference:
graphics.stanford.edu
.
 new(origin, target) 
  Generate a new segment.
  Parameters:
     origin : Vector2 . Origin of the segment.
     target : Vector2 . Target of the segment.
  Returns: Segment2.
 new(origin_x, origin_y, target_x, target_y) 
  Generate a new segment.
  Parameters:
     origin_x : float . Origin of the segment x coordinate.
     origin_y : float . Origin of the segment y coordinate.
     target_x : float . Target of the segment x coordinate.
     target_y : float . Target of the segment y coordinate.
  Returns: Segment2.
 copy(this) 
  Copy a segment.
  Parameters:
     this : Vector2 . Segment to copy.
  Returns: Segment2.
 length_squared(this) 
  Squared length of the normalized segment vector. For comparing vectors this is computationaly lighter.
  Parameters:
     this : Segment2 . Sorce segment.
  Returns: float.
 length(this) 
  Length of the normalized segment vector.
  Parameters:
     this : Segment2 . Sorce segment.
  Returns: float.
 opposite(this) 
  Reverse the direction of the segment.
  Parameters:
     this : Segment2 . Source segment.
  Returns: Segment2.
 is_degenerate(this) 
  Segment is degenerate when origin and target are equal.
  Parameters:
     this : Segment2 . Source segment.
  Returns: bool.
 is_horizontal(this) 
  Segment is horizontal?.
  Parameters:
     this : Segment2 . Source segment.
  Returns: bool.
 is_horizontal(this, precision) 
  Segment is horizontal?.
  Parameters:
     this : Segment2 . Source segment.
     precision : float    . Limit of precision.
  Returns: bool.
 is_vertical(this) 
  Segment is vertical?.
  Parameters:
     this : Segment2 . Source segment.
  Returns: bool.
 is_vertical(this, precision) 
  Segment is vertical?.
  Parameters:
     this : Segment2 . Source segment.
     precision : float    . Limit of precision.
  Returns: bool.
 equals(this, other) 
  Tests two segments for equality (share same origin and target).
  Parameters:
     this : Segment2 . Source segment.
     other : Segment2 . Target segment.
  Returns: bool.
 nearest_to_point(this, point) 
  Find the nearest point in a segment to another point.
  Parameters:
     this : Segment2 . Source segment.
     point : Vector2 . Point to aproximate.
  Returns: Vector2.
 intersection(this, other) 
  Find the intersection vector of 2 lines.
  Parameters:
     this : Segment2 . Segment A.
     other : Segment2 . Segment B.
  Returns: Vector2.Vector2 Object.
 extend(this, at_origin, at_target) 
  Extend a segment by the percent ratio provided.
  Parameters:
     this : Segment2 . Source segment.
     at_origin : float    . Percent ratio to extend at origin vector.
     at_target : float    . Percent ratio to extend at target vector.
  Returns: Segment2.
 to_string(this) 
  Translate segment to string format `( (x,y), (x,y) )`.
  Parameters:
     this : Segment2 . Source segment.
  Returns: string.
 to_string(this, format) 
  Translate segment to string format `((x,y), (x,y))`.
  Parameters:
     this : Segment2 . Source segment.
     format : string . Format string to apply.
  Returns: string.
 to_array(this) 
  Translate segment to array format.
  Parameters:
     this : Segment2 . Source segment.
  Returns: array.
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.
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.
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.
Fixed Quantum CDVWe took the original script Cumulative delta volume from LonesomeTheBlue, here is the link: 
To understand the CDV you can watch traders reality master class about CDV.
This indicator show the ratio of vector color and the ratio of the cumulative delta volume from vector color.
First you select a date range on the chart. Then it calculate all candles in that region. Let's say there is 3 green vectors and 3 red vectors in the region, the ratio of vector color will be 50% for bull and 50% for bear vector. As for the CDV ratio, it will measure the total CDV inside green vector and total CDV inside red vector and make a ratio. But it is a little different.
I twisted the calculation for the ratio of CDV a little bit to make it more comprehensive in the table. Since it's the ratio of the CDV for the bull candles versus the bear candles, the CDV is almost always a positive number for the bull candles and almost always a negative number for the bear candle. So I calculated the bear CDV as a positive number. Formula: Bull_CDV_ratio = Bull_CDV / (Bull_CDV + Bear_CDV), Bear_CDV_ratio = -Bear_CDV / (Bull_CDV - Bear_CDV).
Note that when the bull CDV and bear CDV are both a positive number or both a negative number, the ratio percentage can be over 100% and under 0%. It means that we expect volatility.
Enjoy!
Quantum Vector AlertsIts the part 2 of Multiple Indicators 50EMA Cross Alerts.
Its more suitable for the seconds chart. Beside, you can use it in higher timeframe.
The input bars length is the sample size that the code will use to trigger all alert. 20 mean 20 bar after the current candle.
When you activate volume alert you can select an amount of volume that when volume cross it you will be notified. The volume of every bar is displayed in the screener below volume.
In the section percentage vector counting the script do the sum of the red vector and green vector and give a ratio. In bullish vector count percentage for alert, you can select the percentage difference that you want to receive an alert. If your sample have 3 red vectors and 7 green vectors you will receive an alert saying that there is an imbalance of 70% showing more green vectors.
You can select a variant of percentage vector. The variant will do a summation of volume. If 1 vector candle is the size of the 3 other vector, they will have the same ponderation.
Normal alert counting count the number of vectors in the bars length. You can count the red and green candle only or add the blue and violet.
Bullish vector count will show a notification when the number of green candle will appear on the chart in the selected length. The same process is valid for bearish vector count. For example, if you want 3 bullish candle in 20 bar. You select bars length 20 and bullish vector count 3.
These alerts are suitable to the hybrid system. Thanks to our teacher Trader Reality and to all the member that contribute to this great discord community.
FunctionGenerateRandomPointsInShapeLibrary   "FunctionGenerateRandomPointsInShape" 
Generate random vector points in geometric shape (parallelogram, triangle)
 random_parallelogram(vector_a, vector_b)  Generate random vector point in a parallelogram shape.
  Parameters:
     vector_a : float array, vector of (x, y) shape.
     vector_b : float array, vector of (x, y) shape.
  Returns: float array, vector of (x, y) shape.
 random_triangle(vector_a, vector_b)  Generate random vector point in a triangle shape.
  Parameters:
     vector_a : float array, vector of (x, y) shape.
     vector_b : float array, vector of (x, y) shape.
  Returns: float array, vector of (x, y) shape.
FunctionArrayMaxSubKadanesAlgorithmLibrary   "FunctionArrayMaxSubKadanesAlgorithm" 
Implements Kadane's maximum sum sub array algorithm.
 size(samples)  Kadanes algorithm.
  Parameters:
     samples : float array, sample data values.
  Returns: float.
 indices(samples)  Kadane's algorithm with indices.
  Parameters:
     samples : float array, sample data values.
  Returns: tuple with format  .
Vector2OperationsLibrary   "Vector2Operations" 
functions to handle vector2 operations.
 math_fractional(_value)  computes the fractional part of the argument value.
	Parameters:
 	 _value : float, value to compute. 
	Returns: float, fractional part.
 atan2(_a)  Approximation to atan2 calculation, arc tangent of y/ x in the range   radians.
	Parameters:
 	 _a : vector2 in the form of a array  . 
	Returns: float, value with angle in radians. (negative if quadrante 3 or 4)
 set_x(_a, _value)  Set the x value of vector _a.
	Parameters:
 	 _a : vector2 in the form of a array  .
	 _value : value to replace x value of _a. 
	Returns: void Modifies vector _a.
 set_y(_a, _value)  Set the y value of vector _a.
	Parameters:
 	 _a : vector in the form of a array  .
	 _value : value to replace y value of _a. 
	Returns: void Modifies vector _a.
 get_x(_a)  Get the x value of vector _a.
	Parameters:
 	 _a : vector in the form of a array  . 
	Returns: float, x value of the vector _a.
 get_y(_a)  Get the y value of vector _a.
	Parameters:
 	 _a : vector in the form of a array  . 
	Returns: float, y value of the vector _a.
 get_xy(_a)  Return the tuple of vector _a in the form  
	Parameters:
 	 _a : vector2 in the form of a array  . 
	Returns:  
 length_squared(_a)  Length of vector _a in the form.  , for comparing vectors this is computationaly lighter.
	Parameters:
 	 _a : vector in the form of a array  . 
	Returns: float, squared length of vector.
 length(_a)  Magnitude of vector _a in the form.  
	Parameters:
 	 _a : vector in the form of a array  . 
	Returns: float, Squared length of vector.
 vmin(_a)  Lowest element of vector.
	Parameters:
 	 _a : vector in the form of a array  . 
	Returns: float
 vmax(_a)  Highest element of vector.
	Parameters:
 	 _a : vector in the form of a array  . 
	Returns: float
 from(_value)  Assigns value to a new vector x,y elements.
	Parameters:
 	 _value : x and y value of the vector. optional. 
	Returns: float  vector.
 new(_x, _y)  Creates a prototype array to handle vectors.
	Parameters:
 	 _x : float, x value of the vector. optional.
	 _y : float, y number of the vector. optional. 
	Returns: float  vector.
 down()  Vector in the form  .	Returns: float  vector.
 left()  Vector in the form  .	Returns: float  vector.
 one()  Vector in the form  .	Returns: float  vector.
 right()  Vector in the form  .	Returns: float  vector
 up()  Vector in the form  .	Returns: float  vector
 zero()  Vector in the form  .	Returns: float  vector
 add(_a, _b)  Adds vector _b to _a, in the form
 .
	Parameters:
 	 _a : vector in the form of a array  .
	 _b : vector in the form of a array  . 
	Returns: 
 subtract(_a, _b)  Subtract vector _b from _a, in the form 
 .
	Parameters:
 	 _a : vector in the form of a array  .
	 _b : vector in the form of a array  . 
	Returns: 
 multiply(_a, _b)  Multiply vector _a with _b, in the form 
 
	Parameters:
 	 _a : vector in the form of a array  .
	 _b : vector in the form of a array  . 
	Returns: 
 divide(_a, _b)  Divide vector _a with _b, in the form 
 
	Parameters:
 	 _a : vector in the form of a array  .
	 _b : vector in the form of a array  . 
	Returns: 
 negate(_a)  Negative of vector _a, in the form  
	Parameters:
 	 _a : vector in the form of a array  . 
	Returns: 
 perp(_a)  Perpendicular Vector of _a.
	Parameters:
 	 _a : vector in the form of a array  . 
	Returns: 
 vfloor(_a)  Compute the floor of argument vector _a.
	Parameters:
 	 _a : vector in the form of a array  . 
	Returns: 
 fractional(_a)  Compute the fractional part of the elements from vector _a.
	Parameters:
 	 _a : vector in the form of a array  . 
	Returns: 
 vsin(_a)  Compute the sine of argument vector _a.
	Parameters:
 	 _a : vector in the form of a array  . 
	Returns: 
 equals(_a, _b)  Compares two vectors
	Parameters:
 	 _a : vector in the form of a array  .
	 _b : vector in the form of a array  . 
	Returns: boolean value representing the equality.
 dot(_a, _b)  Dot product of 2 vectors, in the form  
	Parameters:
 	 _a : vector in the form of a array  .
	 _b : vector in the form of a array  . 
	Returns: float
 cross_product(_a, _b)  cross product of 2 vectors, in the form  
	Parameters:
 	 _a : vector in the form of a array  .
	 _b : vector in the form of a array  . 
	Returns: float
 scale(_a, _scalar)  Multiply a vector by a scalar.
	Parameters:
 	 _a : vector in the form of a array  .
	 _scalar : value to multiply vector elements by. 
	Returns: float  vector
 normalize(_a)  Vector _a normalized with a magnitude of 1, in the form.  
	Parameters:
 	 _a : vector in the form of a array  . 
	Returns: float  vector
 rescale(_a)  Rescale a vector to a new Magnitude.
	Parameters:
 	 _a : vector in the form of a array  . 
	Returns: 
 rotate(_a, _radians)  Rotates vector _a by angle value
	Parameters:
 	 _a : vector in the form of a array  .
	 _radians : Angle value. 
	Returns: 
 rotate_degree(_a, _degree)  Rotates vector _a by angle value
	Parameters:
 	 _a : vector in the form of a array  .
	 _degree : Angle value. 
	Returns: 
 rotate_around(_center, _target, _degree)  Rotates vector _target around _origin by angle value
	Parameters:
 	 _center : vector in the form of a array  .
	 _target : vector in the form of a array  .
	 _degree : Angle value. 
	Returns: 
 vceil(_a, _digits)  Ceils vector _a
	Parameters:
 	 _a : vector in the form of a array  .
	 _digits : digits to use as ceiling. 
	Returns: 
 vpow(_a)  Raise both vector elements by a exponent.
	Parameters:
 	 _a : vector in the form of a array  . 
	Returns: 
 distance(_a, _b)  vector distance between 2 vectors.
	Parameters:
 	 _a : vector in the form of a array  .
	 _b : vector in the form of a array  . 
	Returns: float, distance.
 project(_a, _axis)  Project a vector onto another.
	Parameters:
 	 _a : vector in the form of a array  .
	 _axis : float  vector2 
	Returns: float  vector
 projectN(_a, _axis)  Project a vector onto a vector of unit length.
	Parameters:
 	 _a : vector in the form of a array  .
	 _axis : vector in the form of a array  . 
	Returns: float  vector
 reflect(_a, _b)  Reflect a vector on another.
	Parameters:
 	 _a : vector in the form of a array  .
	 _b : vector in the form of a array  . 
	Returns: float  vector
 reflectN(_a, _b)  Reflect a vector to a arbitrary axis.
	Parameters:
 	 _a : vector in the form of a array  .
	 _b : vector in the form of a array  . 
	Returns: float  vector
 angle(_a)  Angle in radians of a vector.
	Parameters:
 	 _a : vector in the form of a array  . 
	Returns: float
 angle_unsigned(_a, _b)  unsigned degree angle between 0 and +180 by given two vectors.
	Parameters:
 	 _a : vector in the form of a array  .
	 _b : vector in the form of a array  . 
	Returns: float
 angle_signed(_a, _b)  Signed degree angle between -180 and +180 by given two vectors.
	Parameters:
 	 _a : vector in the form of a array  .
	 _b : vector in the form of a array  . 
	Returns: float
 angle_360(_a, _b)  Degree angle between 0 and 360 by given two vectors
	Parameters:
 	 _a : vector in the form of a array  .
	 _b : vector in the form of a array  . 
	Returns: float
 clamp(_a, _vmin, _vmax)  Restricts a vector between a min and max value.
	Parameters:
 	 _a : vector in the form of a array  .
	 _vmin : vector in the form of a array  .
	 _vmax : vector in the form of a array  . 
	Returns: float  vector
 lerp(_a, _b, _rate_of_move)  Linearly interpolates between vectors a and b by _rate_of_move.
	Parameters:
 	 _a : vector in the form of a array  .
	 _b : vector in the form of a array  .
	 _rate_of_move : float value between (a:-infinity -> b:1.0), negative values will move away from b. 
	Returns: vector in the form of a array  
 herp(_a, _b, _rate_of_move)  Hermite curve interpolation between vectors a and b by _rate_of_move.
	Parameters:
 	 _a : vector in the form of a array  .
	 _b : vector in the form of a array  .
	 _rate_of_move : float value between (a-infinity -> b1.0), negative values will move away from b. 
	Returns: vector in the form of a array  
 area_triangle(_a, _b, _c)  Find the area in a triangle of vectors.
	Parameters:
 	 _a : vector in the form of a array  .
	 _b : vector in the form of a array  .
	 _c : vector in the form of a array  . 
	Returns: float
 to_string(_a)  Converts vector _a to a string format, in the form "(x, y)"
	Parameters:
 	 _a : vector in the form of a array  . 
	Returns: string in "(x, y)" format
 vrandom(_max)  2D random value
	Parameters:
 	 _max : float  vector, vector upper bound 
	Returns: vector in the form of a array  
 noise(_a)  2D Noise based on Morgan McGuire @morgan3d
thebookofshaders.com
www.shadertoy.com
	Parameters:
 	 _a : vector in the form of a array  . 
	Returns: vector in the form of a array  
 array_new(_size, _initial_vector)  Prototype to initialize a array of vectors.
	Parameters:
 	 _size : size of the array.
	 _initial_vector : vector to be used as default value, in the form of array  . 
	Returns: _vector_array complex Array in the form of a array  
 array_size(_id)  number of   vector elements in array.
	Parameters:
 	 _id : ID of the array. 
	Returns: int
 array_get(_id, _index)  Get the vector in a array, in the form of a array  
	Parameters:
 	 _id : ID of the array.
	 _index : Index of the vector. 
	Returns: vector in the form of a array  
 array_set(_id, _index, _a)  Sets the values vector in a array.
	Parameters:
 	 _id : ID of the array.
	 _index : Index of the vector.
	 _a : vector, in the form  . 
	Returns: Void, updates array _id.
 array_push(_id, _a)  inserts the vector at the end of array.
	Parameters:
 	 _id : ID of the array.
	 _a : vector, in the form  . 
	Returns: Void, updates array _id.
 array_unshift(_id, _a)  inserts the vector at the begining of array.
	Parameters:
 	 _id : ID of the array.
	 _a : vector, in the form  . 
	Returns: Void, updates array _id.
 array_pop(_id, _a)  removes the last vector of array and returns it.
	Parameters:
 	 _id : ID of the array.
	 _a : vector, in the form  . 
	Returns: vector2, updates array _id.
 array_shift(_id, _a)  removes the first vector of array and returns it.
	Parameters:
 	 _id : ID of the array.
	 _a : vector, in the form  . 
	Returns: vector2, updates array _id.
 array_sum(_id)  Total sum of all vectors.
	Parameters:
 	 _id : ID of the array. 
	Returns: vector in the form of a array  
 array_center(_id)  Finds the vector center of the array.
	Parameters:
 	 _id : ID of the array. 
	Returns: vector in the form of a array  
 array_rotate_points(_id)  Rotate Array vectors around origin vector by a angle.
	Parameters:
 	 _id : ID of the array. 
	Returns: rotated points array.
 array_scale_points(_id)  Scale Array vectors based on a origin vector perspective.
	Parameters:
 	 _id : ID of the array. 
	Returns: rotated points array.
 array_tostring(_id, _separator)  Reads a array of vectors into a string, of the form " ""
	Parameters:
 	 _id : ID of the array.
	 _separator : string separator for cell splitting. 
	Returns: string Translated complex array into string.
 line_new(_a, _b)  2 vector line in the form.  
	Parameters:
 	 _a : vector, in the form  .
	 _b : vector, in the form  . 
	Returns: 
 line_get_a(_line)  Start vector of a line.
	Parameters:
 	 _line : vector4, in the form  . 
	Returns: float  vector2
 line_get_b(_line)  End vector of a line.
	Parameters:
 	 _line : vector4, in the form  . 
	Returns: float  vector2
 line_intersect(_line1, _line2)  Find the intersection vector of 2 lines.
	Parameters:
 	 _line1 : line of 2 vectors in the form of a array  .
	 _line2 : line of 2 vectors in the form of a array  . 
	Returns: vector in the form of a array  .
 draw_line(_line, _xloc, _extend, _color, _style, _width)  Draws a line using line prototype.
	Parameters:
 	 _line : vector4, in the form  .
	 _xloc : string
	 _extend : string
	 _color : color
	 _style : string
	 _width : int 
	Returns: draw line object
 draw_triangle(_v1, _v2, _v3, _xloc, _color, _style, _width)  Draws a triangle using line prototype.
	Parameters:
 	 _v1 : vector4, in the form  .
	 _v2 : vector4, in the form  .
	 _v3 : vector4, in the form  .
	 _xloc : string
	 _color : color
	 _style : string
	 _width : int 
	Returns: tuple with 3 line objects.  
 draw_rect(_v1, _size, _angle, _xloc, _color, _style, _width)  Draws a square using vector2 line prototype.
	Parameters:
 	 _v1 : vector4, in the form  .
	 _size : float 
	 _angle : float 
	 _xloc : string
	 _color : color
	 _style : string
	 _width : int 
	Returns: tuple with 3 line objects. 
Cosmic VectorThis indicator will copy a moving average's plot and show whether its angle vector is negative or positive. In other words, it will show when the moving average starts to "accelerate" / "decelerate".
 To use: 
 
  Add any moving average indicator to the chart
  Click that indicator's More > Add Indicator on (MA)
  Select the  Cosmic Angle Gravity  indicator
Scaled Normalized Vector Strategy, ver.4.1This modification of the Scaled Normalized Vector Strategy uses trailing stops and is optimized for lower TFs.
Scaled Normalized Vector Strategy, ver.4This is a modification of my Scaled Normalized Vector Strategy.
This mod features some activation functions. Performance remains high. The repainting problem should be tested out.
Scaled Normalized Vector StrategyThis is a scaled Normalized Vector Strategy with a Karobein Oscillator 
Original: Drkhodakarami (www.tradingview.com) 
Repainting: in general there two types of repainting: 
* when the last candle is constantly being redrawn 
* when the indicator draws a different configuration after it has been deactivated/reactivated, i.e. refreshed. 
The former is a natural behaviour, which presents a constant source of frustration, when a signal directly depends on the current market situation and can be overcome with various indirect techniques like divergence. 
The latter suggests a flaw in the indicator design. 
Unfortunately, the Normalized Vector Strategy is repainting in the latter sense, although being really promising. Would be nice if our community suggests a solution to this problem )) 
As it is this strat should be refreshed each time a decision is being taken. 
This strat consistently performs with high accuracy, showing up to 96% scores. Here are some of the best parameters: 
TF Lookback Performance (ca.) 
1m 13 92% 
3m 34 92% 
5m 85 92% 
15m 210 90% 
30m 360 89% 
1H 1440, 720 94%, 87% 
The Karobein Oscillator has an intrinsic sinusoidal behaviour that helps in determining direction and timing. It does not repaint. 
Original: alexgrover (www.tradingview.com)
[RS]Function - Minkowski_distancecopy pasted description..
Minkowski distance is a metric in a normed vector space. Minkowski distance is used for distance similarity of vector. Given two or more vectors, find distance similarity of these vectors.






















