Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ranaroussi/quantstats
Portfolio analytics for quants, written in Python
https://github.com/ranaroussi/quantstats
algo-trading algorithmic-trading algotrading finance plotting python quant quantitative-analysis quantitative-finance quantitative-trading visualization
Last synced: 10 days ago
JSON representation
Portfolio analytics for quants, written in Python
- Host: GitHub
- URL: https://github.com/ranaroussi/quantstats
- Owner: ranaroussi
- License: apache-2.0
- Created: 2019-05-01T13:29:29.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2024-07-19T13:47:20.000Z (4 months ago)
- Last Synced: 2024-10-23T01:00:08.003Z (17 days ago)
- Topics: algo-trading, algorithmic-trading, algotrading, finance, plotting, python, quant, quantitative-analysis, quantitative-finance, quantitative-trading, visualization
- Language: Python
- Homepage:
- Size: 2.7 MB
- Stars: 4,867
- Watchers: 111
- Forks: 847
- Open Issues: 105
-
Metadata Files:
- Readme: README.rst
- Changelog: CHANGELOG.rst
- Funding: .github/FUNDING.yml
- License: LICENSE.txt
Awesome Lists containing this project
- awesome-quant-cn - quantstats - - 更深层次的python量化分析和风险指标 (指标&风险分析)
- awesome-systematic-trading - quantstats - with-python](https://img.shields.io/badge/Made%20with-Python-1f425f.svg) | (Analytics / Metrics computation)
- awesome-systematic-trading - quantstats - Portfolio analytics for quants, written in Python (Analytic tools / Metrics computation)
- awesome-quant - quantstats - Portfolio analytics for quants, written in Python (Python / Trading & Backtesting)
- pytrade.org - quantstats - Portfolio analytics for quants, written in Python. (Curated List / Analytics)
README
.. image:: https://img.shields.io/badge/python-3.6+-blue.svg?style=flat
:target: https://pypi.python.org/pypi/quantstats
:alt: Python version.. image:: https://img.shields.io/pypi/v/quantstats.svg?maxAge=60
:target: https://pypi.python.org/pypi/quantstats
:alt: PyPi version.. image:: https://img.shields.io/pypi/status/quantstats.svg?maxAge=60
:target: https://pypi.python.org/pypi/quantstats
:alt: PyPi status.. image:: https://img.shields.io/pypi/dm/quantstats.svg?maxAge=2592000&label=installs&color=%2327B1FF
:target: https://pypi.python.org/pypi/quantstats
:alt: PyPi downloads.. image:: https://www.codefactor.io/repository/github/ranaroussi/quantstats/badge
:target: https://www.codefactor.io/repository/github/ranaroussi/quantstats
:alt: CodeFactor.. image:: https://img.shields.io/github/stars/ranaroussi/quantstats.svg?style=social&label=Star&maxAge=60
:target: https://github.com/ranaroussi/quantstats
:alt: Star this repo.. image:: https://img.shields.io/twitter/follow/aroussi.svg?style=social&label=Follow&maxAge=60
:target: https://twitter.com/aroussi
:alt: Follow me on twitter\
QuantStats: Portfolio analytics for quants
==========================================**QuantStats** Python library that performs portfolio profiling, allowing quants and portfolio managers to understand their performance better by providing them with in-depth analytics and risk metrics.
`Changelog » <./CHANGELOG.rst>`__
QuantStats is comprised of 3 main modules:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~1. ``quantstats.stats`` - for calculating various performance metrics, like Sharpe ratio, Win rate, Volatility, etc.
2. ``quantstats.plots`` - for visualizing performance, drawdowns, rolling statistics, monthly returns, etc.
3. ``quantstats.reports`` - for generating metrics reports, batch plotting, and creating tear sheets that can be saved as an HTML file.Here's an example of a simple tear sheet analyzing a strategy:
Quick Start
===========.. code:: python
%matplotlib inline
import quantstats as qs# extend pandas functionality with metrics, etc.
qs.extend_pandas()# fetch the daily returns for a stock
stock = qs.utils.download_returns('META')# show sharpe ratio
qs.stats.sharpe(stock)# or using extend_pandas() :)
stock.sharpe()Output:
.. code:: text
0.8135304438803402
Visualize stock performance
~~~~~~~~~~~~~~~~~~~~~~~~~~~.. code:: python
qs.plots.snapshot(stock, title='Facebook Performance', show=True)
# can also be called via:
# stock.plot_snapshot(title='Facebook Performance', show=True)Output:
.. image:: https://github.com/ranaroussi/quantstats/blob/main/docs/snapshot.jpg?raw=true
:alt: Snapshot plotCreating a report
~~~~~~~~~~~~~~~~~You can create 7 different report tearsheets:
1. ``qs.reports.metrics(mode='basic|full", ...)`` - shows basic/full metrics
2. ``qs.reports.plots(mode='basic|full", ...)`` - shows basic/full plots
3. ``qs.reports.basic(...)`` - shows basic metrics and plots
4. ``qs.reports.full(...)`` - shows full metrics and plots
5. ``qs.reports.html(...)`` - generates a complete report as htmlLet' create an html tearsheet
.. code:: python
(benchmark can be a pandas Series or ticker)
qs.reports.html(stock, "SPY")Output will generate something like this:
.. image:: https://github.com/ranaroussi/quantstats/blob/main/docs/report.jpg?raw=true
:alt: HTML tearsheet(`view original html file `_)
To view a complete list of available methods, run
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.. code:: python
[f for f in dir(qs.stats) if f[0] != '_']
.. code:: text
['avg_loss',
'avg_return',
'avg_win',
'best',
'cagr',
'calmar',
'common_sense_ratio',
'comp',
'compare',
'compsum',
'conditional_value_at_risk',
'consecutive_losses',
'consecutive_wins',
'cpc_index',
'cvar',
'drawdown_details',
'expected_return',
'expected_shortfall',
'exposure',
'gain_to_pain_ratio',
'geometric_mean',
'ghpr',
'greeks',
'implied_volatility',
'information_ratio',
'kelly_criterion',
'kurtosis',
'max_drawdown',
'monthly_returns',
'outlier_loss_ratio',
'outlier_win_ratio',
'outliers',
'payoff_ratio',
'profit_factor',
'profit_ratio',
'r2',
'r_squared',
'rar',
'recovery_factor',
'remove_outliers',
'risk_of_ruin',
'risk_return_ratio',
'rolling_greeks',
'ror',
'sharpe',
'skew',
'sortino',
'adjusted_sortino',
'tail_ratio',
'to_drawdown_series',
'ulcer_index',
'ulcer_performance_index',
'upi',
'utils',
'value_at_risk',
'var',
'volatility',
'win_loss_ratio',
'win_rate',
'worst'].. code:: python
[f for f in dir(qs.plots) if f[0] != '_']
.. code:: text
['daily_returns',
'distribution',
'drawdown',
'drawdowns_periods',
'earnings',
'histogram',
'log_returns',
'monthly_heatmap',
'returns',
'rolling_beta',
'rolling_sharpe',
'rolling_sortino',
'rolling_volatility',
'snapshot',
'yearly_returns']**\*\*\* Full documenttion coming soon \*\*\***
In the meantime, you can get insights as to optional parameters for each method, by using Python's ``help`` method:
.. code:: python
help(qs.stats.conditional_value_at_risk)
.. code:: text
Help on function conditional_value_at_risk in module quantstats.stats:
conditional_value_at_risk(returns, sigma=1, confidence=0.99)
calculats the conditional daily value-at-risk (aka expected shortfall)
quantifies the amount of tail risk an investmentInstallation
------------Install using ``pip``:
.. code:: bash
$ pip install quantstats --upgrade --no-cache-dir
Install using ``conda``:
.. code:: bash
$ conda install -c ranaroussi quantstats
Requirements
------------* `Python `_ >= 3.5+
* `pandas `_ (tested to work with >=0.24.0)
* `numpy `_ >= 1.15.0
* `scipy `_ >= 1.2.0
* `matplotlib `_ >= 3.0.0
* `seaborn `_ >= 0.9.0
* `tabulate `_ >= 0.8.0
* `yfinance `_ >= 0.1.38
* `plotly `_ >= 3.4.1 (optional, for using ``plots.to_plotly()``)Questions?
----------This is a new library... If you find a bug, please
`open an issue `_
in this repository.If you'd like to contribute, a great place to look is the
`issues marked with help-wanted `_.Known Issues
------------For some reason, I couldn't find a way to tell seaborn not to return the
monthly returns heatmap when instructed to save - so even if you save the plot (by passing ``savefig={...}``) it will still show the plot.Legal Stuff
------------**QuantStats** is distributed under the **Apache Software License**. See the `LICENSE.txt <./LICENSE.txt>`_ file in the release for details.
P.S.
------------Please drop me a note with any feedback you have.
**Ran Aroussi**