{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Monte-Carlo Simulations" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "Note that Parsl is not effective if multiple CPU cores aren't available because Parsl's ability to execute tasks in parallel is depenedent on the availability multiple cores." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Cores available: 4\n" ] } ], "source": [ "import multiprocessing\n", "print('Cores available: {}'.format(multiprocessing.cpu_count()))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We'll be using the htex configuration for Parsl. Read more [here.]( https://github.com/Parsl/parsl/blob/master/parsl/configs/htex_local.py)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns; sns.set()\n", "%matplotlib inline\n", "\n", "import parsl\n", "import os\n", "from parsl.app.app import python_app, bash_app\n", "from parsl.providers import LocalProvider\n", "from parsl.channels import LocalChannel\n", "\n", "from parsl.config import Config\n", "from parsl.executors import HighThroughputExecutor\n", "\n", "config = Config(\n", " executors=[\n", " HighThroughputExecutor(\n", " label=\"htex_local\",\n", " cores_per_worker=1,\n", " provider=LocalProvider(\n", " channel=LocalChannel(),\n", " init_blocks=1,\n", " max_blocks=1,\n", " ),\n", " )\n", " ],\n", ")\n", "\n", "parsl.load(config)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let us work with a simple trading function that estimates the change in a stock if there is a volatility of 0.5% every day." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "'''\n", "Building a python app that generates a random percentage between 5 and -5,\n", "and then adjusts the stock price.\n", "'''\n", "\n", "@python_app\n", "def stock_price(price):\n", " import random\n", " percentage_change = 10*random.random()-5\n", " \n", " return price*(100+percentage_change)/100" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We run the same python app 100 times and then collect the final stock price. We repeat such a simulation for 1000 times and collect the final prices. Note: this may take a little while to complete, please be patient." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# Evaluating the final prices\n", "\n", "final_prices = []\n", "\n", "for _ in range(1000): ## A 1000 simulations\n", " \n", " original_price = 15\n", " for i in range(100): \n", " '''\n", " For each simulation, we simulate the stock price over 100 days\n", " '''\n", " original_price = stock_price(original_price)\n", " \n", " final_prices.append(original_price)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We now evaluate the AppFuture results." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "final_prices = [i.result() for i in final_prices]" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Mean Stock Price: 14.954417224126484\n", "95% Confidence Interval of Stock Price: (8.489963369529612, 25.346680877871822)\n" ] } ], "source": [ "print('Mean Stock Price: ', np.mean(final_prices))\n", "print('95% Confidence Interval of Stock Price: ', (np.percentile(final_prices,2.5),\n", " np.percentile(final_prices,97.5)))" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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q+tq21900ZeyaNF982d/9rjssMMDcsABB+aMMz6cr33tK01gNPx6yvfetmLFitx88+Ikyeabb5E3v/ntOeWU9+Xxj99r2NDo0ENf/ac1jIaaM2fOvbYNDZBuvnlx5syZm1Wr+nLqqadl/vyt/rR9wYJtVnvcYzW5lkoHAAAA6JkxY0ZWrVrVbLvqqiuzww4PyEEHvSQPe9gjcsklP0xf36rV9NAtAn3GGR/KrbfemqQbmXP99b/OrruWZh8PfOCOue222/KLX/w8SfLNb/5Htt12+2y33fa57323zY9/fEmS5Gtf+8qfpsdtu+12eeITn5xHP/oxOeus08flmHff/dG55JIf5o9//GNWrlyZY499S6666so89rF/ln//9/OSJNdc86u84hUvyooVy8dln8MZ7ylpAAAAAONijz0ek3e969hss809I2n23PMJOf/8z+WlLz0ws2bNysMe9oj86le/XG0f++773Nx22615zWtemenTu3Ezf/EXz8hznrN/kmSvvfbJG994VN73vg/mHe94d973vhOzfPmdmT9/q7zjHe9Okrz97cfnve99dz784VOz1VZb521ve0d+/etr/7SPI444Ki972UF5xjOelVJ2G9Mxl7JbDjjghXn1q/8mfX39efKTn5o993x8dt75QTnxxHflFa94Ufr7+/PWt75jva1flCTTRjLcawPZKck1S5YsW80wsJGbDJcuhA3Buc5UsNXznp3Zs2Zk8XkXTnQpsN75u85U4VxnqpgM5/pNN12X7bbbcUJrYMMa+p5Pnz4tCxdumSQ7J7l2pP2YkgYAAABAQ2AEAAAAQENgBAAAAEBDYAQAAACbrGnp7++b6CLYQMZznWqBEQAAAGyiZs+em1tvvTkrV949rmECk09/f3/uuOP2zJw5e1z6mzkuvQAAAACTzoIFi7Js2W255Zbfpa9v1USXw3o2c+bsLFiwaHz6GpdeAAAAgEln2rRpmTdv68ybt/VEl8JGRmAETKh58zfL3Dmbxp+i5StWZuntd050GQAAAGO2aXxLAzZac+fMzH5HXzDRZYyLC0/eP0snuggAAIBxYNFrAAAAABoCIwAAAAAaAiMAAAAAGgIjAAAAABoCIwAAAAAaAiMAAAAAGgIjAAAAABoCIwAAAAAaAiMAAAAAGgIjAAAAABoCIwAAAAAaAiMAAAAAGgIjAAAAABoz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snevzcuTXDSGfQAAAACwgY1lDaOvJ/l0ksuS/He6Ra//JclLkry/lPKLdAtinzoOdQIAAACwgYxlSlpqre9J8p4hm3+a5HFj6RcAAACAiTOWKWkAAAAAbIIERgAAAAA0BEYAAAAANARGAAAAADQERgAAAAA0BEYAAAAANARGAAAAADQERgAAAAA0BEYAAAAANARGAAAAADQERgAAAAA0BEYAAAAANARGAAAAADQERgAAAAA0BEYAAAAANARGAAAAADQERgAAAAA0BEYAAAAANARGAAAAADQERgAAAAA0BEYAAAAANARGAAAAADQERgAAAAA0BEYAAAAANARGAAAAADQERgAAAAA0BEYAAAAANARGAAAAADQERgAAAAA0BEYAAAAANARGAAAAADQERgAAAAA0BEYAAAAANARGAAAAADQERgAAAAA0BEYAAAAANARGAAAAADQERgAAAAA0BEYAAAAANARGAAAAADQERgAAAAA0BEYAAAAANARGAAAAADQERgAAAAA0BEYAAAAANARGAAAAADQERgAAAAA0BEYAAAAANGZOdAGwocybv1nmznHKAwAAwNr49syUMXfOzOx39AUTXca4uPDk/Se6BAAAADZhpqQBAAAA0BAYAQAAANAQGAEAAADQEBgBAAAA0BAYAQAAANAQGAEAAADQEBgBAAAA0BAYAQAAANAQGAEAAADQEBgBAAAA0BAYAQAAANAQGAEAAADQEBgBAAAA0BAYAQAAANAQGAEAAADQEBgBAAAA0BAYAQAAANCYOZYnl1L2S3Jski2SfK3WelQp5elJ3pdksyTn1lrfOuYqAQAAANhgRj3CqJTyoCSnJ9k/ySOTPKaU8qwkH+tte2iSPXvbAAAAANhIjGVK2vPTjSD6Ta317iQHJfljkqtrrdfUWlcmOSfJgeNQJwAAAAAbyFimpO2S5K5SyteSbJfkwiQ/T3LjoDY3JtlhDPsAAAAAYAMbS2A0M8mTkjwlybIkF6QbYTRU37p0unDhlmMo6R6LFs0bl34AAFZnfXze8BmGqcK5zlThXGdjNZbA6KYk36i1Lk6SUsoX0k0/WzWozfZJbliXTpcsWZa+vv4xlNX9Qi5evHRMfbDp8YcagPE23p83fIZhqnCuM1U415kMpk+fNqrBOWMJjL6U5OOllK2TLE3yrCSfS/JPpZRdklyT5OB0i2ADAAAA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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "'''\n", "Plotting the historgram of the final stock prices\n", "'''\n", "\n", "plt.figure(figsize=(20,10))\n", "plt.hist(final_prices, bins=20)\n", "plt.title('Distribution of the Stock Prices', fontsize=20)\n", "plt.axvline(15, color='red', label='Initial Stock Price')\n", "plt.xlabel('Stock Price', fontsize=15)\n", "plt.legend()\n", "plt.show()" ] } ], "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.7.4" } }, "nbformat": 4, "nbformat_minor": 2 }