{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "5x5 Array{Float64,2}:\n", " 0.54178 0.45192 0.328892 0.0123621 0.400576\n", " 0.45192 0.694173 0.416407 -0.237798 0.295939\n", " 0.328892 0.416407 0.496781 0.0266768 0.31054 \n", " 0.0123621 -0.237798 0.0266768 0.414028 -0.181312\n", " 0.400576 0.295939 0.31054 -0.181312 0.9 " ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Generate data for worst-case risk analysis.\n", "srand(2);\n", "n = 5;\n", "r = abs(randn(n, 1))/15;\n", "Sigma = 0.9 * rand(n, n) - 0.15;\n", "Sigma_nom = Sigma' * Sigma;\n", "Sigma_nom -= (maximum(Sigma_nom) - 0.9)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "5-element Array{Float64,1}:\n", " -0.258385\n", " 0.53885 \n", " -0.241623\n", " 0.751627\n", " 0.209527" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Form and solve portfolio optimization problem.\n", "# Here we minimize risk while requiring a 0.1 return.\n", "using Convex, SCS\n", "set_default_solver(SCSSolver(verbose=0));\n", "w = Variable(n);\n", "ret = dot(r, w);\n", "risk = sum(quad_form(w, Sigma_nom));\n", "problem = minimize(risk, [sum(w) == 1, ret >= 0.1, norm(w, 1) <= 2])\n", "solve!(problem);\n", "wval = vec(evaluate(w))" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "standard deviation = [0.27]\n", "worst-case standard deviation = 0.82\n", "worst-case Delta = \n", "[-0.0 -0.2 0.19 -0.2 -0.2\n", " -0.2 0.0 -0.2 0.2 0.2\n", " 0.19 -0.2 -0.0 -0.2 -0.2\n", " -0.2 0.2 -0.2 0.0 0.2\n", " -0.2 0.2 -0.2 0.2 0.0]\n" ] } ], "source": [ "# Form and solve worst-case risk analysis problem.\n", "Sigma = Semidefinite(n);\n", "Delta = Variable(n, n);\n", "risk = sum(quad_form(wval, Sigma));\n", "problem = maximize(risk, [Sigma == Sigma_nom + Delta,\n", " diag(Delta) == 0,\n", " abs(Delta) <= 0.2,\n", " Delta == Delta']);\n", "solve!(problem);\n", "println(\"standard deviation = \", round(sqrt(wval' * Sigma_nom * wval), 2));\n", "println(\"worst-case standard deviation = \", round(sqrt(evaluate(risk)), 2));\n", "println(\"worst-case Delta = \");\n", "println(round(evaluate(Delta), 2));" ] } ], "metadata": { "kernelspec": { "display_name": "Julia 0.3.9", "language": "julia", "name": "julia-0.3" }, "language_info": { "name": "julia", "version": "0.3.9" } }, "nbformat": 4, "nbformat_minor": 0 }