CalendarCadLibrary   "CalendarCad" 
This library provides date and time data of the important events on CAD. Data source is csv exported from www.fxstreet.com and transformed into perfered format by C# script.
 HighImpactNews2015To2023() 
  CAD high impact news date and time from 2015 to 2023
Timesessions
CalendarEurLibrary   "CalendarEur" 
This library provides date and time data of the important events on EUR. Data source is csv exported from www.fxstreet.com and transformed into perfered format by C# script.
 HighImpactNews2015To2019() 
  EUR high impact news date and time from 2015 to 2019
 HighImpactNews2020To2023() 
  EUR high impact news date and time from 2020 to 2023
CalendarGbpLibrary   "CalendarGbp" 
This library provides date and time data of the important events on GBP. Data source is csv exported from www.fxstreet.com and transformed into perfered format by C# script.
 HighImpactNews2015To2019() 
  GBP high impact news date and time from 2015 to 2019
 HighImpactNews2020To2023() 
  GBP high impact news date and time from 2020 to 2023
CalendarJpyLibrary   "CalendarJpy" 
This library provides date and time data of the important events on JPY. Data source is csv exported from www.fxstreet.com and transformed into perfered format by C# script.
 HighImpactNews2015To2023() 
  JPY high impact news date and time from 2015 to 2023
CalendarUsdLibrary   "CalendarUsd" 
This library provides date and time data of the important events on USD. Data source is csv exported from www.fxstreet.com and transformed into perfered format by C# script.
 HighImpactNews2015To2019() 
  USD high impact news date and time from 2015 to 2019
 HighImpactNews2020To2023() 
  USD high impact news date and time from 2020 to 2023
NewsEventsGbpLibrary   "NewsEventsGbp" 
This library provides date and time data of the high imact news events on GBP. Data source is csv exported from www.fxstreet.com and transformed into perfered format by C# script.
 gbpNews2015To2019() 
  GBP high imact news date and time from 2015 to 2019
 gbpNews2020To2023() 
  GBP high imact news date and time from 2020 to 2023
NewsEventsEurLibrary   "NewsEventsEur" 
This library provides date and time data of the high imact news events on EUR. Data source is csv exported from www.fxstreet.com and transformed into perfered format by C# script.
 eurNews2015To2019() 
  EUR high imact news date and time from 2015 to 2019
 eurNews2020To2023() 
  EUR high imact news date and time from 2020 to 2023
NewsEventsJpyLibrary   "NewsEventsJpy" 
This library provides date and time data of the high imact news events on JPY. Data source is csv exported from www.fxstreet.com and transformed into perfered format by C# script.
 jpyNews2015To2023() 
  JPY high imact news date and time from 2015 to 2023
NewsEventsCadLibrary   "NewsEventsCad" 
This library provides date and time data of the high imact news events on CAD. Data source is csv exported from www.fxstreet.com and transformed into perfered format by C# script.
 cadNews2015To2023() 
  CAD high imact news date and time from 2015 to 2023
NewsEventsUsdLibrary   "NewsEventsUsd" 
This library provides date and time data of the high imact news events on USD. Data source is csv exported from www.fxstreet.com and transformed into perfered format by C# script.
 usdNews2015To2019() 
  USD high imact news date and time from 2015 to 2019
 usdNews2020To2023() 
  USD high imact news date and time from 2020 to 2023
lib_trackingLibrary   "lib_tracking" 
tracking highest and lowest with anchor point to track over dynamic periods, e.g. to track a Session HH/LL live and get the bar/time of the LTF wick that matches the HTF HH/LL
// DESIGN DECISION
// why anchored replacements for ta.highest / ta.highestbars / ta.lowest / ta.lowestbars:
// 1. they require a fixed length/lookback which makes it easier to calculate, but
// 2. this prevents us from tracking the HH/LL of a changing timeframe, e.g. live tracking the HH/LL of a running session or unfinished higher timeframe
// 3. tracking with anchor/start/reset flag allows to persist values until the next start/reset, so no other external storage is required
 track_highest(value, reset, track_this_bar) 
  Parameters:
     value (float) 
     reset (bool) : boolean flag to restart tracking from this point (a.k.a anchor)
     track_this_bar (bool) : allows enabling and disabling of tracking, e.g. before a session starts or after it ends, values can be kept until next reset.
 track_lowest(value, reset, track_this_bar) 
  Parameters:
     value (float) 
     reset (bool) : boolean flag to restart tracking from this point (a.k.a anchor)
     track_this_bar (bool) : allows enabling and disabling of tracking, e.g. before a session starts or after it ends, values can be kept until next reset.
 track_hl_htf(htf, value_high, value_low) 
  Parameters:
     htf (string) : the higher timeframe in pinescript string notation
     value_high (float) 
     value_low (float) 
  Returns: 
RelativeValue█  OVERVIEW 
This library is a Pine Script™ programmer's tool offering the ability to compute relative values, which represent comparisons of current data points, such as volume, price, or custom indicators, with their analogous historical data points from corresponding time offsets. This approach can provide insightful perspectives into the intricate dynamics of relative market behavior over time.
█  CONCEPTS 
 Relative values 
In this library, a  relative value  is a metric that compares a current data point in a time interval to an average of data points with corresponding time offsets across historical periods. Its purpose is to assess the significance of a value by considering the historical context within past time intervals.
For instance, suppose we wanted to calculate relative volume on an hourly chart over five daily periods, and the last chart bar is two hours into the current trading day. In this case, we would compare the current volume to the average of volume in the second hour of trading across five days. We obtain the relative volume value by dividing the current volume by this average.
This form of analysis rests on the hypothesis that substantial discrepancies or aberrations in present market activity relative to historical time intervals  might  help indicate upcoming changes in market trends. 
 Cumulative and non-cumulative values 
In the context of this library, a  cumulative value  refers to the cumulative sum of a series since the last occurrence of a specific condition (referred to as `anchor` in the function definitions). Given that relative values depend on time, we use time-based conditions such as the onset of a new hour, day, etc. On the other hand, a  non-cumulative value  is simply the series value at a specific time without accumulation. 
 Calculating relative values 
Four main functions coordinate together to compute the relative values: `maintainArray()`, `calcAverageByTime()`, `calcCumulativeSeries()`, and `averageAtTime()`. These functions are underpinned by a `collectedData`  user-defined type  (UDT), which stores data collected since the last reset of the timeframe along with their corresponding timestamps. The relative values are calculated using the following procedure: 
 1. The `averageAtTime()` function invokes the process leveraging all four of the methods and acts as the main driver of the calculations. For each bar, this function adds the current bar's source and corresponding time value to a `collectedData` object.
 2. Within the `averageAtTime()` function, the `maintainArray()` function is called at the start of each anchor period. It adds a new `collectedData` object to the array and ensures the array size does not exceed the predefined `maxSize` by removing the oldest element when necessary. This method plays an essential role in limiting memory usage and ensuring only relevant data over the desired number of periods is in the calculation window.
 3. Next, the `calcAverageByTime()` function calculates the average value of elements within the `data` field for each `collectedData` object that corresponds to the same time offset from each anchor condition. This method accounts for cases where the current index of a `collectedData` object exceeds the last index of any past objects by using the last available values instead.
 4. For cumulative calculations, the `averageAtTime()` function utilizes the `isCumulative` boolean parameter. If true, the `calcCumulativeSeries()` function will track the running total of the source data from the last bar where the anchor condition was met, providing a cumulative sum of the source values from one anchor point to the next.
To summarize, the `averageAtTime()` function continually stores values with their corresponding times in a `collectedData` object for each bar in the anchor period. When the anchor resets, this object is added to a larger array. The array's size is limited by the specified number of periods to be averaged. To correlate data across these periods, time indexing is employed, enabling the function to compare corresponding points across multiple periods. 
█  USING THIS LIBRARY 
The library simplifies the complex process of calculating relative values through its intuitive functions. Follow the steps below to use this library in your scripts.
 Step 1: Import the library and declare inputs 
Import the library and declare variables based on the user's input. These can include the timeframe for each period, the number of time intervals to include in the average, and whether the calculation uses cumulative values. For example:
 //@version=5
import TradingView/RelativeValue/1 as TVrv
indicator("Relative Range Demo")
string resetTimeInput = input.timeframe("D")
int    lengthInput    = input.int(5, "No. of periods") 
 Step 2: Define the anchor condition 
With these inputs declared, create a condition to define the start of a new period (anchor). For this, we use the change in the time value from the input timeframe:
 bool anchor = timeframe.change(resetTimeInput) 
 Step 3: Calculate the average 
At this point, one can calculate the average of a value's history at the time offset from the anchor over a number of periods using the `averageAtTime()` function. In this example, we use True Range (TR) as the `source` and set `isCumulative` to false:
 float pastRange = TVrv.averageAtTime(ta.tr, lengthInput, anchor, false) 
 Step 4: Display the data 
You can visualize the results by plotting the returned series. These lines display the non-cumulative TR alongside the average value over `lengthInput` periods for relative comparison:
 plot(pastRange, "Past True Range Avg", color.new(chart.bg_color, 70), 1, plot.style_columns)
plot(ta.tr, "True Range", close >= open ? color.new(color.teal, 50) : color.new(color.red, 50), 1, plot.style_columns) 
This example will display two overlapping series of columns. The green and red columns depict the current TR on each bar, and the light gray columns show the average over a defined number of periods, e.g., the default inputs on an hourly chart will show the average value at the hour over the past five days. This comparative analysis aids in determining whether the range of a bar aligns with its typical historical values or if it's an outlier.
█  NOTES 
 • The foundational concept of this library was derived from our initial  Relative Volume at Time  script. This library's logic significantly boosts its performance. Keep an eye out for a forthcoming updated version of the indicator. The demonstration code included in the library emulates a streamlined version of the indicator utilizing the library functions.
 • Key efficiencies in the data management are realized through  array.binary_search_leftmost() , which offers a performance improvement in comparison to its loop-dependent counterpart.
 • This library's architecture utilizes  user-defined types  (UDTs) to create custom  objects  which are the equivalent of variables containing multiple parts, each able to hold independent values of different   types . The recently added feature was announced in  this  blog post. 
 • To enhance readability, the code substitutes  array  functions with equivalent  methods . 
 Look first. Then leap.  
█  FUNCTIONS  
This library contains the following functions:
 calcCumulativeSeries(source, anchor) 
  Calculates the cumulative sum of `source` since the last bar where `anchor` was `true`.
  Parameters:
     source (series float) : Source used for the calculation.
     anchor (series bool) : The condition that triggers the reset of the calculation. The calculation is reset when `anchor` evaluates to `true`, and continues using the values accumulated since the previous reset when `anchor` is `false`.
  Returns: (float) The cumulative sum of `source`.
 averageAtTime(source, length, anchor, isCumulative) 
  Calculates the average of all `source` values that share the same time difference from the `anchor` as the current bar for the most recent `length` bars.
  Parameters:
     source (series float) : Source used for the calculation.
     length (simple int) : The number of reset periods to consider for the average calculation of historical data.
     anchor (series bool) : The condition that triggers the reset of the average calculation. The calculation is reset when `anchor` evaluates to `true`, and continues using the values accumulated since the previous reset when `anchor` is `false`.
     isCumulative (simple bool) : If `true`, `source` values are accumulated until the next time `anchor` is `true`. Optional. The default is `true`.
  Returns: (float) The average of the source series at the specified time difference.
LibraryTimeframeHelperLibrary   "LibraryTimeframeHelper" 
Helper functions to work with timeframes: to get the next higher TF, and to make the string pretty for use in labels. Perhaps I'll add more later.
 f_getHigherTF(_TF) 
  f_getHigherTF(): Converts the input timeframe into the next one up in the list of commonly used timeframes. NOTE: You can NOT use a TF from this function as input to a request.security() call if called from this library because it gets converted to a series (since there's nothing special about this function, I expect this probably goes for any library). However, you CAN copy the code and use it directly in your script, in which case the output is only a simple variable and thus suitable for the timeframe of a request.security() call.
  Parameters:
     _TF (string)  - The timeframe to convert.
  Returns: : A string in standard timeframe format.
 f_prettifyTF(_TF) 
  f_prettifyTF(): Converts the input timeframe from standard timeframe format to the format shown by TradingView on a chart. The output is not suitable for use as an input timeframe of a request.security() call.
  Parameters:
     _TF (string)  - The timeframe to convert.
  Returns: : A string in prettified timeframe format.
SessionAndTimeFct_publicLibrary   "SessionAndTimeFct_public" 
 is_in_session(sessionTime, sessionTimeZone) 
  : Check if actual bar is in specific session with specific time zone
  Parameters:
     sessionTime 
     sessionTimeZone 
 is_session_start(sessionTime, sessionTimeZone) 
  : Check if actual bar the first bar of a specific session
  Parameters:
     sessionTime 
     sessionTimeZone 
 is_new_day(timeZone) 
  : Check if a new day started
  Parameters:
     timeZone 
 is_new_week(timeZone) 
  : Check if a new week started
  Parameters:
     timeZone 
 is_new_month(timeZone) 
  : Check if a new month started
  Parameters:
     timeZone 
 is_element_to_show_with_tf_up(base, value) 
  : Check if an element is to show compared to a specific timeframe >
  Parameters:
     base 
     value 
 is_element_to_show_with_tf_down(base, value) 
  : Check if an element is to show compared to a specific timeframe <
  Parameters:
     base 
     value
FrizLabz_Time_Utility_MethodsLibrary   "FrizLabz_Time_Utility_Methods" 
Some time to index and index to time helper methods made them for another library thought I would try to make
them as methods
 UTC_helper(utc) 
  UTC helper function this adds the + to the positive utc times, add "UTC" to the string
       and can be used in the timezone arg of for format_time()
  Parameters:
     utc : (int) | +/- utc offset
  Returns: string | string to be added to the timezone paramater for utc timezone usage
 bar_time(bar_amount) 
  from a time to index
  Parameters:
     bar_amount : (int) | default - 1)
  Returns: int bar_time
 time_to_index(_time) 
  from time to bar_index
  Parameters:
     _time : (int) 
  Returns: int time_to_index | bar_index that corresponds to time provided
 time_to_bars_back(_time) 
  from a time quanity to bar quanity for use with  .
  Parameters:
     _time : (int) 
  Returns: int bars_back | yeilds the amount of bars from current bar to reach _time provided
 bars_back_to_time(bars_back) 
  from bars_back to time
  Parameters:
     bars_back 
  Returns: int | using same logic as   this will return the 
                    time of the bar = to the bar that corresponds to   bars_back
 index_time(index) 
  bar_index to UNIX time
  Parameters:
     index : (int) 
  Returns: int time | time in unix that corrresponds to the bar_index
 to_utc(time_or_index, timezone, format) 
  method to use with a time or bar_index variable that will detect if it is an index or unix time
       and convert it to a printable string
  Parameters:
     time_or_index : (int) required) | time in unix or bar_index
     timezone : (int) required) | utc offset to be appled to output
     format : (string) | default - "yyyy-MM-dd'T'HH:mm:ssZ") | the format for the time, provided string is 
                                     default one from str.format_time()
  Returns: string | time formatted string
 GET(line) 
  Gets the location paramaters of a Line
  Parameters:
     line : (line)
  Returns: tuple  
 GET(box) 
  Gets the location paramaters of a Box
  Parameters:
     box : (box)
  Returns: tuple  
 GET(label) 
  Gets the location paramaters and text of a Label
  Parameters:
     label : (label)
  Returns: tuple  
 GET(linefill) 
  Gets line 1 and 2 from a Linefill
  Parameters:
     linefill : (linefill)
  Returns: tuple  
 Format(line, timezone) 
  converts Unix time in time or index params to formatted time
       and returns a tuple of the params as string with the time/index params formatted
  Parameters:
     line : (line) | required
     timezone : (int) | default - na
  Returns: tuple  
 Line(x1, y1, x2, y2, extend, color, style, width) 
  similar to line.new() with the exception
       of not needing to include y2 for a flat line, y1 defaults to close, 
       and it doesnt require xloc.bar_time or xloc.bar_index, if no x1
  Parameters:
     x1 : (int) default - time
     y1 : (float) default - close
     x2 : (int) default - last_bar_time/last_bar_index | not required for line that ends on current bar
     y2 : (float) default - y1 | not required for flat line
     extend : (string) default - extend.none | extend.left, extend.right, extend.both
     color : (color) default - chart.fg_color
     style : (string) default - line.style_solid | line.style_dotted, line.style_dashed, 
                                  line.style_arrow_both, line.style_arrow_left, line.style_arrow_right
     width 
  Returns: line
 Box(left, top, right, bottom, extend, border_color, bgcolor, text_color, border_width, border_style, txt, text_halign, text_valign, text_size, text_wrap) 
  similar to box.new() but only requires top and bottom to create box,
       auto detects if it is bar_index or time used in the (left) arg. xloc.bar_time and xloc.bar_index are not used
       args are ordered by purpose | position -> colors -> styling -> text options
  Parameters:
     left : (int) default - time 
     top : (float) required 
     right : (int) default - last_bar_time/last_bar_index | will default to current bar index or time 
                                  depending on (left) arg
     bottom : (float) required
     extend : (string) default - extend.none | extend.left, extend.right, extend.both
     border_color : (color) default - chart.fg_color
     bgcolor : (color) default - color.new(chart.fg_color,75)
     text_color : (color) default - chart.bg_color
     border_width : (int) default - 1 
     border_style : (string) default - line.style_solid | line.style_dotted, line.style_dashed, 
     txt : (string) default - ''
     text_halign : (string) default - text.align_center | text.align_left, text.align_right
     text_valign : (string) default - text.align_center | text.align_top, text.align_bottom 
     text_size : (string) default - size.normal | size.tiny, size.small, size.large, size.huge 
     text_wrap : (string) default - text.wrap_auto | text.wrap_none
  Returns: box
 Label(x, y, txt, yloc, color, textcolor, style, size, textalign, text_font_family, tooltip) 
  similar to label.new() but only requires no args to create label,
       auto detects if it is bar_index or time used in the (x) arg. xloc.bar_time and xloc.bar_index are not used
       args are ordered by purpose | position -> colors -> styling -> text options
  Parameters:
     x : (int) default - time
     y : (float) default - high or low | depending on bar direction
     txt : (string) default - ''
     yloc : (string) default - yloc.price | yloc.price, yloc.abovebar, yloc.belowbar
     color : (color) default - chart.fg_color
     textcolor : (color) default - chart.bg_color
     style : (string) default - label.style_label_down | label.style_none
                                  label.style_xcross,label.style_cross,label.style_triangleup,label.style_triangledown
                                  label.style_flag, label.style_circle, label.style_arrowup, label.style_arrowdown, 
                                  label.style_label_up, label.style_label_down, label.style_label_left, label.style_label_right, 
                                  label.style_label_lower_left, label.style_label_lower_right, label.style_label_upper_left, 
                                  label.style_label_upper_right, label.style_label_center, label.style_square, 
                                  label.style_diamond
     size : (string) default - size.normal | size.tiny, size.small, size.large, size.huge
     textalign : (string) default - text.align_center | text.align_left, text.align_right
     text_font_family : (string) default - font.family_default | font.family_monospace
     tooltip : (string) default - na
  Returns: label
EventsLibrary   "Events" 
 events() 
  Returns the list of dates supported by this library as a string array.
  Returns: array : Names of events supported by this library
 fomcMeetings() 
  Gets the FOMC Meeting Dates. The FOMC meets eight times a year to determine the course of monetary policy. The FOMC announces its decision on the federal funds rate at the conclusion of each meeting and also issues a statement that provides information on the economic outlook and the Committee's assessment of the risks to the outlook.
  Returns: array : FOMC Meeting Dates as timestamps
 fomcMinutes() 
  Gets the FOMC Meeting Minutes Dates. The FOMC Minutes are released three weeks after each FOMC meeting. The Minutes provide information on the Committee's deliberations and decisions at the meeting.
  Returns: array : FOMC Meeting Minutes Dates as timestamps
 ppiReleases() 
  Gets the Producer Price Index (PPI) Dates. The Producer Price Index (PPI) measures the average change over time in the selling prices received by domestic producers for their output. The PPI is a leading indicator of CPI, and CPI is a leading indicator of inflation.
  Returns: array : PPI Dates as timestamps
 cpiReleases() 
  Gets the Consumer Price Index (CPI) Rekease Dates. The Consumer Price Index (CPI) measures changes in the price level of a market basket of consumer goods and services purchased by households. The CPI is a leading indicator of inflation.
  Returns: array : CPI Dates as timestamps
 csiReleases() 
  Gets the CSI release dates. The Consumer Sentiment Index (CSI) is a survey of consumer attitudes about the economy and their personal finances. The CSI is a leading indicator of consumer spending.
  Returns: array : CSI Dates as timestamps
 cciReleases() 
  Gets the CCI release dates. The Conference Board's Consumer Confidence Index (CCI) is a survey of consumer attitudes about the economy and their personal finances. The CCI is a leading indicator of consumer spending.
  Returns: array : CCI Dates as timestamps
 nfpReleases() 
  Gets the NFP release dates. Nonfarm payrolls is an employment report released monthly by the Bureau of Labor Statistics (BLS) that measures the change in the number of employed people in the United States.
  Returns: array : NFP Dates as timestamps
 eciReleases() 
  Gets the ECI The Employment Cost Index (ECI) is a measure of the change in the cost of labor,
SH_LibraryLibrary   "SH_Library" 
 events() 
  Returns the list of dates supported by this library as a string array.
  Returns: array : Names of events supported by this library
 fomcMeetings() 
  Gets the FOMC Meeting Dates. The FOMC meets eight times a year to determine the course of monetary policy. The FOMC announces its decision on the federal funds rate at the conclusion of each meeting and also issues a statement that provides information on the economic outlook and the Committee's assessment of the risks to the outlook.
  Returns: array : FOMC Meeting Dates as timestamps
 fomcMinutes() 
  Gets the FOMC Meeting Minutes Dates. The FOMC Minutes are released three weeks after each FOMC meeting. The Minutes provide information on the Committee's deliberations and decisions at the meeting.
  Returns: array : FOMC Meeting Minutes Dates as timestamps
 ppiReleases() 
  Gets the Producer Price Index (PPI) Dates. The Producer Price Index (PPI) measures the average change over time in the selling prices received by domestic producers for their output. The PPI is a leading indicator of CPI, and CPI is a leading indicator of inflation.
  Returns: array : PPI Dates as timestamps
 cpiReleases() 
  Gets the Consumer Price Index (CPI) Rekease Dates. The Consumer Price Index (CPI) measures changes in the price level of a market basket of consumer goods and services purchased by households. The CPI is a leading indicator of inflation.
  Returns: array : CPI Dates as timestamps
 csiReleases() 
  Gets the CSI release dates. The Consumer Sentiment Index (CSI) is a survey of consumer attitudes about the economy and their personal finances. The CSI is a leading indicator of consumer spending.
  Returns: array : CSI Dates as timestamps
 cciReleases() 
  Gets the CCI release dates. The Conference Board's Consumer Confidence Index (CCI) is a survey of consumer attitudes about the economy and their personal finances. The CCI is a leading indicator of consumer spending.
  Returns: array : CCI Dates as timestamps
 nfpReleases() 
  Gets the NFP release dates. Nonfarm payrolls is an employment report released monthly by the Bureau of Labor Statistics (BLS) that measures the change in the number of employed people in the United States.
  Returns: array : NFP Dates as timestamps
 eciReleases() 
  Gets the ECI The Employment Cost Index (ECI) is a measure of the change in the cost of labor,
ISODateTimeLibrary   "ISODateTime" 
 getDateParts(dateStr) 
  Get year, month, day from date string.
  Parameters:
     dateStr :  : ISO 8601 format, i.e. "2022-05-04T14:00:00.001000-04:00" or "2022-05-04T14:00:00Z"
  Returns: array of int  
 getTimeParts(dateStr) 
  Get hour, minute, seconds from date string.
  Parameters:
     dateStr :  : ISO 8601 format, i.e. "2022-05-04T14:00:00.001000-04:00" or "2022-05-04T14:00:00Z"
  Returns: array of int  
 getUTCTimezone(dateStr) 
  Get UTC timezone.
  Parameters:
     dateStr :  : ISO 8601 format, i.e. "2022-05-04T14:00:00.001000-04:00" or "2022-05-04T14:00:00Z"
  Returns: string UTC timezone
Global_Economic_CalendarLibrary of economic events. Created to display events on the desired chart through the indicator.
Countries: USA, China, Eurozone, Russia
Importance: 3 stars
Source: Investing
Библиотека экономических событий. Создана для отображения событий на нужном графике через индикатор.
Страны: США, Китай, Еврозона, Россия
Важность: 3 звезды
Источник: Investing
Traders_Reality_LibLibrary   "Traders_Reality_Lib" 
This library contains common elements used in Traders Reality scripts
 calcPvsra(pvsraVolume, pvsraHigh, pvsraLow, pvsraClose, pvsraOpen, redVectorColor, greenVectorColor, violetVectorColor, blueVectorColor, darkGreyCandleColor, lightGrayCandleColor) 
  calculate the pvsra candle color and return the color as well as an alert if a vector candle has apperared.
Situation "Climax"
Bars with volume >= 200% of the average volume of the 10 previous chart TFs, or bars
where the product of candle spread x candle volume is >= the highest for the 10 previous
chart time TFs.
Default Colors:  Bull bars are green and bear bars are red.
Situation "Volume Rising Above Average"
Bars with volume >= 150% of the average volume of the 10 previous chart TFs.
Default Colors:  Bull bars are blue and bear are violet.
  Parameters:
     pvsraVolume : the instrument volume series (obtained from request.sequrity)
     pvsraHigh : the instrument high series (obtained from request.sequrity)
     pvsraLow : the instrument low series (obtained from request.sequrity)
     pvsraClose : the instrument close series (obtained from request.sequrity)
     pvsraOpen : the instrument open series (obtained from request.sequrity)
     redVectorColor : red vector candle color
     greenVectorColor : green vector candle color
     violetVectorColor : violet/pink vector candle color
     blueVectorColor : blue vector candle color
     darkGreyCandleColor : regular volume candle down candle color - not a vector 
     lightGrayCandleColor : regular volume candle up candle color - not a vector
@return  
 adr(length, barsBack) 
  Parameters:
     length : how many elements of the series to calculate on
     barsBack : starting possition for the length calculation - current bar or some other value eg last bar
@return adr the adr for the specified lenght
 adrHigh(adr, fromDo) 
  Calculate the ADR high given an ADR
  Parameters:
     adr : the adr
     fromDo : boolean flag, if false calculate traditional adr from high low of today, if true calcualte from exchange midnight
@return adrHigh the position of the adr high in price
 adrLow(adr, fromDo) 
  Parameters:
     adr : the adr
     fromDo : boolean flag, if false calculate traditional adr from high low of today, if true calcualte from exchange midnight
@return adrLow the position of the adr low in price
 splitSessionString(sessXTime) 
  given a session in the format 0000-0100:23456 split out the hours and minutes
  Parameters:
     sessXTime : the session time string usually in the format 0000-0100:23456
@return  
 calcSessionStartEnd(sessXTime, gmt) 
  calculate the start and end timestamps of the session
  Parameters:
     sessXTime : the session time string usually in the format 0000-0100:23456 
     gmt : the gmt offset string usually in the format GMT+1 or GMT+2 etc
@return  
 drawOpenRange(sessXTime, sessXcol, showOrX, gmt) 
  draw open range for a session
  Parameters:
     sessXTime : session string in the format 0000-0100:23456 
     sessXcol : the color to be used for the opening range box shading
     showOrX : boolean flag to toggle displaying the opening range
     gmt : the gmt offset string usually in the format GMT+1 or GMT+2 etc
@return void
 drawSessionHiLo(sessXTime, show_rectangleX, show_labelX, sessXcolLabel, sessXLabel, gmt, sessionLineStyle) 
  Parameters:
     sessXTime : session string in the format 0000-0100:23456 
     show_rectangleX : show the session high and low lines 
     show_labelX : show the session label
     sessXcolLabel : the color to be used for the hi/low lines and label
     sessXLabel : the session label text
     gmt : the gmt offset string usually in the format GMT+1 or GMT+2 etc
     sessionLineStyle : the line stile for the session high low lines 
@return void
 calcDst() 
  calculate market session dst on/off flags 
@return   indicating if DST is on or off for a particular region
 timestampPreviousDayOfWeek(previousDayOfWeek, hourOfDay, gmtOffset, oneWeekMillis) 
  Timestamp any of the 6 previous days in the week (such as last Wednesday at 21 hours GMT)
  Parameters:
     previousDayOfWeek : Monday or Satruday
     hourOfDay : the hour of the day when psy calc is to start
     gmtOffset : the gmt offset string usually in the format GMT+1 or GMT+2 etc
     oneWeekMillis : the amount if time for a week in milliseconds
@return the timestamp of the psy level calculation start time
 getdayOpen() 
  get the daily open - basically exchange midnight
@return the daily open value which is float price
 newBar(res) 
  new_bar: check if we're on a new bar within the session in a given resolution
  Parameters:
     res : the desired resolution
@return true/false is a new bar for the session has started
 toPips(val) 
  to_pips Convert value to pips
  Parameters:
     val : the value to convert to pips
@return the value in pips
 rLabel(ry, rtext, rstyle, rcolor, valid, labelXOffset) 
  a function that draws a right aligned lable for a series during the current bar
  Parameters:
     ry : series float the y coordinate of the lable
     rtext : the text of the label
     rstyle : the style for the lable
     rcolor : the color for the label
     valid : a boolean flag that allows for turning on or off a lable
     labelXOffset : how much to offset the label from the current position
 rLabelOffset(ry, rtext, rstyle, rcolor, valid, labelXOffset) 
  a function that draws a right aligned lable for a series during the current bar
  Parameters:
     ry : series float the y coordinate of the lable
     rtext : the text of the label
     rstyle : the style for the lable
     rcolor : the color for the label
     valid : a boolean flag that allows for turning on or off a lable
     labelXOffset : how much to offset the label from the current position
 rLabelLastBar(ry, rtext, rstyle, rcolor, valid, labelXOffset) 
  a function that draws a right aligned lable for a series only on the last bar
  Parameters:
     ry : series float the y coordinate of the lable
     rtext : the text of the label
     rstyle : the style for the lable
     rcolor : the color for the label
     valid : a boolean flag that allows for turning on or off a lable
     labelXOffset : how much to offset the label from the current position
 drawLine(xSeries, res, tag, xColor, xStyle, xWidth, xExtend, isLabelValid, labelXOffset, validTimeFrame) 
  a function that draws a line and a label for a series
  Parameters:
     xSeries : series float the y coordinate of the line/label
     res : the desired resolution controlling when a new line will start
     tag : the text for the lable
     xColor : the color for the label
     xStyle : the style for the line
     xWidth : the width of the line
     xExtend : extend the line
     isLabelValid : a boolean flag that allows for turning on or off a label
     labelXOffset : how much to offset the label from the current position
     validTimeFrame : a boolean flag that allows for turning on or off a line drawn
 drawLineDO(xSeries, res, tag, xColor, xStyle, xWidth, xExtend, isLabelValid, labelXOffset, validTimeFrame) 
  a function that draws a line and a label for the daily open series
  Parameters:
     xSeries : series float the y coordinate of the line/label
     res : the desired resolution controlling when a new line will start
     tag : the text for the lable
     xColor : the color for the label
     xStyle : the style for the line
     xWidth : the width of the line
     xExtend : extend the line
     isLabelValid : a boolean flag that allows for turning on or off a label
     labelXOffset : how much to offset the label from the current position
     validTimeFrame : a boolean flag that allows for turning on or off a line drawn
 drawPivot(pivotLevel, res, tag, pivotColor, pivotLabelColor, pivotStyle, pivotWidth, pivotExtend, isLabelValid, validTimeFrame, levelStart, pivotLabelXOffset) 
  draw a pivot line - the line starts one day into the past
  Parameters:
     pivotLevel : series of the pivot point
     res : the desired resolution
     tag : the text to appear
     pivotColor : the color of the line
     pivotLabelColor : the color of the label
     pivotStyle : the line style
     pivotWidth : the line width
     pivotExtend : extend the line
     isLabelValid : boolean param allows to turn label on and off
     validTimeFrame : only draw the line and label at a valid timeframe
     levelStart : basically when to start drawing the levels
     pivotLabelXOffset : how much to offset the label from its current postion
@return the pivot line series
 getPvsraFlagByColor(pvsraColor, redVectorColor, greenVectorColor, violetVectorColor, blueVectorColor, lightGrayCandleColor) 
  convert the pvsra color to an internal code
  Parameters:
     pvsraColor : the calculated pvsra color
     redVectorColor : the user defined red vector color
     greenVectorColor : the user defined green vector color
     violetVectorColor : the user defined violet vector color
     blueVectorColor : the user defined blue vector color
     lightGrayCandleColor : the user defined regular up candle color
@return pvsra internal code
 updateZones(pvsra, direction, boxArr, maxlevels, pvsraHigh, pvsraLow, pvsraOpen, pvsraClose, transperancy, zoneupdatetype, zonecolor, zonetype, borderwidth, coloroverride, redVectorColor, greenVectorColor, violetVectorColor, blueVectorColor, lightGrayCandleColor) 
  a function that draws the unrecovered vector candle zones
  Parameters:
     pvsra : internal code
     direction : above or below the current pa
     boxArr : the array containing the boxes that need to be updated
     maxlevels : the maximum number of boxes to draw
     pvsraHigh : the pvsra high value series
     pvsraLow : the pvsra low value series
     pvsraOpen : the pvsra open value series
     pvsraClose : the pvsra close value series
     transperancy : the transparencfy of the vecor candle zones
     zoneupdatetype : the zone update type
     zonecolor : the zone color if overriden
     zonetype : the zone type
     borderwidth : the width of the border
     coloroverride : if the color overriden
     redVectorColor : the user defined red vector color
     greenVectorColor : the user defined green vector color
     violetVectorColor : the user defined violet vector color
     blueVectorColor : the user defined blue vector color
     lightGrayCandleColor : the user defined regular up candle color
 cleanarr(arr) 
  clean an array from na values
  Parameters:
     arr : the array to clean
@return if the array was cleaned
 calcPsyLevels(oneWeekMillis, showPsylevels, psyType, sydDST) 
  calculate the psy levels
4 hour res based on how mt4 does it
mt4 code
int Li_4 = iBarShift(NULL, PERIOD_H4, iTime(NULL, PERIOD_W1, Li_0)) - 2 - Offset;
ObjectCreate("PsychHi", OBJ_TREND, 0, Time , iHigh(NULL, PERIOD_H4, iHighest(NULL, PERIOD_H4, MODE_HIGH, 2, Li_4)), iTime(NULL, PERIOD_W1, 0), iHigh(NULL, PERIOD_H4,
iHighest(NULL, PERIOD_H4, MODE_HIGH, 2, Li_4)));
so basically because the session is 8 hours and we are looking at a 4 hour resolution we only need to take the highest high an lowest low of 2 bars
we use the gmt offset to adjust the 0000-0800 session to Sydney open which is at 2100 during dst and at 2200 otherwize. (dst - spring foward, fall back)
keep in mind sydney is in the souther hemisphere so dst is oposite of when london and new york go into dst
  Parameters:
     oneWeekMillis : a constant value
     showPsylevels : should psy levels be calculated
     psyType : the type of Psylevels - crypto or forex
     sydDST : is Sydney in DST
@return 
NumberOfVisibleBarsLibrary   "NumberOfVisibleBars" 
This library calculates the number of visible bars on the user screen
 NumberOfVisibleBars(No) 
  Calculates the number of visible bars on the user screen
  Parameters:
     No : paramters needed
  Returns: The numbers of visible bars on the user screen (int)
EconomicCalendarLibrary   "EconomicCalendar" 
This library is a data provider for important dates and times from the Economic Calendar.
 events() 
  Returns the list of dates supported by this library as a string array.
  Returns: array : Names of events supported by this library
 fomcMeetings() 
  Gets the FOMC Meeting Dates. The FOMC meets eight times a year to determine the course of monetary policy. The FOMC announces its decision on the federal funds rate at the conclusion of each meeting and also issues a statement that provides information on the economic outlook and the Committee's assessment of the risks to the outlook.
  Returns: array : FOMC Meeting Dates as timestamps
 fomcMinutes() 
  Gets the FOMC Meeting Minutes Dates. The FOMC Minutes are released three weeks after each FOMC meeting. The Minutes provide information on the Committee's deliberations and decisions at the meeting.
  Returns: array : FOMC Meeting Minutes Dates as timestamps
 ppiReleases() 
  Gets the Producer Price Index (PPI) Dates. The Producer Price Index (PPI) measures the average change over time in the selling prices received by domestic producers for their output. The PPI is a leading indicator of CPI, and CPI is a leading indicator of inflation.
  Returns: array : PPI Dates as timestamps
 cpiReleases() 
  Gets the Consumer Price Index (CPI) Rekease Dates. The Consumer Price Index (CPI) measures changes in the price level of a market basket of consumer goods and services purchased by households. The CPI is a leading indicator of inflation.
  Returns: array : CPI Dates as timestamps
 csiReleases() 
  Gets the CSI release dates. The Consumer Sentiment Index (CSI) is a survey of consumer attitudes about the economy and their personal finances. The CSI is a leading indicator of consumer spending.
  Returns: array : CSI Dates as timestamps
 cciReleases() 
  Gets the CCI release dates. The Conference Board's Consumer Confidence Index (CCI) is a survey of consumer attitudes about the economy and their personal finances. The CCI is a leading indicator of consumer spending.
  Returns: array : CCI Dates as timestamps
 nfpReleases() 
  Gets the NFP release dates. Nonfarm payrolls is an employment report released monthly by the Bureau of Labor Statistics (BLS) that measures the change in the number of employed people in the United States.
  Returns: array : NFP Dates as timestamps






















