Skip to content

📦 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

Source Information

Defined in: lib/sqa/portfolio_optimizer.rb:25

Inherits from: Object

🏭 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

lib/sqa/portfolio_optimizer.rb:34


.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

lib/sqa/portfolio_optimizer.rb:51


.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

lib/sqa/portfolio_optimizer.rb:75


.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

lib/sqa/portfolio_optimizer.rb:114


.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

lib/sqa/portfolio_optimizer.rb:146


.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

lib/sqa/portfolio_optimizer.rb:175


.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

result = SQA::PortfolioOptimizer.multi_objective(
  returns_matrix,
  objectives: {
    maximize_return: 0.4,
    minimize_volatility: 0.3,
    minimize_drawdown: 0.3
  }
)
Source Location

lib/sqa/portfolio_optimizer.rb:217


.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

lib/sqa/portfolio_optimizer.rb:285


.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: $ } }

Source Location

lib/sqa/portfolio_optimizer.rb:298


📝 Attributes