📦 SQA::PortfolioOptimizer¶
Description
PortfolioOptimizer - Multi-objective portfolio optimization
Provides methods for: - Mean-Variance Optimization (Markowitz) - Multi-objective optimization (return vs risk vs drawdown) - Efficient Frontier calculation - Risk Parity allocation - Minimum Variance portfolio - Maximum Sharpe portfolio
🏭 Class Methods¶
.portfolio_returns(returns_matrix, weights)¶
Calculate portfolio returns given weights
Parameters
| Name | Type | Description |
|---|---|---|
returns_matrix |
Array<Array<Float>> |
Returns for each asset (rows = assets, cols = periods) |
weights |
Array<Float> |
Portfolio weights (must sum to 1.0) |
Returns
Type: Array<Float>
Portfolio returns over time
Source Location
.portfolio_variance(returns_matrix, weights)¶
Calculate portfolio variance
Parameters
| Name | Type | Description |
|---|---|---|
returns_matrix |
Array<Array<Float>> |
Returns for each asset |
weights |
Array<Float> |
Portfolio weights |
Returns
Type: Float
Portfolio variance
Source Location
.maximum_sharpe(returns_matrix, risk_free_rate: = 0.02, constraints: = {})¶
Find Maximum Sharpe Ratio portfolio
Uses numerical optimization to find weights that maximize Sharpe ratio.
Parameters
| Name | Type | Description |
|---|---|---|
returns_matrix |
Array<Array<Float>> |
Returns for each asset |
risk_free_rate |
Float |
Risk-free rate (default: 0.02) |
constraints |
Hash |
Optimization constraints |
Returns
Type: Hash
{ weights: Array, sharpe: Float, return: Float, volatility: Float }
Source Location
.minimum_variance(returns_matrix, constraints: = {})¶
Find Minimum Variance portfolio
Parameters
| Name | Type | Description |
|---|---|---|
returns_matrix |
Array<Array<Float>> |
Returns for each asset |
constraints |
Hash |
Optimization constraints |
Returns
Type: Hash
{ weights: Array, variance: Float, volatility: Float }
Source Location
.risk_parity(returns_matrix)¶
Calculate Risk Parity portfolio
Allocate weights so each asset contributes equally to portfolio risk.
Parameters
| Name | Type | Description |
|---|---|---|
returns_matrix |
Array<Array<Float>> |
Returns for each asset |
Returns
Type: Hash
{ weights: Array, volatility: Float }
Source Location
.efficient_frontier(returns_matrix, num_portfolios: = 50)¶
Calculate Efficient Frontier
Generate portfolios along the efficient frontier.
Parameters
| Name | Type | Description |
|---|---|---|
returns_matrix |
Array<Array<Float>> |
Returns for each asset |
num_portfolios |
Integer |
Number of portfolios to generate |
Returns
Type: Array<Hash>
Array of portfolio hashes
Source Location
.multi_objective(returns_matrix, objectives: = {})¶
Multi-objective optimization
Optimize portfolio for multiple objectives simultaneously.
Parameters
| Name | Type | Description |
|---|---|---|
returns_matrix |
Array<Array<Float>> |
Returns for each asset |
objectives |
Hash |
Objectives with weights |
Returns
Type: Hash
Optimal portfolio
Usage Examples
Source Location
.equal_weight(num_assets)¶
Equal weight portfolio (1/N rule)
Parameters
| Name | Type | Description |
|---|---|---|
num_assets |
Integer |
Number of assets |
Returns
Type: Array<Float>
Equal weights
Source Location
.rebalance(current_values:, target_weights:, total_value:, prices:)¶
Rebalance portfolio to target weights
Parameters
| Name | Type | Description |
|---|---|---|
current_values |
Hash |
Current holdings |
target_weights |
Hash |
Target weights |
total_value |
Float |
Total portfolio value |
Returns
Type: Hash
Rebalancing trades { ticker => { action: :buy/:sell, shares: N, value: $ } }