Source code for pandas_ta.volume.pvr
# -*- coding: utf-8 -*-
from pandas_ta.utils import verify_series
from numpy import nan as npNaN
from pandas import Series
[docs]def pvr(close, volume):
    """ Indicator: Price Volume Rank"""
    # Validate arguments
    close = verify_series(close)
    volume = verify_series(volume)
    # Calculate Result
    close_diff = close.diff().fillna(0)
    volume_diff = volume.diff().fillna(0)
    pvr_ = Series(npNaN, index=close.index)
    pvr_.loc[(close_diff >= 0) & (volume_diff >= 0)] = 1
    pvr_.loc[(close_diff >= 0) & (volume_diff < 0)]  = 2
    pvr_.loc[(close_diff < 0) & (volume_diff >= 0)]  = 3
    pvr_.loc[(close_diff < 0) & (volume_diff < 0)]   = 4
    # Name and Categorize it
    pvr_.name = f"PVR"
    pvr_.category = "volume"
    return pvr_
pvr.__doc__ = \
"""Price Volume Rank
The Price Volume Rank was developed by Anthony J. Macek and is described in his
article in the June, 1994 issue of Technical Analysis of Stocks & Commodities
Magazine. It was developed as a simple indicator that could be calculated even
without a computer. The basic interpretation is to buy when the PV Rank is below
2.5 and sell when it is above 2.5.
Sources:
    https://www.fmlabs.com/reference/default.htm?url=PVrank.htm
Calculation:
    return 1 if 'close change' >= 0 and 'volume change' >= 0
    return 2 if 'close change' >= 0 and 'volume change' < 0
    return 3 if 'close change' < 0 and 'volume change' >= 0
    return 4 if 'close change' < 0 and 'volume change' < 0
Args:
    close (pd.Series): Series of 'close's
    volume (pd.Series): Series of 'volume's
Returns:
    pd.Series: New feature generated.
"""