Skip to content

A library to calculate Market Profile (aka Volume Profile) for financial data from a Pandas DataFrame.

License

Notifications You must be signed in to change notification settings

bfolkens/py-market-profile

Repository files navigation

Market Profile

Travis-CI Build Status Documentation Status

A library to calculate Market Profile (Volume Profile) from a Pandas DataFrame. This library expects the DataFrame to have an index of timestamp and columns for each of the OHLCV values.

  • Free software: BSD license

Installation

pip install marketprofile

Example

You can view a Jupyter notebook of an example with charts here: https://github.com/bfolkens/py-market-profile/blob/master/examples/example.ipynb

Pull in some data to play with:

>>> from market_profile import MarketProfile
>>> import pandas_datareader as data
>>> amzn = data.get_data_yahoo('AMZN', '2019-12-01', '2019-12-31')

Create the MarketProfile object from a Pandas DataFrame:

>>> mp = MarketProfile(amzn)
>>> mp_slice = mp[amzn.index.min():amzn.index.max()]

Once you've chosen a slice, you can return the profile series:

>>> mp_slice.profile
Close
1739.25    2514300
1740.50    2823800
1748.75    2097600
1749.55    2442800
1751.60    3117400
1760.35    3095900
1760.70    2670100
1760.95    2745700
1769.25    3145200
1770.00    3380900
1781.60    3925600
1784.05    3351400
1786.50    5150800
1789.25     881300
1790.70    3644400
1792.30    2652800
1793.00    2136400
1846.90    3674700
1847.85    2506500
1868.80    6005400
1869.85    6186600
Name: Volume, dtype: int64

Or you can also access individual attributes and properties:

>>> mp_slice.initial_balance()
(1762.680054, 1805.550049)
>>> mp_slice.open_range()
(1762.680054, 1805.550049)
>>> mp_slice.poc_price
1869.850000
>>> mp_slice.profile_range
(1739.25, 1869.85)
>>> mp_slice.value_area
(1760.95, 1869.85)
>>> mp_slice.balanced_target
2000.4499999999998
>>> mp_slice.low_value_nodes
Close
1748.75    2097600
1760.70    2670100
1784.05    3351400
1789.25     881300
1793.00    2136400
1847.85    2506500
Name: Volume, dtype: int64
>>> mp_slice.high_value_nodes
Close
1740.5    2823800
1751.6    3117400
1781.6    3925600
1786.5    5150800
1790.7    3644400
1846.9    3674700
Name: Volume, dtype: int64

Documentation

https://marketprofile.readthedocs.io/

What is Market Profile and How are these calculated?

A discussion on the difference between TPO (Time Price Opportunity) and VOL (Volume Profile) chart types: https://jimdaltontrading.com/tpo-vs-volume-profile

Development

To run the all tests run:

tox

Development sponsored in part by Cignals, LLC. - Bitcoin Order Flow and Footprint Charts.

About

A library to calculate Market Profile (aka Volume Profile) for financial data from a Pandas DataFrame.

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Packages

No packages published