{ "cells": [ { "cell_type": "markdown", "metadata": { "nbpages": { "level": 0, "link": "[](https://jckantor.github.io/CBE40455-2020/07.07-MAD-Portfolio-Optimization.html)", "section": "" }, "pycharm": {} }, "source": [ "\n", "*This notebook contains material from [CBE40455-2020](https://jckantor.github.io/CBE40455-2020);\n", "content is available [on Github](https://github.com/jckantor/CBE40455-2020.git).*\n" ] }, { "cell_type": "markdown", "metadata": { "nbpages": { "level": 0, "link": "[](https://jckantor.github.io/CBE40455-2020/07.07-MAD-Portfolio-Optimization.html)", "section": "" }, "pycharm": {} }, "source": [ "\n", "< [7.6 Portfolio Optimization using Mean Absolute Deviation](https://jckantor.github.io/CBE40455-2020/07.06-Portfolio-Optimization-using-Mean-Absolute-Deviation.html) | [Contents](toc.html) | [7.8 Log-Optimal Growth and the Kelly Criterion](https://jckantor.github.io/CBE40455-2020/07.08-Log-Optimal-Growth-and-the-Kelly-Criterion.html) >
"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 1,
"link": "[7.7 Portfolio Optimization](https://jckantor.github.io/CBE40455-2020/07.07-MAD-Portfolio-Optimization.html#7.7-Portfolio-Optimization)",
"section": "7.7 Portfolio Optimization"
},
"pycharm": {}
},
"source": [
"# 7.7 Portfolio Optimization"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 1,
"link": "[7.7 Portfolio Optimization](https://jckantor.github.io/CBE40455-2020/07.07-MAD-Portfolio-Optimization.html#7.7-Portfolio-Optimization)",
"section": "7.7 Portfolio Optimization"
},
"pycharm": {}
},
"source": [
"This [IPython notebook](http://ipython.org/notebook.html) demonstrates portfolio optimization using the Mean Absolute Deviation (MAD) criterion. A portion of these notes is adapted from [GLPK Wikibook tutorial on the subject](http://en.wikibooks.org/wiki/GLPK/Portfolio_Optimization) written by me.\n",
"\n",
"J.C. Kantor (Kantor.1@nd.edu)\n",
"\n",
"The latest version of this IPython notebook is available at [http://github.com/jckantor/CBE20255](http://github.com/jckantor/CBE20255) for noncommercial use under terms of the [Creative Commons Attribution Noncommericial ShareAlike License](http://creativecommons.org/licenses/by-nc-sa/4.0/)."
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 2,
"link": "[7.7.1 Investment Objectives](https://jckantor.github.io/CBE40455-2020/07.07-MAD-Portfolio-Optimization.html#7.7.1-Investment-Objectives)",
"section": "7.7.1 Investment Objectives"
},
"pycharm": {}
},
"source": [
"## 7.7.1 Investment Objectives"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 2,
"link": "[7.7.1 Investment Objectives](https://jckantor.github.io/CBE40455-2020/07.07-MAD-Portfolio-Optimization.html#7.7.1-Investment-Objectives)",
"section": "7.7.1 Investment Objectives"
},
"pycharm": {}
},
"source": [
"* Maximize returns\n",
"* Reduce Risk through diversification"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 2,
"link": "[7.7.2 Why Diversify?](https://jckantor.github.io/CBE40455-2020/07.07-MAD-Portfolio-Optimization.html#7.7.2-Why-Diversify?)",
"section": "7.7.2 Why Diversify?"
},
"pycharm": {}
},
"source": [
"## 7.7.2 Why Diversify?"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 2,
"link": "[7.7.2 Why Diversify?](https://jckantor.github.io/CBE40455-2020/07.07-MAD-Portfolio-Optimization.html#7.7.2-Why-Diversify?)",
"section": "7.7.2 Why Diversify?"
},
"pycharm": {}
},
"source": [
"Investment portfolios are collections of investments that are managed for overall investment return. Compared to investing all of your capital into a single asset, maintaining a portfolio of investments allows you to manage risk through diversification."
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 3,
"link": "[7.7.2.1 Reduce Risk through Law of Large Numbers](https://jckantor.github.io/CBE40455-2020/07.07-MAD-Portfolio-Optimization.html#7.7.2.1-Reduce-Risk-through-Law-of-Large-Numbers)",
"section": "7.7.2.1 Reduce Risk through Law of Large Numbers"
},
"pycharm": {}
},
"source": [
"### 7.7.2.1 Reduce Risk through Law of Large Numbers"
]
},
{
"cell_type": "markdown",
"metadata": {
"nbpages": {
"level": 3,
"link": "[7.7.2.1 Reduce Risk through Law of Large Numbers](https://jckantor.github.io/CBE40455-2020/07.07-MAD-Portfolio-Optimization.html#7.7.2.1-Reduce-Risk-through-Law-of-Large-Numbers)",
"section": "7.7.2.1 Reduce Risk through Law of Large Numbers"
},
"pycharm": {}
},
"source": [
"Suppose there are a set of independent investment opportunities that will pay back between 0 and 300% of your original investment, and that all outcomes in that range are equally likely. You have $100,000 to invest. Should you put it all in one opportunity? Or should you spread it around?\n",
"\n",
"Here we simulate the outcomes of 1000 trials where we place all the money into a sigle investment of $100,000."
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"collapsed": false,
"nbpages": {
"level": 3,
"link": "[7.7.2.1 Reduce Risk through Law of Large Numbers](https://jckantor.github.io/CBE40455-2020/07.07-MAD-Portfolio-Optimization.html#7.7.2.1-Reduce-Risk-through-Law-of-Large-Numbers)",
"section": "7.7.2.1 Reduce Risk through Law of Large Numbers"
},
"pycharm": {}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Average Profit = $49126\n"
]
},
{
"data": {
"image/png": "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\nemnr1q0aOXKkJGnLli267LLLul3hli1bdMMNN+jKK6+UJN11113697//raioKNXU1CgqKkrV1dWK\njIxsYwvT1Xo0KwAAQKBlnr2dM9+SWjtM5hYuXKisrCz1799fklRdXa0VK1Z0u8KkpCQ988wzOnny\npC699FKtW7dO6enp6tWrl/Lz8/XEE08oPz9fEydO7HYdAAAAoaLDZG7UqFHavXu3vv76a7lcLg0a\nNEjh4eHdrjA1NVXTp0/X9ddfrx49emjEiBG67777dOzYMWVlZWnJkiWKjY3VypUru10HAABAqOjU\npMGff/65ysvL1djY6L2WrTsjWS+W/ScNdlp9xEZswVwfsRFbMNdHbE6JzYpJgztsmbv33nu1b98+\nDR8+XD179vSWByKZAwAAQEsdJnNbt25VaWkpE/sBAADYUIfzzA0dOlTV1dVWxAIAAIAu6rBl7n//\n+5+Sk5OVnp6uSy65RNKZa9cKCwtNDw4AAADt6zCZmzdvnqQzCdy5i/jocgUAALCHDpO5zMxM7d+/\nX998841uvvlm75qqAAAACLwOr5l75ZVXNHnyZN1///2SpMrKSt15552mBwYAAICOdZjMLVq0SBs2\nbFDv3r0lSYmJifr+++9NDwwAAAAd6zCZu+SSS7wDHyS1mDgYAAAAgdVhMvd///d/evbZZ3XixAmt\nXbtWkydP1h133GFFbAAAAOhAh8t5NTU1acmSJSouLpYk3XLLLZo9e3ZAWudYzovY7FEfsTmjPmIj\ntmCuj9icEpsVy3l1am1WuyCZIzZ71EdszqiP2IgtmOsjNqfEZou1Wa+99tpWZS6XS/v27TMlIAAA\nAHReh8ncl19+6f371KlTevfdd3Xo0CFTgwIAAEDndKubdcSIEdq2bZsZ8bSLblZis0d9xOaM+oiN\n2IK5PmJzSmy26GbdunWrd7BDc3OztmzZoqamJtMDAwAAQMc6TOYee+wxbzIXFham2NhYrVy50vTA\nAAAA0LEOk7mSkhILwgAAAEB3dJjMPf/8863mlDvX/+tyufToo4+aExkAAAA61Klr5r788kuNHz9e\nhmHoww8/1KhRo5SYmGhFfAAAAGhHh8lcRUWFtm3bpoiICEnS/Pnzdfvtt+vtt982PTgAAAC0r8O1\nWb///nuFh4d774eHh+v77783NSgAAAB0Toctc9OnT1d6erruuusuGYahVatWKScnx4rYAAAA0IFO\n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\ngg==\n",
"text/plain": [
"
"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [default]",
"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.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 0
}