Skip to content

Instantly share code, notes, and snippets.

@humdings
Last active August 7, 2023 07:08
Show Gist options
  • Save humdings/c4646c24101b4d6c09b3 to your computer and use it in GitHub Desktop.
Save humdings/c4646c24101b4d6c09b3 to your computer and use it in GitHub Desktop.
Efficient Frontier Curve Fit
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"plt.rcParams['figure.figsize'] = (10.0, 7.0)\n",
"from scipy.optimize import curve_fit\n",
"import cvxopt as opt\n",
"from cvxopt import blas, solvers\n",
"solvers.options['show_progress'] = False\n",
"np.random.seed(123)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"## NUMBER OF ASSETS\n",
"n_assets = 4\n",
"\n",
"## NUMBER OF OBSERVATIONS\n",
"n_obs = 1000\n",
"\n",
"return_vec = np.random.randn(n_assets, n_obs) + 0.000001"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def rand_weights(n):\n",
" ''' Produces n random weights that sum to 1 '''\n",
" k = np.random.rand(n)\n",
" return k / sum(k)\n",
"\n",
"def random_portfolio(returns):\n",
" ''' \n",
" Returns the mean and standard deviation of returns for a random portfolio\n",
" '''\n",
"\n",
" p = np.asmatrix(np.mean(returns, axis=1))\n",
" w = np.asmatrix(rand_weights(returns.shape[0]))\n",
" C = np.asmatrix(np.cov(returns))\n",
" \n",
" mu = w * p.T\n",
" sigma = np.sqrt(w * C * w.T)\n",
" \n",
" # This recursion reduces outliers to keep plots pretty\n",
" if sigma > 2:\n",
" return random_portfolio(returns)\n",
" return mu, sigma\n",
"\n",
"def optimal_portfolio(returns):\n",
" n = len(returns)\n",
" returns = np.asmatrix(returns)\n",
" \n",
" N = 100\n",
" mus = [10**(5.0 * t/N - 1.0) for t in range(N)]\n",
" \n",
" # Convert to cvxopt matrices\n",
" S = opt.matrix(np.cov(returns))\n",
" pbar = opt.matrix(np.mean(returns, axis=1))\n",
" \n",
" # Create constraint matrices\n",
" G = -opt.matrix(np.eye(n)) # negative n x n identity matrix\n",
" h = opt.matrix(0.0, (n ,1))\n",
" A = opt.matrix(1.0, (1, n))\n",
" b = opt.matrix(1.0)\n",
" \n",
" # Calculate efficient frontier weights using quadratic programming\n",
" portfolios = [solvers.qp(mu*S, -pbar, G, h, A, b)['x'] \n",
" for mu in mus]\n",
" ## CALCULATE RISKS AND RETURNS FOR FRONTIER\n",
" returns = [blas.dot(pbar, x) for x in portfolios]\n",
" risks = [np.sqrt(blas.dot(x, S*x)) for x in portfolios]\n",
" ## CALCULATE THE 2ND DEGREE POLYNOMIAL OF THE FRONTIER CURVE\n",
" m1 = np.polyfit(returns, risks, 2)\n",
" x1 = np.sqrt(m1[2] / m1[0])\n",
" print x1\n",
" # CALCULATE THE OPTIMAL PORTFOLIO\n",
" wt = solvers.qp(opt.matrix(x1 * S), -pbar, G, h, A, b)['x']\n",
" return np.asarray(wt), returns, risks\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.0555080150868\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x1102b0450>"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": [
"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\n"
],
"text/plain": [
"<matplotlib.figure.Figure at 0x1102829d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"n_portfolios = 500\n",
"means, stds = np.column_stack([\n",
" random_portfolio(return_vec) \n",
" for _ in xrange(n_portfolios)\n",
"])\n",
"\n",
"weights, returns, risks = optimal_portfolio(return_vec)\n",
"\n",
"# Quadratic Fit\n",
"quadratic = np.poly1d(np.polyfit(returns, risks, 2))\n",
"\n",
"# Try fitting a Hyperbola\n",
"def hyperbola(x, x0, y0, a, b):\n",
" \"\"\"\n",
" formula used: \n",
" (y - y0)^2 / a^2 - (x - x0)^2 / b^2 = 1\n",
" \"\"\"\n",
" return y0**2 + np.sqrt(a**2 * ((x - x0)**2 / b**2 + 1))\n",
"\n",
"\n",
"# Initial params guess, these seem pretty sensitive\n",
"guess = 0.05, 0.05, np.mean(risks) / 2, np.mean(returns) / 2\n",
"\n",
"params, _ = curve_fit(hyperbola, returns, risks, guess)\n",
"\n",
"plt.plot(means, stds, 'r+')\n",
"plt.xlabel('mean')\n",
"plt.ylabel('std')\n",
"plt.plot(returns, risks, 'y-o', label='Efficient Frontier')\n",
"\n",
"plt.plot(returns, quadratic(returns), 'b-+', label='quadratic')\n",
"plt.plot(returns, hyperbola(returns, *params), 'g-x', label='hyperbolic')\n",
"plt.legend(loc=0)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment