Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Portfolio analytics for quants, written in Python

License

NotificationsYou must be signed in to change notification settings

ranaroussi/quantstats

Repository files navigation

Python versionPyPi versionPyPi statusPyPi downloadsAsk DeepWikiStar this repoFollow 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 »

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.

NEW! Monte Carlo Simulations

Monte Carlo Simulation

Run probabilistic risk analysis with built-in Monte Carlo simulations:

mc=qs.stats.montecarlo(returns,sims=1000,bust=-0.20,goal=0.50)print(f"Bust probability:{mc.bust_probability:.1%}")print(f"Goal probability:{mc.goal_probability:.1%}")mc.plot()

Full Monte Carlo documentation »


Quick Start

%matplotlibinlineimportquantstatsasqs# extend pandas functionality with metrics, etc.qs.extend_pandas()# fetch the daily returns for a stockstock=qs.utils.download_returns('META')# show sharpe ratioqs.stats.sharpe(stock)# or using extend_pandas() :)stock.sharpe()

Output:

0.7604779884378278

Visualize stock performance

qs.plots.snapshot(stock,title='Facebook Performance',show=True)# can also be called via:# stock.plot_snapshot(title='Facebook Performance', show=True)

Output:

Snapshot plot

Creating 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 html

Let's create an html tearsheet:

# benchmark can be a pandas Series or tickerqs.reports.html(stock,"SPY")

Output will generate something like this:

HTML tearsheet

View original html file

Available methods

To view a complete list of available methods, run:

[fforfindir(qs.stats)iff[0]!='_']
['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','montecarlo','montecarlo_cagr','montecarlo_drawdown','montecarlo_sharpe','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','value_at_risk','var','volatility','win_loss_ratio','win_rate','worst']
[fforfindir(qs.plots)iff[0]!='_']
['daily_returns','distribution','drawdown','drawdowns_periods','earnings','histogram','log_returns','monthly_heatmap','montecarlo','montecarlo_distribution','returns','rolling_beta','rolling_sharpe','rolling_sortino','rolling_volatility','snapshot','yearly_returns']

*** Full documentation coming soon ***

Important: Period-Based vs Trade-Based Metrics

QuantStats analyzesreturn series (daily, weekly, monthly returns), not discrete trade data. This means:

  • Win Rate = percentage of periods with positive returns
  • Consecutive Wins/Losses = consecutive positive/negative return periods
  • Payoff Ratio = average winning period return / average losing period return
  • Profit Factor = sum of positive returns / sum of negative returns

These metrics arevalid and useful for:

  • Systematic/algorithmic strategies with regular rebalancing
  • Analyzing return-series behavior over time
  • Comparing strategies on a period-by-period basis

Fordiscretionary traders with multi-day trades, these period-based metrics may differ from trade-level statistics. A single 5-day trade might span 3 positive days and 2 negative days - QuantStats would count these as 3 "wins" and 2 "losses" at the daily level.

This is consistent with how all return-based analytics work (Sharpe ratio, Sortino ratio, drawdown analysis, etc.) - they operate on return periods, not discrete trade entries/exits.


In the meantime, you can get insights as to optional parameters for each method, by using Python'shelp method:

help(qs.stats.conditional_value_at_risk)
Help on function conditional_value_at_risk in module quantstats.stats:conditional_value_at_risk(returns, sigma=1, confidence=0.99)    calculates the conditional daily value-at-risk (aka expected shortfall)    quantifies the amount of tail risk an investment

Installation

Install usingpip:

$ pip install quantstats --upgrade --no-cache-dir

Install usingconda:

$ conda install -c ranaroussi quantstats

Requirements

Questions?

This is a new library... If you find a bug, pleaseopen an issue.

If you'd like to contribute, a great place to look is theissues marked with help-wanted.

Known Issues

For some reason, I couldn't find a way to tell seaborn not to return themonthly returns heatmap when instructed to save - so even if you save the plot (by passingsavefig={...}) it will still show the plot.

Legal Stuff

QuantStats is distributed under theApache Software License. See theLICENSE.txt file in the release for details.

P.S.

Please drop me a note with any feedback you have.

Ran Aroussi


[8]ページ先頭

©2009-2026 Movatter.jp