ZenAndTheArtOfTrading

ZenLibrary

Library "ZenLibrary"
A collection of custom tools & utility functions commonly used with my scripts.

getDecimals() Calculates how many decimals are on the quote price of the current market
  Returns: The current decimal places on the market quote price

truncate(float, float) Truncates (cuts) excess decimal places
  Parameters:
    float: _number The number to truncate
    float: _decimalPlaces (default=2) The number of decimal places to truncate to
  Returns: The given _number truncated to the given _decimalPlaces

toWhole(float) Converts pips into whole numbers
  Parameters:
    float: _number The pip number to convert into a whole number
  Returns: The converted number

toPips(float) Converts whole numbers back into pips
  Parameters:
    float: _number The whole number to convert into pips
  Returns: The converted number

av_getPositionSize(float, float, float, float) Calculates OANDA forex position size for AutoView based on the given parameters
  Parameters:
    float: _balance The account balance to use
    float: _risk The risk percentage amount (as a whole number - eg. 1 = 1% risk)
    float: _stopPoints The stop loss distance in POINTS (not pips)
    float: _conversionRate The conversion rate of our account balance currency
  Returns: The calculated position size (in units - only compatible with OANDA)

getMA(int, string) Gets a Moving Average based on type
  Parameters:
    int: _length The MA period
    string: _maType The type of MA
  Returns: A moving average with the given parameters

getEAP(float) Performs EAP stop loss size calculation (eg. ATR >= 20.0 and ATR < 30, returns 20)
  Parameters:
    float: _atr The given ATR to base the EAP SL calculation on
  Returns: The EAP SL converted ATR size

barsAboveMA(int, float) Counts how many candles are above the MA
  Parameters:
    int: _lookback The lookback period to look back over
    float: _ma The moving average to check
  Returns: The bar count of how many recent bars are above the MA

barsBelowMA(int, float) Counts how many candles are below the MA
  Parameters:
    int: _lookback The lookback period to look back over
    float: _ma The moving average to reference
  Returns: The bar count of how many recent bars are below the EMA

barsCrossedMA(int, float) Counts how many times the EMA was crossed recently
  Parameters:
    int: _lookback The lookback period to look back over
    float: _ma The moving average to reference
  Returns: The bar count of how many times price recently crossed the EMA

getPullbackBarCount(int, int) Counts how many green & red bars have printed recently (ie. pullback count)
  Parameters:
    int: _lookback The lookback period to look back over
    int: _direction The color of the bar to count (1 = Green, -1 = Red)
  Returns: The bar count of how many candles have retraced over the given lookback & direction

getBodySize() Gets the current candle's body size (in POINTS, divide by 10 to get pips)
  Returns: The current candle's body size in POINTS

getTopWickSize() Gets the current candle's top wick size (in POINTS, divide by 10 to get pips)
  Returns: The current candle's top wick size in POINTS

getBottomWickSize() Gets the current candle's bottom wick size (in POINTS, divide by 10 to get pips)
  Returns: The current candle's bottom wick size in POINTS

getBodyPercent() Gets the current candle's body size as a percentage of its entire size including its wicks
  Returns: The current candle's body size percentage

isHammer(float, bool) Checks if the current bar is a hammer candle based on the given parameters
  Parameters:
    float: _fib (default=0.382) The fib to base candle body on
    bool: _colorMatch (default=false) Does the candle need to be green? (true/false)
  Returns: A boolean - true if the current bar matches the requirements of a hammer candle

isStar(float, bool) Checks if the current bar is a shooting star candle based on the given parameters
  Parameters:
    float: _fib (default=0.382) The fib to base candle body on
    bool: _colorMatch (default=false) Does the candle need to be red? (true/false)
  Returns: A boolean - true if the current bar matches the requirements of a shooting star candle

isDoji(float, bool) Checks if the current bar is a doji candle based on the given parameters
  Parameters:
    float: _wickSize (default=2) The maximum top wick size compared to the bottom (and vice versa)
    bool: _bodySize (default=0.05) The maximum body size as a percentage compared to the entire candle size
  Returns: A boolean - true if the current bar matches the requirements of a doji candle

isBullishEC(float, float, bool) Checks if the current bar is a bullish engulfing candle
  Parameters:
    float: _allowance (default=0) How many POINTS to allow the open to be off by (useful for markets with micro gaps)
    float: _rejectionWickSize (default=disabled) The maximum rejection wick size compared to the body as a percentage
    bool: _engulfWick (default=false) Does the engulfing candle require the wick to be engulfed as well?
  Returns: A boolean - true if the current bar matches the requirements of a bullish engulfing candle

isBearishEC(float, float, bool) Checks if the current bar is a bearish engulfing candle
  Parameters:
    float: _allowance (default=0) How many POINTS to allow the open to be off by (useful for markets with micro gaps)
    float: _rejectionWickSize (default=disabled) The maximum rejection wick size compared to the body as a percentage
    bool: _engulfWick (default=false) Does the engulfing candle require the wick to be engulfed as well?
  Returns: A boolean - true if the current bar matches the requirements of a bearish engulfing candle

timeFilter(string, bool) Determines if the current price bar falls inside the specified session
  Parameters:
    string: _sess The session to check
    bool: _useFilter (default=false) Whether or not to actually use this filter
  Returns: A boolean - true if the current bar falls within the given time session

dateFilter(int, int) Determines if this bar's time falls within date filter range
  Parameters:
    int: _startTime The UNIX date timestamp to begin searching from
    int: _endTime the UNIX date timestamp to stop searching from
  Returns: A boolean - true if the current bar falls within the given dates

dayFilter(bool, bool, bool, bool, bool, bool, bool) Checks if the current bar's day is in the list of given days to analyze
  Parameters:
    bool: _monday Should the script analyze this day? (true/false)
    bool: _tuesday Should the script analyze this day? (true/false)
    bool: _wednesday Should the script analyze this day? (true/false)
    bool: _thursday Should the script analyze this day? (true/false)
    bool: _friday Should the script analyze this day? (true/false)
    bool: _saturday Should the script analyze this day? (true/false)
    bool: _sunday Should the script analyze this day? (true/false)
  Returns: A boolean - true if the current bar's day is one of the given days

atrFilter(float, float) Checks the current bar's size against the given ATR and max size
  Parameters:
    float: _atr (default=ATR 14 period) The given ATR to check
    float: _maxSize The maximum ATR multiplier of the current candle
  Returns: A boolean - true if the current bar's size is less than or equal to _atr x _maxSize

fillCell(table, int, int, string, string, color, color) This updates the given table's cell with the given values
  Parameters:
    table: _table The table ID to update
    int: _column The column to update
    int: _row The row to update
    string: _title The title of this cell
    string: _value The value of this cell
    color: _bgcolor The background color of this cell
    color: _txtcolor The text color of this cell
  Returns: A boolean - true if the current bar falls within the given dates
Notas de Lançamento:
v2:
- Fixed time session filter (it was not working as intended)
Notas de Lançamento:
v3:
- Removed underscore from "_x" parameter names to be consistent with Pine's inbuilt function parameter naming convention
- Removed inbuilt ATR call from function scope in atrFilter() so that it is guaranteed to be calculated properly on every tick (regardless of which scope you place the atrFilter() call in your script)
- Added getPctChange() function - returns the % change between two values over a lookback period
- Cannot remove MA calls from function scope of getMA() in library scripts due to length parameter being dynamic, so make sure to ALWAYS call that function on every calculation (ie. in your main script scope - just as you would with regular inbuilt MA() functions)
Notas de Lançamento:
v4

Changes:
- Changed barsBelowMA and barsAboveMA to use ma instead of current ma value
- Changed timeFilter() to barInSession() - returns true if bar is inside given time session
- Added barOutSession() - returns true if bar is outside given time session
- Added isInsideBar() and isOutsideBar() candle pattern functions
- Added bearFib() and bullFib() fibonacci functions
- Added getEAP2() function - returns an alternative ATR stop loss formula to the getEAP() function

Added:
bullFib(priceLow, priceHigh, fibRatio) Calculates a bullish fibonacci value
  Parameters:
    priceLow: The lowest price point
    priceHigh: The highest price point
    fibRatio: The fibonacci % ratio to calculate
  Returns: The fibonacci value of the given ratio between the two price points

bearFib(priceLow, priceHigh, fibRatio) Calculates a bearish fibonacci value
  Parameters:
    priceLow: The lowest price point
    priceHigh: The highest price point
    fibRatio: The fibonacci % ratio to calculate
  Returns: The fibonacci value of the given ratio between the two price points

isInsideBar() Detects inside bars
  Returns: Returns true if the current bar is an inside bar

isOutsideBar() Detects outside bars
  Returns: Returns true if the current bar is an outside bar

barInSession(string, bool) Determines if the current price bar falls inside the specified session
  Parameters:
    string: sess The session to check
    bool: useFilter (default=true) Whether or not to actually use this filter
  Returns: A boolean - true if the current bar falls within the given time session

barOutSession(string, bool) Determines if the current price bar falls outside the specified session
  Parameters:
    string: sess The session to check
    bool: useFilter (default=true) Whether or not to actually use this filter
  Returns: A boolean - true if the current bar falls outside the given time session

Removed:
timeFilter(string, bool) Determines if the current price bar falls inside the specified session
Notas de Lançamento:
Forgot to include export keyword for new getEAP2() function. 🤦‍♂️
Notas de Lançamento:
v6

Added:
getPipSize()
  Calculates the pip size of the current market
  Returns: The pip size for the current market

Changed:
Improved toWhole() and toPips() function formula to work better across FX/Crypto/Stocks
Fixed bug with barsCrossedMA (it based count on crosses of current MA value instead of MA value for each previous bar)
Notas de Lançamento:
v7

Updated:
getPipSize(multiplier)
  Calculates the pip size of the current market
  Parameters:
    multiplier (int) - The mintick point multiplier (1 by default, 10 for FX/Crypto/CFD if default of 1 is used - only override if your market requires it)
  Returns: The pip size for the current market

My Resources Hub: theartoftrading.com
FREE YouTube Lessons: rebrand.ly/zyt
FREE Pine Script Basics Course: rebrand.ly/zpsbc
Pine Script MASTERY Course: rebrand.ly/zpsmc
My Indicators & Strategies: rebrand.ly/zmisc
Biblioteca do Pine

No verdadeiro espírito TradingView, o autor publicou este código de Pine como uma biblioteca de código aberto para que outros programadores de Pine de nossa comunidade possam reutilizá-lo. Um brinde ao autor! Você pode usar esta biblioteca em particular ou em outras publicações de código aberto, mas a reutilização deste código em uma publicação é regida pelas Regras da Casa.

Aviso legal

As informações e publicações não devem ser e não constituem conselhos ou recomendações financeiras, de investimento, de negociação ou de qualquer outro tipo, fornecidas ou endossadas pela TradingView. Leia mais em Termos de uso.

Gostaria de usar essa biblioteca?

Copie a seguinte linha e cole-a em seu script.