or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

data-utilities.mdindex.mdpandas-integration.mdperformance-visualization.mdreport-generation.mdrisk-assessment.mdstatistical-analysis.md
tile.json

tessl/pypi-quantstats

Portfolio analytics for quants - comprehensive statistical analysis, risk assessment, and performance visualization for quantitative finance

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
pypipkg:pypi/quantstats@0.0.x

To install, run

npx @tessl/cli install tessl/pypi-quantstats@0.0.0

index.mddocs/

QuantStats

Portfolio analytics for quants - a comprehensive Python library providing statistical analysis, risk assessment, performance visualization, and reporting capabilities for quantitative finance. QuantStats enables portfolio managers and quantitative analysts to perform in-depth performance analysis through statistical metrics, risk ratios, drawdown analysis, and professional-grade tearsheet generation.

Package Information

  • Package Name: quantstats
  • Language: Python
  • Installation: pip install quantstats

Core Imports

import quantstats as qs

Access specific modules:

import quantstats.stats as stats
import quantstats.plots as plots
import quantstats.reports as reports
import quantstats.utils as utils

Basic Usage

import quantstats as qs
import pandas as pd
import numpy as np

# Create sample returns data
dates = pd.date_range('2020-01-01', '2023-12-31', freq='D')
returns = pd.Series(np.random.normal(0.001, 0.02, len(dates)), index=dates)

# Basic performance metrics
sharpe_ratio = qs.stats.sharpe(returns)
max_dd = qs.stats.max_drawdown(returns)
cagr = qs.stats.cagr(returns)

print(f"Sharpe Ratio: {sharpe_ratio:.2f}")
print(f"Max Drawdown: {max_dd:.2%}")
print(f"CAGR: {cagr:.2%}")

# Generate comprehensive HTML report
qs.reports.html(returns, output='portfolio_report.html')

# Create performance plots
qs.plots.snapshot(returns, title="Portfolio Performance")

# Extend pandas for method chaining
qs.extend_pandas()
portfolio_metrics = returns.sharpe(), returns.sortino(), returns.calmar()

Architecture

QuantStats is organized into four main modules that work together to provide comprehensive portfolio analysis:

  • stats: Core statistical functions for performance metrics, risk ratios, and benchmarking
  • plots: Visualization functions for creating charts, graphs, and performance plots
  • reports: Report generation for HTML tearsheets, metrics tables, and comprehensive analysis
  • utils: Data preparation utilities for converting prices to returns, validation, and data manipulation

The library also provides extend_pandas() functionality that adds all statistical and plotting methods directly to pandas DataFrames and Series, enabling method chaining and integrated workflows.

Capabilities

Statistical Analysis

Core statistical functions for portfolio performance analysis including return calculations, risk metrics, performance ratios, and benchmarking against market indices.

def sharpe(returns, rf=0.0, periods=252, annualize=True, smart=False): ...
def sortino(returns, rf=0, periods=252, annualize=True, smart=False): ...
def max_drawdown(prices): ...
def volatility(returns, periods=252, annualize=True, prepare_returns=True): ...
def cagr(returns, rf=0.0, compounded=True, periods=252): ...
def calmar(returns, prepare_returns=True, periods=252): ...

Statistical Analysis

Risk Assessment

Advanced risk metrics including Value at Risk (VaR), drawdown analysis, tail risk measures, and stress testing indicators for comprehensive portfolio risk evaluation.

def value_at_risk(returns, sigma=1, confidence=0.95, prepare_returns=True): ...
def conditional_value_at_risk(returns, sigma=1, confidence=0.95, prepare_returns=True): ...
def ulcer_index(returns): ...
def to_drawdown_series(returns): ...
def tail_ratio(returns, cutoff=0.95, prepare_returns=True): ...

Risk Assessment

Performance Visualization

Plotting and charting functions for creating comprehensive performance visualizations including cumulative returns, rolling metrics, drawdown underwater plots, and monthly heatmaps.

def snapshot(returns, grayscale=False, figsize=(10, 8), title="Portfolio Summary", ...): ...
def returns(returns, benchmark=None, ...): ...
def drawdown(returns, ...): ...
def rolling_sharpe(returns, benchmark=None, rf=0.0, period=126, ...): ...
def monthly_heatmap(returns, benchmark=None, ...): ...

Performance Visualization

Report Generation

Professional tearsheet and report generation including HTML reports, metrics tables, and comprehensive performance analysis with customizable layouts and benchmarking.

def html(returns, benchmark=None, rf=0.0, ...): ...
def metrics(returns, benchmark=None, rf=0.0, ...): ...
def full(returns, benchmark=None, rf=0.0, ...): ...
def basic(returns, benchmark=None, ...): ...

Report Generation

Data Utilities

Data preparation and utility functions for converting between prices and returns, data validation, benchmarking preparation, and pandas integration.

def to_returns(prices, rf=0.0): ...
def to_prices(returns, base=1e5): ...
def validate_input(data, allow_empty=False): ...
def aggregate_returns(returns, period=None, compounded=True): ...
def download_returns(ticker, period="max", proxy=None): ...

Data Utilities

Pandas Integration

Extended pandas functionality that adds all QuantStats statistical and plotting methods directly to DataFrames and Series for seamless integration with existing workflows.

def extend_pandas(): ...

When extend_pandas() is called, all statistical methods become available on pandas objects:

# After calling qs.extend_pandas()
returns.sharpe()  # Same as qs.stats.sharpe(returns)
returns.plot_snapshot()  # Same as qs.plots.snapshot(returns)
returns.max_drawdown()  # Same as qs.stats.max_drawdown(returns)

Pandas Integration

Types

class QuantStatsError(Exception):
    """Base exception class for QuantStats"""

class DataValidationError(QuantStatsError):
    """Raised when input data validation fails"""

class CalculationError(QuantStatsError):
    """Raised when a calculation fails"""

class PlottingError(QuantStatsError):
    """Raised when plotting operations fail"""

class BenchmarkError(QuantStatsError):
    """Raised when benchmark-related operations fail"""