Riskfolio-Lib
raw JSON → 7.2.1 verified Sat May 09 auth: no python
Riskfolio-Lib is a Python library for portfolio optimization and quantitative strategic asset allocation. It provides tools for mean-variance, Black-Litterman, risk parity, and other advanced portfolio methods. Current version is 7.2.1, requiring Python >=3.9. The library is actively maintained with a regular release cadence.
pip install riskfolio-lib Common errors
error ModuleNotFoundError: No module named 'riskfolio' ↓
cause Importing with hyphen instead of underscore: 'riskfolio-lib' is the package name, but the module is 'riskfolio'.
fix
Use 'import riskfolio' after 'pip install riskfolio-lib'.
error KeyError: 'prices' ↓
cause Portfolio class in v7+ does not accept 'prices' as a parameter.
fix
Pass 'returns' (DataFrame of returns) instead of 'prices' to Portfolio.
error cvxpy.error.SolverError: Solver not found (ECOS, SCS, etc.) ↓
cause cvxpy is installed but no solver backend is available.
fix
Install a solver: e.g., 'pip install cvxopt'.
error ValueError: The covariance matrix is not positive semidefinite ↓
cause Data contains NaN or insufficient observations causing non-psd covariance.
fix
Drop or interpolate NaN values; use method='ledoit' in covariance estimation: Port = Portfolio(returns, method_cov='ledoit').
Warnings
breaking In version 7.0+, the Portfolio class no longer accepts 'prices' directly; use 'returns' or 'mu' and 'cov' explicitly. ↓
fix Convert prices to returns with .pct_change().dropna() before passing to Portfolio.
deprecated The function 'riskfolio.MeanRisk()' is deprecated. Use 'Portfolio.optimization()' with risk measure parameters. ↓
fix Switch to Portfolio object and its optimization method.
gotcha The library requires cvxpy with a compatible solver (e.g., ECOS, SCS). Missing solver may cause silent fallback or errors. ↓
fix Install cvxpy and optionally 'cvxopt' or 'scipy' for alternative solvers.
Imports
- Portfolio wrong
import Portfolio from riskfolio-libcorrectfrom riskfolio import Portfolio - HRP (Hierarchical Risk Parity) wrong
from riskfolio.lib import HRPcorrectfrom riskfolio import HCPortfolio - RiskParity wrong
from riskfolio.optimization import RiskParitycorrectfrom riskfolio import RiskParity
Quickstart
import numpy as np
import pandas as pd
from riskfolio import Portfolio
# Sample data
ereturns = pd.DataFrame(np.random.randn(100, 4), columns=['Asset1','Asset2','Asset3','Asset4'])
# Portfolio object
port = Portfolio(returns=ereturns)
# Mean-variance optimization
w = port.optimization(model='Classic', rm='MV', obj='Sharpe', hist=True)
print(w)