{ "cells": [ { "cell_type": "markdown", "id": "cb4c9cb0", "metadata": {}, "source": [ "# Minimum Buy-in\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 minimize the variance (risk) of the portfolio, constraining the expected return to meet a prescribed minimum level. Please refer to the [annotated list of references](../literature.rst#portfolio-optimization) for more background information on portfolio optimization.\n", "\n", "To this basic model, we add *buy-in thresholds* that prevent the investor from holding tiny positions. Holding tiny positions is undesirable because they have a marginal, if any, impact on the expected return but can lead to non-negligible transaction costs, which are not accounted for in the portfolio selection model." ] }, { "cell_type": "code", "execution_count": 1, "id": "1805a8e3", "metadata": { "execution": { "iopub.execute_input": "2025-01-31T10:05:47.125355Z", "iopub.status.busy": "2025-01-31T10:05:47.124945Z", "iopub.status.idle": "2025-01-31T10:05:47.887328Z", "shell.execute_reply": "2025-01-31T10:05:47.886585Z" }, "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": "36d5df15", "metadata": { "execution": { "iopub.execute_input": "2025-01-31T10:05:47.889504Z", "iopub.status.busy": "2025-01-31T10:05:47.889302Z", "iopub.status.idle": "2025-01-31T10:05:48.511576Z", "shell.execute_reply": "2025-01-31T10:05:48.510895Z" } }, "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": "2a91716a", "metadata": { "execution": { "iopub.execute_input": "2025-01-31T10:05:48.513800Z", "iopub.status.busy": "2025-01-31T10:05:48.513536Z", "iopub.status.idle": "2025-01-31T10:05:48.521792Z", "shell.execute_reply": "2025-01-31T10:05:48.521226Z" }, "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": "23dcfffd", "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": "9cf2812e", "metadata": { "execution": { "iopub.execute_input": "2025-01-31T10:05:48.523838Z", "iopub.status.busy": "2025-01-31T10:05:48.523494Z", "iopub.status.idle": "2025-01-31T10:05:48.528439Z", "shell.execute_reply": "2025-01-31T10:05:48.527823Z" } }, "outputs": [], "source": [ "# Import some example data set\n", "Sigma = pd.read_pickle(\"sigma.pkl\")\n", "mu = pd.read_pickle(\"mu.pkl\")" ] }, { "cell_type": "markdown", "id": "09cc4619", "metadata": {}, "source": [ "## Formulation\n", "The model minimizes the variance of the portfolio given that the minimum level of expected return is attained and that each position is above a specified lower bound to avoid triggering brokerage costs with tiny positions.\n", "\n", "Mathematically, this results in a convex quadratic mixed-integer optimization problem.\n", "\n", "### Model Parameters\n", "We use the following parameters:\n", "\n", "- $\\bar\\mu$: required expected portfolio return\n", "- $\\ell > 0$: minimal position size" ] }, { "cell_type": "code", "execution_count": 5, "id": "031bb111", "metadata": { "execution": { "iopub.execute_input": "2025-01-31T10:05:48.530277Z", "iopub.status.busy": "2025-01-31T10:05:48.530057Z", "iopub.status.idle": "2025-01-31T10:05:48.532695Z", "shell.execute_reply": "2025-01-31T10:05:48.532285Z" } }, "outputs": [], "source": [ "# Values for the model parameters:\n", "r = 0.25 # Required expected return\n", "l = 0.03 # Minimal position size" ] }, { "cell_type": "markdown", "id": "afa6434c", "metadata": {}, "source": [ "### Decision Variables and Variable Bounds\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", "\n", "We will declare the variables to be *semi-continuous*, meaning either $$x_i=0\\ \\text{or}\\ 0<\\ell \\leq x_i \\leq 1\\; , \\; i \\in S.$$\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 expected return of the portfolio must be at least $\\bar\\mu$:\n", "\n", "$$\\mu^\\top x \\geq \\bar\\mu$$\n", "\n", "### Objective Function\n", "The objective is to minimize the risk of the portfolio, which is measured by its variance:\n", "\n", "$$\\min_x x^\\top \\Sigma x$$\n", "\n", "\n", "Using gurobipy, this can be expressed as follows:" ] }, { "cell_type": "code", "execution_count": 6, "id": "4e122b03", "metadata": { "execution": { "iopub.execute_input": "2025-01-31T10:05:48.534501Z", "iopub.status.busy": "2025-01-31T10:05:48.534328Z", "iopub.status.idle": "2025-01-31T10:05:48.680947Z", "shell.execute_reply": "2025-01-31T10:05:48.680364Z" } }, "outputs": [], "source": [ "%%capture\n", "# Create an empty optimization model\n", "m = gp.Model(\"Portfolio\")\n", "\n", "# Add variables: x[i] denotes the proportion invested in stock i. Must be greater or equal to l or zero.\n", "# Defining the variable as semi-continuous is enough to enforce the buy-in threshold requirement.\n", "x = m.addMVar(len(mu), lb=l, ub=1, vtype=gp.GRB.SEMICONT, name=\"x\")\n", "\n", "# Budget constraint: all investments sum up to 1\n", "m.addConstr(x.sum() == 1, name=\"Budget_Constraint\")\n", "\n", "# Lower bound on expected return\n", "m.addConstr(mu.to_numpy() @ x >= r, name=\"Minimal_Return\")\n", "\n", "# Define objective function: Minimize risk\n", "m.setObjective(x @ Sigma.to_numpy() @ x, gp.GRB.MINIMIZE)" ] }, { "cell_type": "markdown", "id": "c480fcd4", "metadata": {}, "source": [ "We now solve the optimization problem:" ] }, { "cell_type": "code", "execution_count": 7, "id": "f62f3c24", "metadata": { "execution": { "iopub.execute_input": "2025-01-31T10:05:48.683648Z", "iopub.status.busy": "2025-01-31T10:05:48.683352Z", "iopub.status.idle": "2025-01-31T10:05:48.998601Z", "shell.execute_reply": "2025-01-31T10:05:48.997913Z" } }, "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 2 rows, 462 columns and 924 nonzeros\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Model fingerprint: 0x3e0b16ed\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Model has 106953 quadratic objective terms\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Variable types: 0 continuous, 0 integer (0 binary)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Semi-Variable types: 462 continuous, 0 integer\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Coefficient statistics:\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Matrix range [7e-02, 1e+00]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Objective range [0e+00, 0e+00]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " QObjective range [6e-03, 2e+02]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Bounds range [3e-02, 1e+00]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " RHS range [2e-01, 1e+00]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Presolve time: 0.05s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Presolved: 926 rows, 924 columns, 2771 nonzeros\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Presolved model has 106953 quadratic objective terms\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Variable types: 462 continuous, 462 integer (462 binary)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Found heuristic solution: objective 10.5757854\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Root relaxation: objective 2.026597e+00, 154 iterations, 0.01 seconds (0.01 work units)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Nodes | Current Node | Objective Bounds | Work\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Expl Unexpl | Obj Depth IntInf | Incumbent BestBd Gap | It/Node Time\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0 0 2.02660 0 37 10.57579 2.02660 80.8% - 0s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "H 0 0 2.1009626 2.02660 3.54% - 0s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "H 0 0 2.0344360 2.02660 0.39% - 0s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0 0 2.02660 0 28 2.03444 2.02660 0.39% - 0s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0 0 2.02660 0 28 2.03444 2.02660 0.39% - 0s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0 0 2.02660 0 28 2.03444 2.02660 0.39% - 0s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0 0 2.02697 0 27 2.03444 2.02697 0.37% - 0s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0 0 2.02697 0 27 2.03444 2.02697 0.37% - 0s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0 0 2.02798 0 27 2.03444 2.02798 0.32% - 0s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0 1 2.02798 0 26 2.03444 2.02798 0.32% - 0s\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Cutting planes:\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Implied bound: 2\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " MIR: 3\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Explored 85 nodes (713 simplex iterations) in 0.30 seconds (0.21 work units)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Thread count was 2 (of 2 available processors)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Solution count 4: 2.03444 2.03624 2.10096 10.5758 \n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Optimal solution found (tolerance 1.00e-04)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Best objective 2.034435973118e+00, best bound 2.034263875958e+00, gap 0.0085%\n" ] } ], "source": [ "m.optimize()" ] }, { "cell_type": "markdown", "id": "28f4629a", "metadata": {}, "source": [ "We print out the optimal solution and objective value:" ] }, { "cell_type": "code", "execution_count": 8, "id": "1f24630e", "metadata": { "execution": { "iopub.execute_input": "2025-01-31T10:05:49.000637Z", "iopub.status.busy": "2025-01-31T10:05:49.000444Z", "iopub.status.idle": "2025-01-31T10:05:49.006711Z", "shell.execute_reply": "2025-01-31T10:05:49.006217Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Minimum Risk: 2.034436\n", "Expected return: 0.250000\n", "Solution time: 0.30 seconds\n", "\n", "Number of trades: 23\n", "\n", "KR 0.030000\n", "PGR 0.044192\n", "CME 0.030000\n", "ODFL 0.030000\n", "BDX 0.030000\n", "LIN 0.030000\n", "KDP 0.077162\n", "GILD 0.030000\n", "CLX 0.056940\n", "SJM 0.030000\n", "LLY 0.103001\n", "DPZ 0.054447\n", "MKTX 0.030000\n", "MRK 0.036542\n", "ED 0.084887\n", "WST 0.030000\n", "TMUS 0.033931\n", "NOC 0.030000\n", "WM 0.045810\n", "TTWO 0.036782\n", "WMT 0.064940\n", "HRL 0.031366\n", "CPB 0.030000\n", "Name: Position, dtype: float64\n" ] } ], "source": [ "# Display basic solution data\n", "print(f\"Minimum Risk: {m.ObjVal:.6f}\")\n", "print(f\"Expected return: {mu @ x.X:.6f}\")\n", "print(f\"Solution time: {m.Runtime:.2f} seconds\\n\")\n", "\n", "# Print investments (with non-negligible value, 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": "68227054", "metadata": {}, "source": [ "## Comparison with the unconstrained portfolio\n", "\n", "We can also compute the portfolio without the minimum buy-in condition by changing the variable type and bounds of $x$ and compare the resulting portfolios." ] }, { "cell_type": "code", "execution_count": 9, "id": "a726e6c1", "metadata": { "execution": { "iopub.execute_input": "2025-01-31T10:05:49.008876Z", "iopub.status.busy": "2025-01-31T10:05:49.008696Z", "iopub.status.idle": "2025-01-31T10:05:49.499754Z", "shell.execute_reply": "2025-01-31T10:05:49.499026Z" } }, "outputs": [ { "data": { "image/png": "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Gy+lQEaMbt68iUajyfZW+fyIi4vD1NRUWZkOMGLECK2Aa8OGDVSpUgVXV1cAunXrRmBgIM2bN8+23azyGAkhxJvM1Dr7v3mFIeGv/P0PqI2NDTNnzqRKlSpoNBpCQkJo3749v/zyC66uruzatYt169Zx4MABbty4ga+vL56enpQrV464uDi++OILDh06VEhXQ47P5MyKkZGRsjBY5MzCwqK4u/DSCmTEqCBzRJYsWZKIiAjOnz/PvHnzqFevHtOmTdOqs3r1auWRIPD8sSCbNm3i8ePH2bY7Y8YMzMzMlM3W1hZ4nvm60u3/8rUJIYTIXbt27fj444+pUqUKzs7OTJs2DVNTU86cOQPAlStXcHd357333qN79+6UKlWKO3fuAPD5558zePBg7Ozscj3P5MmTqVOnDqtXr8bOzg5TU1OGDBlCamoqs2fPxtLSkvLly2f6LlGpVEoy4cjISFQqFVu3bsXDwwNjY2Nq167N6dOnlfrBwcFaMyAvc97080RERChlsbGxyk1IAGFhYahUKvbv30/dunUxMjKiZcuWPHjwgL1791KtWjVKlSpFjx49lAGEnGzfvp0qVapgaGiIp6cn9+7dU/b5+Phkmkr08/PD3d0dgDVr1mBubq41sADQoUMHevfune05HRwcWLBggfJapVKxatUqOnbsiLGxMVWqVGHnzp259r04FEhgVKVKFVQqFVevXn3ltnR0dHBycqJatWqMHj2aRo0aMXjwYGX/H3/8wZkzZ/j888/R09NDT0+PRo0a8fTpUzZs2JBtu/7+/sTFxSlbxg+GEEKIwpWamsqGDRt48uQJjRs3BqB27dqcP3+emJgYLly4wLNnz3BycuLEiRNcvHiRESNG5Ln9W7dusXfvXvbt28f69esJDAykTZs23L9/n6NHjzJr1iwmTZpEeHh4ju188cUXjB07loiICJydnenevTspKSmFft6sTJ48mcWLF3Pq1Cnu3btHly5dWLBgAevWrWPPnj0cOHCARYsW5djG06dPmTZtGmvWrOHkyZPExsbSrVu3PPehc+fOpKamagUxDx48YM+ePfj6+ubreqZMmUKXLl24dOkSH3/8MT179uTRo0f5aqMoFEhgVLZsWTw9PVmyZAlPnjzJtP9VFn5NmDCBjRs3cvHiReD5ousWLVrw66+/EhERoWyjR48mMDAw23YMDAyUee70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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# change type of x from semi-continous to continuous\n", "x.vtype = gp.GRB.CONTINUOUS\n", "x.lb = 0\n", "m.params.OutputFlag = 0\n", "m.optimize()\n", "\n", "# retrieve and display solution data\n", "mask = (positions > 1e-5) | (x.X > 1e-5)\n", "df = pd.DataFrame(\n", " index=positions[mask].index,\n", " data={\n", " \"3% minimum buy-in\": positions,\n", " \"unconstrained\": x.X[mask],\n", " },\n", ").sort_values(by=[\"3% minimum buy-in\", \"unconstrained\"], ascending=True)\n", "\n", "axs = df.plot.barh(color=[\"#0b1a3c\", \"#dd2113\"])\n", "axs.set_xlabel(\"Fraction of investment sum\")\n", "plt.title(\"Minimum Variance portfolios with and without minimum buy-in\")\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "55baa778", "metadata": {}, "source": [ "## Takeaways\n", "* Semi-continuous variables are decision variables that may either take the value 0 or a value between specified bounds. They are a convenient tool to guarantee a minimum position size for purchased 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 }