{ "cells": [ { "cell_type": "markdown", "id": "254e0552", "metadata": {}, "source": [ "# Maximizing Return\n", "\n", "The *standard mean-variance (Markowitz) portfolio selection model* determines an optimal investment portfolio that balances risk and expected return. In this notebook, we maximize the expected return of the portfolio while constraining the admissible variance (risk) to a given maximum level. Please refer to the [annotated list of references](../literature.rst#portfolio-optimization) for more background information on portfolio optimization." ] }, { "cell_type": "code", "execution_count": 1, "id": "305f7320", "metadata": { "execution": { "iopub.execute_input": "2025-01-31T10:03:15.219636Z", "iopub.status.busy": "2025-01-31T10:03:15.219403Z", "iopub.status.idle": "2025-01-31T10:03:16.036551Z", "shell.execute_reply": "2025-01-31T10:03:16.035820Z" }, "nbsphinx": "hidden" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: numpy in /opt/hostedtoolcache/Python/3.11.11/x64/lib/python3.11/site-packages (2.2.2)\r\n", "Requirement already satisfied: scipy in /opt/hostedtoolcache/Python/3.11.11/x64/lib/python3.11/site-packages (1.15.1)\r\n", "Requirement already satisfied: gurobipy in /opt/hostedtoolcache/Python/3.11.11/x64/lib/python3.11/site-packages (11.0.3)\r\n", "Requirement already satisfied: pandas in /opt/hostedtoolcache/Python/3.11.11/x64/lib/python3.11/site-packages (2.2.3)\r\n", "Requirement already satisfied: matplotlib in /opt/hostedtoolcache/Python/3.11.11/x64/lib/python3.11/site-packages (3.10.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: python-dateutil>=2.8.2 in /opt/hostedtoolcache/Python/3.11.11/x64/lib/python3.11/site-packages (from pandas) (2.9.0.post0)\r\n", "Requirement already satisfied: pytz>=2020.1 in /opt/hostedtoolcache/Python/3.11.11/x64/lib/python3.11/site-packages (from pandas) (2025.1)\r\n", "Requirement already satisfied: tzdata>=2022.7 in /opt/hostedtoolcache/Python/3.11.11/x64/lib/python3.11/site-packages (from pandas) (2025.1)\r\n", "Requirement already satisfied: contourpy>=1.0.1 in /opt/hostedtoolcache/Python/3.11.11/x64/lib/python3.11/site-packages (from matplotlib) (1.3.1)\r\n", "Requirement already satisfied: cycler>=0.10 in /opt/hostedtoolcache/Python/3.11.11/x64/lib/python3.11/site-packages (from matplotlib) (0.12.1)\r\n", "Requirement already satisfied: fonttools>=4.22.0 in /opt/hostedtoolcache/Python/3.11.11/x64/lib/python3.11/site-packages (from matplotlib) (4.55.8)\r\n", "Requirement already satisfied: kiwisolver>=1.3.1 in /opt/hostedtoolcache/Python/3.11.11/x64/lib/python3.11/site-packages (from matplotlib) (1.4.8)\r\n", "Requirement already satisfied: packaging>=20.0 in /opt/hostedtoolcache/Python/3.11.11/x64/lib/python3.11/site-packages (from matplotlib) (24.2)\r\n", "Requirement already satisfied: pillow>=8 in /opt/hostedtoolcache/Python/3.11.11/x64/lib/python3.11/site-packages (from matplotlib) (11.1.0)\r\n", "Requirement already satisfied: pyparsing>=2.3.1 in /opt/hostedtoolcache/Python/3.11.11/x64/lib/python3.11/site-packages (from matplotlib) (3.2.1)\r\n", "Requirement already satisfied: six>=1.5 in /opt/hostedtoolcache/Python/3.11.11/x64/lib/python3.11/site-packages (from python-dateutil>=2.8.2->pandas) (1.17.0)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Note: you may need to restart the kernel to use updated packages.\n" ] } ], "source": [ "# Install dependencies\n", "%pip install numpy scipy gurobipy pandas matplotlib" ] }, { "cell_type": "code", "execution_count": 2, "id": "65f64dcd", "metadata": { "execution": { "iopub.execute_input": "2025-01-31T10:03:16.038704Z", "iopub.status.busy": "2025-01-31T10:03:16.038504Z", "iopub.status.idle": "2025-01-31T10:03:18.237304Z", "shell.execute_reply": "2025-01-31T10:03:18.236605Z" } }, "outputs": [], "source": [ "import gurobipy as gp\n", "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 3, "id": "6639ad99", "metadata": { "execution": { "iopub.execute_input": "2025-01-31T10:03:18.239653Z", "iopub.status.busy": "2025-01-31T10:03:18.239384Z", "iopub.status.idle": "2025-01-31T10:03:18.510823Z", "shell.execute_reply": "2025-01-31T10:03:18.510226Z" }, "nbsphinx": "hidden" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Set parameter WLSAccessID\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Set parameter WLSSecret\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Set parameter LicenseID to value 2443533\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WLS license 2443533 - registered to Gurobi GmbH\n" ] } ], "source": [ "# Hidden cell to avoid licensing messages\n", "# when docs are generated.\n", "with gp.Model():\n", " pass" ] }, { "cell_type": "markdown", "id": "b294e6cd", "metadata": {}, "source": [ "## Input Data\n", "\n", "The following input data is used within the model:\n", "\n", "- $S$: set of stocks\n", "- $\\mu$: vector of expected returns\n", "- $\\Sigma$: PSD variance-covariance matrix\n", " - $\\sigma_{ij}$ covariance between returns of assets $i$ and $j$\n", " - $\\sigma_{ii}$ variance of return of asset $i$" ] }, { "cell_type": "code", "execution_count": 4, "id": "52360e6e", "metadata": { "execution": { "iopub.execute_input": "2025-01-31T10:03:18.512905Z", "iopub.status.busy": "2025-01-31T10:03:18.512708Z", "iopub.status.idle": "2025-01-31T10:03:18.518560Z", "shell.execute_reply": "2025-01-31T10:03:18.518026Z" } }, "outputs": [], "source": [ "# Import example data\n", "Sigma = pd.read_pickle(\"sigma.pkl\")\n", "mu = pd.read_pickle(\"mu.pkl\")" ] }, { "cell_type": "markdown", "id": "63d24108", "metadata": {}, "source": [ "## Formulation\n", "The model maximizes the overall expected return for a prespecified maximum level of variance (risk). Mathematically, this results in a convex quadratically constrained optimization problem.\n", "\n", "### Decision Variables and Variable Bounds\n", "\n", "The decision variables in the model are the proportions of capital invested among the considered stocks. The corresponding vector of positions is denoted by $x$ with its component $x_i$ denoting the proportion of capital invested in stock $i$.\n", "\n", "Each position must be between 0 and 1; this prevents leverage and short-selling:\n", "\n", "$$0\\leq x_i\\leq 1 \\; , \\; i \\in S$$\n", "\n", "\n", "### Constraints\n", "The budget constraint ensures that all capital is invested:\n", "\n", "$$\\sum_{i \\in S} x_i =1$$\n", "\n", "The estimated risk must not exceed a prespecified maximal admissible level of variance $\\bar\\sigma^2$:\n", "\n", "$$x^\\top \\Sigma x \\leq \\bar\\sigma^2$$\n", "\n", "### Objective Function\n", "The objective is to maximize the expected return of the portfolio:\n", "\n", "$$\\max_x \\mu^\\top x $$\n", "\n", "Using gurobipy, this can be expressed as follows:" ] }, { "cell_type": "code", "execution_count": 5, "id": "f64ec3aa", "metadata": { "execution": { "iopub.execute_input": "2025-01-31T10:03:18.520467Z", "iopub.status.busy": "2025-01-31T10:03:18.520286Z", "iopub.status.idle": "2025-01-31T10:03:18.908311Z", "shell.execute_reply": "2025-01-31T10:03:18.907731Z" } }, "outputs": [], "source": [ "V = 3.5 # maximal admissible variance (sigma^2)\n", "\n", "# Create an empty optimization model\n", "m = gp.Model()\n", "\n", "# Add variables: x[i] denotes the proportion invested in stock i\n", "# 0 <= x[i] <= 1\n", "x = m.addMVar(len(mu), lb=0, ub=1, name=\"x\")\n", "\n", "# Budget constraint: all investments sum up to 1\n", "m.addConstr(x.sum() == 1, name=\"Budget_Constraint\")\n", "\n", "# Limit on variance\n", "risk_constr = m.addConstr(x @ Sigma.to_numpy() @ x <= V, name=\"Variance\")\n", "\n", "# Define objective function: Maximize expected return\n", "m.setObjective(mu.to_numpy() @ x, gp.GRB.MAXIMIZE)" ] }, { "cell_type": "markdown", "id": "29b3db60", "metadata": {}, "source": [ "We now solve the optimization problem:" ] }, { "cell_type": "code", "execution_count": 6, "id": "998bf85b", "metadata": { "execution": { "iopub.execute_input": "2025-01-31T10:03:18.911207Z", "iopub.status.busy": "2025-01-31T10:03:18.910869Z", "iopub.status.idle": "2025-01-31T10:03:19.201851Z", "shell.execute_reply": "2025-01-31T10:03:19.201248Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Gurobi Optimizer version 11.0.3 build v11.0.3rc0 (linux64 - \"Ubuntu 24.04.1 LTS\")\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CPU model: AMD EPYC 7763 64-Core Processor, instruction set [SSE2|AVX|AVX2]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Thread count: 1 physical cores, 2 logical processors, using up to 2 threads\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WLS license 2443533 - registered to Gurobi GmbH\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Optimize a model with 1 rows, 462 columns and 462 nonzeros\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Model fingerprint: 0x1ba1fb96\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Model has 1 quadratic constraint\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Coefficient statistics:\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Matrix range [1e+00, 1e+00]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " QMatrix range [3e-03, 1e+02]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Objective range [7e-02, 6e-01]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Bounds range [1e+00, 1e+00]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " RHS range [1e+00, 1e+00]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " QRHS range [4e+00, 4e+00]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Presolve time: 0.05s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Presolved: 464 rows, 925 columns, 107878 nonzeros\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Presolved model has 1 second-order cone constraint\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Ordering time: 0.01s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Barrier statistics:\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " AA' NZ : 1.074e+05\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Factor NZ : 1.079e+05 (roughly 1 MB of memory)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Factor Ops : 3.341e+07 (less than 1 second per iteration)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Threads : 1\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Objective Residual\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Iter Primal Dual Primal Dual Compl Time\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0 1.61202873e+01 1.74312373e-01 6.84e+01 6.67e-01 3.14e-02 0s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 1 2.06989937e+00 1.61037147e+00 7.63e+00 7.34e-07 4.32e-03 0s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 2 5.94842488e-01 8.44674441e-01 1.50e+00 1.41e-07 1.05e-03 0s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 3 2.41396673e-01 5.28985659e-01 1.65e-06 1.01e-08 2.07e-04 0s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 4 2.75348824e-01 4.18773720e-01 1.81e-12 4.33e-09 1.03e-04 0s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 5 3.17949843e-01 3.60990652e-01 6.15e-14 1.14e-09 3.10e-05 0s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 6 3.34976965e-01 3.43400301e-01 1.25e-13 9.17e-11 6.07e-06 0s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 7 3.37110375e-01 3.38160765e-01 6.08e-14 1.12e-11 7.57e-07 0s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 8 3.37545769e-01 3.37859496e-01 9.05e-14 1.41e-12 2.26e-07 0s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 9 3.37749001e-01 3.37776224e-01 1.95e-13 7.16e-14 1.96e-08 0s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 10 3.37772914e-01 3.37773790e-01 7.43e-12 2.14e-15 6.31e-10 0s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Barrier solved model in 10 iterations and 0.28 seconds (0.63 work units)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Optimal objective 3.37772914e-01\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "m.optimize()" ] }, { "cell_type": "markdown", "id": "c877e6d9", "metadata": {}, "source": [ "Display basic solution data:" ] }, { "cell_type": "code", "execution_count": 7, "id": "2847ada3", "metadata": { "execution": { "iopub.execute_input": "2025-01-31T10:03:19.203860Z", "iopub.status.busy": "2025-01-31T10:03:19.203658Z", "iopub.status.idle": "2025-01-31T10:03:19.211096Z", "shell.execute_reply": "2025-01-31T10:03:19.210476Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Expected return: 0.337773\n", "Variance: 3.499993\n", "Solution time: 0.28 seconds\n", "\n", "Number of trades: 25\n", "\n", "TSLA 0.007032\n", "KR 0.042558\n", "PGR 0.126984\n", "ORLY 0.048828\n", "ODFL 0.032487\n", "MNST 0.007642\n", "KDP 0.081927\n", "META 0.012825\n", "UNH 0.017685\n", "AVGO 0.048781\n", "DXCM 0.012487\n", "NFLX 0.015329\n", "LLY 0.229288\n", "DPZ 0.039872\n", "MKTX 0.004647\n", "WST 0.024237\n", "TMUS 0.044854\n", "NOC 0.048733\n", "MOH 0.003070\n", "MSFT 0.016673\n", "WM 0.008693\n", "TTWO 0.038648\n", "ENPH 0.005489\n", "NVDA 0.080938\n", "AZO 0.000272\n", "Name: Position, dtype: float64\n" ] } ], "source": [ "print(f\"Expected return: {m.ObjVal:.6f}\")\n", "print(f\"Variance: {x.X @ Sigma @ x.X:.6f}\")\n", "print(f\"Solution time: {m.Runtime:.2f} seconds\\n\")\n", "\n", "# Print investments (with non-negligible values, i.e., > 1e-5)\n", "positions = pd.Series(name=\"Position\", data=x.X, index=mu.index)\n", "print(f\"Number of trades: {positions[positions > 1e-5].count()}\\n\")\n", "print(positions[positions > 1e-5])" ] }, { "cell_type": "markdown", "id": "350e4246", "metadata": {}, "source": [ "## Efficient Frontier\n", "\n", "The efficient frontier reveals the balance between risk and return in investment portfolios. It shows the best-expected return level that can be achieved for a specified risk level.\n", "We compute this by solving the above optimization problem for a sample of admissible risk levels." ] }, { "cell_type": "code", "execution_count": 8, "id": "c76ed506", "metadata": { "execution": { "iopub.execute_input": "2025-01-31T10:03:19.213024Z", "iopub.status.busy": "2025-01-31T10:03:19.212838Z", "iopub.status.idle": "2025-01-31T10:03:23.104600Z", "shell.execute_reply": "2025-01-31T10:03:23.103907Z" } }, "outputs": [], "source": [ "risks = np.linspace(1.37, 4, 20)\n", "returns = np.zeros(risks.shape)\n", "npos = np.zeros(risks.shape)\n", "\n", "# hide Gurobi log output\n", "m.params.OutputFlag = 0\n", "\n", "# solve the model for each risk level\n", "for i, risk_level in enumerate(risks):\n", " # set risk level: RHS of risk constraint\n", " risk_constr.QCRHS = risk_level**2\n", " m.optimize()\n", " # store data\n", " returns[i] = mu @ x.X\n", " npos[i] = len(x.X[x.X > 1e-5])" ] }, { "cell_type": "markdown", "id": "cfaf1e12", "metadata": {}, "source": [ "Next, we display the efficient frontier for this model: We plot the expected returns (on the $y$-axis) against the standard deviation $\\sqrt{x^\\top\\Sigma x}$ of the expected returns (on the $x$-axis). We also display the relationship between the risk and the number of positions in the optimal portfolio." ] }, { "cell_type": "code", "execution_count": 9, "id": "869caec9", "metadata": { "execution": { "iopub.execute_input": "2025-01-31T10:03:23.106922Z", "iopub.status.busy": "2025-01-31T10:03:23.106695Z", "iopub.status.idle": "2025-01-31T10:03:23.286225Z", "shell.execute_reply": "2025-01-31T10:03:23.285541Z" } }, "outputs": [ { "data": { "image/png": "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dcLCwvj99985deoUr732GnFxcUZlfHx8iIqK4vLly/z9998mf9ZvvfUW4eHhzJ49m7Nnz7Ju3TqWLVvGxIkTn/nzEkKIvECOS8bkuCQKMgmsRIFSrFgxmjVrxscff0zr1q2pV68e06ZNY8SIESxbtsxQbtGiRYSFheHt7U3Dhg0BWLx4MaVKlaJ58+Z0796dzp0706hRI4u3/9NPP3HixAkaNmzIe++9x/z5843KvPbaawQFBdG3b1+aNWvGnTt3jK4SZqduU9asWYOnpydt2rQhKCiIkSNHUr58ecPnGo2GX3/9ldatWzNs2DBq1KhBv379uHLlChUqVDCUc3Nzo3v37hw7doyBAwdmus2pU6fSqFEjOnfuTNu2bXF3d6dnz55GZSZOnIi9vT116tShXLlyJse5N2rUiO+//56NGzdSr149pk+fzqxZszIdOiOEEHmJHJfSk+OSKKg0iqIotm6EEEIIIYQQQuRncsdKCCGEEEIIIbJJAishhBBCCCGEyCYJrIQQQgghhBAimySwEkIIIYQQQohsksBKCCGEEEIIIbJJAishhBBCCCGEyCYJrIQQQgghhBAimySwEkIIIYQQQohsksBKCCGEEEIIIbJJAishhBBCCCGEyCYJrIQQQgghhBAimySwEkIIIYQQQohs+n/3tEBu6hoiOQAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, axs = plt.subplots(1, 2, figsize=(10, 3))\n", "\n", "# Axis 0: The efficient frontier\n", "axs[0].scatter(x=risks, y=returns, marker=\"o\", label=\"sample points\", color=\"Red\")\n", "axs[0].plot(risks, returns, label=\"efficient frontier\", color=\"Red\")\n", "axs[0].set_xlabel(\"Standard deviation\")\n", "axs[0].set_ylabel(\"Expected return\")\n", "axs[0].legend()\n", "axs[0].grid()\n", "\n", "# Axis 1: The number of open positions\n", "axs[1].scatter(x=risks, y=npos, color=\"Red\")\n", "axs[1].plot(risks, npos, color=\"Red\")\n", "axs[1].set_xlabel(\"Standard deviation\")\n", "axs[1].set_ylabel(\"Number of positions\")\n", "axs[1].grid()\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "781c1f05", "metadata": {}, "source": [ "As expected, the number of open positions decreases as we allow more variance; the optimization will progressively invest in fewer high-risk but high-yield assets." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.11" } }, "nbformat": 4, "nbformat_minor": 5 }