Portfolio Optimization

PortfolioProblem

OperationsResearchModels.Portfolio.PortfolioProblemType
PortfolioProblem

Description

Defines the portfolio optimization problem.

Fields

  • returns::Matrix{<:Real}: A matrix of historical returns for the assets.
  • thresholdreturn::Real: The minimum expected return required for the portfolio.
source

PortfolioResult

OperationsResearchModels.Portfolio.PortfolioResultType
PortfolioResult

Description

A structure to hold the result of the portfolio optimization problem.

Fields

  • weights::Vector{Float64}: The optimal weights for the assets in the portfolio.
  • expectedreturn::Float64: The expected return of the optimal portfolio.
  • model::JuMP.Model: The JuMP model used to solve the problem.
source

solve

OperationsResearchModels.solveMethod
solve(problem)

Description

Solves a portfolio optimization problem given by an object of in type PortfolioProblem. The optimization problem is formulated as a quadratic programming problem where the objective is to minimize the portfolio variance (risk) subject to constraints on the expected return and the weights.

Mathematically, the problem can be stated as:

Minimize: w' * Covmat * w Subject to:

  • sum(w) == 1 (the weights must sum to 1)
  • sum(w[i] * means[i] for i in 1:m) >= thresholdreturn
  • 0 <= w[i] <= 1 for all i (weights must be between 0 and 1)

Where:

  • w is the vector of asset weights
  • Covmat is the covariance matrix of asset returns
  • means is the vector of expected returns for each asset
  • thresholdreturn is the minimum expected return required for the portfolio

Note

Ipopt is used to solve the quadratic programming problem. Make sure to have Ipopt installed and properly configured in your Julia environment to use this function.

Arguments

  • problem::PortfolioProblem: The problem in type of PortfolioProblem

Returns

  • PortfolioResult: The result of the portfolio optimization problem, containing the optimal weights, expected return, and the JuMP model used to solve the problem.

Example

using OperationsResearchModels
using Ipopt

problem = PortfolioProblem(rand(100, 5), 0.01)
result = solve(problem)
println("Optimal Weights: ", result.weights)
println("Expected Return: ", result.expectedreturn)
source