def VWAP(df, open='Open', high='High', low='Low', close='Close', volume=
    'Volume'):
    """
    Volume Weighted Average Price
    Returns: list of floats = jhta.VWAP(df, open='Open', high='High', low='Low', close='Close', volume='Volume')
    Source: book: An Introduction to Algorithmic Trading
    """
    vwap_list = []
    pvs = 0.0
    for i in range(len(df[close])):
        o = df[open][i]
        h = df[high][i]
        l = df[low][i]
        c = df[close][i]
        v = df[volume][i]
        pvs += sum([o, h, l, c]) / 4 * v
        vwap = pvs / sum(df[volume][0:i + 1])
        vwap_list.append(vwap)
    return vwap_list
