Alerts█  OVERVIEW 
This library is a Pine Script™ programmers tool that provides functions to simplify the creation of compound conditions and alert messages. With these functions, scripts can use comma-separated "string" lists to specify condition groups from arbitrarily large "bool"  arrays , offering a convenient way to provide highly flexible alert creation to script users without requiring numerous inputs in the "Settings/Inputs" menu. 
 █  CONCEPTS 
 Compound conditions 
 Compound conditions  are essentially groups of two or more conditions, where each required condition must occur to produce a `true` result. Traders often combine conditions, including signals from various indicators, to drive and reinforce trade decisions. Similarly, programmers use compound conditions in logical operations to create scripts that respond dynamically to groups of events. 
 Condition conundrum 
Providing flexible condition combinations to script users for signals and alerts often poses a significant challenge:  input complexity . Conventionally, such flexibility comes at the cost of an extensive list of separate inputs for toggling individual conditions and customizing their properties, often resulting in complicated input menus that are difficult for users to navigate effectively. Furthermore, managing all those inputs usually entails tediously handling many extra variables and logical expressions, making such projects more complex for programmers. 
 Condensing complexity 
This library introduces a technique using parsed strings to reference groups of elements from "bool"  arrays , helping to simplify and streamline the construction of compound conditions and alert messages. With this approach, programmers can provide one or more "string" inputs in their scripts where users can  list numbers  corresponding to the conditions they want to combine. 
For example, suppose you have a script that creates alert triggers based on a combination of up to 20 individual conditions, and you want to make inputs for users to choose which conditions to combine. Instead of creating 20 separate checkboxes in the "Settings/Inputs" tab and manually adding associated logic for each one, you can store the conditional values in arrays, make one or more "string" inputs that accept values listing the array item locations (e.g., "1,4,8,11"), and then pass the inputs to these functions to determine the compound conditions formed by the specified groups. 
This approach condenses the input space, improving navigability and utility. Additionally, it helps provide high-level simplicity to complex conditional code, making it easier to maintain and expand over time. 
 █  CALCULATIONS AND USE 
This library contains three functions for evaluating compound conditions: `getCompoundConditon()`, `getCompoundConditionsArray()`, and `compoundAlertMessage()`. Each function has two overloads that evaluate compound conditions based on groups of items from one or two "bool"  arrays . The sections below explain the functions' calculations and how to use them. 
 Referencing conditions using "string" index lists 
Each function processes "string" values containing comma-separated lists of  numerals  representing the  indices  of the "bool" array items to use in its calculations (e.g., "4, 8, 12"). The functions split each supplied "string" list by its commas, then iterate over those specified indices in the "bool" arrays to determine each group's combined `true` or `false` state. 
For convenience, the numbers in the "string" lists can represent  zero-based  indices (where the first item is at index 0) or  one-based  indices (where the first item is at index 1), depending on the function's `zeroIndex` parameter. For example, an index list of "0, 2, 4" with a `zeroIndex` value of `true` specifies that the condition group uses the  first ,  third , and  fifth  "bool" values in the array, ignoring all others. If the `zeroIndex` value is `false`, the list "1, 3, 5" also refers to those same elements.
Zero-based indexing is convenient for programmers because Pine arrays always use this index format. However, one-based indexing is often more convenient and familiar for script users, especially non-programmers.
 Evaluating one or many condition groups 
The `getCompoundCondition()` function evaluates  singular  condition groups determined by its `indexList` parameter, returning `true` values whenever the specified array elements are `true`. This function is helpful when a script has to evaluate specific groups of conditions and does not require many combinations. 
In contrast, the `getCompoundConditionsArray()` function can evaluate  numerous  condition groups, one for each "string" included in its `indexLists` argument. It returns arrays containing `true` or `false` states for each listed group. This function is helpful when a script requires multiple condition combinations in additional calculations or logic. 
The `compoundAlertMessage()` function is similar to the `getCompoundConditionsArray()` function. It also evaluates a separate compound condition group for each "string" in its `indexLists` array, but it returns "string" values containing the  marker (name)  of each group with a `true` result. You can use these returned values as the `message` argument in  alert()  calls, display them in  labels  and other drawing objects, or even use them in additional calculations and logic.  
 Directional condition pairs 
The first overload of each function operates on a single `conditions` array, returning values representing one or more compound conditions from groups in that array. These functions are ideal for general-purpose condition groups that may or may not represent direction information. 
The second overloads accept  two  arrays representing upward and downward conditions separately: `upConditions` and `downConditions`. These overloads evaluate opposing directional conditions in  pairs  (e.g., RSI is above/below a level) and return upward and downward condition information separately in a  tuple . 
When using the directional overloads, ensure the `upConditions` and `downConditions` arrays are the same size, with the intended condition pairs at the  same indices . For instance, if you have a specific upward RSI condition's value at the first index in the `upConditions` array, include the opposing downward RSI condition's value at that same index in the `downConditions` array. If a condition can apply to  both  directions (e.g., rising volume), include its value at the same index in both arrays. 
 Group markers 
To simplify the generation of informative alert messages, the `compoundAlertMessage()` function assigns "string"  markers  to each condition group, where "marker" refers to the group's name. The `groupMarkers` parameter allows you to assign custom markers to each listed group. If not specified, the function generates default group markers in the format "M", where "M" is short for "Marker" and "" represents the  group number  starting from 1. For example, the default marker for the first group specified in the `indexLists` array is "M1". 
The function's returned "string" values contain a comma-separated list with markers for each activated condition group (e.g., "M1, M4"). The function's second overload, which processes directional pairs of conditions, also appends  extra  characters to the markers to signify the direction. The default for upward groups is "▲" (e.g., "M1▲") and the default for downward ones is "▼" (e.g., "M1▼"). You can customize these appended characters with the `upChar` and `downChar` parameters. 
 Designing customizable alerts 
We recommend following these primary steps when using this library to design flexible alerts for script users:
 1. Create text inputs for users to specify comma-separated lists of conditions with the  input.string()  or  input.text_area()  functions, and then collect all the input values in a "string"  array . Note that each separate "string" in the array will represent a  distinct  condition group. 
 2. Create arrays of "bool" values representing the possible conditions to choose from. If your script will process  pairs  of upward and downward conditions, ensure the related elements in the arrays align at the same indices. 
 3. Call `compoundAlertMessage()` using the arrays from steps 1 and 2 as arguments to get the alert message text. If your script will use the text for alerts only,  not  historical display or calculation purposes, the call is necessary only on  realtime bars .
 4. Pass the calculated "string" values as the `message` argument in  alert()  calls. We recommend calling the function only when the "string" is  not empty  (i.e., `messageText != ""`). To avoid repainting alerts on open bars, use  barstate.isconfirmed  in the condition to allow alert triggers only on each bar's  close .  
 5. Test the alerts. Open the "Create Alert" dialog box and select  "Any alert() function call"  in the "Condition" field. It is also helpful to inspect the strings with  Pine Logs .
NOTE: Because the techniques in this library use lists of numbers to specify conditions, we recommend including a  tooltip  for the "string" inputs that lists the available numbers and the conditions they represent. This tooltip provides a  legend  for script users, making it simple to understand and utilize. To create the tooltip, declare a "const string" listing the options and pass it to the `input.*()` call's `tooltip` parameter. See the library's example code for a simple demonstration. 
 █  EXAMPLE CODE 
This library's example code demonstrates one possible way to offer a selection of compound conditions with "string" inputs and these functions. It uses three  input.string()  calls, each accepting a comma-separated list representing a distinct condition group. The title of each input represents the default  group marker  that appears in the label and alert text. The code collects these three input values in a `conditionGroups` array for use with the `compoundAlertMessage()` function.
In this code, we created two "bool" arrays to store six arbitrary condition pairs for demonstration:
 1.  Bar up/down:  The bar's  close  price must be above the  open  price for upward conditions, and vice versa for downward conditions. 
 2.  Fast EMA above/below slow EMA : The 9-period Exponential Moving Average of  close  prices must be above the 21-period EMA for upward conditions, and vice versa for downward conditions. 
 3.  Volume above average : The bar's  volume  must exceed its 20-bar average to activate an upward or downward condition. 
 4.  Volume rising : The  volume  must exceed that of the previous bar to activate an upward or downward condition. 
 5.  RSI trending up/down : The 14-period Relative Strength Index of  close  prices must be between 50 and 70 for upward conditions, and between 30 and 50 for downward conditions. 
 6.  High volatility : The 7-period Average True Range (ATR) must be above the 40-period ATR to activate an upward or downward condition.  
We included a `tooltip` argument for the third  input.string()  call that displays the condition numbers and titles, where 1 is the first condition number. 
The `bullConditions` array contains the `true` or `false` states of all individual upward conditions, and the `bearConditions` array contains all downward condition states. For the conditions that filter either direction because they are non-directional, such as "High volatility", both arrays contain the condition's `true` or `false` value at the same index. If you use these conditions alone, they activate upward and downward alert conditions simultaneously. 
The example code calls `compoundAlertMessage()` using the `bullConditions`, `bearConditions`, and `conditionGroups` arrays to create a  tuple  of strings containing the directional markers for each activated group. On  confirmed  bars, it displays non-empty strings in  labels  and uses them in  alert()  calls. For the text shown in the labels, we used  str.replace_all()  to replace commas with newline characters, aligning the markers vertically in the display.  
 Look first. Then leap. 
 █  FUNCTIONS 
This library exports the following functions:
 getCompoundCondition(conditions, indexList, minRequired, zeroIndex) 
  (Overload 1 of 2) Determines a compound condition based on selected elements from a `conditions` array.
  Parameters:
     conditions (array) : (array) An array containing the possible "bool" values to use in the compound condition.
     indexList (string) : (series string) A "string" containing a comma-separated list of whole numbers representing the group of `conditions` elements to use in the compound condition. For example, if the value is `"0, 2, 4"`, and `minRequired` is `na`, the function returns `true` only if the `conditions` elements at index 0, 2, and 4 are all `true`. If the value is an empty "string", the function returns `false`.
     minRequired (int) : (series int) Optional. Determines the minimum number of selected conditions required to activate the compound condition. For example, if the value is 2, the function returns `true` if at least two of the specified `conditions` elements are `true`. If the value is `na`, the function returns `true` only if all specified elements are `true`. The default is `na`.
     zeroIndex (bool) : (series bool) Optional. Specifies whether the `indexList` represents zero-based array indices. If `true`, a value of "0" in the list represents the first array index. If `false`, a `value` of "1" represents the first index. The default is `true`.
  Returns: (bool) `true` if `conditions` elements in the group specified by the `indexList` are `true`, `false` otherwise.
 getCompoundCondition(upConditions, downConditions, indexList, minRequired, allowUp, allowDown, zeroIndex) 
  (Overload 2 of 2) Determines upward and downward compound conditions based on selected elements from `upConditions` and `downConditions` arrays.
  Parameters:
     upConditions (array) : (array) An array containing the possible "bool" values to use in the upward compound condition.
     downConditions (array) : (array) An array containing the possible "bool" values to use in the downward compound condition.
     indexList (string) : (series string) A "string" containing a comma-separated list of whole numbers representing the `upConditions` and `downConditions` elements to use in the compound conditions. For example, if the value is `"0, 2, 4"` and `minRequired` is `na`, the function returns `true` for the first value only if the `upConditions` elements at index 0, 2, and 4 are all `true`. If the value is an empty "string", the function returns ` `.
     minRequired (int) : (series int) Optional. Determines the minimum number of selected conditions required to activate either compound condition. For example, if the value is 2, the function returns `true` for its first value if at least two of the specified `upConditions` elements are `true`. If the value is `na`, the function returns `true` only if all specified elements are `true`. The default is `na`.
     allowUp (bool) : (series bool) Optional. Controls whether the function considers upward compound conditions. If `false`, the function ignores the `upConditions` array, and the first item in the returned tuple is `false`. The default is `true`.
     allowDown (bool) : (series bool) Optional. Controls whether the function considers downward compound conditions. If `false`, the function ignores the `downConditions` array, and the second item in the returned tuple is `false`. The default is `true`.
     zeroIndex (bool) : (series bool) Optional. Specifies whether the `indexList` represents zero-based array indices. If `true`, a value of "0" in the list represents the first array index. If `false`, a value of "1" represents the first index. The default is `true`.
  Returns: ( ) A tuple containing two "bool" values representing the upward and downward compound condition states, respectively.
 getCompoundConditionsArray(conditions, indexLists, zeroIndex) 
  (Overload 1 of 2) Creates an array of "bool" values representing compound conditions formed by selected elements from a `conditions` array.
  Parameters:
     conditions (array) : (array) An array containing the possible "bool" values to use in each compound condition.
     indexLists (array) : (array) An array of strings containing comma-separated lists of whole numbers representing the `conditions` elements to use in each compound condition. For example, if an item is `"0, 2, 4"`, the corresponding item in the returned array is `true` only if the `conditions` elements at index 0, 2, and 4 are all `true`. If an item is an empty "string", the item in the returned array is `false`.
     zeroIndex (bool) : (series bool) Optional. Specifies whether the "string" lists in the `indexLists` represent zero-based array indices. If `true`, a value of "0" in a list represents the first array index. If `false`, a value of "1" represents the first index. The default is `true`.
  Returns: (array) An array of "bool" values representing compound condition states for each condition group. An item in the array is `true` only if all the `conditions` elements specified by the corresponding `indexLists` item are `true`. Otherwise, the item is `false`.
 getCompoundConditionsArray(upConditions, downConditions, indexLists, allowUp, allowDown, zeroIndex) 
  (Overload 2 of 2) Creates two arrays of "bool" values representing compound upward and
downward conditions formed by selected elements from `upConditions` and `downConditions` arrays.
  Parameters:
     upConditions (array) : (array) An array containing the possible "bool" values to use in each upward compound condition.
     downConditions (array) : (array) An array containing the possible "bool" values to use in each downward compound condition.
     indexLists (array) : (array) An array of strings containing comma-separated lists of whole numbers representing the `upConditions` and `downConditions` elements to use in each compound condition. For example, if an item is `"0, 2, 4"`, the corresponding item in the first returned array is `true` only if the `upConditions` elements at index 0, 2, and 4 are all `true`. If an item is an empty "string", the items in both returned arrays are `false`.
     allowUp (bool) : (series bool) Optional. Controls whether the function considers upward compound conditions. If `false`, the function ignores the `upConditions` array, and all elements in the first returned array are `false`. The default is `true`.
     allowDown (bool) : (series bool) Optional. Controls whether the function considers downward compound conditions. If `false`, the function ignores the `downConditions` array, and all elements in the second returned array are `false`. The default is `true`.
     zeroIndex (bool) : (series bool) Optional. Specifies whether the "string" lists in the `indexLists` represent zero-based array indices. If `true`, a value of "0" in a list represents the first array index. If `false`, a value of "1" represents the first index. The default is `true`.
  Returns: ( ) A tuple containing two "bool" arrays:
- The first array contains values representing upward compound condition states determined using the `upConditions`.
- The second array contains values representing downward compound condition states determined using the `downConditions`.
 compoundAlertMessage(conditions, indexLists, zeroIndex, groupMarkers) 
  (Overload 1 of 2) Creates a "string" message containing a comma-separated list of markers representing active compound conditions formed by specified element groups from a `conditions` array.
  Parameters:
     conditions (array) : (array) An array containing the possible "bool" values to use in each compound condition.
     indexLists (array) : (array) An array of strings containing comma-separated lists of whole numbers representing the `conditions` elements to use in each compound condition. For example, if an item is `"0, 2, 4"`, the corresponding marker for that item appears in the returned "string" only if the `conditions` elements at index 0, 2, and 4 are all `true`.
     zeroIndex (bool) : (series bool) Optional. Specifies whether the "string" lists in the `indexLists` represent zero-based array indices. If `true`, a value of "0" in a list represents the first array index. If `false`, a value of "1" represents the first index. The default is `true`.
     groupMarkers (array) : (array) Optional. If specified, sets the marker (name) for each condition group specified in the `indexLists` array. If `na`, the function uses the format `"M"` for each group, where "M" is short for "Marker" and `` represents the one-based index for the group (e.g., the marker for the first listed group is "M1"). The default is `na`.
  Returns: (string) A "string" containing a list of markers corresponding to each active compound condition.
 compoundAlertMessage(upConditions, downConditions, indexLists, allowUp, allowDown, zeroIndex, groupMarkers, upChar, downChar) 
  (Overload 2 of 2) Creates two "string" messages containing comma-separated lists of markers representing active upward and downward compound conditions formed by specified element groups from `upConditions` and `downConditions` arrays. 
  Parameters:
     upConditions (array)  An array containing the possible "bool" values to use in each upward compound condition.
     downConditions (array)  An array containing the possible "bool" values to use in each downward compound condition.
     indexLists (array)  An array of strings containing comma-separated lists of whole numbers representing the `upConditions` and `downConditions` element groups to use in each compound condition. For example, if an item is `"0, 2, 4"`, the corresponding group marker for that item appears in the first returned "string" only if the `upConditions` elements at index 0, 2, and 4 are all `true`.
     allowUp (bool)  Optional. Controls whether the function considers upward compound conditions. If `false`, the function ignores the `upConditions` array and returns an empty "string" for the first tuple element. The default is `true`.
     allowDown (bool)  Optional. Controls whether the function considers downward compound conditions. If `false`, the function ignores the `downConditions` array and returns an empty "string" for the second tuple element. The default is `true`.
     zeroIndex (bool)  Optional. Specifies whether the "string" lists in the `indexLists` represent zero-based array indices. If `true`, a value of "0" in a list represents the first array index. If `false`, a value of "1" represents the first index. The default is `true`.
     groupMarkers (array)  Optional. If specified, sets the name (marker) of each condition group specified in the `indexLists` array. If `na`, the function uses the format `"M"` for each group, where "M" is short for "Marker" and `` represents the one-based index for the group (e.g., the marker for the first listed group is "M1"). The default is `na`.
     upChar (string)  Optional. A "string" appended to all group markers for upward conditions to signify direction. The default is "▲".
     downChar (string)  Optional. A "string" appended to all group markers for downward conditions to signify direction. The default is "▼".
  Returns: ( ): A tuple of "string" values containing lists of markers corresponding to active upward and downward compound conditions, respectively. 
Arrays
PitchforkLibrary   "Pitchfork" 
Pitchfork class
 method tostring(this) 
  Converts PitchforkTypes/Fork object to string representation
  Namespace types: Fork
  Parameters:
     this (Fork) : PitchforkTypes/Fork object
  Returns: string representation of PitchforkTypes/Fork
 method tostring(this) 
  Converts Array of PitchforkTypes/Fork object to string representation
  Namespace types: array
  Parameters:
     this (array) : Array of PitchforkTypes/Fork object
  Returns: string representation of PitchforkTypes/Fork array
 method tostring(this, sortKeys, sortOrder) 
  Converts PitchforkTypes/PitchforkProperties object to string representation
  Namespace types: PitchforkProperties
  Parameters:
     this (PitchforkProperties) : PitchforkTypes/PitchforkProperties object
     sortKeys (bool) : If set to true, string output is sorted by keys.
     sortOrder (int) : Applicable only if sortKeys is set to true. Positive number will sort them in ascending order whreas negative numer will sort them in descending order. Passing 0 will not sort the keys
  Returns: string representation of PitchforkTypes/PitchforkProperties
 method tostring(this, sortKeys, sortOrder) 
  Converts PitchforkTypes/PitchforkDrawingProperties object to string representation
  Namespace types: PitchforkDrawingProperties
  Parameters:
     this (PitchforkDrawingProperties) : PitchforkTypes/PitchforkDrawingProperties object
     sortKeys (bool) : If set to true, string output is sorted by keys.
     sortOrder (int) : Applicable only if sortKeys is set to true. Positive number will sort them in ascending order whreas negative numer will sort them in descending order. Passing 0 will not sort the keys
  Returns: string representation of PitchforkTypes/PitchforkDrawingProperties
 method tostring(this, sortKeys, sortOrder) 
  Converts PitchforkTypes/Pitchfork object to string representation
  Namespace types: Pitchfork
  Parameters:
     this (Pitchfork) : PitchforkTypes/Pitchfork object
     sortKeys (bool) : If set to true, string output is sorted by keys.
     sortOrder (int) : Applicable only if sortKeys is set to true. Positive number will sort them in ascending order whreas negative numer will sort them in descending order. Passing 0 will not sort the keys
  Returns: string representation of PitchforkTypes/Pitchfork
 method createDrawing(this) 
  Creates PitchforkTypes/PitchforkDrawing from PitchforkTypes/Pitchfork object
  Namespace types: Pitchfork
  Parameters:
     this (Pitchfork) : PitchforkTypes/Pitchfork object
  Returns: PitchforkTypes/PitchforkDrawing object created
 method createDrawing(this) 
  Creates PitchforkTypes/PitchforkDrawing array from PitchforkTypes/Pitchfork array of objects
  Namespace types: array
  Parameters:
     this (array) : array of PitchforkTypes/Pitchfork object
  Returns: array of PitchforkTypes/PitchforkDrawing object created
 method draw(this) 
  draws from PitchforkTypes/PitchforkDrawing object
  Namespace types: PitchforkDrawing
  Parameters:
     this (PitchforkDrawing) : PitchforkTypes/PitchforkDrawing object
  Returns: PitchforkTypes/PitchforkDrawing object drawn
 method delete(this) 
  deletes PitchforkTypes/PitchforkDrawing object
  Namespace types: PitchforkDrawing
  Parameters:
     this (PitchforkDrawing) : PitchforkTypes/PitchforkDrawing object
  Returns: PitchforkTypes/PitchforkDrawing object deleted
 method delete(this) 
  deletes underlying drawing of PitchforkTypes/Pitchfork object
  Namespace types: Pitchfork
  Parameters:
     this (Pitchfork) : PitchforkTypes/Pitchfork object
  Returns: PitchforkTypes/Pitchfork object deleted
 method delete(this) 
  deletes array of PitchforkTypes/PitchforkDrawing objects
  Namespace types: array
  Parameters:
     this (array) : Array of PitchforkTypes/PitchforkDrawing object
  Returns: Array of PitchforkTypes/PitchforkDrawing object deleted
 method delete(this) 
  deletes underlying drawing in array of PitchforkTypes/Pitchfork objects
  Namespace types: array
  Parameters:
     this (array) : Array of PitchforkTypes/Pitchfork object
  Returns: Array of PitchforkTypes/Pitchfork object deleted
 method clear(this) 
  deletes array of PitchforkTypes/PitchforkDrawing objects and clears the array
  Namespace types: array
  Parameters:
     this (array) : Array of PitchforkTypes/PitchforkDrawing object
  Returns: void
 method clear(this) 
  deletes array of PitchforkTypes/Pitchfork objects and clears the array
  Namespace types: array
  Parameters:
     this (array) : Array of Pitchfork/Pitchfork object
  Returns: void
 PitchforkDrawingProperties 
  Pitchfork Drawing Properties object
  Fields:
     extend (series bool) : If set to true, forks are extended towards right. Default is true
     fill (series bool) : Fill forklines with transparent color. Default is true
     fillTransparency (series int) : Transparency at which fills are made. Only considered when fill is set. Default is 80
     forceCommonColor (series bool) : Force use of common color for forks and fills. Default is false
     commonColor (series color) : common fill color. Used only if ratio specific fill colors are not available or if forceCommonColor is set to true.
 PitchforkDrawing 
  Pitchfork drawing components
  Fields:
     medianLine (Line type from Trendoscope/Drawing/2) : Median line of the pitchfork
     baseLine (Line type from Trendoscope/Drawing/2) : Base line of the pitchfork
     forkLines (array type from Trendoscope/Drawing/2) : fork lines of the pitchfork
     linefills (array type from Trendoscope/Drawing/2) : Linefills between forks
 Fork 
  Fork object property
  Fields:
     ratio (series float) : Fork ratio
     forkColor (series color) : color of fork. Default is blue
     include (series bool) : flag to include the fork in drawing. Default is true
 PitchforkProperties 
  Pitchfork Properties
  Fields:
     forks (array) : Array of Fork objects
     type (series string) : Pitchfork type. Supported values are "regular", "schiff", "mschiff", Default is regular
     inside (series bool) : Flag to identify if to draw inside fork. If set to true, inside fork will be drawn
 Pitchfork 
  Pitchfork object
  Fields:
     a (chart.point) : Pivot Point A of pitchfork
     b (chart.point) : Pivot Point B of pitchfork
     c (chart.point) : Pivot Point C of pitchfork
     properties (PitchforkProperties) : PitchforkProperties object which determines type and composition of pitchfork
     dProperties (PitchforkDrawingProperties) : Drawing properties for pitchfork
     lProperties (LineProperties type from Trendoscope/Drawing/2) : Common line properties for Pitchfork lines
     drawing (PitchforkDrawing) : PitchforkDrawing object
ArrayMovingAveragesLibrary   "ArrayMovingAverages" 
This library adds several moving average methods to arrays, so you can call, eg.:
 myArray.ema(3) 
 method emaArray(id, length) 
  Calculate Exponential Moving Average (EMA) for Arrays
  Namespace types: array
  Parameters:
     id (array) : (array) Input array
     length (int) : (int) Length of the EMA
  Returns: (array) Array of EMA values
 method ema(id, length) 
  Get the last value of the EMA array
  Namespace types: array
  Parameters:
     id (array) : (array) Input array
     length (int) : (int) Length of the EMA
  Returns: (float) Last EMA value or na if empty
 method rmaArray(id, length) 
  Calculate Rolling Moving Average (RMA) for Arrays
  Namespace types: array
  Parameters:
     id (array) : (array) Input array
     length (int) : (int) Length of the RMA
  Returns: (array) Array of RMA values
 method rma(id, length) 
  Get the last value of the RMA array
  Namespace types: array
  Parameters:
     id (array) : (array) Input array
     length (int) : (int) Length of the RMA
  Returns: (float) Last RMA value or na if empty
 method smaArray(id, windowSize) 
  Calculate Simple Moving Average (SMA) for Arrays
  Namespace types: array
  Parameters:
     id (array) : (array) Input array
     windowSize (int) : (int) Window size for calculation, defaults to array size
  Returns: (array) Array of SMA values
 method sma(id, windowSize) 
  Get the last value of the SMA array
  Namespace types: array
  Parameters:
     id (array) : (array) Input array
     windowSize (int) : (int) Window size for calculation, defaults to array size
  Returns: (float) Last SMA value or na if empty
 method wmaArray(id, windowSize) 
  Calculate Weighted Moving Average (WMA) for Arrays
  Namespace types: array
  Parameters:
     id (array) : (array) Input array
     windowSize (int) : (int) Window size for calculation, defaults to array size
  Returns: (array) Array of WMA values
 method wma(id, windowSize) 
  Get the last value of the WMA array
  Namespace types: array
  Parameters:
     id (array) : (array) Input array
     windowSize (int) : (int) Window size for calculation, defaults to array size
  Returns: (float) Last WMA value or na if empty
utilsLibrary   "utils" 
Few essentials captured together (subset of arrayutils)
 timer(timeStart, timeEnd) 
  finds difference between two timestamps
  Parameters:
     timeStart (int) : start timestamp
     timeEnd (int) 
  Returns:  
 method check_overflow(pivots, barArray, dir) 
  finds difference between two timestamps
  Namespace types: array
  Parameters:
     pivots (array) : pivots array
     barArray (array) : pivot bar array
     dir (int) : direction for which overflow need to be checked
  Returns: bool overflow
 method get_trend_series(pivots, length, highLow, trend) 
  finds series of pivots in particular trend
  Namespace types: array
  Parameters:
     pivots (array) : pivots array
     length (int) : length for which trend series need to be checked
     highLow (int) : filter pivot high or low
     trend (int) : Uptrend or Downtrend
  Returns: int  trendIndexes
 method get_trend_series(pivots, firstIndex, lastIndex) 
  finds series of pivots in particular trend
  Namespace types: array
  Parameters:
     pivots (array) : pivots array
     firstIndex (int) : First index of the series
     lastIndex (int) : Last index of the series
  Returns: int  trendIndexes
 getConsolidatedLabel(include, labels, separator) 
  Consolidates labels into single string by concatenating it with given separator
  Parameters:
     include (array) : array of conditions to include label or not
     labels (array) : string array of labels
     separator (string) : Separator for concatenating labels
  Returns: string labelText
 method getColors(theme) 
  gets array of colors based on theme
  Namespace types: series Theme
  Parameters:
     theme (series Theme) : dark or light theme
  Returns: color  themeColors
HTFCandlesLibLibrary   "HTFCandlesLib" 
Library to get detailed higher timeframe candle information
 method tostring(this, delimeter) 
  Returns OHLC values, BarIndex of higher and lower timeframe candles in string format
  Namespace types: Candle
  Parameters:
     this (Candle) : Current Candle object
     delimeter (string) : delimeter to join the string components of the candle
  Returns: String representation of the Candle
 method draw(this, bullishColor, bearishColor, printDescription) 
  Draws the current candle using boxes and lines for body and wicks
  Namespace types: Candle
  Parameters:
     this (Candle) : Current Candle object
     bullishColor (color) : color for bullish representation
     bearishColor (color) : color for bearish representation
     printDescription (bool) : if set to true prints the description
  Returns: Current candle object
 getCurrentCandle(ltfCandles) 
  Gets the current candle along with reassigned ltf components. To be used with request.security to capture higher timeframe candle data
  Parameters:
     ltfCandles (array) : Lower timeframe Candles array
  Returns: Candle object with embedded lower timeframe key candles in them
 Candle 
  Candle represents the data related to a candle
  Fields:
     o (series float) : Open price of the candle
     h (series float) : High price of the candle
     l (series float) : Low price of the candle
     c (series float) : Close price of the candle
     lo (Candle) : Lower timeframe candle that records the open price of the current candle.
     lh (Candle) : Lower timeframe candle that records the high price of the current candle.
     ll (Candle) : Lower timeframe candle that records the low price of the current candle.
     lc (Candle) : Lower timeframe candle that records the close price of the current candle.
     barindex (series int) : Bar Index of the candle
     bartime (series int) : Bar time of the candle
     last (Candle) : Link to last candle of the series if any
NumberOfVisibleBarsLibrary   "NumberOfVisibleBars" 
TODO: add library description here
 NumberOfVisibleBars() 
  Calculates the number of visible bars on the user screen
  Returns: The numbers of visible bars on the user screen (int)
ToStringMx█   OVERVIEW 
Contains methods for conversion of matrices to string.
Supports matrices of int/float/bool/string/color/line/label/box/.
- toStringMx(matrix) - converts matrix to a string matrix converting each of its elements to string
- toS(matrix) - converts matrix to a string matrix (using toStringMx()) and outputs as string using str.tostring(matrix) 
Conversion of each item to string is made using toS() function from moebius1977/ToS/1 library.
█   GENERAL DESCRIPTION OF FUNCTIONS 
All  toStringMx(matrix)  and  toS(matrix)   methods have same parameters. The only difference will be in  format  parameter as explained below. 
Parameters:
     this (matrix)  Matrix to be converted to a string matrix.
     format (string)  Format string.
     nz (string)  Placeholder for na items.
 format  parameter depends on the type: 
  For  matrix  format parameter works in the same way as `str.format()` (i.e. you can use same format strings as with `str.format()` with `{0}` as a placeholder for the value) with some shorthand "format" options available:
--- number ---
- "" 						 => "{0}"
- "number"                    => "{0}"
- "0"                         => "{0, number, 0       }"
- "0.0"                       => "{0, number, 0.0      }"
- "0.00"                      => "{0, number, 0.00     }"
- "0.000"                     => "{0, number, 0.000    }"
- "0.0000"                    => "{0, number, 0.0000   }"
- "0.00000"                   => "{0, number, 0.00000  }"
- "0.000000"                  => "{0, number, 0.000000 }"
- "0.0000000"                 => "{0, number, 0.0000000}"
--- date ---
- "date"                      => "{0, date, dd.MM.YY}"
- "date : time"               => "{0, date, dd.MM.YY} : {0, time, HH.mm.ss}"
- "dd.MM"                     => "{0, date, dd:MM}"
- "dd"                        => "{0, date, dd}"
- "...  ... " in any place is substituted with "{0, date, dd.MM.YY}"
--- time ---
- "time"                      => "{0, time, HH:mm:ss}"
- "HH:mm"                     => "{0, time, HH:mm}"
- "mm:ss"                     => "{0, time, mm:ss}"
- "date time"                 => "{0, date, dd.MM.YY\} {0, time, HH.mm.ss}"
- "date, time"                => "{0, date, dd.MM.YY\}, {0, time, HH.mm.ss}"
- "date,time"                 => "{0, date, dd.MM.YY\},{0, time, HH.mm.ss}"
- "date time"                => "{0, date, dd.MM.YY\} {0, time, HH.mm.ss}"
- "...  ... " in any place is substituted with "{0, time, HH.mm.ss}"
For  matrix :
     format (string) : (string) (Optional) Use `x1` as placeholder for `x1` and so on. E.g. default format is `"(x1, y1) - (x2, y2)"`.
For  matrix :
     format (string) : (string) (Optional) Use `x1` as placeholder for `x`, `y1 - for `y` and `txt` for label's text. E.g. default format is `(x1, y1): "txt"` if ptint_text is true and `(x1, y1)` if false.
For  matrix :
     format (string) : (string) (Optional) Use `x1` as placeholder for `x`, `y1 - for `y` etc.   E.g. default format is  "(x1, y1) - (x2, y2)".
For  matrix :
     format (string) : (string) (Optional) Options are "HEX" (e.g. "#FFFFFF33") or "RGB" (e.g. "rgb(122,122,122,23)"). Default is "HEX".
█   FULL LIST OF FUNCTIONS AND PARAMETERS 
 method toStringMx(mx, format, nz) 
  Returns a string matrix made of original matrix items converted to string with toS().
  Namespace types: matrix
  Parameters:
     mx (matrix) 
     format (string) : (string) Like in str.format()
     nz (string) : (string) If val is na and nz is not na the value of nz param is returned instead.
 method toStringMx(mx, format, nz) 
  Returns a string matrix made of original matrix items converted to string with toS().
  Namespace types: matrix
  Parameters:
     mx (matrix) 
     format (string) : (string) Like in str.format() with some shorthand options:
```
--- number ---
- "" 						 => "{0}"
- "number"                    => "{0}"
- "0"                         => "{0, number, 0       }"
- "0.0"                       => "{0, number, 0.0      }"
- "0.00"                      => "{0, number, 0.00     }"
- "0.000"                     => "{0, number, 0.000    }"
- "0.0000"                    => "{0, number, 0.0000   }"
- "0.00000"                   => "{0, number, 0.00000  }"
- "0.000000"                  => "{0, number, 0.000000 }"
- "0.0000000"                 => "{0, number, 0.0000000}"
--- date ---
- "date"                      => "{0, date, dd.MM.YY}"
- "date : time"               => "{0, date, dd.MM.YY} : {0, time, HH.mm.ss}"
- "dd.MM"                     => "{0, date, dd:MM}"
- "dd"                        => "{0, date, dd}"
- "...  ... " in any place is substituted with "{0, date, dd.MM.YY}"
--- time ---
- "time"                      => "{0, time, HH:mm:ss}"
- "HH:mm"                     => "{0, time, HH:mm}"
- "mm:ss"                     => "{0, time, mm:ss}"
- "date time"                 => "{0, date, dd.MM.YY\} {0, time, HH.mm.ss}"
- "date, time"                => "{0, date, dd.MM.YY\}, {0, time, HH.mm.ss}"
- "date,time"                 => "{0, date, dd.MM.YY\},{0, time, HH.mm.ss}"
- "date time"                => "{0, date, dd.MM.YY\} {0, time, HH.mm.ss}"
- "...  ... " in any place is substituted with "{0, time, HH.mm.ss}"
     nz (string) : (string) If val is na and nz is not na the value of nz param is returned instead.
 method toStringMx(mx, format, nz) 
  Returns a string matrix made of original matrix items converted to string with toS().
  Namespace types: matrix
  Parameters:
     mx (matrix) 
     format (string) : (string) Like in str.format() with some shorthand options:
```
--- number ---
- "" 						 => "{0}"
- "number"                    => "{0}"
- "0"                         => "{0, number, 0       }"
- "0.0"                       => "{0, number, 0.0      }"
- "0.00"                      => "{0, number, 0.00     }"
- "0.000"                     => "{0, number, 0.000    }"
- "0.0000"                    => "{0, number, 0.0000   }"
- "0.00000"                   => "{0, number, 0.00000  }"
- "0.000000"                  => "{0, number, 0.000000 }"
- "0.0000000"                 => "{0, number, 0.0000000}"
--- date ---
- "date"                      => "{0, date, dd.MM.YY}"
- "date : time"               => "{0, date, dd.MM.YY} : {0, time, HH.mm.ss}"
- "dd.MM"                     => "{0, date, dd:MM}"
- "dd"                        => "{0, date, dd}"
- "...  ... " in any place is substituted with "{0, date, dd.MM.YY}"
--- time ---
- "time"                      => "{0, time, HH:mm:ss}"
- "HH:mm"                     => "{0, time, HH:mm}"
- "mm:ss"                     => "{0, time, mm:ss}"
- "date time"                 => "{0, date, dd.MM.YY\} {0, time, HH.mm.ss}"
- "date, time"                => "{0, date, dd.MM.YY\}, {0, time, HH.mm.ss}"
- "date,time"                 => "{0, date, dd.MM.YY\},{0, time, HH.mm.ss}"
- "date time"                => "{0, date, dd.MM.YY\} {0, time, HH.mm.ss}"
- "...  ... " in any place is substituted with "{0, time, HH.mm.ss}"
     nz (string) : (string) If val is na and nz is not na the value of nz param is returned instead.
 method toStringMx(mx, format, nz) 
  Returns a string matrix made of original matrix items converted to string with toS().
  Namespace types: matrix
  Parameters:
     mx (matrix) 
     format (string) : (string) Like in str.format()
     nz (string) : (string) If val is na and nz is not na the value of nz param is returned instead.
 method toStringMx(mx, format, nz) 
  Returns a string matrix made of original matrix items converted to string with toS().
  Namespace types: matrix
  Parameters:
     mx (matrix) 
     format (string) : (string) "HEX" (default) or "RGB"
     nz (string) : (string) If val is na and nz is not na the value of nz param is returned instead.
 method toStringMx(mx, format, nz) 
  Returns a string matrix made of original matrix items converted to string with toS().
  Namespace types: matrix
  Parameters:
     mx (matrix) 
     format (string) : (string) (Optional) Format string. By default "{0}: {1}" if showIDs = true or "{1}" otherwise. (use "{0}" as a placeholder for id and "{1}" for item value)
     nz (string) : (string) If val is na and nz is not na the value of nz param is returned instead.
 method toStringMx(mx, format, nz) 
  Returns a string matrix made of original matrix items converted to string with toS().
  Namespace types: matrix
  Parameters:
     mx (matrix) 
     format (string) : (string) (Optional) Format string. By default "{0}: {1}" if showIDs = true or "{1}" otherwise. (use "{0}" as a placeholder for id and "{1}" for item value)
     nz (string) : (string) If val is na and nz is not na the value of nz param is returned instead.
 method toStringMx(mx, format, nz) 
  Returns a string matrix made of original matrix items converted to string with toS().
  Namespace types: matrix
  Parameters:
     mx (matrix) 
     format (string) : (string) (Optional) Format string. By default "{0}: {1}" if showIDs = true or "{1}" otherwise. (use "{0}" as a placeholder for id and "{1}" for item value)
     nz (string) : (string) If val is na and nz is not na the value of nz param is returned instead.
 method toS(this, format, nz) 
  Converts each element of the matrix to string outputs using str.tostring(matrix)
  Namespace types: matrix
  Parameters:
     this (matrix) : (matrix) Matrix to be converted to string
     format (string) : (string) Format string as in str.format()
     nz (string) : (string) If val is na and nz is not na the value of nz param is returned instead.export method toS(matrix this,  string format = "", string nz = na) => str.tostring(this.toStringMx(format, nz))
 method toS(this, format, nz) 
  Converts each element of the matrix to string outputs using str.tostring(matrix)
  Namespace types: matrix
  Parameters:
     this (matrix) : (matrix) Matrix to be converted to string
     format (string) : (string) Like in str.format() with some shorthand options:
```
--- number ---
- "" 						 => "{0}"
- "number"                    => "{0}"
- "0"                         => "{0, number, 0       }"
- "0.0"                       => "{0, number, 0.0      }"
- "0.00"                      => "{0, number, 0.00     }"
- "0.000"                     => "{0, number, 0.000    }"
- "0.0000"                    => "{0, number, 0.0000   }"
- "0.00000"                   => "{0, number, 0.00000  }"
- "0.000000"                  => "{0, number, 0.000000 }"
- "0.0000000"                 => "{0, number, 0.0000000}"
--- date ---
- "date"                      => "{0, date, dd.MM.YY}"
- "date : time"               => "{0, date, dd.MM.YY} : {0, time, HH.mm.ss}"
- "dd.MM"                     => "{0, date, dd:MM}"
- "dd"                        => "{0, date, dd}"
- "...  ... " in any place is substituted with "{0, date, dd.MM.YY}"
--- time ---
- "time"                      => "{0, time, HH:mm:ss}"
- "HH:mm"                     => "{0, time, HH:mm}"
- "mm:ss"                     => "{0, time, mm:ss}"
- "date time"                 => "{0, date, dd.MM.YY\} {0, time, HH.mm.ss}"
- "date, time"                => "{0, date, dd.MM.YY\}, {0, time, HH.mm.ss}"
- "date,time"                 => "{0, date, dd.MM.YY\},{0, time, HH.mm.ss}"
- "date time"                => "{0, date, dd.MM.YY\} {0, time, HH.mm.ss}"
- "...  ... " in any place is substituted with "{0, time, HH.mm.ss}"
     nz (string) : (string) If val is na and nz is not na the value of nz param is returned instead.export method toS(matrix this,  string format = "", string nz = na) => str.tostring(this.toStringMx(format, nz))
 method toS(this, format, nz) 
  Converts each element of the matrix to string outputs using str.tostring(matrix)
  Namespace types: matrix
  Parameters:
     this (matrix) : (matrix) Matrix to be converted to string
     format (string) : (string) Format string as in str.format()
     nz (string) : (string) If val is na and nz is not na the value of nz param is returned instead.export method toS(matrix this,  string format = "", string nz = na) => str.tostring(this.toStringMx(format, nz))
 method toS(this, format, nz) 
  Converts each element of the matrix to string outputs using str.tostring(matrix)
  Namespace types: matrix
  Parameters:
     this (matrix) : (matrix) Matrix to be converted to string
     format (string) : (string) "HEX" (default) or "RGB"
     nz (string) : (string) If val is na and nz is not na the value of nz param is returned instead.export method toS(matrix this,  string format = "", string nz = na) => str.tostring(this.toStringMx(format, nz))
 method toS(this, format, nz) 
  Converts each element of the matrix to string outputs using str.tostring(matrix)
  Namespace types: matrix
  Parameters:
     this (matrix) : (matrix) Matrix to be converted to string
     format (string) : (string) (Optional) Format string. By default "{0}: {1}" if showIDs = true or "{1}" otherwise. (use "{0}" as a placeholder for id and "{1}" for item value)
     nz (string) : (string) If val is na and nz is not na the value of nz param is returned instead.export method toS(matrix this,  string format = "", string nz = na) => str.tostring(this.toStringMx(format, nz))
 method toS(this, format, nz) 
  Converts each element of the matrix to string outputs using str.tostring(matrix)
  Namespace types: matrix
  Parameters:
     this (matrix) : (matrix) Matrix to be converted to string
     format (string) : (string) (Optional) Format string. By default "{0}: {1}" if showIDs = true or "{1}" otherwise. (use "{0}" as a placeholder for id and "{1}" for item value)
     nz (string) : (string) If val is na and nz is not na the value of nz param is returned instead.export method toS(matrix this,  string format = "", string nz = na) => str.tostring(this.toStringMx(format, nz))
 method toS(this, format, nz) 
  Converts each element of the matrix to string outputs using str.tostring(matrix)
  Namespace types: matrix
  Parameters:
     this (matrix) : (matrix) Matrix to be converted to string
     format (string) : (string) (Optional) Format string. By default "{0}: {1}" if showIDs = true or "{1}" otherwise. (use "{0}" as a placeholder for id and "{1}" for item value)
     nz (string) : (string) If val is na and nz is not na the value of nz param is returned instead.export method toS(matrix this,  string format = "", string nz = na) => str.tostring(this.toStringMx(format, nz))
ToStringAr█  OVERVIEW 
Contains to string conversion methods arrays of int/float/bool/string/line/label/box types
-  toS()  - method works like array.join() with more flexibility and
-  toStringAr()  - converts array to string on a per item basis and returns the resulting string  array
Conversion of each item to string is made using toS() function from moebius1977/ToS/1 library.
█  GENERAL DESCRIPTION OF LIBRARY FUNCTIONS 
All  toS(array)  methods have same parameters. The only difference will be in format parameter as explained below.
 method toS(this, index_from, index_to, separator, showIDs, format, truncate_left, size_limit, nz) 
  Like array.join() but with string length limit. Joins elements into readable string (length capped at 4000, truncating the end or beg)
  Parameters:
     this (array) : array to be converted to string
     index_from (int) : index_from (int) (Optional) Start from this id (starting from 0, in insertion order). If omitted - start from the first item.
     index_to (int) : index_to (int) (Optional) End with this pair (inclusive, in insertion order). If omitted - to last item.
     separator (string) : separator (string) (Optional) String to be inserted between pairs. Default: `", "`
     showIDs (bool) : showIDs (bool) (Optional) If true item's id is added in the form `id: value`.
     format (string) : format (string) (Optional) Format string fo toS(). If omitted default format is used depending in the type.
     truncate_left (bool) : truncate_left (bool) (Optional) Truncate from left or right. Default: false.
     size_limit (int) : size_limit (int) (Optional) Max output string length. Default: 4000.
     nz (string) : nz (string) (Optional) A string used to represent na (na values are substituted with this string).
 format  parameter depends on the type:
  For  toS(bool/int/float ...)  format parameter works in the same way as `str.format()` (i.e. you can use same format strings as with `str.format()` with `{0}` as a placeholder for the value) with some shorthand "format" options available:
--- number ---
- "" => "{0}"
- "number" => "{0}"
- "0" => "{0, number, 0 }"
- "0.0" => "{0, number, 0.0 }"
- "0.00" => "{0, number, 0.00 }"
- "0.000" => "{0, number, 0.000 }"
- "0.0000" => "{0, number, 0.0000 }"
- "0.00000" => "{0, number, 0.00000 }"
- "0.000000" => "{0, number, 0.000000 }"
- "0.0000000" => "{0, number, 0.0000000}"
--- date ---
- "...  ... " in any place is substituted with "{0, date, dd.MM.YY}" (e.g. " " results in "{0, date, dd.MM.YY\} {0, time, HH.mm.ss}")
- "date" => "{0, date, dd.MM.YY}"
- "date : time" => "{0, date, dd.MM.YY} : {0, time, HH.mm.ss}"
- "dd.MM" => "{0, date, dd:MM}"
- "dd" => "{0, date, dd}"
--- time ---
- "...  ... " in any place is substituted with "{0, time, HH.mm.ss}" (e.g. " " results in "{0, date, dd.MM.YY\} {0, time, HH.mm.ss}")
- "time" => "{0, time, HH:mm:ss}"
- "HH:mm" => "{0, time, HH:mm}"
- "mm:ss" => "{0, time, mm:ss}"
- "date time" => "{0, date, dd.MM.YY\} {0, time, HH.mm.ss}"
- "date, time" => "{0, date, dd.MM.YY\}, {0, time, HH.mm.ss}"
- "date,time" => "{0, date, dd.MM.YY\},{0, time, HH.mm.ss}"
- "date time" => "{0, date, dd.MM.YY\} {0, time, HH.mm.ss}"
For toS(line ...):
     format (string) : (string) (Optional) Use `x1` as placeholder for `x1` and so on. E.g. default format is `"(x1, y1) - (x2, y2)"`.
For  toS(label ...) :
     format (string) : (string) (Optional) Use `x1` as placeholder for `x`, `y1 - for `y` and `txt` for label's text. E.g. default format is `(x1, y1): "txt"` if ptint_text is true and `(x1, y1)` if false.
For  toS(box ... ) :
     format (string) : (string) (Optional) Use `x1` as placeholder for `x`, `y1 - for `y` etc. E.g. default format is "(x1, y1) - (x2, y2)".
For  toS(color] ... ) :
     format (string) : (string) (Optional) Options are "HEX" (e.g. "#FFFFFF33") or "RGB" (e.g. "rgb(122,122,122,23)"). Default is "HEX".
All  toStringAr()  methods just convert each item to string using toS with same format options as described above.
  Parameters:
     arr (array) : Array to be converted to a string array.
     format (string) : Format string.
     nz (string) : Placeholder for na items.
█   FULL OF FUNCTIONS AND PARAMETERS 
Library   "ToStringAr" 
Contains toString/toS conversion methods for int/float/bool/string/line/label/box and arrays and matrices thereof. Also contains a string wraping function.
 method toS(this, index_from, index_to, separator, showIDs, format, truncate_left, size_limit, nz) 
  Namespace types: array
  Parameters:
     this (array) 
     index_from (int) 
     index_to (int) 
     separator (string) 
     showIDs (bool) 
     format (string) 
     truncate_left (bool) 
     size_limit (int) 
     nz (string) 
 method toS(this, index_from, index_to, separator, showIDs, format, truncate_left, size_limit, nz) 
  Namespace types: array
  Parameters:
     this (array) 
     index_from (int) 
     index_to (int) 
     separator (string) 
     showIDs (bool) 
     format (string) 
     truncate_left (bool) 
     size_limit (int) 
     nz (string) 
 method toS(this, index_from, index_to, separator, showIDs, format, truncate_left, size_limit, nz) 
  Namespace types: array
  Parameters:
     this (array) 
     index_from (int) 
     index_to (int) 
     separator (string) 
     showIDs (bool) 
     format (string) 
     truncate_left (bool) 
     size_limit (int) 
     nz (string) 
 method toS(this, index_from, index_to, separator, showIDs, format, truncate_left, size_limit, nz) 
  Namespace types: array
  Parameters:
     this (array) 
     index_from (int) 
     index_to (int) 
     separator (string) 
     showIDs (bool) 
     format (string) 
     truncate_left (bool) 
     size_limit (int) 
     nz (string) 
 method toS(this, index_from, index_to, separator, showIDs, format, truncate_left, size_limit, nz) 
  Namespace types: array
  Parameters:
     this (array) 
     index_from (int) 
     index_to (int) 
     separator (string) 
     showIDs (bool) 
     format (string) 
     truncate_left (bool) 
     size_limit (int) 
     nz (string) 
 method toS(this, index_from, index_to, separator, showIDs, format, truncate_left, size_limit, nz) 
  Namespace types: array
  Parameters:
     this (array) 
     index_from (int) 
     index_to (int) 
     separator (string) 
     showIDs (bool) 
     format (string) 
     truncate_left (bool) 
     size_limit (int) 
     nz (string) 
 method toS(this, index_from, index_to, separator, showIDs, format, truncate_left, size_limit, nz) 
  Namespace types: array
  Parameters:
     this (array) 
     index_from (int) 
     index_to (int) 
     separator (string) 
     showIDs (bool) 
     format (string) 
     truncate_left (bool) 
     size_limit (int) 
     nz (string) 
 method toS(this, index_from, index_to, separator, showIDs, format, truncate_left, size_limit, nz) 
  Namespace types: array
  Parameters:
     this (array) 
     index_from (int) 
     index_to (int) 
     separator (string) 
     showIDs (bool) 
     format (string) 
     truncate_left (bool) 
     size_limit (int) 
     nz (string) 
 method toStringAr(arr, format, nz) 
  Namespace types: array
  Parameters:
     arr (array) 
     format (string) 
     nz (string) 
 method toStringAr(arr, format, nz) 
  Namespace types: array
  Parameters:
     arr (array) 
     format (string) 
     nz (string) 
 method toStringAr(arr, format, nz) 
  Namespace types: array
  Parameters:
     arr (array) 
     format (string) 
     nz (string) 
 method toStringAr(arr, format, nz) 
  Namespace types: array
  Parameters:
     arr (array) 
     format (string) 
     nz (string) 
 method toStringAr(arr, format, nz) 
  Namespace types: array
  Parameters:
     arr (array) 
     format (string) 
     nz (string) 
 method toStringAr(arr, format, nz) 
  Namespace types: array
  Parameters:
     arr (array) 
     format (string) 
     nz (string) 
 method toStringAr(arr, format, nz) 
  Namespace types: array
  Parameters:
     arr (array) 
     format (string) 
     nz (string) 
 method toStringAr(arr, format, nz) 
  Namespace types: array
  Parameters:
     arr (array) 
     format (string) 
     nz (string)
mlivsLibrary   "mlivs" 
TODO: add library description here
 adx(high, low, adxlen, dilen) 
  TODO: add function description here
  Parameters:
     high (float) 
     low (float) 
     adxlen (simple int) 
     dilen (simple int) 
  Returns: TODO: add what function returns
 adxMA() 
 impulseMACD(lengthMA, lengthSignal) 
  Parameters:
     lengthMA (simple int) 
     lengthSignal (int)
BinaryInsertionSortLibrary   "BinaryInsertionSort" 
Library containing functions which can help create sorted array based on binary insertion sort.
This sorting will be quicker than array.sort function if the sorting needs to be done on every bar and the size of the array is comparatively big.
 method binary_search_basic(sortedArray, item, order) 
  binary_search_basic - finds the closest index of the value
  Namespace types: array
  Parameters:
     sortedArray (array) : array which is assumed to be sorted in the requested order
     item (float) : float item which needs to be searched in the sorted array
     order (int) : Sort order - positive number means ascending order whereas negative number represents descending order
  Returns: int index at which the item can be inserted into sorted array
 method binary_search_basic(sortedArray, item, order) 
  binary_search_basic - finds the closest index of the value
  Namespace types: array
  Parameters:
     sortedArray (array) : array which is assumed to be sorted in the requested order
     item (int) : int item which needs to be searched in the sorted array
     order (int) : Sort order - positive number means ascending order whereas negative number represents descending order
  Returns: int index at which the item can be inserted into sorted array
 method binary_insertion_sort(sortedArray, item, order) 
  binary insertion sort - inserts item into sorted array while maintaining sort order
  Namespace types: array
  Parameters:
     sortedArray (array) : array which is assumed to be sorted in the requested order
     item (float) : float item which needs to be inserted into sorted array
     order (int) : Sort order - positive number means ascending order whereas negative number represents descending order
  Returns: int index at which the item is inserted into sorted array
 method binary_insertion_sort(sortedArray, item, order) 
  binary insertion sort - inserts item into sorted array while maintaining sort order
  Namespace types: array
  Parameters:
     sortedArray (array) : array which is assumed to be sorted in the requested order
     item (int) : int item which needs to be inserted into sorted array
     order (int) : Sort order - positive number means ascending order whereas negative number represents descending order
  Returns: int index at which the item is inserted into sorted array
 update_sort_indices(sortIndices, newItemIndex) 
  adds the sort index of new item added to sorted array and also updates existing sort indices.
  Parameters:
     sortIndices (array) : array containing sort indices of an array.
     newItemIndex (int) : sort index of new item added to sorted array
  Returns: void
 get_array_of_series(item, order) 
  Converts series into array and sorted array.
  Parameters:
     item (float) : float series
     order (int) : Sort order - positive number means ascending order whereas negative number represents descending order
  Returns:  
 get_array_of_series(item, order) 
  Converts series into array and sorted array.
  Parameters:
     item (int) : int series
     order (int) : Sort order - positive number means ascending order whereas negative number represents descending order
  Returns:  
 get_sorted_arrays(item, order) 
  Converts series into array and sorted array. Also calculates the sort order of the value array
  Parameters:
     item (float) : float|int series
     order (int) : Sort order - positive number means ascending order whereas negative number represents descending order
  Returns:  
 get_sorted_arrays(item, order) 
  Converts series into array and sorted array. Also calculates the sort order of the value array
  Parameters:
     item (int) : int series
     order (int) : Sort order - positive number means ascending order whereas negative number represents descending order
  Returns: 
[ALGOA+] Markov Chains Library by @metacamaleoLibrary   "MarkovChains" 
    Markov Chains library by @metacamaleo. Created in 09/08/2024. 
This library provides tools to calculate and visualize Markov Chain-based transition matrices and probabilities. This library supports two primary algorithms: a rolling window Markov Chain and a conditional Markov Chain (which operates based on specified conditions). The key concepts used include Markov Chain states, transition matrices, and future state probabilities based on past market conditions or indicators.
Key functions:
- `mc_rw()`: Builds a transition matrix using a rolling window Markov Chain, calculating probabilities based on a fixed length of historical data.
- `mc_cond()`: Builds a conditional Markov Chain transition matrix, calculating probabilities based on the current market condition or indicator state.
Basically, you will just need to use the above functions on your script to default outputs and displays.
Exported UDTs include:
- s_map: An UDT variable used to store a map with dummy states, i.e., if possible states are bullish, bearish, and neutral, and current is bullish, it will be stored
  in a map with following keys and values: "bullish", 1; "bearish", 0; and "neutral", 0. You will only use it to customize your own script, otherwise, it´s only for internal use.
- mc_states: This UDT variable stores user inputs, calculations and MC outputs. As the above, you don´t need to use it, but you may get features to customize your own script.
For example, you may use mc.tm to get the transition matrix, or the prob map to customize the display. As you see, functions are all based on mc_states UDT. The s_map UDT is used within mc_states´s s array.
Optional exported functions include:
- `mc_table()`: Displays the transition matrix in a table format on the chart for easy visualization of the probabilities.
- `display_list()`: Displays a map (or array) of string and float/int values in a table format, used for showing transition counts or probabilities.
- `mc_prob()`: Calculates and displays probabilities for a given number of future bars based on the current state in the Markov Chain.
- `mc_all_states_prob()`: Calculates probabilities for all states for future bars, considering all possible transitions.
The above functions may be used to customize your outputs. Use the returned variable mc_states from mc_rw() and mc_cond() to display each of its matrix, maps or arrays using mc_table() (for matrices) and display_list() (for maps and arrays) if you desire to debug or track the calculation process.
See the examples in the end of this script.
Have good trading days! 
Best regards,
@metacamaleo
-----------------------------
  KEY FUNCTIONS  
 mc_rw(state, length, states, pred_length, show_table, show_prob, table_position, prob_position, font_size) 
  Builds the transition matrix for a rolling window Markov Chain.
  Parameters:
     state (string) : The current state of the market or system.
     length (int) : The rolling window size.
     states (array) : Array of strings representing the possible states in the Markov Chain.
     pred_length (int) : The number of bars to predict into the future.
     show_table (bool) : Boolean to show or hide the transition matrix table.
     show_prob (bool) : Boolean to show or hide the probability table.
     table_position (string) : Position of the transition matrix table on the chart.
     prob_position (string) : Position of the probability list on the chart.
     font_size (string) : Size of the table font.
  Returns: The transition matrix and probabilities for future states.
 mc_cond(state, condition, states, pred_length, show_table, show_prob, table_position, prob_position, font_size) 
  Builds the transition matrix for conditional Markov Chains.
  Parameters:
     state (string) : The current state of the market or system.
     condition (string) : A string representing the condition.
     states (array) : Array of strings representing the possible states in the Markov Chain.
     pred_length (int) : The number of bars to predict into the future.
     show_table (bool) : Boolean to show or hide the transition matrix table.
     show_prob (bool) : Boolean to show or hide the probability table.
     table_position (string) : Position of the transition matrix table on the chart.
     prob_position (string) : Position of the probability list on the chart.
     font_size (string) : Size of the table font.
  Returns: The transition matrix and probabilities for future states based on the HMM.
WavesLibrary   "Waves" 
Methods for elliot wave detection
 method delete(this) 
  deletes the subwave drawing
  Namespace types: Subwave
  Parameters:
     this (Subwave) : Subwave object to be deleted
  Returns: deleted subwave object
 method delete(this) 
  deletes the wave drawing and the corresponding subwaves
  Namespace types: Wave
  Parameters:
     this (Wave) : Wave object to be deleted
  Returns: deleted wave object
 method createWave(pivot, lineColor, waves, limit) 
  Create wave object
  Namespace types: zg.Pivot
  Parameters:
     pivot (Pivot type from Trendoscope/Zigzag/7) : pivot object where the wave needs to be created
     lineColor (color) : color of the wave to be drawn
     waves (array) : array of existing waves
     limit (int) : max number of waves to be shown in the chart
  Returns: wave object created
 method createSubWaves(wave, subwavePivots) 
  Create sub waves for the wave
  Namespace types: Wave
  Parameters:
     wave (Wave) 
     subwavePivots (array) : array of sub wave pivots
  Returns: wave object created
 method draw(subWave) 
  Draw subwave
  Namespace types: Subwave
  Parameters:
     subWave (Subwave) 
  Returns: subwsubWave object
 method draw(wave, limitSubwaves) 
  Draw Wave
  Namespace types: Wave
  Parameters:
     wave (Wave) : Wave object to be drawn
     limitSubwaves (bool) : limit the number of subwave combinations within the wave
  Returns: wave object
 method checkMotiveWave(prices) 
  based on the price array, check if there is motive wave and identify the type
  Namespace types: array
  Parameters:
     prices (array) : float array of prices
  Returns: WaveType representing the identified wave type. na otherwise
 method scanMotiveWave(pivot, lastPivot, existingWaves, allowedTypes) 
  Scan for motive wave
  Namespace types: zg.Pivot
  Parameters:
     pivot (Pivot type from Trendoscope/Zigzag/7) : Zigzag pivot that will be checked for motive wave
     lastPivot (Pivot type from Trendoscope/Zigzag/7) : previous Zigzag pivot
     existingWaves (array) : array of existing waves
     allowedTypes (array) : allowed Wave types to filter them
  Returns: array of subwave pivots
 SubwavePivots 
  SubwavePivots represents the sub pivots of the main wave
  Fields:
     waveType (series WaveType) : Type of the Wave
     indices (array) : Bar index values of sub waves
     subPivots (array type from Trendoscope/Zigzag/7) : sub pivot objects of the wave
 Subwave 
  Subwave represents the drawing of sub waves
  Fields:
     waves (array type from Trendoscope/Drawing/1) : array of sub wave lines
     points (array type from Trendoscope/Drawing/1) : Array of subwave pivot labels
     subwavePivots (SubwavePivots) : array of subwave pivots being drawn
 Wave 
  Wave object type
  Fields:
     pivot (Pivot type from Trendoscope/Zigzag/7) : starting point of the wave
     wave (Line type from Trendoscope/Drawing/1) : Line representing the wave
     waveLabel (Label type from Trendoscope/Drawing/1) : label containing wave details
     subWaves (array) : array of sub waves
DrawingLibrary   "Drawing" 
User Defined types and methods for basic drawing structure. Consolidated from the earlier libraries - DrawingTypes and DrawingMethods
 method get_price(this, bar) 
  get line price based on bar
  Namespace types: Line
  Parameters:
     this (Line) : (series Line) Line object.
     bar (int) : (series/int) bar at which line price need to be calculated
  Returns: line price at given bar.
 method init(this) 
  Namespace types: PolyLine
  Parameters:
     this (PolyLine) 
 method tostring(this, sortKeys, sortOrder, includeKeys) 
  Converts DrawingTypes/Point object to string representation
  Namespace types: chart.point
  Parameters:
     this (chart.point) : DrawingTypes/Point object
     sortKeys (bool) : If set to true, string output is sorted by keys.
     sortOrder (int) : Applicable only if sortKeys is set to true. Positive number will sort them in ascending order whreas negative numer will sort them in descending order. Passing 0 will not sort the keys
     includeKeys (array) : Array of string containing selective keys. Optional parmaeter. If not provided, all the keys are considered
  Returns: string representation of DrawingTypes/Point
 method tostring(this, sortKeys, sortOrder, includeKeys) 
  Converts DrawingTypes/LineProperties object to string representation
  Namespace types: LineProperties
  Parameters:
     this (LineProperties) : DrawingTypes/LineProperties object
     sortKeys (bool) : If set to true, string output is sorted by keys.
     sortOrder (int) : Applicable only if sortKeys is set to true. Positive number will sort them in ascending order whreas negative numer will sort them in descending order. Passing 0 will not sort the keys
     includeKeys (array) : Array of string containing selective keys. Optional parmaeter. If not provided, all the keys are considered
  Returns: string representation of DrawingTypes/LineProperties
 method tostring(this, sortKeys, sortOrder, includeKeys) 
  Converts DrawingTypes/Line object to string representation
  Namespace types: Line
  Parameters:
     this (Line) : DrawingTypes/Line object
     sortKeys (bool) : If set to true, string output is sorted by keys.
     sortOrder (int) : Applicable only if sortKeys is set to true. Positive number will sort them in ascending order whreas negative numer will sort them in descending order. Passing 0 will not sort the keys
     includeKeys (array) : Array of string containing selective keys. Optional parmaeter. If not provided, all the keys are considered
  Returns: string representation of DrawingTypes/Line
 method tostring(this, sortKeys, sortOrder, includeKeys) 
  Converts DrawingTypes/LabelProperties object to string representation
  Namespace types: LabelProperties
  Parameters:
     this (LabelProperties) : DrawingTypes/LabelProperties object
     sortKeys (bool) : If set to true, string output is sorted by keys.
     sortOrder (int) : Applicable only if sortKeys is set to true. Positive number will sort them in ascending order whreas negative numer will sort them in descending order. Passing 0 will not sort the keys
     includeKeys (array) : Array of string containing selective keys. Optional parmaeter. If not provided, all the keys are considered
  Returns: string representation of DrawingTypes/LabelProperties
 method tostring(this, sortKeys, sortOrder, includeKeys) 
  Converts DrawingTypes/Label object to string representation
  Namespace types: Label
  Parameters:
     this (Label) : DrawingTypes/Label object
     sortKeys (bool) : If set to true, string output is sorted by keys.
     sortOrder (int) : Applicable only if sortKeys is set to true. Positive number will sort them in ascending order whreas negative numer will sort them in descending order. Passing 0 will not sort the keys
     includeKeys (array) : Array of string containing selective keys. Optional parmaeter. If not provided, all the keys are considered
  Returns: string representation of DrawingTypes/Label
 method tostring(this, sortKeys, sortOrder, includeKeys) 
  Converts DrawingTypes/Linefill object to string representation
  Namespace types: Linefill
  Parameters:
     this (Linefill) : DrawingTypes/Linefill object
     sortKeys (bool) : If set to true, string output is sorted by keys.
     sortOrder (int) : Applicable only if sortKeys is set to true. Positive number will sort them in ascending order whreas negative numer will sort them in descending order. Passing 0 will not sort the keys
     includeKeys (array) : Array of string containing selective keys. Optional parmaeter. If not provided, all the keys are considered
  Returns: string representation of DrawingTypes/Linefill
 method tostring(this, sortKeys, sortOrder, includeKeys) 
  Converts DrawingTypes/BoxProperties object to string representation
  Namespace types: BoxProperties
  Parameters:
     this (BoxProperties) : DrawingTypes/BoxProperties object
     sortKeys (bool) : If set to true, string output is sorted by keys.
     sortOrder (int) : Applicable only if sortKeys is set to true. Positive number will sort them in ascending order whreas negative numer will sort them in descending order. Passing 0 will not sort the keys
     includeKeys (array) : Array of string containing selective keys. Optional parmaeter. If not provided, all the keys are considered
  Returns: string representation of DrawingTypes/BoxProperties
 method tostring(this, sortKeys, sortOrder, includeKeys) 
  Converts DrawingTypes/BoxText object to string representation
  Namespace types: BoxText
  Parameters:
     this (BoxText) : DrawingTypes/BoxText object
     sortKeys (bool) : If set to true, string output is sorted by keys.
     sortOrder (int) : Applicable only if sortKeys is set to true. Positive number will sort them in ascending order whreas negative numer will sort them in descending order. Passing 0 will not sort the keys
     includeKeys (array) : Array of string containing selective keys. Optional parmaeter. If not provided, all the keys are considered
  Returns: string representation of DrawingTypes/BoxText
 method tostring(this, sortKeys, sortOrder, includeKeys) 
  Converts DrawingTypes/Box object to string representation
  Namespace types: Box
  Parameters:
     this (Box) : DrawingTypes/Box object
     sortKeys (bool) : If set to true, string output is sorted by keys.
     sortOrder (int) : Applicable only if sortKeys is set to true. Positive number will sort them in ascending order whreas negative numer will sort them in descending order. Passing 0 will not sort the keys
     includeKeys (array) : Array of string containing selective keys. Optional parmaeter. If not provided, all the keys are considered
  Returns: string representation of DrawingTypes/Box
 method delete(this) 
  Deletes line from DrawingTypes/Line object
  Namespace types: Line
  Parameters:
     this (Line) : DrawingTypes/Line object
  Returns: Line object deleted
 method delete(this) 
  Deletes label from DrawingTypes/Label object
  Namespace types: Label
  Parameters:
     this (Label) : DrawingTypes/Label object
  Returns: Label object deleted
 method delete(this) 
  Deletes Linefill from DrawingTypes/Linefill object
  Namespace types: Linefill
  Parameters:
     this (Linefill) : DrawingTypes/Linefill object
  Returns: Linefill object deleted
 method delete(this) 
  Deletes box from DrawingTypes/Box object
  Namespace types: Box
  Parameters:
     this (Box) : DrawingTypes/Box object
  Returns: DrawingTypes/Box object deleted
 method delete(this) 
  Deletes lines from array of DrawingTypes/Line objects
  Namespace types: array
  Parameters:
     this (array) : Array of DrawingTypes/Line objects
  Returns: Array of DrawingTypes/Line objects
 method delete(this) 
  Deletes labels from array of DrawingTypes/Label objects
  Namespace types: array
  Parameters:
     this (array) : Array of DrawingTypes/Label objects
  Returns: Array of DrawingTypes/Label objects
 method delete(this) 
  Deletes linefill from array of DrawingTypes/Linefill objects
  Namespace types: array
  Parameters:
     this (array) : Array of DrawingTypes/Linefill objects
  Returns: Array of DrawingTypes/Linefill objects
 method delete(this) 
  Deletes boxes from array of DrawingTypes/Box objects
  Namespace types: array
  Parameters:
     this (array) : Array of DrawingTypes/Box objects
  Returns: Array of DrawingTypes/Box objects
 method clear(this) 
  clear items from array of DrawingTypes/Line while deleting underlying objects
  Namespace types: array
  Parameters:
     this (array) : array
  Returns: void
 method clear(this) 
  clear items from array of DrawingTypes/Label while deleting underlying objects
  Namespace types: array
  Parameters:
     this (array) : array
  Returns: void
 method clear(this) 
  clear items from array of DrawingTypes/Linefill while deleting underlying objects
  Namespace types: array
  Parameters:
     this (array) : array
  Returns: void
 method clear(this) 
  clear items from array of DrawingTypes/Box while deleting underlying objects
  Namespace types: array
  Parameters:
     this (array) : array
  Returns: void
 method draw(this) 
  Creates line from DrawingTypes/Line object
  Namespace types: Line
  Parameters:
     this (Line) : DrawingTypes/Line object
  Returns: line created from DrawingTypes/Line object
 method draw(this) 
  Creates lines from array of DrawingTypes/Line objects
  Namespace types: array
  Parameters:
     this (array) : Array of DrawingTypes/Line objects
  Returns: Array of DrawingTypes/Line objects
 method draw(this) 
  Creates label from DrawingTypes/Label object
  Namespace types: Label
  Parameters:
     this (Label) : DrawingTypes/Label object
  Returns: label created from DrawingTypes/Label object
 method draw(this) 
  Creates labels from array of DrawingTypes/Label objects
  Namespace types: array
  Parameters:
     this (array) : Array of DrawingTypes/Label objects
  Returns: Array of DrawingTypes/Label objects
 method draw(this) 
  Creates linefill object from DrawingTypes/Linefill
  Namespace types: Linefill
  Parameters:
     this (Linefill) : DrawingTypes/Linefill objects
  Returns: linefill object created
 method draw(this) 
  Creates linefill objects from array of DrawingTypes/Linefill objects
  Namespace types: array
  Parameters:
     this (array) : Array of DrawingTypes/Linefill objects
  Returns: Array of DrawingTypes/Linefill used for creating linefills
 method draw(this) 
  Creates box from DrawingTypes/Box object
  Namespace types: Box
  Parameters:
     this (Box) : DrawingTypes/Box object
  Returns: box created from DrawingTypes/Box object
 method draw(this) 
  Creates labels from array of DrawingTypes/Label objects
  Namespace types: array
  Parameters:
     this (array) : Array of DrawingTypes/Label objects
  Returns: Array of DrawingTypes/Label objects
 method createLabel(this, lblText, tooltip, properties) 
  Creates DrawingTypes/Label object from DrawingTypes/Point
  Namespace types: chart.point
  Parameters:
     this (chart.point) : DrawingTypes/Point object
     lblText (string) : Label text
     tooltip (string) : Tooltip text. Default is na
     properties (LabelProperties) : DrawingTypes/LabelProperties object. Default is na - meaning default values are used.
  Returns: DrawingTypes/Label object
 method createLine(this, other, properties) 
  Creates DrawingTypes/Line object from one DrawingTypes/Point to other
  Namespace types: chart.point
  Parameters:
     this (chart.point) : First DrawingTypes/Point object
     other (chart.point) : Second DrawingTypes/Point object
     properties (LineProperties) : DrawingTypes/LineProperties object. Default set to na - meaning default values are used.
  Returns: DrawingTypes/Line object
 method createLinefill(this, other, fillColor, transparency) 
  Creates DrawingTypes/Linefill object from DrawingTypes/Line object to other DrawingTypes/Line object
  Namespace types: Line
  Parameters:
     this (Line) : First DrawingTypes/Line object
     other (Line) : Other DrawingTypes/Line object
     fillColor (color) : fill color of linefill. Default is color.blue
     transparency (int) : fill transparency for linefill. Default is 80
  Returns: Array of DrawingTypes/Linefill object
 method createBox(this, other, properties, textProperties) 
  Creates DrawingTypes/Box object from one DrawingTypes/Point to other
  Namespace types: chart.point
  Parameters:
     this (chart.point) : First DrawingTypes/Point object
     other (chart.point) : Second DrawingTypes/Point object
     properties (BoxProperties) : DrawingTypes/BoxProperties object. Default set to na - meaning default values are used.
     textProperties (BoxText) : DrawingTypes/BoxText object. Default is na - meaning no text will be drawn
  Returns: DrawingTypes/Box object
 method createBox(this, properties, textProperties) 
  Creates DrawingTypes/Box object from DrawingTypes/Line as diagonal line
  Namespace types: Line
  Parameters:
     this (Line) : Diagonal DrawingTypes/PoLineint object
     properties (BoxProperties) : DrawingTypes/BoxProperties object. Default set to na - meaning default values are used.
     textProperties (BoxText) : DrawingTypes/BoxText object. Default is na - meaning no text will be drawn
  Returns: DrawingTypes/Box object
 LineProperties 
  Properties of line object
  Fields:
     xloc (series string) : X Reference - can be either xloc.bar_index or xloc.bar_time. Default is xloc.bar_index
     extend (series string) : Property which sets line to extend towards either right or left or both. Valid values are extend.right, extend.left, extend.both, extend.none. Default is extend.none
     color (series color) : Line color
     style (series string) : Line style, valid values are line.style_solid, line.style_dashed, line.style_dotted, line.style_arrow_left, line.style_arrow_right, line.style_arrow_both. Default is line.style_solid
     width (series int) : Line width. Default is 1
 Line 
  Line object created from points
  Fields:
     start (chart.point) : Starting point of the line
     end (chart.point) : Ending point of the line
     properties (LineProperties) : LineProperties object which defines the style of line
     object (series line) : Derived line object
 LabelProperties 
  Properties of label object
  Fields:
     xloc (series string) : X Reference - can be either xloc.bar_index or xloc.bar_time. Default is xloc.bar_index
     yloc (series string) : Y reference - can be yloc.price, yloc.abovebar, yloc.belowbar. Default is yloc.price
     color (series color) : Label fill color
     style (series string) : Label style as defined in Tradingview Documentation. Default is label.style_none
     textcolor (series color) : text color. Default is color.black
     size (series string) : Label text size. Default is size.normal. Other values are size.auto, size.tiny, size.small, size.normal, size.large, size.huge
     textalign (series string) : Label text alignment. Default if text.align_center. Other allowed values - text.align_right, text.align_left, text.align_top, text.align_bottom
     text_font_family (series string) : The font family of the text. Default value is font.family_default. Other available option is font.family_monospace
 Label 
  Label object
  Fields:
     point (chart.point) : Point where label is drawn
     lblText (series string) : label text
     tooltip (series string) : Tooltip text. Default is na
     properties (LabelProperties) : LabelProperties object
     object (series label) : Pine label object
 Linefill 
  Linefill object
  Fields:
     line1 (Line) : First line to create linefill
     line2 (Line) : Second line to create linefill
     fillColor (series color) : Fill color
     transparency (series int) : Fill transparency range from 0 to 100
     object (series linefill) : linefill object created from wrapper
 BoxProperties 
  BoxProperties object
  Fields:
     border_color (series color) : Box border color. Default is color.blue
     bgcolor (series color) : box background color
     border_width (series int) : Box border width. Default is 1
     border_style (series string) : Box border style. Default is line.style_solid
     extend (series string) : Extend property of box. default is extend.none
     xloc (series string) : defines if drawing needs to be done based on bar index or time. default is xloc.bar_index
 BoxText 
  Box Text properties.
  Fields:
     boxText (series string) : Text to be printed on the box
     text_size (series string) : Text size. Default is size.auto
     text_color (series color) : Box text color. Default is color.yellow.
     text_halign (series string) : horizontal align style - default is text.align_center
     text_valign (series string) : vertical align style - default is text.align_center
     text_wrap (series string) : text wrap style - default is text.wrap_auto
     text_font_family (series string) : Text font. Default is
 Box 
  Box object
  Fields:
     p1 (chart.point) : Diagonal point one
     p2 (chart.point) : Diagonal point two
     properties (BoxProperties) : Box properties
     textProperties (BoxText) : Box text properties
     object (series box) : Box object created
 PolyLineProperties 
  Fields:
     curved (series bool) 
     closed (series bool) 
     xloc (series string) 
     lineColor (series color) 
     fillColor (series color) 
     lineStyle (series string) 
     lineWidth (series int) 
 PolyLine 
  Fields:
     points (array) 
     properties (PolyLineProperties) 
     object (series polyline)
iteratorThe "Iterator" library is designed to provide a flexible way to work with sequences of values. This library offers a set of functions to create and manage iterators for various data types, including integers, floats, and more. Whether you need to generate an array of values with specific increments or iterate over elements in reverse order, this library has you covered.
 Key Features: 
 
 Array Creation:  Easily generate arrays of integers or floats with customizable steps, both inclusive and exclusive of the end values.
 Flexible Iteration:  Includes methods to iterate over arrays of different types, such as booleans, integers, floats, strings, colors, and drawing objects like lines and labels.
 Reverse Iteration:  Support for reverse iteration, giving you control over the order in which elements are processed.
 Automatic Loop Control:  One of the key advantages of this library is that when using the .iterate() method, it only loops over the array when there are values present. This means you don’t have to manually check if the array is populated before iterating, simplifying your code and reducing potential errors.
 Versatile Use Cases:  Ideal for scenarios where you need to loop over an array without worrying about empty arrays or checking conditions manually.
 
This library is particularly useful in cases where you need to perform operations on each element in an array, ensuring that your loops are efficient and free from unnecessary checks.
Library   "iterator" 
The "iterator" library provides a versatile and efficient set of functions for creating and managing iterators.
It allows you to generate arrays of integers or floats with customizable steps, both inclusive and exclusive of the end values.
The library also includes methods for iterating over various types, including booleans, integers, floats, strings, colors,
and drawing objects like lines and labels. With support for reverse iteration and flexible customization options.
 iterator(stop, start, step) 
  Creates an array of integers from start to stop with a specified step, excluding the stop value.
  Parameters:
     stop (int) : The end value of the iterator, exclusive.
     start (int) : The starting value of the iterator. Default is 0.
     step (int) : The increment value for each step in the iterator. Default is 1. Must be greater than 0.
  Returns: An array of integers incremented by the step value from start to stop. Will return and empty array if start = stop.
 iterator(stop, start, step) 
  Creates an array of floats from start to stop with a specified step, excluding the stop value.
  Parameters:
     stop (float) : The end value of the iterator, exclusive.
     start (float) : The starting value of the iterator. Default is 0.
     step (float) : The increment value for each step in the iterator. Default is 1. Must be greater than 0.
  Returns: An array of floats incremented by the step value from start to stop. Will return and empty array if start = stop.
 iterator_inclusive(stop, start, step) 
  Creates an array of integers from start to stop with a specified step, including the stop value.
  Parameters:
     stop (int) : The end value of the iterator, inclusive.
     start (int) : The starting value of the iterator. Default is 0.
     step (int) : The increment value for each step in the iterator. Default is 1. Must be greater than 0.
  Returns: An array of integers incremented by the step value from start to stop, including the stop value.
 iterator_inclusive(stop, start, step) 
  Creates an array of floats from start to stop with a specified step, including the stop value.
  Parameters:
     stop (float) : The end value of the iterator, inclusive.
     start (float) : The starting value of the iterator. Default is 0.
     step (float) : The increment value for each step in the iterator. Default is 1. Must be greater than 0.
  Returns: An array of floats incremented by the step value from start to stop, including the stop value.
 itr(stop, start, step) 
  Creates an array of integers from start to stop with a specified step, excluding the stop value.
  Parameters:
     stop (int) : The end value of the iterator, exclusive.
     start (int) : The starting value of the iterator. Default is 0.
     step (int) : The increment value for each step in the iterator. Default is 1. Must be greater than 0.
  Returns: An array of integers incremented by the step value from start to stop.
 itr(stop, start, step) 
  Creates an array of floats from start to stop with a specified step, excluding the stop value.
  Parameters:
     stop (float) : The end value of the iterator, exclusive.
     start (float) : The starting value of the iterator. Default is 0.
     step (float) : The increment value for each step in the iterator. Default is 1. Must be greater than 0.
  Returns: An array of floats incremented by the step value from start to stop.
 itr_in(stop, start, step) 
  Creates an array of integers from start to stop with a specified step, including the stop value.
  Parameters:
     stop (int) : The end value of the iterator, inclusive.
     start (int) : The starting value of the iterator. Default is 0.
     step (int) : The increment value for each step in the iterator. Default is 1. Must be greater than 0.
  Returns: An array of integers incremented by the step value from start to stop, including the stop value.
 itr_in(stop, start, step) 
  Creates an array of floats from start to stop with a specified step, including the stop value.
  Parameters:
     stop (float) : The end value of the iterator, inclusive.
     start (float) : The starting value of the iterator. Default is 0.
     step (float) : The increment value for each step in the iterator. Default is 1. Must be greater than 0.
  Returns: An array of floats incremented by the step value from start to stop, including the stop value.
 method iterate(self, reverse) 
  Creates an iterator array for the indices of ana array, with an option to reverse the order.
  Namespace types: array
  Parameters:
     self (array) : The array to iterate over.
     reverse (bool) : A boolean flag indicating whether to reverse the iterator order. Default is false.
  Returns: An array of integers representing the indices of the array. The order can be reversed if specified.
 method iterate(self, reverse) 
  Creates an iterator array for the indices of ana array, with an option to reverse the order.
  Namespace types: array
  Parameters:
     self (array) : The array to iterate over.
     reverse (bool) : A boolean flag indicating whether to reverse the iterator order. Default is false.
  Returns: An array of integers representing the indices of the array. The order can be reversed if specified.
 method iterate(self, reverse) 
  Creates an iterator array for the indices of ana array, with an option to reverse the order.
  Namespace types: array
  Parameters:
     self (array) : The array to iterate over.
     reverse (bool) : A boolean flag indicating whether to reverse the iterator order. Default is false.
  Returns: An array of integers representing the indices of the array. The order can be reversed if specified.
 method iterate(self, reverse) 
  Creates an iterator array for the indices of ana array, with an option to reverse the order.
  Namespace types: array
  Parameters:
     self (array) : The array to iterate over.
     reverse (bool) : A boolean flag indicating whether to reverse the iterator order. Default is false.
  Returns: An array of integers representing the indices of the array. The order can be reversed if specified.
 method iterate(self, reverse) 
  Creates an iterator array for the indices of ana array, with an option to reverse the order.
  Namespace types: array
  Parameters:
     self (array) : The array to iterate over.
     reverse (bool) : A boolean flag indicating whether to reverse the iterator order. Default is false.
  Returns: An array of integers representing the indices of the array. The order can be reversed if specified.
 method iterate(self, reverse) 
  Creates an iterator array for the indices of ana array, with an option to reverse the order.
  Namespace types: array
  Parameters:
     self (array) : The array to iterate over.
     reverse (bool) : A boolean flag indicating whether to reverse the iterator order. Default is false.
  Returns: An array of integers representing the indices of the array. The order can be reversed if specified.
 method iterate(self, reverse) 
  Creates an iterator array for the indices of ana array, with an option to reverse the order.
  Namespace types: array
  Parameters:
     self (array) : The array to iterate over.
     reverse (bool) : A boolean flag indicating whether to reverse the iterator order. Default is false.
  Returns: An array of integers representing the indices of the array. The order can be reversed if specified.
 method iterate(self, reverse) 
  Creates an iterator array for the indices of ana array, with an option to reverse the order.
  Namespace types: array
  Parameters:
     self (array) : The array to iterate over.
     reverse (bool) : A boolean flag indicating whether to reverse the iterator order. Default is false.
  Returns: An array of integers representing the indices of the array. The order can be reversed if specified.
 method iterate(self, reverse) 
  Creates an iterator array for the indices of ana array, with an option to reverse the order.
  Namespace types: array
  Parameters:
     self (array) : The array to iterate over.
     reverse (bool) : A boolean flag indicating whether to reverse the iterator order. Default is false.
  Returns: An array of integers representing the indices of the array. The order can be reversed if specified.
 method iterate(self, reverse) 
  Creates an iterator array for the indices of ana array, with an option to reverse the order.
  Namespace types: array
  Parameters:
     self (array) : The array to iterate over.
     reverse (bool) : A boolean flag indicating whether to reverse the iterator order. Default is false.
  Returns: An array of integers representing the indices of the array. The order can be reversed if specified.
 method iterate(self, reverse) 
  Creates an iterator array for the indices of ana array, with an option to reverse the order.
  Namespace types: array
  Parameters:
     self (array) : The array to iterate over.
     reverse (bool) : A boolean flag indicating whether to reverse the iterator order. Default is false.
  Returns: An array of integers representing the indices of the array. The order can be reversed if specified.
 method iterate(self, reverse) 
  Creates an iterator array for the indices of ana array, with an option to reverse the order.
  Namespace types: array
  Parameters:
     self (array) : The array to iterate over.
     reverse (bool) : A boolean flag indicating whether to reverse the iterator order. Default is false.
  Returns: An array of integers representing the indices of the array. The order can be reversed if specified.
SpectrumLibrary   "Spectrum" 
    This library includes spectrum analysis tools such as the Fast Fourier Transform (FFT).
      
 method toComplex(data, polar) 
  Creates an array of complex type objects from a float type array.
  Namespace types: array
  Parameters:
     data (array) : The float type array of input data.
     polar (bool) : Initialization coordinates; the default is false (cartesian).
  Returns: The complex type array of converted data.
 method sAdd(data, value, end, start, step) 
  Performs scalar addition of a given float type array and a simple float value.
  Namespace types: array
  Parameters:
     data (array) : The float type array of input data.
     value (float) : The simple float type value to be added.
     end (int) : The last index of the input array (exclusive) on which the operation is performed.
     start (int) : The first index of the input array (inclusive) on which the operation is performed; the default value is 0.
     step (int) : The step by which the function iterates over the input data array between the specified boundaries; the default value is 1.
  Returns: The modified input array.
 method sMult(data, value, end, start, step) 
  Performs scalar multiplication of a given float type array and a simple float value.
  Namespace types: array
  Parameters:
     data (array) : The float type array of input data.
     value (float) : The simple float type value to be added.
     end (int) : The last index of the input array (exclusive) on which the operation is performed.
     start (int) : The first index of the input array (inclusive) on which the operation is performed; the default value is 0.
     step (int) : The step by which the function iterates over the input data array between the specified boundaries; the default value is 1.
  Returns: The modified input array.
 method eMult(data, data02, end, start, step) 
  Performs elementwise multiplication of two given complex type arrays.
  Namespace types: array
  Parameters:
     data (array type from RezzaHmt/Complex/1) : the first complex type array of input data.
     data02 (array type from RezzaHmt/Complex/1) : The second complex type array of input data.
     end (int) : The last index of the input arrays (exclusive) on which the operation is performed.
     start (int) : The first index of the input arrays (inclusive) on which the operation is performed; the default value is 0.
     step (int) : The step by which the function iterates over the input data array between the specified boundaries; the default value is 1.
  Returns: The modified first input array.
 method eCon(data, end, start, step) 
  Performs elementwise conjugation on a given complex type array.
  Namespace types: array
  Parameters:
     data (array type from RezzaHmt/Complex/1) : The complex type array of input data.
     end (int) : The last index of the input array (exclusive) on which the operation is performed.
     start (int) : The first index of the input array (inclusive) on which the operation is performed; the default value is 0.
     step (int) : The step by which the function iterates over the input data array between the specified boundaries; the default value is 1.
  Returns: The modified input array.
 method zeros(length) 
  Creates a complex type array of zeros.
  Namespace types: series int, simple int, input int, const int
  Parameters:
     length (int) : The size of array to be created.
 method bitReverse(data) 
  Rearranges a complex type array based on the bit-reverse permutations of its size after zero-padding.
  Namespace types: array
  Parameters:
     data (array type from RezzaHmt/Complex/1) : The complex type array of input data.
  Returns: The modified input array.
 method R2FFT(data, inverse) 
  Calculates Fourier Transform of a time series using Cooley-Tukey Radix-2 Decimation in Time FFT algorithm, wikipedia.org
  Namespace types: array
  Parameters:
     data (array type from RezzaHmt/Complex/1) : The complex type array of input data.
     inverse (int) : Set to -1 for FFT and to 1 for iFFT.
  Returns: The modified input array containing the FFT result.
 method LBFFT(data, inverse) 
  Calculates Fourier Transform of a time series using Leo Bluestein's FFT algorithm, wikipedia.org This function is nearly 4 times slower than the R2FFT function in practice.
  Namespace types: array
  Parameters:
     data (array type from RezzaHmt/Complex/1) : The complex type array of input data.
     inverse (int) : Set to -1 for FFT and to 1 for iFFT.
  Returns: The modified input array containing the FFT result.
 method DFT(data, inverse) 
  This is the original DFT algorithm. It is not suggested to be used regularly.
  Namespace types: array
  Parameters:
     data (array type from RezzaHmt/Complex/1) : The complex type array of input data.
     inverse (int) : Set to -1 for DFT and to 1 for iDFT.
  Returns: The complex type array of DFT result.
COMET_Scanner_Library_FINALLibrary   "COMET_Scanner_Library" 
- A Trader's Edge (ATE)_Library was created to assist in constructing COM Scanners
 TickerIDs(_string) 
  TickerIDs: You must form this single tickerID input string exactly as described in the scripts info panel (little gray 'i' that
is circled at the end of the settings in the settings/input panel that you can hover your cursor over this 'i' to read the
details of that particular input). IF the string is formed correctly then it will break up this single string parameter into
a total of 40 separate strings which will be all of the tickerIDs that the script is using in your COM Scanner.
  Parameters:
     _string (simple string) : (string)
A maximum of 40 Tickers (ALL joined as 1 string for the input parameter) that is formulated EXACTLY as described
within the tooltips of the TickerID inputs in my COM Scanner scripts:
assets = input.text_area(tIDs, title="TickerIDs (MUST READ TOOLTIP)", group=g2, tooltip="Accepts 40 TICKERID's
for each copy of the script on the chart.  *** MUST FORMAT THIS WAY ***  Each FULL tickerID
(ie 'Exchange:ticker') must be separated by A SINGLE BLANK SPACE for correct formatting. The blank space tells
the script where to break off the ticker to assign it to a variable to be used later in the script. So this input
will be a single string constructed from up to 40 tickerID's with a space between each tickerID
(ie. 'BINANCE:BTCUSDT BINANCE:SXPUSDT BINANCE:XRPUSDT').", display=display.none)
  Returns: Returns 40 output variables in the tuple (ie. between the ' ') with the separated TickerIDs,
 Locations(_firstLocation) 
  Locations: This function is used when there's a desire to print an assets ALERT LABELS. A set Location on the scale is assigned to each asset.
This is created so that if a lot of alerts are triggered, they will stay relatively visible and not overlap each other.
If you set your '_firstLocation' parameter as 1, since there are a max of 40 assets that can be scanned, the 1st asset's location
is assigned the value in the '_firstLocation' parameter, the 2nd asset's location is the (1st asset's location+1)...and so on.
  Parameters:
     _firstLocation (simple int) : (simple int)
Optional (starts at 1 if no parameter added).
Location that you want the first asset to print its label if is triggered to do so.
ie. loc2=loc1+1, loc3=loc2+1, etc.
  Returns: Returns 40 variables for the locations for alert labels
 LabelSize(_barCnt, _lblSzRfrnce) 
  INVALID TICKERIDs: This is to add a table in the middle right of your chart that prints all the TickerID's that were either not formulated
correctly in the '_source' input or that is not a valid symbol and should be changed.
LABEL SIZES: This function sizes your Alert Trigger Labels according to the amount of Printed Bars the chart has printed within
a set time period, while also keeping in mind the smallest relative reference size you input in the 'lblSzRfrnceInput'
parameter of this function. A HIGHER % of Printed Bars(aka...more trades occurring for that asset on the exchange),
the LARGER the Name Label will print, potentially showing you the better opportunities on the exchange to avoid
exchange manipulation liquidations.
*** SHOULD NOT be used as size of labels that are your asset Name Labels next to each asset's Line Plot...
if your COM Scanner includes these as you want these to be the same size for every asset so the larger ones dont cover the
smaller ones if the plots are all close to each other ***
  Parameters:
     _barCnt (float) : (float)
Get the 1st variable('barCnt') from the Security function's tuple and input it as this functions 1st input
parameter which will directly affect the size of the 2nd output variable ('alertTrigLabel') that is also outputted by this function.
     _lblSzRfrnce (string) : (string)
Optional (if parameter not included, it defaults to size.small). This will be the size of the variable outputted
by this function named 'assetNameLabel' BUT also affects the size of the output variable 'alertTrigLabel' as it uses this parameter's size
as the smallest size for 'alertTrigLabel' then uses the '_barCnt' parameter to determine the next sizes up depending on the "_barCnt" value.
  Returns: ( )
Returns 2 variables:
1st output variable ('AssetNameLabel') is assigned to the size of the 'lblSzRfrnceInput' parameter.
2nd output variable('alertTrigLabel') can be of variying sizes depending on the 'barCnt' parameter...BUT the smallest
size possible for the 2nd output variable ('alertTrigLabel') will be the size set in the 'lblSzRfrnceInput' parameter.
 InvalidTickerIDs(_close, _securityTickerid, _invalidArray, _tablePosition, _stackVertical) 
  Parameters:
     _close (float) 
     _securityTickerid (string) 
     _invalidArray (array) 
     _tablePosition (simple string) 
     _stackVertical (simple bool) 
 PrintedBarCount(_time, _barCntLength, _barCntPercentMin) 
  The Printed BarCount Filter looks back a User Defined amount of minutes and calculates the % of bars that have printed
out of the TOTAL amount of bars that COULD HAVE been printed within the same amount of time.
  Parameters:
     _time (int) : (int)
The time associated with the chart of the particular asset that is being screened at that point.
     _barCntLength (int) : (int)
The amount of time (IN MINUTES) that you want the logic to look back at to calculate the % of bars that have actually
printed in the span of time you input into this parameter.
     _barCntPercentMin (int) : (int)
The minimum % of Printed Bars of the asset being screened has to be GREATER than the value set in this parameter
for the output variable 'bc_gtg' to be true.
  Returns: ( )
Returns 2 outputs:
1st is the % of Printed Bars that have printed within the within the span of time you input in the '_barCntLength' parameter.
2nd is true/false according to if the Printed BarCount % is above the threshold that you input into the '_barCntPercentMin' parameter.
COM_Scanner_LibraryLibrary   "COM_Scanner_Library" 
- A Trader's Edge (ATE)_Library was created to assist in constructing COM Scanners
 TickerIDs(_string) 
  TickerIDs: You must form this single tickerID input string exactly as described in the scripts info panel (little gray 'i' that
is circled at the end of the settings in the settings/input panel that you can hover your cursor over this 'i' to read the
details of that particular input). IF the string is formed correctly then it will break up this single string parameter into
a total of 40 separate strings which will be all of the tickerIDs that the script is using in your COM Scanner.
  Parameters:
     _string (simple string) : (string)
A maximum of 40 Tickers (ALL joined as 1 string for the input parameter) that is formulated EXACTLY as described
within the tooltips of the TickerID inputs in my COM Scanner scripts:
assets = input.text_area(tIDs, title="TickerIDs (MUST READ TOOLTIP)", group=g2, tooltip="Accepts 40 TICKERID's
for each copy of the script on the chart.  *** MUST FORMAT THIS WAY ***  Each FULL tickerID
(ie 'Exchange:ticker') must be separated by A SINGLE BLANK SPACE for correct formatting. The blank space tells
the script where to break off the ticker to assign it to a variable to be used later in the script. So this input
will be a single string constructed from up to 40 tickerID's with a space between each tickerID
(ie. 'BINANCE:BTCUSDT BINANCE:SXPUSDT BINANCE:XRPUSDT').", display=display.none)
  Returns: Returns 40 output variables in the tuple (ie. between the ' ') with the separated TickerIDs,
 Locations(_firstLocation) 
  Locations: This function is used when there's a desire to print an assets ALERT LABELS. A set Location on the scale is assigned to each asset.
This is created so that if a lot of alerts are triggered, they will stay relatively visible and not overlap each other.
If you set your '_firstLocation' parameter as 1, since there are a max of 40 assets that can be scanned, the 1st asset's location
is assigned the value in the '_firstLocation' parameter, the 2nd asset's location is the (1st asset's location+1)...and so on.
  Parameters:
     _firstLocation (simple int) : (simple int)
Optional (starts at 1 if no parameter added).
Location that you want the first asset to print its label if is triggered to do so.
ie. loc2=loc1+1, loc3=loc2+1, etc.
  Returns: Returns 40 variables for the locations for alert labels
 LabelSize(_barCnt, _lblSzRfrnce) 
  INVALID TICKERIDs: This is to add a table in the middle right of your chart that prints all the TickerID's that were either not formulated
correctly in the '_source' input or that is not a valid symbol and should be changed.
LABEL SIZES: This function sizes your Alert Trigger Labels according to the amount of Printed Bars the chart has printed within
a set time period, while also keeping in mind the smallest relative reference size you input in the 'lblSzRfrnceInput'
parameter of this function. A HIGHER % of Printed Bars(aka...more trades occurring for that asset on the exchange),
the LARGER the Name Label will print, potentially showing you the better opportunities on the exchange to avoid
exchange manipulation liquidations.
*** SHOULD NOT be used as size of labels that are your asset Name Labels next to each asset's Line Plot...
if your COM Scanner includes these as you want these to be the same size for every asset so the larger ones dont cover the
smaller ones if the plots are all close to each other ***
  Parameters:
     _barCnt (float) : (float)
Get the 1st variable('barCnt') from the Security function's tuple and input it as this functions 1st input
parameter which will directly affect the size of the 2nd output variable ('alertTrigLabel') that is also outputted by this function.
     _lblSzRfrnce (string) : (string)
Optional (if parameter not included, it defaults to size.small). This will be the size of the variable outputted
by this function named 'assetNameLabel' BUT also affects the size of the output variable 'alertTrigLabel' as it uses this parameter's size
as the smallest size for 'alertTrigLabel' then uses the '_barCnt' parameter to determine the next sizes up depending on the "_barCnt" value.
  Returns: ( )
Returns 2 variables:
1st output variable ('AssetNameLabel') is assigned to the size of the 'lblSzRfrnceInput' parameter.
2nd output variable('alertTrigLabel') can be of variying sizes depending on the 'barCnt' parameter...BUT the smallest
size possible for the 2nd output variable ('alertTrigLabel') will be the size set in the 'lblSzRfrnceInput' parameter.
 InvalidTickerIDs(_close, _securityTickerid, _invalidArray, _tablePosition, _stackVertical) 
  Parameters:
     _close (float) 
     _securityTickerid (string) 
     _invalidArray (array) 
     _tablePosition (simple string) 
     _stackVertical (simple bool) 
 PrintedBarCount(_time, _barCntLength, _barCntPercentMin) 
  The Printed BarCount Filter looks back a User Defined amount of minutes and calculates the % of bars that have printed
out of the TOTAL amount of bars that COULD HAVE been printed within the same amount of time.
  Parameters:
     _time (int) : (int)
The time associated with the chart of the particular asset that is being screened at that point.
     _barCntLength (int) : (int)
The amount of time (IN MINUTES) that you want the logic to look back at to calculate the % of bars that have actually
printed in the span of time you input into this parameter.
     _barCntPercentMin (int) : (int)
The minimum % of Printed Bars of the asset being screened has to be GREATER than the value set in this parameter
for the output variable 'bc_gtg' to be true.
  Returns: ( )
Returns 2 outputs:
1st is the % of Printed Bars that have printed within the within the span of time you input in the '_barCntLength' parameter.
2nd is true/false according to if the Printed BarCount % is above the threshold that you input into the '_barCntPercentMin' parameter.
GraphLibrary   "Graph" 
Library to collect data and draw scatterplot and heatmap as graph
 method init(this) 
  Initialise Quadrant Data
  Namespace types: Quadrant
  Parameters:
     this (Quadrant) : Quadrant object that needs to be initialised
  Returns: current Quadrant object
 method init(this) 
  Initialise Graph Data
  Namespace types: Graph
  Parameters:
     this (Graph) : Graph object that needs to be initialised with 4 Quadrants
  Returns: current Graph object
 method add(this, data) 
  Add coordinates to graph
  Namespace types: Graph
  Parameters:
     this (Graph) : Graph object
     data (Coordinate) : Coordinates containing x, y data
  Returns: current Graph object
 method calculate(this) 
  Calculation required for plotting the graph
  Namespace types: Graph
  Parameters:
     this (Graph) : Graph object
  Returns: current Graph object
 method paint(this) 
  Draw graph
  Namespace types: Graph
  Parameters:
     this (Graph) : Graph object
  Returns: current Graph object
 Coordinate 
  Coordinates of sample data
  Fields:
     xValue (series float) : x value of the sample data
     yValue (series float) : y value of the sample data
 Quadrant 
  Data belonging to particular quadrant
  Fields:
     coordinates (array) : Coordinates present in given quadrant
 GraphProperties 
  Properties of Graph that needs to be drawn
  Fields:
     rows (series int) : Number of rows (y values) in each quadrant
     columns (series int) : number of columns (x values) in each quadrant
     graphtype (series GraphType) : Type of graph - scatterplot or heatmap
     plotColor (series color) : color of plots or heatmap
     plotSize (series string) : size of cells in the table
     plotchar (series string) : Character to be printed for display of scatterplot
     outliers (series int) : Excude the outlier percent of data from calculating the min and max
     position (series string) : Table position
     bgColor (series color) : graph background color
 PlotRange 
  Range of a plot in terms of x and y values and the number of data points that fall within the Range
  Fields:
     minX (series float) : min range of X value
     maxX (series float) : max range of X value
     minY (series float) : min range of Y value
     maxY (series float) : max range of Y value
     count (series int) : number of samples in the range
 Graph 
  Graph data and properties
  Fields:
     properties (GraphProperties) : Graph Properties object associated
     quadrants (array) : Array containing 4 quadrant data
     plotRanges (matrix) : range and count for each cell
     xArray (array) : array of x values
     yArray (array) : arrray of y values
InsertionSortLibrary   "InsertionSort" 
Library of sorting algorithm for binary insertion sort and related methods
 method binary_insertion_sort(sortedArray, item, order) 
  binary insertion sort - inserts item into sorted array while maintaining sort order
  Namespace types: array
  Parameters:
     sortedArray (array) : array which is assumed to be sorted in the requested order
     item (float) : float|int item which needs to be inserted into sorted array
     order (series ORDER) : Sort order - positive number means ascending order whereas negative number represents descending order
  Returns: int index at which the item is inserted into sorted array
 method binary_insertion_sort(sortedArray, item, order) 
  Namespace types: array
  Parameters:
     sortedArray (array) 
     item (int) 
     order (series ORDER)
BinaryLibrary   "Binary" 
        This library includes functions to convert between decimal and binary numeral formats, and logical and arithmetic operations on binary numbers.
 method toBin(value) 
  Converts the provided boolean value into binary integers (0 or 1).
  Namespace types: series bool, simple bool, input bool, const bool
  Parameters:
     value (bool) : The boolean value to be converted.
  Returns: The converted value in binary integers.
 method dec2bin(value, iBits, fBits) 
  Converts a decimal number into its binary representation.
  Namespace types: series float, simple float, input float, const float
  Parameters:
     value (float) : The decimal number to be converted.
     iBits (int) : The number of binary digits allocated for the integer part.
     fBits (int) : The number of binary digits allocated for the fractional part.
  Returns: An array containing the binary digits for the integer part at the rightmost positions and the digits for the fractional part at the leftmost positions. The array indexes correspond to the bit positions.
 method bin2dec(value, iBits, fBits) 
  Converts a binary number into its decimal representation.
  Namespace types: array
  Parameters:
     value (array) : The binary number to be converted.
     iBits (int) : The number of binary digits allocated for the integer part.
     fBits (int) : The number of binary digits allocated for the fractional part.
  Returns: The converted value in decimal format.
 method lgcAnd(a, b) 
  Bitwise logical AND of two binary numbers. The result of ANDing two binary digits is 1 only if both digits are 1, otherwise, 0.
  Namespace types: array
  Parameters:
     a (array) : First binary number.
     b (array) : Second binary number.
  Returns: An array containing the logical AND of the inputs.
 method lgcOr(a, b) 
  Bitwise logical OR of two binary numbers. The result of ORing two binary digits is 0 only if both digits are 0, otherwise, 1.
  Namespace types: array
  Parameters:
     a (array) : First binary number.
     b (array) : Second binary number.
  Returns: An array containing the logical OR of the inputs.
 method lgcXor(a, b) 
  Bitwise logical XOR of two binary numbers. The result of XORing two binary digits is 1 only if ONE of the digits is 1, otherwise, 0.
  Namespace types: array
  Parameters:
     a (array) : First binary number.
     b (array) : Second binary number.
  Returns: An array containing the logical XOR of the inputs.
 method lgcNand(a, b) 
  Bitwise logical NAND of two binary numbers. The result of NANDing two binary digits is 0 only if both digits are 1, otherwise, 1.
  Namespace types: array
  Parameters:
     a (array) : First binary number.
     b (array) : Second binary number.
  Returns: An array containing the logical NAND of the inputs.
 method lgcNor(a, b) 
  Bitwise logical NOR of two binary numbers. The result of NORing two binary digits is 1 only if both digits are 0, otherwise, 0.
  Namespace types: array
  Parameters:
     a (array) : First binary number.
     b (array) : Second binary number.
  Returns: An array containing the logical NOR of the inputs.
 method lgcNot(a) 
  Bitwise logical NOT of a binary number. The result of NOTing a binary digit is 0 if the digit is 1, or vice versa.
  Namespace types: array
  Parameters:
     a (array) : A binary number.
  Returns: An array containing the logical NOT of the input.
 method lgc2sC(a) 
  2's complement of a binary number. The 2's complement of a binary number N with n digits is defined as 2^(n) - N.
  Namespace types: array
  Parameters:
     a (array) : A binary number.
  Returns: An array containing the 2's complement of the input.
 method shift(value, direction, newBit) 
  Shifts a binary number in the specified direction by one position.
  Namespace types: array
  Parameters:
     value (array) 
     direction (int) : The direction of the shift operation.
     newBit (int) : The bit to be inserted into the unoccupied slot.
  Returns: A tuple of the shifted binary number and the serial output of the shift operation.
 method multiShift(value, direction, newBits) 
  Shifts a binary number in the specified direction by multiple positions.
  Namespace types: array
  Parameters:
     value (array) 
     direction (int) : The direction of the shift operation.
     newBits (array) 
  Returns: A tuple of the shifted binary number and the serial output of the shift operation.
 method crclrShift(value, direction, count) 
  Circularly shifts a binary number in the specified direction by multiple positions. Each ejected bit is inserted from the opposite side.
  Namespace types: array
  Parameters:
     value (array) 
     direction (int) : The direction of the shift operation.
     count (int) : The number of positions to be shifted by.
  Returns: The shifted binary number.
 method arithmeticShift(value, direction, count) 
  Performs arithmetic shift on a binary number in the specified direction by multiple positions. Every new bit is 0 if the shift is leftward, otherwise, it equals the sign bit.
  Namespace types: array
  Parameters:
     value (array) 
     direction (int) : The direction of the shift operation.
     count (int) : The number of positions to be shifted by.
  Returns: The shifted binary number.
 method add(a, b, carry) 
  Performs arithmetic addition on two binary numbers.
  Namespace types: array
  Parameters:
     a (array) : First binary number.
     b (array) : Second binary number.
     carry (int) : The input carry of the operation.
  Returns: The result of the arithmetic addition of the inputs.
 method sub(a, b, carry) 
  Performs arithmetic subtraction on two binary numbers.
  Namespace types: array
  Parameters:
     a (array) : First binary number.
     b (array) : Second binary number. The number to be subtracted.
     carry (int) : The input carry of the operation.
  Returns: The result of the arithmetic subtraction of the input b from the input a.
TradingUtilsLibrary   "TradingUtils" 
Utility library for common trading functions
 calcVariation(price, threshold) 
  Calculates variation of a price based on a threshold
  Parameters:
     price (float) : (float) The price to be varied
     threshold (float) : (float) The threshold for the variation
  Returns: (float) The varied price
 sendAlert(action, symbol, orderType, quantity, message) 
  Sends an alert message in JSON format
  Parameters:
     action (string) : (string) The action to be taken (e.g., "BUY", "SELL")
     symbol (string) : (string) The trading symbol (e.g., "BTCUSDT")
     orderType (string) : (string) The order type (e.g., "MARKET")
     quantity (float) : (float) The quantity of the order
     message (string) : (string) The message to be included in the alert
 updateLine(condition, index, price, lineColor) 
  Updates or creates a line on the chart
  Parameters:
     condition (bool) : (bool) Condition to check if the line should be updated or created
     index (int) : (int) The current bar index
     price (float) : (float) The price value for the line
     lineColor (color) : (color) The color of the line
  Returns: (line) The updated or newly created line
JohtiLiquidityThis libraray will be provide the liquity points that's will be help to find exact point people going to take trades and it will the most important area 
MathTransformLibrary   "MathTransform" 
Auxiliary functions for transforming data using mathematical and statistical methods
 scaler_zscore(x, lookback_window) 
  Calculates Z-Score normalization of a series.
  Parameters:
     x (float) : : floating point series to normalize
     lookback_window (int) : : lookback period for calculating mean and standard deviation
  Returns: Z-Score normalized series
 scaler_min_max(x, lookback_window, min_val, max_val, empiric_min, empiric_max, empiric_mid) 
  Performs Min-Max scaling of a series within a given window, user-defined bounds, and optional midpoint
  Parameters:
     x (float) : : floating point series to transform
     lookback_window (int) : : int : optional lookback window size to consider for scaling.
     min_val (float) : : float : minimum value of the scaled range. Default is 0.0.
     max_val (float) : : float : maximum value of the scaled range. Default is 1.0.
     empiric_min (float) : : float : user-defined minimum value of the input data. This means that the output could exceed the `min_val` bound if there is data in `x` lesser than `empiric_min`. If na, it's calculated from `x` and `lookback_window`.
     empiric_max (float) : : float : user-defined maximum value of the input data. This means that the output could exceed the `max_val` bound if there is data in `x` greater than `empiric_max`. If na, it's calculated from `x` and `lookback_window`.
     empiric_mid (float) : : float : user-defined midpoint value of the input data. If na, it's calculated from `empiric_min` and `empiric_max`.
  Returns: rescaled series
 log(x, base) 
  Applies logarithmic transformation to a value, base can be user-defined.
  Parameters:
     x (float) : : floating point value to transform
     base (float) : : logarithmic base, must be greater than 0
  Returns: logarithm of the value to the given base, if x <= 0, returns logarithm of 1 to the given base
 exp(x, base) 
  Applies exponential transformation to a value, base can be user-defined.
  Parameters:
     x (float) : : floating point value to transform
     base (float) : : base of the exponentiation, must be greater than 0
  Returns: the result of raising the base to the power of the value
 power(x, exponent) 
  Applies power transformation to a value, exponent can be user-defined.
  Parameters:
     x (float) : : floating point value to transform
     exponent (float) : : exponent for the transformation
  Returns: the value raised to the given exponent, preserving the sign of the original value
 tanh(x, scale) 
  The hyperbolic tangent is the ratio of the hyperbolic sine and hyperbolic cosine. It limits an output to a range of −1 to 1.
  Parameters:
     x (float) : : floating point series
     scale (float) 
 sigmoid(x, scale, offset) 
  Applies the sigmoid function to a series.
  Parameters:
     x (float) : : floating point series to transform
     scale (float) : : scaling factor for the sigmoid function
     offset (float) : : offset for the sigmoid function
  Returns: transformed series using the sigmoid function
 sigmoid_double(x, scale, offset) 
  Applies a double sigmoid function to a series, handling positive and negative values differently.
  Parameters:
     x (float) : : floating point series to transform
     scale (float) : : scaling factor for the sigmoid function
     offset (float) : : offset for the sigmoid function
  Returns: transformed series using the double sigmoid function
 logistic_decay(a, b, c, t) 
  Calculates logistic decay based on given parameters.
  Parameters:
     a (float) : : parameter affecting the steepness of the curve
     b (float) : : parameter affecting the direction of the decay
     c (float) : : the upper bound of the function's output
     t (float) : : time variable
  Returns: value of the logistic decay function at time t






















