TradingView
Trendoscope
16 feb 2023 14:06

ZigzagMethods 

Bitcoin / TetherUSBinance

Beskrivning

Library "ZigzagMethods"
Object oriented implementation of Zigzag methods. Please refer to ZigzagTypes library for User defined types used in this library

tostring(this, sortKeys, sortOrder, includeKeys)
  Converts ZigzagTypes/Pivot object to string representation
  Parameters:
    this: ZigzagTypes/Pivot
    sortKeys: If set to true, string output is sorted by keys.
    sortOrder: 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 of string containing selective keys. Optional parmaeter. If not provided, all the keys are considered
  Returns: string representation of ZigzagTypes/Pivot

tostring(this, sortKeys, sortOrder, includeKeys)
  Converts Array of Pivot objects to string representation
  Parameters:
    this: Pivot object array
    sortKeys: If set to true, string output is sorted by keys.
    sortOrder: 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 of string containing selective keys. Optional parmaeter. If not provided, all the keys are considered
  Returns: string representation of Pivot object array

tostring(this)
  Converts ZigzagFlags object to string representation
  Parameters:
    this: ZigzagFlags object
  Returns: string representation of ZigzagFlags

tostring(this, sortKeys, sortOrder, includeKeys)
  Converts ZigzagTypes/Zigzag object to string representation
  Parameters:
    this: ZigzagTypes/Zigzagobject
    sortKeys: If set to true, string output is sorted by keys.
    sortOrder: 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 of string containing selective keys. Optional parmaeter. If not provided, all the keys are considered
  Returns: string representation of ZigzagTypes/Zigzag

calculate(this, ohlc, indicators, indicatorNames)
  Calculate zigzag based on input values and indicator values
  Parameters:
    this: Zigzag object
    ohlc: Array containing OHLC values. Can also have custom values for which zigzag to be calculated
    indicators: Array of indicator values
    indicatorNames: Array of indicator names for which values are present. Size of indicators array should be equal to that of indicatorNames
  Returns: current Zigzag object

calculate(this)
  Calculate zigzag based on properties embedded within Zigzag object
  Parameters:
    this: Zigzag object
  Returns: current Zigzag object

nextlevel(this)
  Calculate Next Level Zigzag based on the current calculated zigzag object
  Parameters:
    this: Zigzag object
  Returns: Next Level Zigzag object

clear(this)
  Clears zigzag drawings array
  Parameters:
    this: array<ZigzagDrawing>
  Returns: void

drawfresh(this)
  draws fresh zigzag based on properties embedded in ZigzagDrawing object
  Parameters:
    this: ZigzagDrawing object
  Returns: ZigzagDrawing object

drawcontinuous(this)
  draws zigzag based on the zigzagmatrix input
  Parameters:
    this: ZigzagDrawing object
  Returns: [array<line> zigzaglines, array<label> zigzaglabels]

Versionsinformation

v2

Updates to auto calculate zigzag in Drawing methods.

Updated:
drawfresh(this, ohlc, indicators, indicatorNames)
  draws fresh zigzag based on properties embedded in ZigzagDrawing object
  Parameters:
    this: ZigzagDrawing object
    ohlc: values on which the zigzag needs to be calculated and drawn. If not set will use regular OHLC
    indicators: Array of indicator values
    indicatorNames: Array of indicator names for which values are present. Size of indicators array should be equal to that of indicatorNames
  Returns: ZigzagDrawing object

drawcontinuous(this, ohlc, indicators, indicatorNames)
  draws zigzag based on the zigzagmatrix input
  Parameters:
    this: ZigzagDrawing object
    ohlc: values on which the zigzag needs to be calculated and drawn. If not set will use regular OHLC
    indicators: Array of indicator values
    indicatorNames: Array of indicator names for which values are present. Size of indicators array should be equal to that of indicatorNames
  Returns: [array<line> zigzaglines, array<label> zigzaglabels]

Versionsinformation

v3

Added:
drawplain(this)
  draws fresh zigzag based on properties embedded in ZigzagDrawing object without trying to calculate
  Parameters:
    this: ZigzagDrawing object
  Returns: ZigzagDrawing object

Versionsinformation

v4

Fixed issues highlighted by @moebius1977

Versionsinformation

v5

Updated:
method tostring(this, sortKeys, sortOrder, includeKeys)
  Converts ZigzagTypes/Zigzag object to string representation
  Namespace types: Objects.Zigzag
  Parameters:
    this (Zigzag type from HeWhoMustNotBeNamed/ZigzagTypes/4): ZigzagTypes/Zigzagobject
    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 (string[]): Array of string containing selective keys. Optional parmaeter. If not provided, all the keys are considered
  Returns: string representation of ZigzagTypes/Zigzag

method calculate(this)
  Calculate zigzag based on properties embedded within Zigzag object
  Namespace types: Objects.Zigzag
  Parameters:
    this (Zigzag type from HeWhoMustNotBeNamed/ZigzagTypes/4): Zigzag object
  Returns: current Zigzag object

method nextlevel(this)
  Calculate Next Level Zigzag based on the current calculated zigzag object
  Namespace types: Objects.Zigzag
  Parameters:
    this (Zigzag type from HeWhoMustNotBeNamed/ZigzagTypes/4): Zigzag object
  Returns: Next Level Zigzag object

method clear(this)
  Clears zigzag drawings array
  Namespace types: Objects.ZigzagDrawing[]
  Parameters:
    this (ZigzagDrawing[] type from HeWhoMustNotBeNamed/ZigzagTypes/4): array<ZigzagDrawing>
  Returns: void

method drawplain(this)
  draws fresh zigzag based on properties embedded in ZigzagDrawing object without trying to calculate
  Namespace types: Objects.ZigzagDrawing
  Parameters:
    this (ZigzagDrawing type from HeWhoMustNotBeNamed/ZigzagTypes/4): ZigzagDrawing object
  Returns: ZigzagDrawing object

method drawfresh(this, ohlc, indicators, indicatorNames)
  draws fresh zigzag based on properties embedded in ZigzagDrawing object
  Namespace types: Objects.ZigzagDrawing
  Parameters:
    this (ZigzagDrawing type from HeWhoMustNotBeNamed/ZigzagTypes/4): ZigzagDrawing object
    ohlc (float[]): values on which the zigzag needs to be calculated and drawn. If not set will use regular OHLC
    indicators (matrix<float>): Array of indicator values
    indicatorNames (string[]): Array of indicator names for which values are present. Size of indicators array should be equal to that of indicatorNames
  Returns: ZigzagDrawing object

method drawcontinuous(this, ohlc, indicators, indicatorNames)
  draws zigzag based on the zigzagmatrix input
  Namespace types: Objects.ZigzagDrawing
  Parameters:
    this (ZigzagDrawing type from HeWhoMustNotBeNamed/ZigzagTypes/4): ZigzagDrawing object
    ohlc (float[]): values on which the zigzag needs to be calculated and drawn. If not set will use regular OHLC
    indicators (matrix<float>): Array of indicator values
    indicatorNames (string[]): Array of indicator names for which values are present. Size of indicators array should be equal to that of indicatorNames
  Returns: [array<line> zigzaglines, array<label> zigzaglabels]

Versionsinformation

v6

Updated:
method tostring(this, sortKeys, sortOrder, includeKeys)
  Converts ZigzagTypes/Zigzag object to string representation
  Namespace types: Objects.Zigzag
  Parameters:
    this (Zigzag type from HeWhoMustNotBeNamed/ZigzagTypes/5): ZigzagTypes/Zigzagobject
    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 (string[]): Array of string containing selective keys. Optional parmaeter. If not provided, all the keys are considered
  Returns: string representation of ZigzagTypes/Zigzag

method calculate(this)
  Calculate zigzag based on properties embedded within Zigzag object
  Namespace types: Objects.Zigzag
  Parameters:
    this (Zigzag type from HeWhoMustNotBeNamed/ZigzagTypes/5): Zigzag object
  Returns: current Zigzag object

method nextlevel(this)
  Calculate Next Level Zigzag based on the current calculated zigzag object
  Namespace types: Objects.Zigzag
  Parameters:
    this (Zigzag type from HeWhoMustNotBeNamed/ZigzagTypes/5): Zigzag object
  Returns: Next Level Zigzag object

method clear(this)
  Clears zigzag drawings array
  Namespace types: Objects.ZigzagDrawing[]
  Parameters:
    this (ZigzagDrawing[] type from HeWhoMustNotBeNamed/ZigzagTypes/5): array<ZigzagDrawing>
  Returns: void

method drawplain(this)
  draws fresh zigzag based on properties embedded in ZigzagDrawing object without trying to calculate
  Namespace types: Objects.ZigzagDrawing
  Parameters:
    this (ZigzagDrawing type from HeWhoMustNotBeNamed/ZigzagTypes/5): ZigzagDrawing object
  Returns: ZigzagDrawing object

method drawfresh(this, ohlc, indicators, indicatorNames)
  draws fresh zigzag based on properties embedded in ZigzagDrawing object
  Namespace types: Objects.ZigzagDrawing
  Parameters:
    this (ZigzagDrawing type from HeWhoMustNotBeNamed/ZigzagTypes/5): ZigzagDrawing object
    ohlc (float[]): values on which the zigzag needs to be calculated and drawn. If not set will use regular OHLC
    indicators (matrix<float>): Array of indicator values
    indicatorNames (string[]): Array of indicator names for which values are present. Size of indicators array should be equal to that of indicatorNames
  Returns: ZigzagDrawing object

method drawcontinuous(this, ohlc, indicators, indicatorNames)
  draws zigzag based on the zigzagmatrix input
  Namespace types: Objects.ZigzagDrawing
  Parameters:
    this (ZigzagDrawing type from HeWhoMustNotBeNamed/ZigzagTypes/5): ZigzagDrawing object
    ohlc (float[]): values on which the zigzag needs to be calculated and drawn. If not set will use regular OHLC
    indicators (matrix<float>): Array of indicator values
    indicatorNames (string[]): Array of indicator names for which values are present. Size of indicators array should be equal to that of indicatorNames
  Returns: [array<line> zigzaglines, array<label> zigzaglabels]
Kommentarer
moebius1977
Won't `na(indicatorValues) or indicatorValues.rows()==0` (line 33) produce an error if indicatorValues is na? As far as I know, both arguments of logical operators are evaluated in Pine Script.
Trendoscope
@moebius1977, good catch. Yes, it does. May need to change it to nested ternary statement instead.
moebius1977
@HeWhoMustNotBeNamed, In ternary both sides are evaluated as well... Was trying to avoid nested conditional structures, asked for help: stackoverflow.com/questions/76095643/avoiding-break-in-a-while-loop
Trendoscope
@moebius1977, hmm. Don't think so. I can check. But, I use na ternary on loops all the time. Never faced issue
Trendoscope
@HeWhoMustNotBeNamed, hmm. Actually you are right. I assumed that indicator of lows will always be lower than that of indicator of highs. Apparently not.
moebius1977
@HeWhoMustNotBeNamed, also, based on line 35, Indicator.indicatorHigh looks like "highest of the indicator values" rather than "Indicator Value applied on High" as stated in the @Field description.
Trendoscope
@moebius1977, not really. It's indicator value applied on high and indicator low is indicator value applied on low. But, they need to be passed as such by caller.
moebius1977
Absolutely beautiful! I am just starting with PineScript and my first move was to go your way, typify and objectify everything. But then I found that UDT of arrays may be faster than array of UDT's, so went that way for now. Here is how I tested it. Not sure my test method is 100% accurate, but looks like it is about 20-30% more efficient for large arrays to store values in individual arrays rather than make an array of UDT objects tradingview.com/script/F4dFQBtz-Profiling-array-of-UDTs-vs-UDT-of-arrays/
Trendoscope
@moebius1977, I have noticed slight lag as well. But, using array of UDTs is more easy to read and maintain. Hopefully pine team will work on improvements.
lruczu
Your code looks impressive! I'm quite new to Pine Script. Could you give some hint how to plot just one zigzag (I mean one level)?
Mer