CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-riskfolio-lib

Portfolio Optimization and Quantitative Strategic Asset Allocation in Python

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

Overview
Eval results
Files

reports.mddocs/

Reports

Comprehensive portfolio reporting and analysis tools for generating detailed portfolio performance reports in Jupyter notebooks and Excel formats. The Reports module provides automated report generation with portfolio statistics, risk analysis, and visualizations.

Capabilities

Jupyter Report Generation

Generate comprehensive portfolio analysis reports in Jupyter notebook format with interactive visualizations and detailed statistics.

def jupyter_report(returns, w, rm='MV', rf=0, alpha=0.05, others=0.05, nrow=25, 
                  height=6, width=14, ax=None):
    """
    Generate comprehensive portfolio report in Jupyter notebook format.
    
    Parameters:
    - returns (DataFrame): Assets returns data
    - w (DataFrame): Portfolio weights
    - rm (str): Risk measure for analysis ('MV', 'MAD', 'CVaR', etc.)
    - rf (float): Risk-free rate
    - alpha (float): Significance level for risk measures
    - others (float): Threshold for grouping small positions
    - nrow (int): Maximum number of rows to display
    - height (float): Figure height in inches
    - width (float): Figure width in inches  
    - ax (matplotlib.Axes): Matplotlib axes object
    
    Returns:
    None: Displays report directly in Jupyter notebook
    """

Excel Report Generation

Generate detailed portfolio analysis reports in Excel format with multiple worksheets containing portfolio statistics, risk analysis, and performance metrics.

def excel_report(returns, w, rf=0, alpha=0.05, others=0.05, nrow=25, 
                name='report', folder='Reports/', sheet_name='Main_Report'):
    """
    Generate comprehensive portfolio report in Excel format.
    
    Parameters:
    - returns (DataFrame): Assets returns data
    - w (DataFrame): Portfolio weights
    - rf (float): Risk-free rate
    - alpha (float): Significance level for risk measures
    - others (float): Threshold for grouping small positions as "Others"
    - nrow (int): Maximum number of assets to display individually
    - name (str): Base filename for the Excel report
    - folder (str): Directory path to save the report
    - sheet_name (str): Name of the main worksheet
    
    Returns:
    str: Path to the generated Excel file
    """

Report Contents

Both Jupyter and Excel reports include:

Portfolio Statistics

  • Asset Allocation: Individual asset weights and grouped allocations
  • Portfolio Performance: Returns, volatility, Sharpe ratio, and other performance metrics
  • Risk Analysis: Various risk measures including VaR, CVaR, Maximum Drawdown
  • Composition Analysis: Sector/asset class breakdowns and concentration metrics

Risk Metrics

  • Dispersion Measures: Standard deviation, MAD, Gini Mean Difference
  • Downside Risk: Semi-deviation, VaR, CVaR, Tail Gini
  • Drawdown Analysis: Maximum Drawdown, Average Drawdown, CDaR
  • Risk Contributions: Per-asset risk contribution analysis

Visualizations

  • Portfolio Composition: Pie charts and bar charts of asset allocation
  • Performance Analysis: Time series of portfolio returns and drawdowns
  • Risk Analysis: Risk contribution breakdowns and efficient frontier plots
  • Comparative Analysis: Benchmark comparisons and attribution analysis

Usage Examples

Basic Jupyter Report

import riskfolio as rp
import pandas as pd

# Load data and optimize portfolio
returns = pd.read_csv('returns.csv', index_col=0, parse_dates=True)
port = rp.Portfolio(returns=returns)
port.assets_stats(method_mu='hist', method_cov='hist')
w = port.optimization(model='Classic', rm='MV', obj='Sharpe', rf=0.02)

# Generate Jupyter report
rp.jupyter_report(returns=returns, w=w, rm='MV', rf=0.02, alpha=0.05)

Excel Report with Custom Settings

# Generate Excel report with custom settings
report_path = rp.excel_report(
    returns=returns,
    w=w,
    rf=0.02,
    alpha=0.05,
    others=0.03,  # Group assets < 3% as "Others"
    nrow=30,      # Show top 30 assets individually
    name='portfolio_analysis_2024',
    folder='./reports/',
    sheet_name='Portfolio_Analysis'
)

print(f"Report saved to: {report_path}")

Advanced Report with Risk Analysis

# Generate report with CVaR risk analysis
rp.jupyter_report(
    returns=returns,
    w=w,
    rm='CVaR',        # Use CVaR for risk analysis
    rf=0.02,
    alpha=0.01,       # 99% confidence level
    others=0.02,
    height=8,
    width=16
)

Report Customization

Asset Grouping

  • others: Threshold for grouping small positions (default: 0.05 = 5%)
  • nrow: Maximum number of individual assets to display

Risk Analysis Options

  • rm: Primary risk measure for analysis
  • alpha: Significance level for tail risk measures
  • rf: Risk-free rate for performance metrics

Output Formatting

  • height/width: Figure dimensions for Jupyter reports
  • folder/name: File location and naming for Excel reports
  • sheet_name: Worksheet naming for Excel reports

Integration with Portfolio Analysis

The Reports module seamlessly integrates with Riskfolio-Lib's portfolio optimization and analysis workflows:

  1. Post-Optimization Analysis: Generate reports after portfolio optimization
  2. Performance Monitoring: Regular reporting of portfolio performance
  3. Risk Management: Detailed risk analysis and decomposition
  4. Client Reporting: Professional-quality reports for stakeholder communication

Install with Tessl CLI

npx tessl i tessl/pypi-riskfolio-lib

docs

constraints-advanced.md

hierarchical-clustering.md

index.md

parameter-estimation.md

plotting-visualization.md

portfolio-optimization.md

reports.md

risk-functions.md

tile.json