{
 "metadata": {
  "name": "Parallel MC Options"
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "Parallel Monto-Carlo options pricing"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "This notebook shows how to use `IPython.parallel` to do Monte-Carlo options pricing in parallel. We will compute the price of a large number of options for different strike prices and volatilities."
     ]
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Problem setup"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "%pylab inline"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.kernel.zmq.pylab.backend_inline].\n",
        "For more information, type 'help(pylab)'.\n"
       ]
      }
     ],
     "prompt_number": 4
    },
    {
     "cell_type": "code",
     "collapsed": true,
     "input": [
      "import sys\n",
      "import time\n",
      "from IPython.parallel import Client\n",
      "import numpy as np"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 5
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Here are the basic parameters for our computation."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": true,
     "input": [
      "price = 100.0  # Initial price\n",
      "rate = 0.05  # Interest rate\n",
      "days = 260  # Days to expiration\n",
      "paths = 10000  # Number of MC paths\n",
      "n_strikes = 6  # Number of strike values\n",
      "min_strike = 90.0  # Min strike price\n",
      "max_strike = 110.0  # Max strike price\n",
      "n_sigmas = 5  # Number of volatility values\n",
      "min_sigma = 0.1  # Min volatility\n",
      "max_sigma = 0.4  # Max volatility"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 6
    },
    {
     "cell_type": "code",
     "collapsed": true,
     "input": [
      "strike_vals = np.linspace(min_strike, max_strike, n_strikes)\n",
      "sigma_vals = np.linspace(min_sigma, max_sigma, n_sigmas)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 7
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "print \"Strike prices: \", strike_vals\n",
      "print \"Volatilities: \", sigma_vals"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Strike prices:  [  90.   94.   98.  102.  106.  110.]\n",
        "Volatilities:  [ 0.1    0.175  0.25   0.325  0.4  ]\n"
       ]
      }
     ],
     "prompt_number": 8
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Monte-Carlo option pricing function"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "The following function computes the price of a single option.  It returns the call and put prices for both European and Asian style options."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "def price_option(S=100.0, K=100.0, sigma=0.25, r=0.05, days=260, paths=10000):\n",
      "    \"\"\"\n",
      "    Price European and Asian options using a Monte Carlo method.\n",
      "\n",
      "    Parameters\n",
      "    ----------\n",
      "    S : float\n",
      "        The initial price of the stock.\n",
      "    K : float\n",
      "        The strike price of the option.\n",
      "    sigma : float\n",
      "        The volatility of the stock.\n",
      "    r : float\n",
      "        The risk free interest rate.\n",
      "    days : int\n",
      "        The number of days until the option expires.\n",
      "    paths : int\n",
      "        The number of Monte Carlo paths used to price the option.\n",
      "\n",
      "    Returns\n",
      "    -------\n",
      "    A tuple of (E. call, E. put, A. call, A. put) option prices.\n",
      "    \"\"\"\n",
      "    import numpy as np\n",
      "    from math import exp,sqrt\n",
      "    \n",
      "    h = 1.0/days\n",
      "    const1 = exp((r-0.5*sigma**2)*h)\n",
      "    const2 = sigma*sqrt(h)\n",
      "    stock_price = S*np.ones(paths, dtype='float64')\n",
      "    stock_price_sum = np.zeros(paths, dtype='float64')\n",
      "    for j in range(days):\n",
      "        growth_factor = const1*np.exp(const2*np.random.standard_normal(paths))\n",
      "        stock_price = stock_price*growth_factor\n",
      "        stock_price_sum = stock_price_sum + stock_price\n",
      "    stock_price_avg = stock_price_sum/days\n",
      "    zeros = np.zeros(paths, dtype='float64')\n",
      "    r_factor = exp(-r*h*days)\n",
      "    euro_put = r_factor*np.mean(np.maximum(zeros, K-stock_price))\n",
      "    asian_put = r_factor*np.mean(np.maximum(zeros, K-stock_price_avg))\n",
      "    euro_call = r_factor*np.mean(np.maximum(zeros, stock_price-K))\n",
      "    asian_call = r_factor*np.mean(np.maximum(zeros, stock_price_avg-K))\n",
      "    return (euro_call, euro_put, asian_call, asian_put)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 9
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "We can time a single call of this function using the `%timeit` magic:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "%timeit -n1 -r1 print price_option(S=100.0, K=100.0, sigma=0.25, r=0.05, days=260, paths=10000)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "(12.217720657772686, 7.4170971244322672, 6.8120985432589185, 4.3727039632512152)\n",
        "1 loops, best of 1: 236 ms per loop\n"
       ]
      }
     ],
     "prompt_number": 24
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "## Parallel computation across strike prices and volatilities"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "The Client is used to setup the calculation and works with all engines."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": true,
     "input": [
      "c = Client(profile=\"default\")"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 12
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "A `LoadBalancedView` is an interface to the engines that provides dynamic load\n",
      "balancing at the expense of not knowing which engine will execute the code."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": true,
     "input": [
      "view = c.load_balanced_view()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 13
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Submit tasks for each (strike, sigma) pair. Again, we use the `%%timeit` magic to time the entire computation."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": true,
     "input": [
      "%%timeit -n1 -r1\n",
      "\n",
      "async_results = []\n",
      "for strike in strike_vals:\n",
      "    for sigma in sigma_vals:\n",
      "        # This line submits the tasks for parallel computation.\n",
      "        ar = view.apply_async(price_option, price, strike, sigma, rate, days, paths)\n",
      "        async_results.append(ar)\n",
      "\n",
      "c.wait(async_results)  # Wait until all tasks are done."
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "1 loops, best of 1: 3.75 s per loop\n"
       ]
      }
     ],
     "prompt_number": 16
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "len(async_results)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "pyout",
       "prompt_number": 18,
       "text": [
        "30"
       ]
      }
     ],
     "prompt_number": 18
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "## Process and visualize results"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Retrieve the results using the `get` method:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": true,
     "input": [
      "results = [ar.get() for ar in async_results]"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 19
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Assemble the result into a structured NumPy array."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": true,
     "input": [
      "prices = np.empty(n_strikes*n_sigmas,\n",
      "    dtype=[('ecall',float),('eput',float),('acall',float),('aput',float)]\n",
      ")\n",
      "\n",
      "for i, price in enumerate(results):\n",
      "    prices[i] = tuple(price)\n",
      "\n",
      "prices.shape = (n_strikes, n_sigmas)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 20
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Plot the value of the European call in (volatility, strike) space."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "plt.figure()\n",
      "plt.contourf(sigma_vals, strike_vals, prices['ecall'])\n",
      "plt.axis('tight')\n",
      "plt.colorbar()\n",
      "plt.title('European Call')\n",
      "plt.xlabel(\"Volatility\")\n",
      "plt.ylabel(\"Strike Price\")"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "pyout",
       "prompt_number": 21,
       "text": [
        "<matplotlib.text.Text at 0x10ab98690>"
       ]
      },
      {
       "output_type": "display_data",
       "png": "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\n"
      }
     ],
     "prompt_number": 21
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Plot the value of the Asian call in (volatility, strike) space."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "plt.figure()\n",
      "plt.contourf(sigma_vals, strike_vals, prices['acall'])\n",
      "plt.axis('tight')\n",
      "plt.colorbar()\n",
      "plt.title(\"Asian Call\")\n",
      "plt.xlabel(\"Volatility\")\n",
      "plt.ylabel(\"Strike Price\")"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "pyout",
       "prompt_number": 22,
       "text": [
        "<matplotlib.text.Text at 0x1088bf150>"
       ]
      },
      {
       "output_type": "display_data",
       "png": "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\ntm7dioMHDyI6OhpxcXHIyspCVVUVsrKyEB9v379WRERGdPfddwO4dcVGSUkJvvzyS8TFxTm8jknW\n8LA0MTERpaWl8PHxwVtvvYXY2FhxL6UjIrIiLy8PEydOxG+//YapU6di6tSpji8i6ygvL08ODQ2V\nQ0JC5CVLltS6vbi4WI6Pj5ebNGkiL1iwwKF9XUXJzO3atZMjIiLkyMhIOSYmRquRbc68atUquXPn\nznLnzp3l1NRU+T//+Y/d+xptXqM+x59++qncuXNnuUuXLvLjjz8uFxYW2r2vEWfW43m293kqLCyU\nGzRoIH/00UcO72skusY5MjJSzsvLk0tKSuSOHTvK586dq3F7aWmpvHv3bnn27Nm1QmdrXyPO3L59\ne/n8+fOazFmdrZm//fZb+ZdffpFlWZbfffddedSoUXbva7R5jfocX7582fK92WyWExIS7N7XiDPr\n8Tzb8zxdv35dTkpKkvv3718jzno9x0poes65uurXArZr185yLWB1/v7+6NatGxo1auTwvkab+TZZ\n4xc37Zm5e/fulvNk/fv3R15ent37Gmne24z4HDdr1qzG/b29ve3e12gz36bl82zv8/Tmm29i2LBh\n8Pf3d3hfo9EtztauBXT1vkoofVyTyYTk5GQMHjwYOTk5rhixFkdnXr58ueWKGj2eZyXzAsZ+jtev\nX4/27dsjLS0NK1ascGhfI8y8fPlyy3atn2d75j19+jQ2bNiA9PR0y4z27mtE/OAjDeXn56Nt27Yo\nLi7GgAEDEBsbizZt2ug9lsXWrVuxatUqfPvtt3qPYpe65jXyczxkyBAMGTIE69atw+DBg7Fv3z69\nR7Kp+sxDhgyxzGzE53n69Ol49dVXYTKZIN86ZavrPErpduQcExODw4cPW34+dOiQ3ZfRKdlXCaWP\n27ZtWwBAWFgYBg4ciM8++0z1Ge9k78zff/89Jk6ciJycHLRs2dKhfY0yL2Ds5/i2p556CmfOnEFV\nVRW6desmxH/L1WcGtH+e7Zn3u+++w4gRI9ChQwd8/PHHmDRpEnJycnTrhWJ6nvC+fZL+xIkT9Z6k\nf/nll62+IGhrX7U5O/OVK1fkS5cuybJ860XDTp06yT/99JMhZv7vf/8rh4SEyLt27XJ4XyPNa+Tn\n+OjRo/LNmzdlWZbljRs3yv369bN7X6PNrNfz7Mjz9Oyzz8off/yxU/saha5xNpvNcmhoqPzAAw/I\nixcvlmVZlpctWyYvW7ZMlmVZ/vnnn+XAwEC5RYsWcsuWLeWgoCC5oqLC6r5GnvnYsWNyly5d5C5d\nusjJycnyv/71L8PMPG7cONnPz0+OjIysdWmUHs+zs/Ma+TnOyMiQw8PD5cjISHns2LHygQMH6t3X\nyDPr9Tzbmre6O+Os13OshKZvQiEiIvvods6ZiIisY5yJiAyIcSYiMiDGmYjIgBhncrnk5GRs2bKl\nxrZFixZh0qRJdd6/ffv2uHDhQr1rvvLKKzV+7tmzJwCgpKQEERERAIA9e/Zg2rRpAG59StjOnTud\nmp9ID4wzuVxqairWrl1bY9u6deswcuTIOu9/+2239bnzb03m5+fXuk+3bt2wePFiAMC2bduEeecj\nEcA4kwaGDh2KjRs34vr16wBuHd2eOXMG165dw+OPP46ePXvinXfeqXPfIUOGoGvXrkhOTsb69esB\nAH/6059QVVWFqKgojB49GkDdfyrIbDZjwIAB+O9//4vMzEy88cYbiI6Oxo4dO3D//fdb5rl06RLu\nv/9+3LhxwxW/PpFT+Nka5HJ+fn6IjY3Fpk2bMHDgQKxduxbDhg3DH//4R2zevBmtWrVCSkoKevbs\nibCwsBr7ZmVlwdfXF5cuXULv3r0xZMgQvPrqq3jrrbdqfDZFfUfb7dq1w8SJE+Hj44OZM2cCAHr3\n7o2NGzdi0KBBWLt2LYYOHYoGDRq45gkgcgKPnEkT1U9trFu3DkOHDkVYWBhCQkLg6+uLYcOG1fnp\nZmvXrsWjjz6Knj174vjx4zhw4IBTjy/f8UE448ePx8qVKwEA7777LsaOHevUukSuwjiTJgYOHIiv\nvvoK+/btQ2VlZa0jXVmWa207fvw4li5dig8//BAHDhxAhw4dcPHiRace/861e/TogZKSEpjNZty4\ncQOdOnVyal0iV2GcSRPNmzdHUlISxo4di5EjRyI+Ph6HDx/GsWPHcPHiRaxfvx4DBw6ssc+ZM2fg\n7+8PPz8/5Ofno6ioyHKbv78/Kisr7X78du3a4dy5czW2jRkzBk8//TTS0tKU/XJELsA4k2ZSU1Nx\n4MABpKamwmQyITMzE1OmTEH//v0xbtw4ywei3z7K7dWrF9q1a4ewsDAsWrQIffr0saw1ZcoUJCQk\nWF4QrH5kXNf3ffv2xZ49exAVFWW5smPkyJG4ePEiUlNTXfuLEzmBH3xEHmv16tXYtm2b5a+SEBkJ\nr9YgjzRlyhTk5+fj888/13sUojrxyJmIyIB4zpmIyIAYZyIiA2KciYgMiHEmIjIgxpmIyIAYZyIi\nA/p/fJgkSzip6OsAAAAASUVORK5CYII=\n"
      }
     ],
     "prompt_number": 22
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Plot the value of the European put in (volatility, strike) space."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "plt.figure()\n",
      "plt.contourf(sigma_vals, strike_vals, prices['eput'])\n",
      "plt.axis('tight')\n",
      "plt.colorbar()\n",
      "plt.title(\"European Put\")\n",
      "plt.xlabel(\"Volatility\")\n",
      "plt.ylabel(\"Strike Price\")"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "pyout",
       "prompt_number": 14,
       "text": [
        "&lt;matplotlib.text.Text at 0x106d34150&gt;"
       ]
      },
      {
       "output_type": "display_data",
       "png": "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\nQmCC\n"
      }
     ],
     "prompt_number": 14
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Plot the value of the Asian put in (volatility, strike) space."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "plt.figure()\n",
      "plt.contourf(sigma_vals, strike_vals, prices['aput'])\n",
      "plt.axis('tight')\n",
      "plt.colorbar()\n",
      "plt.title(\"Asian Put\")\n",
      "plt.xlabel(\"Volatility\")\n",
      "plt.ylabel(\"Strike Price\")"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "display_data",
       "png": "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\nAeyS/5wqC8i5AAAAAElFTkSuQmCC\n"
      }
     ],
     "prompt_number": 15
    }
   ],
   "metadata": {}
  }
 ]
}