1842 lines
		
	
	
		
			300 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			1842 lines
		
	
	
		
			300 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								 "cells": [
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "markdown",
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "# Portfolio Optimization"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "markdown",
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "“Modern Portfolio Theory (MPT), a hypothesis put forth by Harry Markowitz in his paper “Portfolio Selection,” (published in 1952 by the Journal of Finance) is an investment theory based on the idea that risk-averse investors can construct portfolios to optimize or maximize expected return based on a given level of market risk, emphasizing that risk is an inherent part of higher reward. It is one of the most important and influential economic theories dealing with finance and investment."
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "markdown",
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "## Monte Carlo Simulation for Optimization Search\n",
							 | 
						||
| 
								 | 
							
								    "\n",
							 | 
						||
| 
								 | 
							
								    "\n",
							 | 
						||
| 
								 | 
							
								    "We could randomly try to find the optimal portfolio balance using Monte Carlo simulation"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 21,
							 | 
						||
| 
								 | 
							
								   "metadata": {
							 | 
						||
| 
								 | 
							
								    "collapsed": true
							 | 
						||
| 
								 | 
							
								   },
							 | 
						||
| 
								 | 
							
								   "outputs": [],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "import numpy as np\n",
							 | 
						||
| 
								 | 
							
								    "import pandas as pd\n",
							 | 
						||
| 
								 | 
							
								    "import matplotlib.pyplot as plt\n",
							 | 
						||
| 
								 | 
							
								    "%matplotlib inline"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 22,
							 | 
						||
| 
								 | 
							
								   "metadata": {
							 | 
						||
| 
								 | 
							
								    "collapsed": true
							 | 
						||
| 
								 | 
							
								   },
							 | 
						||
| 
								 | 
							
								   "outputs": [],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "# Download and get Daily Returns\n",
							 | 
						||
| 
								 | 
							
								    "aapl = pd.read_csv('AAPL_CLOSE',index_col='Date',parse_dates=True)\n",
							 | 
						||
| 
								 | 
							
								    "cisco = pd.read_csv('CISCO_CLOSE',index_col='Date',parse_dates=True)\n",
							 | 
						||
| 
								 | 
							
								    "ibm = pd.read_csv('IBM_CLOSE',index_col='Date',parse_dates=True)\n",
							 | 
						||
| 
								 | 
							
								    "amzn = pd.read_csv('AMZN_CLOSE',index_col='Date',parse_dates=True)"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 23,
							 | 
						||
| 
								 | 
							
								   "metadata": {
							 | 
						||
| 
								 | 
							
								    "collapsed": true
							 | 
						||
| 
								 | 
							
								   },
							 | 
						||
| 
								 | 
							
								   "outputs": [],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "stocks = pd.concat([aapl,cisco,ibm,amzn],axis=1)\n",
							 | 
						||
| 
								 | 
							
								    "stocks.columns = ['aapl','cisco','ibm','amzn']"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 24,
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "outputs": [
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								     "data": {
							 | 
						||
| 
								 | 
							
								      "text/html": [
							 | 
						||
| 
								 | 
							
								       "<div>\n",
							 | 
						||
| 
								 | 
							
								       "<style>\n",
							 | 
						||
| 
								 | 
							
								       "    .dataframe thead tr:only-child th {\n",
							 | 
						||
| 
								 | 
							
								       "        text-align: right;\n",
							 | 
						||
| 
								 | 
							
								       "    }\n",
							 | 
						||
| 
								 | 
							
								       "\n",
							 | 
						||
| 
								 | 
							
								       "    .dataframe thead th {\n",
							 | 
						||
| 
								 | 
							
								       "        text-align: left;\n",
							 | 
						||
| 
								 | 
							
								       "    }\n",
							 | 
						||
| 
								 | 
							
								       "\n",
							 | 
						||
| 
								 | 
							
								       "    .dataframe tbody tr th {\n",
							 | 
						||
| 
								 | 
							
								       "        vertical-align: top;\n",
							 | 
						||
| 
								 | 
							
								       "    }\n",
							 | 
						||
| 
								 | 
							
								       "</style>\n",
							 | 
						||
| 
								 | 
							
								       "<table border=\"1\" class=\"dataframe\">\n",
							 | 
						||
| 
								 | 
							
								       "  <thead>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr style=\"text-align: right;\">\n",
							 | 
						||
| 
								 | 
							
								       "      <th></th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>aapl</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>cisco</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>ibm</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>amzn</th>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>Date</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th></th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th></th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th></th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th></th>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "  </thead>\n",
							 | 
						||
| 
								 | 
							
								       "  <tbody>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>2012-01-03</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>53.063218</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>15.752778</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>160.830881</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>179.03</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>2012-01-04</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>53.348386</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>16.057180</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>160.174781</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>177.51</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>2012-01-05</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>53.940658</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>15.997991</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>159.415086</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>177.61</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>2012-01-06</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>54.504543</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>15.938801</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>157.584912</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>182.61</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>2012-01-09</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>54.418089</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>16.040268</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>156.764786</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>178.56</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "  </tbody>\n",
							 | 
						||
| 
								 | 
							
								       "</table>\n",
							 | 
						||
| 
								 | 
							
								       "</div>"
							 | 
						||
| 
								 | 
							
								      ],
							 | 
						||
| 
								 | 
							
								      "text/plain": [
							 | 
						||
| 
								 | 
							
								       "                 aapl      cisco         ibm    amzn\n",
							 | 
						||
| 
								 | 
							
								       "Date                                                \n",
							 | 
						||
| 
								 | 
							
								       "2012-01-03  53.063218  15.752778  160.830881  179.03\n",
							 | 
						||
| 
								 | 
							
								       "2012-01-04  53.348386  16.057180  160.174781  177.51\n",
							 | 
						||
| 
								 | 
							
								       "2012-01-05  53.940658  15.997991  159.415086  177.61\n",
							 | 
						||
| 
								 | 
							
								       "2012-01-06  54.504543  15.938801  157.584912  182.61\n",
							 | 
						||
| 
								 | 
							
								       "2012-01-09  54.418089  16.040268  156.764786  178.56"
							 | 
						||
| 
								 | 
							
								      ]
							 | 
						||
| 
								 | 
							
								     },
							 | 
						||
| 
								 | 
							
								     "execution_count": 24,
							 | 
						||
| 
								 | 
							
								     "metadata": {},
							 | 
						||
| 
								 | 
							
								     "output_type": "execute_result"
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								   ],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "stocks.head()"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 25,
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "outputs": [
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								     "data": {
							 | 
						||
| 
								 | 
							
								      "text/plain": [
							 | 
						||
| 
								 | 
							
								       "aapl     0.000750\n",
							 | 
						||
| 
								 | 
							
								       "cisco    0.000599\n",
							 | 
						||
| 
								 | 
							
								       "ibm      0.000081\n",
							 | 
						||
| 
								 | 
							
								       "amzn     0.001328\n",
							 | 
						||
| 
								 | 
							
								       "dtype: float64"
							 | 
						||
| 
								 | 
							
								      ]
							 | 
						||
| 
								 | 
							
								     },
							 | 
						||
| 
								 | 
							
								     "execution_count": 25,
							 | 
						||
| 
								 | 
							
								     "metadata": {},
							 | 
						||
| 
								 | 
							
								     "output_type": "execute_result"
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								   ],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "mean_daily_ret = stocks.pct_change(1).mean()\n",
							 | 
						||
| 
								 | 
							
								    "mean_daily_ret"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 26,
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "outputs": [
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								     "data": {
							 | 
						||
| 
								 | 
							
								      "text/html": [
							 | 
						||
| 
								 | 
							
								       "<div>\n",
							 | 
						||
| 
								 | 
							
								       "<style>\n",
							 | 
						||
| 
								 | 
							
								       "    .dataframe thead tr:only-child th {\n",
							 | 
						||
| 
								 | 
							
								       "        text-align: right;\n",
							 | 
						||
| 
								 | 
							
								       "    }\n",
							 | 
						||
| 
								 | 
							
								       "\n",
							 | 
						||
| 
								 | 
							
								       "    .dataframe thead th {\n",
							 | 
						||
| 
								 | 
							
								       "        text-align: left;\n",
							 | 
						||
| 
								 | 
							
								       "    }\n",
							 | 
						||
| 
								 | 
							
								       "\n",
							 | 
						||
| 
								 | 
							
								       "    .dataframe tbody tr th {\n",
							 | 
						||
| 
								 | 
							
								       "        vertical-align: top;\n",
							 | 
						||
| 
								 | 
							
								       "    }\n",
							 | 
						||
| 
								 | 
							
								       "</style>\n",
							 | 
						||
| 
								 | 
							
								       "<table border=\"1\" class=\"dataframe\">\n",
							 | 
						||
| 
								 | 
							
								       "  <thead>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr style=\"text-align: right;\">\n",
							 | 
						||
| 
								 | 
							
								       "      <th></th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>aapl</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>cisco</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>ibm</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>amzn</th>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "  </thead>\n",
							 | 
						||
| 
								 | 
							
								       "  <tbody>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>aapl</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>1.000000</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.301990</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.297498</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.235487</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>cisco</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.301990</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>1.000000</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.424672</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.284470</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>ibm</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.297498</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.424672</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>1.000000</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.258492</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>amzn</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.235487</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.284470</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.258492</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>1.000000</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "  </tbody>\n",
							 | 
						||
| 
								 | 
							
								       "</table>\n",
							 | 
						||
| 
								 | 
							
								       "</div>"
							 | 
						||
| 
								 | 
							
								      ],
							 | 
						||
| 
								 | 
							
								      "text/plain": [
							 | 
						||
| 
								 | 
							
								       "           aapl     cisco       ibm      amzn\n",
							 | 
						||
| 
								 | 
							
								       "aapl   1.000000  0.301990  0.297498  0.235487\n",
							 | 
						||
| 
								 | 
							
								       "cisco  0.301990  1.000000  0.424672  0.284470\n",
							 | 
						||
| 
								 | 
							
								       "ibm    0.297498  0.424672  1.000000  0.258492\n",
							 | 
						||
| 
								 | 
							
								       "amzn   0.235487  0.284470  0.258492  1.000000"
							 | 
						||
| 
								 | 
							
								      ]
							 | 
						||
| 
								 | 
							
								     },
							 | 
						||
| 
								 | 
							
								     "execution_count": 26,
							 | 
						||
| 
								 | 
							
								     "metadata": {},
							 | 
						||
| 
								 | 
							
								     "output_type": "execute_result"
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								   ],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "stocks.pct_change(1).corr()"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "markdown",
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "# Simulating Thousands of Possible Allocations"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 27,
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "outputs": [
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								     "data": {
							 | 
						||
| 
								 | 
							
								      "text/html": [
							 | 
						||
| 
								 | 
							
								       "<div>\n",
							 | 
						||
| 
								 | 
							
								       "<style>\n",
							 | 
						||
| 
								 | 
							
								       "    .dataframe thead tr:only-child th {\n",
							 | 
						||
| 
								 | 
							
								       "        text-align: right;\n",
							 | 
						||
| 
								 | 
							
								       "    }\n",
							 | 
						||
| 
								 | 
							
								       "\n",
							 | 
						||
| 
								 | 
							
								       "    .dataframe thead th {\n",
							 | 
						||
| 
								 | 
							
								       "        text-align: left;\n",
							 | 
						||
| 
								 | 
							
								       "    }\n",
							 | 
						||
| 
								 | 
							
								       "\n",
							 | 
						||
| 
								 | 
							
								       "    .dataframe tbody tr th {\n",
							 | 
						||
| 
								 | 
							
								       "        vertical-align: top;\n",
							 | 
						||
| 
								 | 
							
								       "    }\n",
							 | 
						||
| 
								 | 
							
								       "</style>\n",
							 | 
						||
| 
								 | 
							
								       "<table border=\"1\" class=\"dataframe\">\n",
							 | 
						||
| 
								 | 
							
								       "  <thead>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr style=\"text-align: right;\">\n",
							 | 
						||
| 
								 | 
							
								       "      <th></th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>aapl</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>cisco</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>ibm</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>amzn</th>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>Date</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th></th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th></th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th></th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th></th>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "  </thead>\n",
							 | 
						||
| 
								 | 
							
								       "  <tbody>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>2012-01-03</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>53.063218</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>15.752778</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>160.830881</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>179.03</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>2012-01-04</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>53.348386</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>16.057180</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>160.174781</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>177.51</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>2012-01-05</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>53.940658</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>15.997991</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>159.415086</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>177.61</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>2012-01-06</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>54.504543</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>15.938801</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>157.584912</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>182.61</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>2012-01-09</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>54.418089</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>16.040268</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>156.764786</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>178.56</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "  </tbody>\n",
							 | 
						||
| 
								 | 
							
								       "</table>\n",
							 | 
						||
| 
								 | 
							
								       "</div>"
							 | 
						||
| 
								 | 
							
								      ],
							 | 
						||
| 
								 | 
							
								      "text/plain": [
							 | 
						||
| 
								 | 
							
								       "                 aapl      cisco         ibm    amzn\n",
							 | 
						||
| 
								 | 
							
								       "Date                                                \n",
							 | 
						||
| 
								 | 
							
								       "2012-01-03  53.063218  15.752778  160.830881  179.03\n",
							 | 
						||
| 
								 | 
							
								       "2012-01-04  53.348386  16.057180  160.174781  177.51\n",
							 | 
						||
| 
								 | 
							
								       "2012-01-05  53.940658  15.997991  159.415086  177.61\n",
							 | 
						||
| 
								 | 
							
								       "2012-01-06  54.504543  15.938801  157.584912  182.61\n",
							 | 
						||
| 
								 | 
							
								       "2012-01-09  54.418089  16.040268  156.764786  178.56"
							 | 
						||
| 
								 | 
							
								      ]
							 | 
						||
| 
								 | 
							
								     },
							 | 
						||
| 
								 | 
							
								     "execution_count": 27,
							 | 
						||
| 
								 | 
							
								     "metadata": {},
							 | 
						||
| 
								 | 
							
								     "output_type": "execute_result"
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								   ],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "stocks.head()"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 28,
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "outputs": [
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								     "data": {
							 | 
						||
| 
								 | 
							
								      "text/plain": [
							 | 
						||
| 
								 | 
							
								       "<matplotlib.axes._subplots.AxesSubplot at 0x2258d9c4668>"
							 | 
						||
| 
								 | 
							
								      ]
							 | 
						||
| 
								 | 
							
								     },
							 | 
						||
| 
								 | 
							
								     "execution_count": 28,
							 | 
						||
| 
								 | 
							
								     "metadata": {},
							 | 
						||
| 
								 | 
							
								     "output_type": "execute_result"
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								     "data": {
							 | 
						||
| 
								 | 
							
								      "image/png": "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\nKBRNnaz589k3cBClycl
							 | 
						||
| 
								 | 
							
								      "text/plain": [
							 | 
						||
| 
								 | 
							
								       "<matplotlib.figure.Figure at 0x2258d9c4eb8>"
							 | 
						||
| 
								 | 
							
								      ]
							 | 
						||
| 
								 | 
							
								     },
							 | 
						||
| 
								 | 
							
								     "metadata": {},
							 | 
						||
| 
								 | 
							
								     "output_type": "display_data"
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								   ],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "stock_normed = stocks/stocks.iloc[0]\n",
							 | 
						||
| 
								 | 
							
								    "stock_normed.plot()"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 29,
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "outputs": [
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								     "data": {
							 | 
						||
| 
								 | 
							
								      "text/html": [
							 | 
						||
| 
								 | 
							
								       "<div>\n",
							 | 
						||
| 
								 | 
							
								       "<style>\n",
							 | 
						||
| 
								 | 
							
								       "    .dataframe thead tr:only-child th {\n",
							 | 
						||
| 
								 | 
							
								       "        text-align: right;\n",
							 | 
						||
| 
								 | 
							
								       "    }\n",
							 | 
						||
| 
								 | 
							
								       "\n",
							 | 
						||
| 
								 | 
							
								       "    .dataframe thead th {\n",
							 | 
						||
| 
								 | 
							
								       "        text-align: left;\n",
							 | 
						||
| 
								 | 
							
								       "    }\n",
							 | 
						||
| 
								 | 
							
								       "\n",
							 | 
						||
| 
								 | 
							
								       "    .dataframe tbody tr th {\n",
							 | 
						||
| 
								 | 
							
								       "        vertical-align: top;\n",
							 | 
						||
| 
								 | 
							
								       "    }\n",
							 | 
						||
| 
								 | 
							
								       "</style>\n",
							 | 
						||
| 
								 | 
							
								       "<table border=\"1\" class=\"dataframe\">\n",
							 | 
						||
| 
								 | 
							
								       "  <thead>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr style=\"text-align: right;\">\n",
							 | 
						||
| 
								 | 
							
								       "      <th></th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>aapl</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>cisco</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>ibm</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>amzn</th>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>Date</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th></th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th></th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th></th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th></th>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "  </thead>\n",
							 | 
						||
| 
								 | 
							
								       "  <tbody>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>2012-01-03</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>NaN</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>NaN</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>NaN</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>NaN</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>2012-01-04</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.005374</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.019324</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>-0.004079</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>-0.008490</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>2012-01-05</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.011102</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>-0.003686</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>-0.004743</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.000563</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>2012-01-06</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.010454</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>-0.003700</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>-0.011481</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.028152</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>2012-01-09</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>-0.001586</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.006366</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>-0.005204</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>-0.022178</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "  </tbody>\n",
							 | 
						||
| 
								 | 
							
								       "</table>\n",
							 | 
						||
| 
								 | 
							
								       "</div>"
							 | 
						||
| 
								 | 
							
								      ],
							 | 
						||
| 
								 | 
							
								      "text/plain": [
							 | 
						||
| 
								 | 
							
								       "                aapl     cisco       ibm      amzn\n",
							 | 
						||
| 
								 | 
							
								       "Date                                              \n",
							 | 
						||
| 
								 | 
							
								       "2012-01-03       NaN       NaN       NaN       NaN\n",
							 | 
						||
| 
								 | 
							
								       "2012-01-04  0.005374  0.019324 -0.004079 -0.008490\n",
							 | 
						||
| 
								 | 
							
								       "2012-01-05  0.011102 -0.003686 -0.004743  0.000563\n",
							 | 
						||
| 
								 | 
							
								       "2012-01-06  0.010454 -0.003700 -0.011481  0.028152\n",
							 | 
						||
| 
								 | 
							
								       "2012-01-09 -0.001586  0.006366 -0.005204 -0.022178"
							 | 
						||
| 
								 | 
							
								      ]
							 | 
						||
| 
								 | 
							
								     },
							 | 
						||
| 
								 | 
							
								     "execution_count": 29,
							 | 
						||
| 
								 | 
							
								     "metadata": {},
							 | 
						||
| 
								 | 
							
								     "output_type": "execute_result"
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								   ],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "stock_daily_ret = stocks.pct_change(1)\n",
							 | 
						||
| 
								 | 
							
								    "stock_daily_ret.head()"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "markdown",
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "## Log Returns vs Arithmetic Returns\n",
							 | 
						||
| 
								 | 
							
								    "\n",
							 | 
						||
| 
								 | 
							
								    "We will now switch over to using log returns instead of arithmetic returns, for many of our use cases they are almost the same,but most technical analyses require detrending/normalizing the time series and using log returns is a nice way to do that.\n",
							 | 
						||
| 
								 | 
							
								    "Log returns are convenient to work with in many of the algorithms we will encounter.\n",
							 | 
						||
| 
								 | 
							
								    "\n",
							 | 
						||
| 
								 | 
							
								    "For a full analysis of why we use log returns, check [this great article](https://quantivity.wordpress.com/2011/02/21/why-log-returns/).\n"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 30,
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "outputs": [
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								     "data": {
							 | 
						||
| 
								 | 
							
								      "text/html": [
							 | 
						||
| 
								 | 
							
								       "<div>\n",
							 | 
						||
| 
								 | 
							
								       "<style>\n",
							 | 
						||
| 
								 | 
							
								       "    .dataframe thead tr:only-child th {\n",
							 | 
						||
| 
								 | 
							
								       "        text-align: right;\n",
							 | 
						||
| 
								 | 
							
								       "    }\n",
							 | 
						||
| 
								 | 
							
								       "\n",
							 | 
						||
| 
								 | 
							
								       "    .dataframe thead th {\n",
							 | 
						||
| 
								 | 
							
								       "        text-align: left;\n",
							 | 
						||
| 
								 | 
							
								       "    }\n",
							 | 
						||
| 
								 | 
							
								       "\n",
							 | 
						||
| 
								 | 
							
								       "    .dataframe tbody tr th {\n",
							 | 
						||
| 
								 | 
							
								       "        vertical-align: top;\n",
							 | 
						||
| 
								 | 
							
								       "    }\n",
							 | 
						||
| 
								 | 
							
								       "</style>\n",
							 | 
						||
| 
								 | 
							
								       "<table border=\"1\" class=\"dataframe\">\n",
							 | 
						||
| 
								 | 
							
								       "  <thead>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr style=\"text-align: right;\">\n",
							 | 
						||
| 
								 | 
							
								       "      <th></th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>aapl</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>cisco</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>ibm</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>amzn</th>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>Date</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th></th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th></th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th></th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th></th>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "  </thead>\n",
							 | 
						||
| 
								 | 
							
								       "  <tbody>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>2012-01-03</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>NaN</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>NaN</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>NaN</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>NaN</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>2012-01-04</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.005360</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.019139</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>-0.004088</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>-0.008526</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>2012-01-05</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.011041</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>-0.003693</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>-0.004754</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.000563</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>2012-01-06</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.010400</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>-0.003707</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>-0.011547</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.027763</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>2012-01-09</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>-0.001587</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.006346</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>-0.005218</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>-0.022428</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "  </tbody>\n",
							 | 
						||
| 
								 | 
							
								       "</table>\n",
							 | 
						||
| 
								 | 
							
								       "</div>"
							 | 
						||
| 
								 | 
							
								      ],
							 | 
						||
| 
								 | 
							
								      "text/plain": [
							 | 
						||
| 
								 | 
							
								       "                aapl     cisco       ibm      amzn\n",
							 | 
						||
| 
								 | 
							
								       "Date                                              \n",
							 | 
						||
| 
								 | 
							
								       "2012-01-03       NaN       NaN       NaN       NaN\n",
							 | 
						||
| 
								 | 
							
								       "2012-01-04  0.005360  0.019139 -0.004088 -0.008526\n",
							 | 
						||
| 
								 | 
							
								       "2012-01-05  0.011041 -0.003693 -0.004754  0.000563\n",
							 | 
						||
| 
								 | 
							
								       "2012-01-06  0.010400 -0.003707 -0.011547  0.027763\n",
							 | 
						||
| 
								 | 
							
								       "2012-01-09 -0.001587  0.006346 -0.005218 -0.022428"
							 | 
						||
| 
								 | 
							
								      ]
							 | 
						||
| 
								 | 
							
								     },
							 | 
						||
| 
								 | 
							
								     "execution_count": 30,
							 | 
						||
| 
								 | 
							
								     "metadata": {},
							 | 
						||
| 
								 | 
							
								     "output_type": "execute_result"
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								   ],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "log_ret = np.log(stocks/stocks.shift(1))\n",
							 | 
						||
| 
								 | 
							
								    "log_ret.head()"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 31,
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "outputs": [
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								     "data": {
							 | 
						||
| 
								 | 
							
								      "image/png": "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\nSVPDEa0kSZI21rYF61r
							 | 
						||
| 
								 | 
							
								      "text/plain": [
							 | 
						||
| 
								 | 
							
								       "<matplotlib.figure.Figure at 0x2258e3f8cc0>"
							 | 
						||
| 
								 | 
							
								      ]
							 | 
						||
| 
								 | 
							
								     },
							 | 
						||
| 
								 | 
							
								     "metadata": {},
							 | 
						||
| 
								 | 
							
								     "output_type": "display_data"
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								   ],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "log_ret.hist(bins=100,figsize=(12,6));\n",
							 | 
						||
| 
								 | 
							
								    "plt.tight_layout()"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 32,
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "outputs": [
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								     "data": {
							 | 
						||
| 
								 | 
							
								      "text/html": [
							 | 
						||
| 
								 | 
							
								       "<div>\n",
							 | 
						||
| 
								 | 
							
								       "<style>\n",
							 | 
						||
| 
								 | 
							
								       "    .dataframe thead tr:only-child th {\n",
							 | 
						||
| 
								 | 
							
								       "        text-align: right;\n",
							 | 
						||
| 
								 | 
							
								       "    }\n",
							 | 
						||
| 
								 | 
							
								       "\n",
							 | 
						||
| 
								 | 
							
								       "    .dataframe thead th {\n",
							 | 
						||
| 
								 | 
							
								       "        text-align: left;\n",
							 | 
						||
| 
								 | 
							
								       "    }\n",
							 | 
						||
| 
								 | 
							
								       "\n",
							 | 
						||
| 
								 | 
							
								       "    .dataframe tbody tr th {\n",
							 | 
						||
| 
								 | 
							
								       "        vertical-align: top;\n",
							 | 
						||
| 
								 | 
							
								       "    }\n",
							 | 
						||
| 
								 | 
							
								       "</style>\n",
							 | 
						||
| 
								 | 
							
								       "<table border=\"1\" class=\"dataframe\">\n",
							 | 
						||
| 
								 | 
							
								       "  <thead>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr style=\"text-align: right;\">\n",
							 | 
						||
| 
								 | 
							
								       "      <th></th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>count</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>mean</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>std</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>min</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>25%</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>50%</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>75%</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>max</th>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "  </thead>\n",
							 | 
						||
| 
								 | 
							
								       "  <tbody>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>aapl</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>1257.0</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.000614</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.016466</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>-0.131875</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>-0.007358</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.000455</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.009724</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.085022</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>cisco</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>1257.0</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.000497</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.014279</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>-0.116091</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>-0.006240</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.000213</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.007634</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.118862</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>ibm</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>1257.0</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.000011</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.011819</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>-0.086419</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>-0.005873</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.000049</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.006477</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.049130</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>amzn</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>1257.0</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.001139</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.019362</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>-0.116503</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>-0.008534</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.000563</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.011407</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.146225</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "  </tbody>\n",
							 | 
						||
| 
								 | 
							
								       "</table>\n",
							 | 
						||
| 
								 | 
							
								       "</div>"
							 | 
						||
| 
								 | 
							
								      ],
							 | 
						||
| 
								 | 
							
								      "text/plain": [
							 | 
						||
| 
								 | 
							
								       "        count      mean       std       min       25%       50%       75%  \\\n",
							 | 
						||
| 
								 | 
							
								       "aapl   1257.0  0.000614  0.016466 -0.131875 -0.007358  0.000455  0.009724   \n",
							 | 
						||
| 
								 | 
							
								       "cisco  1257.0  0.000497  0.014279 -0.116091 -0.006240  0.000213  0.007634   \n",
							 | 
						||
| 
								 | 
							
								       "ibm    1257.0  0.000011  0.011819 -0.086419 -0.005873  0.000049  0.006477   \n",
							 | 
						||
| 
								 | 
							
								       "amzn   1257.0  0.001139  0.019362 -0.116503 -0.008534  0.000563  0.011407   \n",
							 | 
						||
| 
								 | 
							
								       "\n",
							 | 
						||
| 
								 | 
							
								       "            max  \n",
							 | 
						||
| 
								 | 
							
								       "aapl   0.085022  \n",
							 | 
						||
| 
								 | 
							
								       "cisco  0.118862  \n",
							 | 
						||
| 
								 | 
							
								       "ibm    0.049130  \n",
							 | 
						||
| 
								 | 
							
								       "amzn   0.146225  "
							 | 
						||
| 
								 | 
							
								      ]
							 | 
						||
| 
								 | 
							
								     },
							 | 
						||
| 
								 | 
							
								     "execution_count": 32,
							 | 
						||
| 
								 | 
							
								     "metadata": {},
							 | 
						||
| 
								 | 
							
								     "output_type": "execute_result"
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								   ],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "log_ret.describe().transpose()"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 33,
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "outputs": [
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								     "data": {
							 | 
						||
| 
								 | 
							
								      "text/plain": [
							 | 
						||
| 
								 | 
							
								       "aapl     0.154803\n",
							 | 
						||
| 
								 | 
							
								       "cisco    0.125291\n",
							 | 
						||
| 
								 | 
							
								       "ibm      0.002788\n",
							 | 
						||
| 
								 | 
							
								       "amzn     0.287153\n",
							 | 
						||
| 
								 | 
							
								       "dtype: float64"
							 | 
						||
| 
								 | 
							
								      ]
							 | 
						||
| 
								 | 
							
								     },
							 | 
						||
| 
								 | 
							
								     "execution_count": 33,
							 | 
						||
| 
								 | 
							
								     "metadata": {},
							 | 
						||
| 
								 | 
							
								     "output_type": "execute_result"
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								   ],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "log_ret.mean() * 252"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 34,
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "outputs": [
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								     "data": {
							 | 
						||
| 
								 | 
							
								      "text/html": [
							 | 
						||
| 
								 | 
							
								       "<div>\n",
							 | 
						||
| 
								 | 
							
								       "<style>\n",
							 | 
						||
| 
								 | 
							
								       "    .dataframe thead tr:only-child th {\n",
							 | 
						||
| 
								 | 
							
								       "        text-align: right;\n",
							 | 
						||
| 
								 | 
							
								       "    }\n",
							 | 
						||
| 
								 | 
							
								       "\n",
							 | 
						||
| 
								 | 
							
								       "    .dataframe thead th {\n",
							 | 
						||
| 
								 | 
							
								       "        text-align: left;\n",
							 | 
						||
| 
								 | 
							
								       "    }\n",
							 | 
						||
| 
								 | 
							
								       "\n",
							 | 
						||
| 
								 | 
							
								       "    .dataframe tbody tr th {\n",
							 | 
						||
| 
								 | 
							
								       "        vertical-align: top;\n",
							 | 
						||
| 
								 | 
							
								       "    }\n",
							 | 
						||
| 
								 | 
							
								       "</style>\n",
							 | 
						||
| 
								 | 
							
								       "<table border=\"1\" class=\"dataframe\">\n",
							 | 
						||
| 
								 | 
							
								       "  <thead>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr style=\"text-align: right;\">\n",
							 | 
						||
| 
								 | 
							
								       "      <th></th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>aapl</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>cisco</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>ibm</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>amzn</th>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "  </thead>\n",
							 | 
						||
| 
								 | 
							
								       "  <tbody>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>aapl</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.000271</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.000071</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.000057</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.000075</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>cisco</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.000071</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.000204</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.000072</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.000079</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>ibm</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.000057</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.000072</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.000140</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.000059</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>amzn</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.000075</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.000079</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.000059</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.000375</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "  </tbody>\n",
							 | 
						||
| 
								 | 
							
								       "</table>\n",
							 | 
						||
| 
								 | 
							
								       "</div>"
							 | 
						||
| 
								 | 
							
								      ],
							 | 
						||
| 
								 | 
							
								      "text/plain": [
							 | 
						||
| 
								 | 
							
								       "           aapl     cisco       ibm      amzn\n",
							 | 
						||
| 
								 | 
							
								       "aapl   0.000271  0.000071  0.000057  0.000075\n",
							 | 
						||
| 
								 | 
							
								       "cisco  0.000071  0.000204  0.000072  0.000079\n",
							 | 
						||
| 
								 | 
							
								       "ibm    0.000057  0.000072  0.000140  0.000059\n",
							 | 
						||
| 
								 | 
							
								       "amzn   0.000075  0.000079  0.000059  0.000375"
							 | 
						||
| 
								 | 
							
								      ]
							 | 
						||
| 
								 | 
							
								     },
							 | 
						||
| 
								 | 
							
								     "execution_count": 34,
							 | 
						||
| 
								 | 
							
								     "metadata": {},
							 | 
						||
| 
								 | 
							
								     "output_type": "execute_result"
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								   ],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "# Compute pairwise covariance of columns\n",
							 | 
						||
| 
								 | 
							
								    "log_ret.cov()"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 35,
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "outputs": [
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								     "data": {
							 | 
						||
| 
								 | 
							
								      "text/html": [
							 | 
						||
| 
								 | 
							
								       "<div>\n",
							 | 
						||
| 
								 | 
							
								       "<style>\n",
							 | 
						||
| 
								 | 
							
								       "    .dataframe thead tr:only-child th {\n",
							 | 
						||
| 
								 | 
							
								       "        text-align: right;\n",
							 | 
						||
| 
								 | 
							
								       "    }\n",
							 | 
						||
| 
								 | 
							
								       "\n",
							 | 
						||
| 
								 | 
							
								       "    .dataframe thead th {\n",
							 | 
						||
| 
								 | 
							
								       "        text-align: left;\n",
							 | 
						||
| 
								 | 
							
								       "    }\n",
							 | 
						||
| 
								 | 
							
								       "\n",
							 | 
						||
| 
								 | 
							
								       "    .dataframe tbody tr th {\n",
							 | 
						||
| 
								 | 
							
								       "        vertical-align: top;\n",
							 | 
						||
| 
								 | 
							
								       "    }\n",
							 | 
						||
| 
								 | 
							
								       "</style>\n",
							 | 
						||
| 
								 | 
							
								       "<table border=\"1\" class=\"dataframe\">\n",
							 | 
						||
| 
								 | 
							
								       "  <thead>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr style=\"text-align: right;\">\n",
							 | 
						||
| 
								 | 
							
								       "      <th></th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>aapl</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>cisco</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>ibm</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>amzn</th>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "  </thead>\n",
							 | 
						||
| 
								 | 
							
								       "  <tbody>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>aapl</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.068326</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.017854</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.014464</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.018986</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>cisco</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.017854</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.051381</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.018029</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.019956</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>ibm</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.014464</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.018029</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.035203</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.014939</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "    <tr>\n",
							 | 
						||
| 
								 | 
							
								       "      <th>amzn</th>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.018986</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.019956</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.014939</td>\n",
							 | 
						||
| 
								 | 
							
								       "      <td>0.094470</td>\n",
							 | 
						||
| 
								 | 
							
								       "    </tr>\n",
							 | 
						||
| 
								 | 
							
								       "  </tbody>\n",
							 | 
						||
| 
								 | 
							
								       "</table>\n",
							 | 
						||
| 
								 | 
							
								       "</div>"
							 | 
						||
| 
								 | 
							
								      ],
							 | 
						||
| 
								 | 
							
								      "text/plain": [
							 | 
						||
| 
								 | 
							
								       "           aapl     cisco       ibm      amzn\n",
							 | 
						||
| 
								 | 
							
								       "aapl   0.068326  0.017854  0.014464  0.018986\n",
							 | 
						||
| 
								 | 
							
								       "cisco  0.017854  0.051381  0.018029  0.019956\n",
							 | 
						||
| 
								 | 
							
								       "ibm    0.014464  0.018029  0.035203  0.014939\n",
							 | 
						||
| 
								 | 
							
								       "amzn   0.018986  0.019956  0.014939  0.094470"
							 | 
						||
| 
								 | 
							
								      ]
							 | 
						||
| 
								 | 
							
								     },
							 | 
						||
| 
								 | 
							
								     "execution_count": 35,
							 | 
						||
| 
								 | 
							
								     "metadata": {},
							 | 
						||
| 
								 | 
							
								     "output_type": "execute_result"
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								   ],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "log_ret.cov()*252 # multiply by days"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "markdown",
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "## Single Run for Some Random Allocation"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 36,
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "outputs": [
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								     "name": "stdout",
							 | 
						||
| 
								 | 
							
								     "output_type": "stream",
							 | 
						||
| 
								 | 
							
								     "text": [
							 | 
						||
| 
								 | 
							
								      "Stocks\n",
							 | 
						||
| 
								 | 
							
								      "Index(['aapl', 'cisco', 'ibm', 'amzn'], dtype='object')\n",
							 | 
						||
| 
								 | 
							
								      "\n",
							 | 
						||
| 
								 | 
							
								      "\n",
							 | 
						||
| 
								 | 
							
								      "Creating Random Weights\n",
							 | 
						||
| 
								 | 
							
								      "[ 0.51639863  0.57066759  0.02847423  0.17152166]\n",
							 | 
						||
| 
								 | 
							
								      "\n",
							 | 
						||
| 
								 | 
							
								      "\n",
							 | 
						||
| 
								 | 
							
								      "Rebalance to sum to 1.0\n",
							 | 
						||
| 
								 | 
							
								      "[ 0.40122278  0.44338777  0.02212343  0.13326603]\n",
							 | 
						||
| 
								 | 
							
								      "\n",
							 | 
						||
| 
								 | 
							
								      "\n",
							 | 
						||
| 
								 | 
							
								      "Expected Portfolio Return\n",
							 | 
						||
| 
								 | 
							
								      "0.15599272049632004\n",
							 | 
						||
| 
								 | 
							
								      "\n",
							 | 
						||
| 
								 | 
							
								      "\n",
							 | 
						||
| 
								 | 
							
								      "Expected Volatility\n",
							 | 
						||
| 
								 | 
							
								      "0.185026495659\n",
							 | 
						||
| 
								 | 
							
								      "\n",
							 | 
						||
| 
								 | 
							
								      "\n",
							 | 
						||
| 
								 | 
							
								      "Sharpe Ratio\n",
							 | 
						||
| 
								 | 
							
								      "0.843083148393\n"
							 | 
						||
| 
								 | 
							
								     ]
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								   ],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "# Set seed (optional)\n",
							 | 
						||
| 
								 | 
							
								    "np.random.seed(101)\n",
							 | 
						||
| 
								 | 
							
								    "\n",
							 | 
						||
| 
								 | 
							
								    "# Stock Columns\n",
							 | 
						||
| 
								 | 
							
								    "print('Stocks')\n",
							 | 
						||
| 
								 | 
							
								    "print(stocks.columns)\n",
							 | 
						||
| 
								 | 
							
								    "print('\\n')\n",
							 | 
						||
| 
								 | 
							
								    "\n",
							 | 
						||
| 
								 | 
							
								    "# Create Random Weights\n",
							 | 
						||
| 
								 | 
							
								    "print('Creating Random Weights')\n",
							 | 
						||
| 
								 | 
							
								    "weights = np.array(np.random.random(4))\n",
							 | 
						||
| 
								 | 
							
								    "print(weights)\n",
							 | 
						||
| 
								 | 
							
								    "print('\\n')\n",
							 | 
						||
| 
								 | 
							
								    "\n",
							 | 
						||
| 
								 | 
							
								    "# Rebalance Weights\n",
							 | 
						||
| 
								 | 
							
								    "print('Rebalance to sum to 1.0')\n",
							 | 
						||
| 
								 | 
							
								    "weights = weights / np.sum(weights)\n",
							 | 
						||
| 
								 | 
							
								    "print(weights)\n",
							 | 
						||
| 
								 | 
							
								    "print('\\n')\n",
							 | 
						||
| 
								 | 
							
								    "\n",
							 | 
						||
| 
								 | 
							
								    "# Expected Return\n",
							 | 
						||
| 
								 | 
							
								    "print('Expected Portfolio Return')\n",
							 | 
						||
| 
								 | 
							
								    "exp_ret = np.sum(log_ret.mean() * weights) *252\n",
							 | 
						||
| 
								 | 
							
								    "print(exp_ret)\n",
							 | 
						||
| 
								 | 
							
								    "print('\\n')\n",
							 | 
						||
| 
								 | 
							
								    "\n",
							 | 
						||
| 
								 | 
							
								    "# Expected Variance\n",
							 | 
						||
| 
								 | 
							
								    "print('Expected Volatility')\n",
							 | 
						||
| 
								 | 
							
								    "exp_vol = np.sqrt(np.dot(weights.T, np.dot(log_ret.cov() * 252, weights)))\n",
							 | 
						||
| 
								 | 
							
								    "print(exp_vol)\n",
							 | 
						||
| 
								 | 
							
								    "print('\\n')\n",
							 | 
						||
| 
								 | 
							
								    "\n",
							 | 
						||
| 
								 | 
							
								    "# Sharpe Ratio\n",
							 | 
						||
| 
								 | 
							
								    "SR = exp_ret/exp_vol\n",
							 | 
						||
| 
								 | 
							
								    "print('Sharpe Ratio')\n",
							 | 
						||
| 
								 | 
							
								    "print(SR)\n"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "markdown",
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "Great! Now we can just run this many times over!"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 37,
							 | 
						||
| 
								 | 
							
								   "metadata": {
							 | 
						||
| 
								 | 
							
								    "collapsed": true
							 | 
						||
| 
								 | 
							
								   },
							 | 
						||
| 
								 | 
							
								   "outputs": [],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "num_ports = 15000\n",
							 | 
						||
| 
								 | 
							
								    "\n",
							 | 
						||
| 
								 | 
							
								    "all_weights = np.zeros((num_ports,len(stocks.columns)))\n",
							 | 
						||
| 
								 | 
							
								    "ret_arr = np.zeros(num_ports)\n",
							 | 
						||
| 
								 | 
							
								    "vol_arr = np.zeros(num_ports)\n",
							 | 
						||
| 
								 | 
							
								    "sharpe_arr = np.zeros(num_ports)\n",
							 | 
						||
| 
								 | 
							
								    "\n",
							 | 
						||
| 
								 | 
							
								    "for ind in range(num_ports):\n",
							 | 
						||
| 
								 | 
							
								    "\n",
							 | 
						||
| 
								 | 
							
								    "    # Create Random Weights\n",
							 | 
						||
| 
								 | 
							
								    "    weights = np.array(np.random.random(4))\n",
							 | 
						||
| 
								 | 
							
								    "\n",
							 | 
						||
| 
								 | 
							
								    "    # Rebalance Weights\n",
							 | 
						||
| 
								 | 
							
								    "    weights = weights / np.sum(weights)\n",
							 | 
						||
| 
								 | 
							
								    "    \n",
							 | 
						||
| 
								 | 
							
								    "    # Save Weights\n",
							 | 
						||
| 
								 | 
							
								    "    all_weights[ind,:] = weights\n",
							 | 
						||
| 
								 | 
							
								    "\n",
							 | 
						||
| 
								 | 
							
								    "    # Expected Return\n",
							 | 
						||
| 
								 | 
							
								    "    ret_arr[ind] = np.sum((log_ret.mean() * weights) *252)\n",
							 | 
						||
| 
								 | 
							
								    "\n",
							 | 
						||
| 
								 | 
							
								    "    # Expected Variance\n",
							 | 
						||
| 
								 | 
							
								    "    vol_arr[ind] = np.sqrt(np.dot(weights.T, np.dot(log_ret.cov() * 252, weights)))\n",
							 | 
						||
| 
								 | 
							
								    "\n",
							 | 
						||
| 
								 | 
							
								    "    # Sharpe Ratio\n",
							 | 
						||
| 
								 | 
							
								    "    sharpe_arr[ind] = ret_arr[ind]/vol_arr[ind]"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 38,
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "outputs": [
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								     "data": {
							 | 
						||
| 
								 | 
							
								      "text/plain": [
							 | 
						||
| 
								 | 
							
								       "1.0303260551271067"
							 | 
						||
| 
								 | 
							
								      ]
							 | 
						||
| 
								 | 
							
								     },
							 | 
						||
| 
								 | 
							
								     "execution_count": 38,
							 | 
						||
| 
								 | 
							
								     "metadata": {},
							 | 
						||
| 
								 | 
							
								     "output_type": "execute_result"
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								   ],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "sharpe_arr.max()"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 39,
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "outputs": [
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								     "data": {
							 | 
						||
| 
								 | 
							
								      "text/plain": [
							 | 
						||
| 
								 | 
							
								       "1419"
							 | 
						||
| 
								 | 
							
								      ]
							 | 
						||
| 
								 | 
							
								     },
							 | 
						||
| 
								 | 
							
								     "execution_count": 39,
							 | 
						||
| 
								 | 
							
								     "metadata": {},
							 | 
						||
| 
								 | 
							
								     "output_type": "execute_result"
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								   ],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "sharpe_arr.argmax()"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 40,
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "outputs": [
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								     "data": {
							 | 
						||
| 
								 | 
							
								      "text/plain": [
							 | 
						||
| 
								 | 
							
								       "array([ 0.26188068,  0.20759516,  0.00110226,  0.5294219 ])"
							 | 
						||
| 
								 | 
							
								      ]
							 | 
						||
| 
								 | 
							
								     },
							 | 
						||
| 
								 | 
							
								     "execution_count": 40,
							 | 
						||
| 
								 | 
							
								     "metadata": {},
							 | 
						||
| 
								 | 
							
								     "output_type": "execute_result"
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								   ],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "all_weights[1419,:]"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 41,
							 | 
						||
| 
								 | 
							
								   "metadata": {
							 | 
						||
| 
								 | 
							
								    "collapsed": true
							 | 
						||
| 
								 | 
							
								   },
							 | 
						||
| 
								 | 
							
								   "outputs": [],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "max_sr_ret = ret_arr[1419]\n",
							 | 
						||
| 
								 | 
							
								    "max_sr_vol = vol_arr[1419]"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "markdown",
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "## Plotting the data"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 42,
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "outputs": [
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								     "data": {
							 | 
						||
| 
								 | 
							
								      "text/plain": [
							 | 
						||
| 
								 | 
							
								       "<matplotlib.collections.PathCollection at 0x2258e24ac50>"
							 | 
						||
| 
								 | 
							
								      ]
							 | 
						||
| 
								 | 
							
								     },
							 | 
						||
| 
								 | 
							
								     "execution_count": 42,
							 | 
						||
| 
								 | 
							
								     "metadata": {},
							 | 
						||
| 
								 | 
							
								     "output_type": "execute_result"
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								     "data": {
							 | 
						||
| 
								 | 
							
								      "image/png": "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\n0PsMVB3JqjfDyJ+9Zzb
							 | 
						||
| 
								 | 
							
								      "text/plain": [
							 | 
						||
| 
								 | 
							
								       "<matplotlib.figure.Figure at 0x2258da3b710>"
							 | 
						||
| 
								 | 
							
								      ]
							 | 
						||
| 
								 | 
							
								     },
							 | 
						||
| 
								 | 
							
								     "metadata": {},
							 | 
						||
| 
								 | 
							
								     "output_type": "display_data"
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								   ],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "plt.figure(figsize=(12,8))\n",
							 | 
						||
| 
								 | 
							
								    "plt.scatter(vol_arr,ret_arr,c=sharpe_arr,cmap='plasma')\n",
							 | 
						||
| 
								 | 
							
								    "plt.colorbar(label='Sharpe Ratio')\n",
							 | 
						||
| 
								 | 
							
								    "plt.xlabel('Volatility')\n",
							 | 
						||
| 
								 | 
							
								    "plt.ylabel('Return')\n",
							 | 
						||
| 
								 | 
							
								    "\n",
							 | 
						||
| 
								 | 
							
								    "# Add red dot for max SR\n",
							 | 
						||
| 
								 | 
							
								    "plt.scatter(max_sr_vol,max_sr_ret,c='red',s=50,edgecolors='black')"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "markdown",
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "# Mathematical Optimization\n",
							 | 
						||
| 
								 | 
							
								    "\n",
							 | 
						||
| 
								 | 
							
								    "There are much better ways to find good allocation weights than just guess and check! We can use optimization functions to find the ideal weights mathematically!"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "markdown",
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "### Functionalize Return and SR operations"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 43,
							 | 
						||
| 
								 | 
							
								   "metadata": {
							 | 
						||
| 
								 | 
							
								    "collapsed": true
							 | 
						||
| 
								 | 
							
								   },
							 | 
						||
| 
								 | 
							
								   "outputs": [],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "def get_ret_vol_sr(weights):\n",
							 | 
						||
| 
								 | 
							
								    "    \"\"\"\n",
							 | 
						||
| 
								 | 
							
								    "    Takes in weights, returns array or return,volatility, sharpe ratio\n",
							 | 
						||
| 
								 | 
							
								    "    \"\"\"\n",
							 | 
						||
| 
								 | 
							
								    "    weights = np.array(weights)\n",
							 | 
						||
| 
								 | 
							
								    "    ret = np.sum(log_ret.mean() * weights) * 252\n",
							 | 
						||
| 
								 | 
							
								    "    vol = np.sqrt(np.dot(weights.T, np.dot(log_ret.cov() * 252, weights)))\n",
							 | 
						||
| 
								 | 
							
								    "    sr = ret/vol\n",
							 | 
						||
| 
								 | 
							
								    "    return np.array([ret,vol,sr])"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 44,
							 | 
						||
| 
								 | 
							
								   "metadata": {
							 | 
						||
| 
								 | 
							
								    "collapsed": true
							 | 
						||
| 
								 | 
							
								   },
							 | 
						||
| 
								 | 
							
								   "outputs": [],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "from scipy.optimize import minimize"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "markdown",
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "To fully understand all the parameters, check out:\n",
							 | 
						||
| 
								 | 
							
								    "https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 45,
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "outputs": [
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								     "name": "stdout",
							 | 
						||
| 
								 | 
							
								     "output_type": "stream",
							 | 
						||
| 
								 | 
							
								     "text": [
							 | 
						||
| 
								 | 
							
								      "Help on function minimize in module scipy.optimize._minimize:\n",
							 | 
						||
| 
								 | 
							
								      "\n",
							 | 
						||
| 
								 | 
							
								      "minimize(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None, bounds=None, constraints=(), tol=None, callback=None, options=None)\n",
							 | 
						||
| 
								 | 
							
								      "    Minimization of scalar function of one or more variables.\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    In general, the optimization problems are of the form::\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "        minimize f(x) subject to\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "        g_i(x) >= 0,  i = 1,...,m\n",
							 | 
						||
| 
								 | 
							
								      "        h_j(x)  = 0,  j = 1,...,p\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    where x is a vector of one or more variables.\n",
							 | 
						||
| 
								 | 
							
								      "    ``g_i(x)`` are the inequality constraints.\n",
							 | 
						||
| 
								 | 
							
								      "    ``h_j(x)`` are the equality constrains.\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    Optionally, the lower and upper bounds for each element in x can also be\n",
							 | 
						||
| 
								 | 
							
								      "    specified using the `bounds` argument.\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    Parameters\n",
							 | 
						||
| 
								 | 
							
								      "    ----------\n",
							 | 
						||
| 
								 | 
							
								      "    fun : callable\n",
							 | 
						||
| 
								 | 
							
								      "        Objective function.\n",
							 | 
						||
| 
								 | 
							
								      "    x0 : ndarray\n",
							 | 
						||
| 
								 | 
							
								      "        Initial guess.\n",
							 | 
						||
| 
								 | 
							
								      "    args : tuple, optional\n",
							 | 
						||
| 
								 | 
							
								      "        Extra arguments passed to the objective function and its\n",
							 | 
						||
| 
								 | 
							
								      "        derivatives (Jacobian, Hessian).\n",
							 | 
						||
| 
								 | 
							
								      "    method : str or callable, optional\n",
							 | 
						||
| 
								 | 
							
								      "        Type of solver.  Should be one of\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "            - 'Nelder-Mead' :ref:`(see here) <optimize.minimize-neldermead>`\n",
							 | 
						||
| 
								 | 
							
								      "            - 'Powell'      :ref:`(see here) <optimize.minimize-powell>`\n",
							 | 
						||
| 
								 | 
							
								      "            - 'CG'          :ref:`(see here) <optimize.minimize-cg>`\n",
							 | 
						||
| 
								 | 
							
								      "            - 'BFGS'        :ref:`(see here) <optimize.minimize-bfgs>`\n",
							 | 
						||
| 
								 | 
							
								      "            - 'Newton-CG'   :ref:`(see here) <optimize.minimize-newtoncg>`\n",
							 | 
						||
| 
								 | 
							
								      "            - 'L-BFGS-B'    :ref:`(see here) <optimize.minimize-lbfgsb>`\n",
							 | 
						||
| 
								 | 
							
								      "            - 'TNC'         :ref:`(see here) <optimize.minimize-tnc>`\n",
							 | 
						||
| 
								 | 
							
								      "            - 'COBYLA'      :ref:`(see here) <optimize.minimize-cobyla>`\n",
							 | 
						||
| 
								 | 
							
								      "            - 'SLSQP'       :ref:`(see here) <optimize.minimize-slsqp>`\n",
							 | 
						||
| 
								 | 
							
								      "            - 'dogleg'      :ref:`(see here) <optimize.minimize-dogleg>`\n",
							 | 
						||
| 
								 | 
							
								      "            - 'trust-ncg'   :ref:`(see here) <optimize.minimize-trustncg>`\n",
							 | 
						||
| 
								 | 
							
								      "            - custom - a callable object (added in version 0.14.0),\n",
							 | 
						||
| 
								 | 
							
								      "              see below for description.\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "        If not given, chosen to be one of ``BFGS``, ``L-BFGS-B``, ``SLSQP``,\n",
							 | 
						||
| 
								 | 
							
								      "        depending if the problem has constraints or bounds.\n",
							 | 
						||
| 
								 | 
							
								      "    jac : bool or callable, optional\n",
							 | 
						||
| 
								 | 
							
								      "        Jacobian (gradient) of objective function. Only for CG, BFGS,\n",
							 | 
						||
| 
								 | 
							
								      "        Newton-CG, L-BFGS-B, TNC, SLSQP, dogleg, trust-ncg.\n",
							 | 
						||
| 
								 | 
							
								      "        If `jac` is a Boolean and is True, `fun` is assumed to return the\n",
							 | 
						||
| 
								 | 
							
								      "        gradient along with the objective function. If False, the\n",
							 | 
						||
| 
								 | 
							
								      "        gradient will be estimated numerically.\n",
							 | 
						||
| 
								 | 
							
								      "        `jac` can also be a callable returning the gradient of the\n",
							 | 
						||
| 
								 | 
							
								      "        objective. In this case, it must accept the same arguments as `fun`.\n",
							 | 
						||
| 
								 | 
							
								      "    hess, hessp : callable, optional\n",
							 | 
						||
| 
								 | 
							
								      "        Hessian (matrix of second-order derivatives) of objective function or\n",
							 | 
						||
| 
								 | 
							
								      "        Hessian of objective function times an arbitrary vector p.  Only for\n",
							 | 
						||
| 
								 | 
							
								      "        Newton-CG, dogleg, trust-ncg.\n",
							 | 
						||
| 
								 | 
							
								      "        Only one of `hessp` or `hess` needs to be given.  If `hess` is\n",
							 | 
						||
| 
								 | 
							
								      "        provided, then `hessp` will be ignored.  If neither `hess` nor\n",
							 | 
						||
| 
								 | 
							
								      "        `hessp` is provided, then the Hessian product will be approximated\n",
							 | 
						||
| 
								 | 
							
								      "        using finite differences on `jac`. `hessp` must compute the Hessian\n",
							 | 
						||
| 
								 | 
							
								      "        times an arbitrary vector.\n",
							 | 
						||
| 
								 | 
							
								      "    bounds : sequence, optional\n",
							 | 
						||
| 
								 | 
							
								      "        Bounds for variables (only for L-BFGS-B, TNC and SLSQP).\n",
							 | 
						||
| 
								 | 
							
								      "        ``(min, max)`` pairs for each element in ``x``, defining\n",
							 | 
						||
| 
								 | 
							
								      "        the bounds on that parameter. Use None for one of ``min`` or\n",
							 | 
						||
| 
								 | 
							
								      "        ``max`` when there is no bound in that direction.\n",
							 | 
						||
| 
								 | 
							
								      "    constraints : dict or sequence of dict, optional\n",
							 | 
						||
| 
								 | 
							
								      "        Constraints definition (only for COBYLA and SLSQP).\n",
							 | 
						||
| 
								 | 
							
								      "        Each constraint is defined in a dictionary with fields:\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "            type : str\n",
							 | 
						||
| 
								 | 
							
								      "                Constraint type: 'eq' for equality, 'ineq' for inequality.\n",
							 | 
						||
| 
								 | 
							
								      "            fun : callable\n",
							 | 
						||
| 
								 | 
							
								      "                The function defining the constraint.\n",
							 | 
						||
| 
								 | 
							
								      "            jac : callable, optional\n",
							 | 
						||
| 
								 | 
							
								      "                The Jacobian of `fun` (only for SLSQP).\n",
							 | 
						||
| 
								 | 
							
								      "            args : sequence, optional\n",
							 | 
						||
| 
								 | 
							
								      "                Extra arguments to be passed to the function and Jacobian.\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "        Equality constraint means that the constraint function result is to\n",
							 | 
						||
| 
								 | 
							
								      "        be zero whereas inequality means that it is to be non-negative.\n",
							 | 
						||
| 
								 | 
							
								      "        Note that COBYLA only supports inequality constraints.\n",
							 | 
						||
| 
								 | 
							
								      "    tol : float, optional\n",
							 | 
						||
| 
								 | 
							
								      "        Tolerance for termination. For detailed control, use solver-specific\n",
							 | 
						||
| 
								 | 
							
								      "        options.\n",
							 | 
						||
| 
								 | 
							
								      "    options : dict, optional\n",
							 | 
						||
| 
								 | 
							
								      "        A dictionary of solver options. All methods accept the following\n",
							 | 
						||
| 
								 | 
							
								      "        generic options:\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "            maxiter : int\n",
							 | 
						||
| 
								 | 
							
								      "                Maximum number of iterations to perform.\n",
							 | 
						||
| 
								 | 
							
								      "            disp : bool\n",
							 | 
						||
| 
								 | 
							
								      "                Set to True to print convergence messages.\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "        For method-specific options, see :func:`show_options()`.\n",
							 | 
						||
| 
								 | 
							
								      "    callback : callable, optional\n",
							 | 
						||
| 
								 | 
							
								      "        Called after each iteration, as ``callback(xk)``, where ``xk`` is the\n",
							 | 
						||
| 
								 | 
							
								      "        current parameter vector.\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    Returns\n",
							 | 
						||
| 
								 | 
							
								      "    -------\n",
							 | 
						||
| 
								 | 
							
								      "    res : OptimizeResult\n",
							 | 
						||
| 
								 | 
							
								      "        The optimization result represented as a ``OptimizeResult`` object.\n",
							 | 
						||
| 
								 | 
							
								      "        Important attributes are: ``x`` the solution array, ``success`` a\n",
							 | 
						||
| 
								 | 
							
								      "        Boolean flag indicating if the optimizer exited successfully and\n",
							 | 
						||
| 
								 | 
							
								      "        ``message`` which describes the cause of the termination. See\n",
							 | 
						||
| 
								 | 
							
								      "        `OptimizeResult` for a description of other attributes.\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    See also\n",
							 | 
						||
| 
								 | 
							
								      "    --------\n",
							 | 
						||
| 
								 | 
							
								      "    minimize_scalar : Interface to minimization algorithms for scalar\n",
							 | 
						||
| 
								 | 
							
								      "        univariate functions\n",
							 | 
						||
| 
								 | 
							
								      "    show_options : Additional options accepted by the solvers\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    Notes\n",
							 | 
						||
| 
								 | 
							
								      "    -----\n",
							 | 
						||
| 
								 | 
							
								      "    This section describes the available solvers that can be selected by the\n",
							 | 
						||
| 
								 | 
							
								      "    'method' parameter. The default method is *BFGS*.\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    **Unconstrained minimization**\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    Method :ref:`Nelder-Mead <optimize.minimize-neldermead>` uses the\n",
							 | 
						||
| 
								 | 
							
								      "    Simplex algorithm [1]_, [2]_. This algorithm is robust in many\n",
							 | 
						||
| 
								 | 
							
								      "    applications. However, if numerical computation of derivative can be\n",
							 | 
						||
| 
								 | 
							
								      "    trusted, other algorithms using the first and/or second derivatives\n",
							 | 
						||
| 
								 | 
							
								      "    information might be preferred for their better performance in\n",
							 | 
						||
| 
								 | 
							
								      "    general.\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    Method :ref:`Powell <optimize.minimize-powell>` is a modification\n",
							 | 
						||
| 
								 | 
							
								      "    of Powell's method [3]_, [4]_ which is a conjugate direction\n",
							 | 
						||
| 
								 | 
							
								      "    method. It performs sequential one-dimensional minimizations along\n",
							 | 
						||
| 
								 | 
							
								      "    each vector of the directions set (`direc` field in `options` and\n",
							 | 
						||
| 
								 | 
							
								      "    `info`), which is updated at each iteration of the main\n",
							 | 
						||
| 
								 | 
							
								      "    minimization loop. The function need not be differentiable, and no\n",
							 | 
						||
| 
								 | 
							
								      "    derivatives are taken.\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    Method :ref:`CG <optimize.minimize-cg>` uses a nonlinear conjugate\n",
							 | 
						||
| 
								 | 
							
								      "    gradient algorithm by Polak and Ribiere, a variant of the\n",
							 | 
						||
| 
								 | 
							
								      "    Fletcher-Reeves method described in [5]_ pp.  120-122. Only the\n",
							 | 
						||
| 
								 | 
							
								      "    first derivatives are used.\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    Method :ref:`BFGS <optimize.minimize-bfgs>` uses the quasi-Newton\n",
							 | 
						||
| 
								 | 
							
								      "    method of Broyden, Fletcher, Goldfarb, and Shanno (BFGS) [5]_\n",
							 | 
						||
| 
								 | 
							
								      "    pp. 136. It uses the first derivatives only. BFGS has proven good\n",
							 | 
						||
| 
								 | 
							
								      "    performance even for non-smooth optimizations. This method also\n",
							 | 
						||
| 
								 | 
							
								      "    returns an approximation of the Hessian inverse, stored as\n",
							 | 
						||
| 
								 | 
							
								      "    `hess_inv` in the OptimizeResult object.\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    Method :ref:`Newton-CG <optimize.minimize-newtoncg>` uses a\n",
							 | 
						||
| 
								 | 
							
								      "    Newton-CG algorithm [5]_ pp. 168 (also known as the truncated\n",
							 | 
						||
| 
								 | 
							
								      "    Newton method). It uses a CG method to the compute the search\n",
							 | 
						||
| 
								 | 
							
								      "    direction. See also *TNC* method for a box-constrained\n",
							 | 
						||
| 
								 | 
							
								      "    minimization with a similar algorithm.\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    Method :ref:`dogleg <optimize.minimize-dogleg>` uses the dog-leg\n",
							 | 
						||
| 
								 | 
							
								      "    trust-region algorithm [5]_ for unconstrained minimization. This\n",
							 | 
						||
| 
								 | 
							
								      "    algorithm requires the gradient and Hessian; furthermore the\n",
							 | 
						||
| 
								 | 
							
								      "    Hessian is required to be positive definite.\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    Method :ref:`trust-ncg <optimize.minimize-trustncg>` uses the\n",
							 | 
						||
| 
								 | 
							
								      "    Newton conjugate gradient trust-region algorithm [5]_ for\n",
							 | 
						||
| 
								 | 
							
								      "    unconstrained minimization. This algorithm requires the gradient\n",
							 | 
						||
| 
								 | 
							
								      "    and either the Hessian or a function that computes the product of\n",
							 | 
						||
| 
								 | 
							
								      "    the Hessian with a given vector.\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    **Constrained minimization**\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    Method :ref:`L-BFGS-B <optimize.minimize-lbfgsb>` uses the L-BFGS-B\n",
							 | 
						||
| 
								 | 
							
								      "    algorithm [6]_, [7]_ for bound constrained minimization.\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    Method :ref:`TNC <optimize.minimize-tnc>` uses a truncated Newton\n",
							 | 
						||
| 
								 | 
							
								      "    algorithm [5]_, [8]_ to minimize a function with variables subject\n",
							 | 
						||
| 
								 | 
							
								      "    to bounds. This algorithm uses gradient information; it is also\n",
							 | 
						||
| 
								 | 
							
								      "    called Newton Conjugate-Gradient. It differs from the *Newton-CG*\n",
							 | 
						||
| 
								 | 
							
								      "    method described above as it wraps a C implementation and allows\n",
							 | 
						||
| 
								 | 
							
								      "    each variable to be given upper and lower bounds.\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    Method :ref:`COBYLA <optimize.minimize-cobyla>` uses the\n",
							 | 
						||
| 
								 | 
							
								      "    Constrained Optimization BY Linear Approximation (COBYLA) method\n",
							 | 
						||
| 
								 | 
							
								      "    [9]_, [10]_, [11]_. The algorithm is based on linear\n",
							 | 
						||
| 
								 | 
							
								      "    approximations to the objective function and each constraint. The\n",
							 | 
						||
| 
								 | 
							
								      "    method wraps a FORTRAN implementation of the algorithm. The\n",
							 | 
						||
| 
								 | 
							
								      "    constraints functions 'fun' may return either a single number\n",
							 | 
						||
| 
								 | 
							
								      "    or an array or list of numbers.\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    Method :ref:`SLSQP <optimize.minimize-slsqp>` uses Sequential\n",
							 | 
						||
| 
								 | 
							
								      "    Least SQuares Programming to minimize a function of several\n",
							 | 
						||
| 
								 | 
							
								      "    variables with any combination of bounds, equality and inequality\n",
							 | 
						||
| 
								 | 
							
								      "    constraints. The method wraps the SLSQP Optimization subroutine\n",
							 | 
						||
| 
								 | 
							
								      "    originally implemented by Dieter Kraft [12]_. Note that the\n",
							 | 
						||
| 
								 | 
							
								      "    wrapper handles infinite values in bounds by converting them into\n",
							 | 
						||
| 
								 | 
							
								      "    large floating values.\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    **Custom minimizers**\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    It may be useful to pass a custom minimization method, for example\n",
							 | 
						||
| 
								 | 
							
								      "    when using a frontend to this method such as `scipy.optimize.basinhopping`\n",
							 | 
						||
| 
								 | 
							
								      "    or a different library.  You can simply pass a callable as the ``method``\n",
							 | 
						||
| 
								 | 
							
								      "    parameter.\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    The callable is called as ``method(fun, x0, args, **kwargs, **options)``\n",
							 | 
						||
| 
								 | 
							
								      "    where ``kwargs`` corresponds to any other parameters passed to `minimize`\n",
							 | 
						||
| 
								 | 
							
								      "    (such as `callback`, `hess`, etc.), except the `options` dict, which has\n",
							 | 
						||
| 
								 | 
							
								      "    its contents also passed as `method` parameters pair by pair.  Also, if\n",
							 | 
						||
| 
								 | 
							
								      "    `jac` has been passed as a bool type, `jac` and `fun` are mangled so that\n",
							 | 
						||
| 
								 | 
							
								      "    `fun` returns just the function values and `jac` is converted to a function\n",
							 | 
						||
| 
								 | 
							
								      "    returning the Jacobian.  The method shall return an ``OptimizeResult``\n",
							 | 
						||
| 
								 | 
							
								      "    object.\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    The provided `method` callable must be able to accept (and possibly ignore)\n",
							 | 
						||
| 
								 | 
							
								      "    arbitrary parameters; the set of parameters accepted by `minimize` may\n",
							 | 
						||
| 
								 | 
							
								      "    expand in future versions and then these parameters will be passed to\n",
							 | 
						||
| 
								 | 
							
								      "    the method.  You can find an example in the scipy.optimize tutorial.\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    .. versionadded:: 0.11.0\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    References\n",
							 | 
						||
| 
								 | 
							
								      "    ----------\n",
							 | 
						||
| 
								 | 
							
								      "    .. [1] Nelder, J A, and R Mead. 1965. A Simplex Method for Function\n",
							 | 
						||
| 
								 | 
							
								      "        Minimization. The Computer Journal 7: 308-13.\n",
							 | 
						||
| 
								 | 
							
								      "    .. [2] Wright M H. 1996. Direct search methods: Once scorned, now\n",
							 | 
						||
| 
								 | 
							
								      "        respectable, in Numerical Analysis 1995: Proceedings of the 1995\n",
							 | 
						||
| 
								 | 
							
								      "        Dundee Biennial Conference in Numerical Analysis (Eds. D F\n",
							 | 
						||
| 
								 | 
							
								      "        Griffiths and G A Watson). Addison Wesley Longman, Harlow, UK.\n",
							 | 
						||
| 
								 | 
							
								      "        191-208.\n",
							 | 
						||
| 
								 | 
							
								      "    .. [3] Powell, M J D. 1964. An efficient method for finding the minimum of\n",
							 | 
						||
| 
								 | 
							
								      "       a function of several variables without calculating derivatives. The\n",
							 | 
						||
| 
								 | 
							
								      "       Computer Journal 7: 155-162.\n",
							 | 
						||
| 
								 | 
							
								      "    .. [4] Press W, S A Teukolsky, W T Vetterling and B P Flannery.\n",
							 | 
						||
| 
								 | 
							
								      "       Numerical Recipes (any edition), Cambridge University Press.\n",
							 | 
						||
| 
								 | 
							
								      "    .. [5] Nocedal, J, and S J Wright. 2006. Numerical Optimization.\n",
							 | 
						||
| 
								 | 
							
								      "       Springer New York.\n",
							 | 
						||
| 
								 | 
							
								      "    .. [6] Byrd, R H and P Lu and J. Nocedal. 1995. A Limited Memory\n",
							 | 
						||
| 
								 | 
							
								      "       Algorithm for Bound Constrained Optimization. SIAM Journal on\n",
							 | 
						||
| 
								 | 
							
								      "       Scientific and Statistical Computing 16 (5): 1190-1208.\n",
							 | 
						||
| 
								 | 
							
								      "    .. [7] Zhu, C and R H Byrd and J Nocedal. 1997. L-BFGS-B: Algorithm\n",
							 | 
						||
| 
								 | 
							
								      "       778: L-BFGS-B, FORTRAN routines for large scale bound constrained\n",
							 | 
						||
| 
								 | 
							
								      "       optimization. ACM Transactions on Mathematical Software 23 (4):\n",
							 | 
						||
| 
								 | 
							
								      "       550-560.\n",
							 | 
						||
| 
								 | 
							
								      "    .. [8] Nash, S G. Newton-Type Minimization Via the Lanczos Method.\n",
							 | 
						||
| 
								 | 
							
								      "       1984. SIAM Journal of Numerical Analysis 21: 770-778.\n",
							 | 
						||
| 
								 | 
							
								      "    .. [9] Powell, M J D. A direct search optimization method that models\n",
							 | 
						||
| 
								 | 
							
								      "       the objective and constraint functions by linear interpolation.\n",
							 | 
						||
| 
								 | 
							
								      "       1994. Advances in Optimization and Numerical Analysis, eds. S. Gomez\n",
							 | 
						||
| 
								 | 
							
								      "       and J-P Hennart, Kluwer Academic (Dordrecht), 51-67.\n",
							 | 
						||
| 
								 | 
							
								      "    .. [10] Powell M J D. Direct search algorithms for optimization\n",
							 | 
						||
| 
								 | 
							
								      "       calculations. 1998. Acta Numerica 7: 287-336.\n",
							 | 
						||
| 
								 | 
							
								      "    .. [11] Powell M J D. A view of algorithms for optimization without\n",
							 | 
						||
| 
								 | 
							
								      "       derivatives. 2007.Cambridge University Technical Report DAMTP\n",
							 | 
						||
| 
								 | 
							
								      "       2007/NA03\n",
							 | 
						||
| 
								 | 
							
								      "    .. [12] Kraft, D. A software package for sequential quadratic\n",
							 | 
						||
| 
								 | 
							
								      "       programming. 1988. Tech. Rep. DFVLR-FB 88-28, DLR German Aerospace\n",
							 | 
						||
| 
								 | 
							
								      "       Center -- Institute for Flight Mechanics, Koln, Germany.\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    Examples\n",
							 | 
						||
| 
								 | 
							
								      "    --------\n",
							 | 
						||
| 
								 | 
							
								      "    Let us consider the problem of minimizing the Rosenbrock function. This\n",
							 | 
						||
| 
								 | 
							
								      "    function (and its respective derivatives) is implemented in `rosen`\n",
							 | 
						||
| 
								 | 
							
								      "    (resp. `rosen_der`, `rosen_hess`) in the `scipy.optimize`.\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    >>> from scipy.optimize import minimize, rosen, rosen_der\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    A simple application of the *Nelder-Mead* method is:\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    >>> x0 = [1.3, 0.7, 0.8, 1.9, 1.2]\n",
							 | 
						||
| 
								 | 
							
								      "    >>> res = minimize(rosen, x0, method='Nelder-Mead', tol=1e-6)\n",
							 | 
						||
| 
								 | 
							
								      "    >>> res.x\n",
							 | 
						||
| 
								 | 
							
								      "    array([ 1.,  1.,  1.,  1.,  1.])\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    Now using the *BFGS* algorithm, using the first derivative and a few\n",
							 | 
						||
| 
								 | 
							
								      "    options:\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    >>> res = minimize(rosen, x0, method='BFGS', jac=rosen_der,\n",
							 | 
						||
| 
								 | 
							
								      "    ...                options={'gtol': 1e-6, 'disp': True})\n",
							 | 
						||
| 
								 | 
							
								      "    Optimization terminated successfully.\n",
							 | 
						||
| 
								 | 
							
								      "             Current function value: 0.000000\n",
							 | 
						||
| 
								 | 
							
								      "             Iterations: 26\n",
							 | 
						||
| 
								 | 
							
								      "             Function evaluations: 31\n",
							 | 
						||
| 
								 | 
							
								      "             Gradient evaluations: 31\n",
							 | 
						||
| 
								 | 
							
								      "    >>> res.x\n",
							 | 
						||
| 
								 | 
							
								      "    array([ 1.,  1.,  1.,  1.,  1.])\n",
							 | 
						||
| 
								 | 
							
								      "    >>> print(res.message)\n",
							 | 
						||
| 
								 | 
							
								      "    Optimization terminated successfully.\n",
							 | 
						||
| 
								 | 
							
								      "    >>> res.hess_inv\n",
							 | 
						||
| 
								 | 
							
								      "    array([[ 0.00749589,  0.01255155,  0.02396251,  0.04750988,  0.09495377],  # may vary\n",
							 | 
						||
| 
								 | 
							
								      "           [ 0.01255155,  0.02510441,  0.04794055,  0.09502834,  0.18996269],\n",
							 | 
						||
| 
								 | 
							
								      "           [ 0.02396251,  0.04794055,  0.09631614,  0.19092151,  0.38165151],\n",
							 | 
						||
| 
								 | 
							
								      "           [ 0.04750988,  0.09502834,  0.19092151,  0.38341252,  0.7664427 ],\n",
							 | 
						||
| 
								 | 
							
								      "           [ 0.09495377,  0.18996269,  0.38165151,  0.7664427,   1.53713523]])\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    Next, consider a minimization problem with several constraints (namely\n",
							 | 
						||
| 
								 | 
							
								      "    Example 16.4 from [5]_). The objective function is:\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    >>> fun = lambda x: (x[0] - 1)**2 + (x[1] - 2.5)**2\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    There are three constraints defined as:\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    >>> cons = ({'type': 'ineq', 'fun': lambda x:  x[0] - 2 * x[1] + 2},\n",
							 | 
						||
| 
								 | 
							
								      "    ...         {'type': 'ineq', 'fun': lambda x: -x[0] - 2 * x[1] + 6},\n",
							 | 
						||
| 
								 | 
							
								      "    ...         {'type': 'ineq', 'fun': lambda x: -x[0] + 2 * x[1] + 2})\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    And variables must be positive, hence the following bounds:\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    >>> bnds = ((0, None), (0, None))\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    The optimization problem is solved using the SLSQP method as:\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    >>> res = minimize(fun, (2, 0), method='SLSQP', bounds=bnds,\n",
							 | 
						||
| 
								 | 
							
								      "    ...                constraints=cons)\n",
							 | 
						||
| 
								 | 
							
								      "    \n",
							 | 
						||
| 
								 | 
							
								      "    It should converge to the theoretical solution (1.4 ,1.7).\n",
							 | 
						||
| 
								 | 
							
								      "\n"
							 | 
						||
| 
								 | 
							
								     ]
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								   ],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "help(minimize)"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "markdown",
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "Optimization works as a minimization function, since we actually want to maximize the Sharpe Ratio, we will need to turn it negative so we can minimize the negative sharpe (same as maximizing the postive sharpe)"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 46,
							 | 
						||
| 
								 | 
							
								   "metadata": {
							 | 
						||
| 
								 | 
							
								    "collapsed": true
							 | 
						||
| 
								 | 
							
								   },
							 | 
						||
| 
								 | 
							
								   "outputs": [],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "def neg_sharpe(weights):\n",
							 | 
						||
| 
								 | 
							
								    "    return  get_ret_vol_sr(weights)[2] * -1"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 47,
							 | 
						||
| 
								 | 
							
								   "metadata": {
							 | 
						||
| 
								 | 
							
								    "collapsed": true
							 | 
						||
| 
								 | 
							
								   },
							 | 
						||
| 
								 | 
							
								   "outputs": [],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "# Contraints\n",
							 | 
						||
| 
								 | 
							
								    "def check_sum(weights):\n",
							 | 
						||
| 
								 | 
							
								    "    '''\n",
							 | 
						||
| 
								 | 
							
								    "    Returns 0 if sum of weights is 1.0\n",
							 | 
						||
| 
								 | 
							
								    "    '''\n",
							 | 
						||
| 
								 | 
							
								    "    return np.sum(weights) - 1"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 48,
							 | 
						||
| 
								 | 
							
								   "metadata": {
							 | 
						||
| 
								 | 
							
								    "collapsed": true
							 | 
						||
| 
								 | 
							
								   },
							 | 
						||
| 
								 | 
							
								   "outputs": [],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "# By convention of minimize function it should be a function that returns zero for conditions\n",
							 | 
						||
| 
								 | 
							
								    "cons = ({'type':'eq','fun': check_sum})"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 49,
							 | 
						||
| 
								 | 
							
								   "metadata": {
							 | 
						||
| 
								 | 
							
								    "collapsed": true
							 | 
						||
| 
								 | 
							
								   },
							 | 
						||
| 
								 | 
							
								   "outputs": [],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "# 0-1 bounds for each weight\n",
							 | 
						||
| 
								 | 
							
								    "bounds = ((0, 1), (0, 1), (0, 1), (0, 1))"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 50,
							 | 
						||
| 
								 | 
							
								   "metadata": {
							 | 
						||
| 
								 | 
							
								    "collapsed": true
							 | 
						||
| 
								 | 
							
								   },
							 | 
						||
| 
								 | 
							
								   "outputs": [],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "# Initial Guess (equal distribution)\n",
							 | 
						||
| 
								 | 
							
								    "init_guess = [0.25,0.25,0.25,0.25]"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 51,
							 | 
						||
| 
								 | 
							
								   "metadata": {
							 | 
						||
| 
								 | 
							
								    "collapsed": true
							 | 
						||
| 
								 | 
							
								   },
							 | 
						||
| 
								 | 
							
								   "outputs": [],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "# Sequential Least SQuares Programming (SLSQP).\n",
							 | 
						||
| 
								 | 
							
								    "opt_results = minimize(neg_sharpe,init_guess,method='SLSQP',bounds=bounds,constraints=cons)"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 52,
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "outputs": [
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								     "data": {
							 | 
						||
| 
								 | 
							
								      "text/plain": [
							 | 
						||
| 
								 | 
							
								       "     fun: -1.030716870334955\n",
							 | 
						||
| 
								 | 
							
								       "     jac: array([  5.64455986e-05,   4.18275595e-05,   3.39921728e-01,\n",
							 | 
						||
| 
								 | 
							
								       "        -4.45097685e-05])\n",
							 | 
						||
| 
								 | 
							
								       " message: 'Optimization terminated successfully.'\n",
							 | 
						||
| 
								 | 
							
								       "    nfev: 42\n",
							 | 
						||
| 
								 | 
							
								       "     nit: 7\n",
							 | 
						||
| 
								 | 
							
								       "    njev: 7\n",
							 | 
						||
| 
								 | 
							
								       "  status: 0\n",
							 | 
						||
| 
								 | 
							
								       " success: True\n",
							 | 
						||
| 
								 | 
							
								       "       x: array([  2.66289778e-01,   2.04189819e-01,   9.24621165e-17,\n",
							 | 
						||
| 
								 | 
							
								       "         5.29520404e-01])"
							 | 
						||
| 
								 | 
							
								      ]
							 | 
						||
| 
								 | 
							
								     },
							 | 
						||
| 
								 | 
							
								     "execution_count": 52,
							 | 
						||
| 
								 | 
							
								     "metadata": {},
							 | 
						||
| 
								 | 
							
								     "output_type": "execute_result"
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								   ],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "opt_results"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 53,
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "outputs": [
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								     "data": {
							 | 
						||
| 
								 | 
							
								      "text/plain": [
							 | 
						||
| 
								 | 
							
								       "array([  2.66289778e-01,   2.04189819e-01,   9.24621165e-17,\n",
							 | 
						||
| 
								 | 
							
								       "         5.29520404e-01])"
							 | 
						||
| 
								 | 
							
								      ]
							 | 
						||
| 
								 | 
							
								     },
							 | 
						||
| 
								 | 
							
								     "execution_count": 53,
							 | 
						||
| 
								 | 
							
								     "metadata": {},
							 | 
						||
| 
								 | 
							
								     "output_type": "execute_result"
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								   ],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "opt_results.x"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 54,
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "outputs": [
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								     "data": {
							 | 
						||
| 
								 | 
							
								      "text/plain": [
							 | 
						||
| 
								 | 
							
								       "array([ 0.21885915,  0.21233683,  1.03071687])"
							 | 
						||
| 
								 | 
							
								      ]
							 | 
						||
| 
								 | 
							
								     },
							 | 
						||
| 
								 | 
							
								     "execution_count": 54,
							 | 
						||
| 
								 | 
							
								     "metadata": {},
							 | 
						||
| 
								 | 
							
								     "output_type": "execute_result"
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								   ],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "get_ret_vol_sr(opt_results.x)"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "markdown",
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "# All Optimal Portfolios (Efficient Frontier)\n",
							 | 
						||
| 
								 | 
							
								    "\n",
							 | 
						||
| 
								 | 
							
								    "The efficient frontier is the set of optimal portfolios that offers the highest expected return for a defined level of risk or the lowest risk for a given level of expected return. Portfolios that lie below the efficient frontier are sub-optimal, because they do not provide enough return for the level of risk. Portfolios that cluster to the right of the efficient frontier are also sub-optimal, because they have a higher level of risk for the defined rate of return.\n",
							 | 
						||
| 
								 | 
							
								    "\n",
							 | 
						||
| 
								 | 
							
								    "Efficient Frontier http://www.investopedia.com/terms/e/efficientfrontier"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 55,
							 | 
						||
| 
								 | 
							
								   "metadata": {
							 | 
						||
| 
								 | 
							
								    "collapsed": true
							 | 
						||
| 
								 | 
							
								   },
							 | 
						||
| 
								 | 
							
								   "outputs": [],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "# Our returns go from 0 to somewhere along 0.3\n",
							 | 
						||
| 
								 | 
							
								    "# Create a linspace number of points to calculate x on\n",
							 | 
						||
| 
								 | 
							
								    "frontier_y = np.linspace(0,0.3,100) # Change 100 to a lower number for slower computers!"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 56,
							 | 
						||
| 
								 | 
							
								   "metadata": {
							 | 
						||
| 
								 | 
							
								    "collapsed": true
							 | 
						||
| 
								 | 
							
								   },
							 | 
						||
| 
								 | 
							
								   "outputs": [],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "def minimize_volatility(weights):\n",
							 | 
						||
| 
								 | 
							
								    "    return  get_ret_vol_sr(weights)[1] "
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 57,
							 | 
						||
| 
								 | 
							
								   "metadata": {
							 | 
						||
| 
								 | 
							
								    "collapsed": true
							 | 
						||
| 
								 | 
							
								   },
							 | 
						||
| 
								 | 
							
								   "outputs": [],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "frontier_volatility = []\n",
							 | 
						||
| 
								 | 
							
								    "\n",
							 | 
						||
| 
								 | 
							
								    "for possible_return in frontier_y:\n",
							 | 
						||
| 
								 | 
							
								    "    # function for return\n",
							 | 
						||
| 
								 | 
							
								    "    cons = ({'type':'eq','fun': check_sum},\n",
							 | 
						||
| 
								 | 
							
								    "            {'type':'eq','fun': lambda w: get_ret_vol_sr(w)[0] - possible_return})\n",
							 | 
						||
| 
								 | 
							
								    "    \n",
							 | 
						||
| 
								 | 
							
								    "    result = minimize(minimize_volatility,init_guess,method='SLSQP',bounds=bounds,constraints=cons)\n",
							 | 
						||
| 
								 | 
							
								    "    \n",
							 | 
						||
| 
								 | 
							
								    "    frontier_volatility.append(result['fun'])"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "code",
							 | 
						||
| 
								 | 
							
								   "execution_count": 58,
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "outputs": [
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								     "data": {
							 | 
						||
| 
								 | 
							
								      "text/plain": [
							 | 
						||
| 
								 | 
							
								       "[<matplotlib.lines.Line2D at 0x2258fdefeb8>]"
							 | 
						||
| 
								 | 
							
								      ]
							 | 
						||
| 
								 | 
							
								     },
							 | 
						||
| 
								 | 
							
								     "execution_count": 58,
							 | 
						||
| 
								 | 
							
								     "metadata": {},
							 | 
						||
| 
								 | 
							
								     "output_type": "execute_result"
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								     "data": {
							 | 
						||
| 
								 | 
							
								      "image/png": "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\n50w5h2lDpiFyaM9gmQO
							 | 
						||
| 
								 | 
							
								      "text/plain": [
							 | 
						||
| 
								 | 
							
								       "<matplotlib.figure.Figure at 0x2258fd7b208>"
							 | 
						||
| 
								 | 
							
								      ]
							 | 
						||
| 
								 | 
							
								     },
							 | 
						||
| 
								 | 
							
								     "metadata": {},
							 | 
						||
| 
								 | 
							
								     "output_type": "display_data"
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								   ],
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "plt.figure(figsize=(12,8))\n",
							 | 
						||
| 
								 | 
							
								    "plt.scatter(vol_arr,ret_arr,c=sharpe_arr,cmap='plasma')\n",
							 | 
						||
| 
								 | 
							
								    "plt.colorbar(label='Sharpe Ratio')\n",
							 | 
						||
| 
								 | 
							
								    "plt.xlabel('Volatility')\n",
							 | 
						||
| 
								 | 
							
								    "plt.ylabel('Return')\n",
							 | 
						||
| 
								 | 
							
								    "\n",
							 | 
						||
| 
								 | 
							
								    "\n",
							 | 
						||
| 
								 | 
							
								    "\n",
							 | 
						||
| 
								 | 
							
								    "# Add frontier line\n",
							 | 
						||
| 
								 | 
							
								    "plt.plot(frontier_volatility,frontier_y,'g--',linewidth=3)"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  {
							 | 
						||
| 
								 | 
							
								   "cell_type": "markdown",
							 | 
						||
| 
								 | 
							
								   "metadata": {},
							 | 
						||
| 
								 | 
							
								   "source": [
							 | 
						||
| 
								 | 
							
								    "# Great Job!"
							 | 
						||
| 
								 | 
							
								   ]
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								 ],
							 | 
						||
| 
								 | 
							
								 "metadata": {
							 | 
						||
| 
								 | 
							
								  "kernelspec": {
							 | 
						||
| 
								 | 
							
								   "display_name": "Python 3",
							 | 
						||
| 
								 | 
							
								   "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.6.1"
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								 },
							 | 
						||
| 
								 | 
							
								 "nbformat": 4,
							 | 
						||
| 
								 | 
							
								 "nbformat_minor": 2
							 | 
						||
| 
								 | 
							
								}
							 |