[
  {
    "path": "Options Calculator with Binomial model.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Options Calculator with Binomial model\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Binomial model is arguably the simplest techniques used for option pricing. In this calculator, the options price will be calculated by two binomial-tree methods,Cox-Ross-Rubinstein and Jarrow-Rudd (the equal-probability model). \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Each of the approaches has its advantages and disadvantages for pricing different types of options. However, they all involve a similar tree-step process.\\n\",\n    \"\\n\",\n    \"* There are only two possible prices for the underlying asset on the next day.\\n\",\n    \"* The two possible prices are the up-price and down-price\\n\",\n    \"* No dividends are paid out during the option’s life.\\n\",\n    \"* The risk-free rate is constant throughout the life of the option\\n\",\n    \"* There are no transaction and commissions costs in buying the option.\\n\",\n    \"* Investors are risk neutral\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### ** All trees are built from four parameters (u, d, p and q). \\n\",\n    \"- The parameters u and d are how much the underlying will go up or down in each discrete time. \\n\",\n    \"- The parameters p and q are the probabilities for the price to go up and down respectively. Moreover, assume p+q=1.\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"#### ** Note that the model assumes that the price of the equity underlying the option follows a random walk.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### Input variables:\\n\",\n    \"  * Underlying price (per share): S; \\n\",\n    \"  * Strike price of the option (per share): K;\\n\",\n    \"  * Time to maturity (years): T;\\n\",\n    \"  * Continuously compounding risk-free interest rate: r;\\n\",\n    \"  * Volatility: sigma;\\n\",\n    \"  * Number of binomial steps: N\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {\n    \"collapsed\": true\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"## import certain packages\\n\",\n    \"import math\\n\",\n    \"from datetime import datetime, date\\n\",\n    \"import numpy as np\\n\",\n    \"import matplotlib.pyplot as plt\\n\",\n    \"import pandas as pd\\n\",\n    \"from pandas import DataFrame\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {\n    \"collapsed\": true\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"## define Cox_Ross_Rubinstein binomial model\\n\",\n    \"def Cox_Ross_Rubinstein_Tree (S,K,T,r,sigma,N, Option_type):\\n\",\n    \"    \\n\",\n    \"    # Underlying price (per share): S; \\n\",\n    \"    # Strike price of the option (per share): K;\\n\",\n    \"    # Time to maturity (years): T;\\n\",\n    \"    # Continuously compounding risk-free interest rate: r;\\n\",\n    \"    # Volatility: sigma;\\n\",\n    \"    # Number of binomial steps: N;\\n\",\n    \"\\n\",\n    \"        # The factor by which the price rises (assuming it rises) = u ;\\n\",\n    \"        # The factor by which the price falls (assuming it falls) = d ;\\n\",\n    \"        # The probability of a price rise = pu ;\\n\",\n    \"        # The probability of a price fall = pd ;\\n\",\n    \"        # discount rate = disc ;\\n\",\n    \"    \\n\",\n    \"    u=math.exp(sigma*math.sqrt(T/N));\\n\",\n    \"    d=math.exp(-sigma*math.sqrt(T/N));\\n\",\n    \"    pu=((math.exp(r*T/N))-d)/(u-d);\\n\",\n    \"    pd=1-pu;\\n\",\n    \"    disc=math.exp(-r*T/N);\\n\",\n    \"\\n\",\n    \"    St = [0] * (N+1)\\n\",\n    \"    C = [0] * (N+1)\\n\",\n    \"    \\n\",\n    \"    St[0]=S*d**N;\\n\",\n    \"    \\n\",\n    \"    for j in range(1, N+1): \\n\",\n    \"        St[j] = St[j-1] * u/d;\\n\",\n    \"    \\n\",\n    \"    for j in range(1, N+1):\\n\",\n    \"        if Option_type == 'P':\\n\",\n    \"            C[j] = max(K-St[j],0);\\n\",\n    \"        elif Option_type == 'C':\\n\",\n    \"            C[j] = max(St[j]-K,0);\\n\",\n    \"    \\n\",\n    \"    for i in range(N, 0, -1):\\n\",\n    \"        for j in range(0, i):\\n\",\n    \"            C[j] = disc*(pu*C[j+1]+pd*C[j]);\\n\",\n    \"            \\n\",\n    \"    return C[0]\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"## define Jarrow_Rudd binomial model    \\n\",\n    \"def Jarrow_Rudd_Tree (S,K,T,r,sigma,N, Option_type):\\n\",\n    \"\\n\",\n    \"    # Underlying price (per share): S; \\n\",\n    \"    # Strike price of the option (per share): K;\\n\",\n    \"    # Time to maturity (years): T;\\n\",\n    \"    # Continuously compounding risk-free interest rate: r;\\n\",\n    \"    # Volatility: sigma;\\n\",\n    \"    # Steps: N;\\n\",\n    \"    \\n\",\n    \"        # The factor by which the price rises (assuming it rises) = u ;\\n\",\n    \"        # The factor by which the price falls (assuming it falls) = d ;\\n\",\n    \"        # The probability of a price rise = pu ;\\n\",\n    \"        # The probability of a price fall = pd ;\\n\",\n    \"        # discount rate = disc ;\\n\",\n    \"        \\n\",\n    \"    u=math.exp((r-(sigma**2/2))*T/N+sigma*math.sqrt(T/N));\\n\",\n    \"    d=math.exp((r-(sigma**2/2))*T/N-sigma*math.sqrt(T/N));\\n\",\n    \"    pu=0.5;\\n\",\n    \"    pd=1-pu;\\n\",\n    \"    disc=math.exp(-r*T/N);\\n\",\n    \"\\n\",\n    \"    St = [0] * (N+1)\\n\",\n    \"    C = [0] * (N+1)\\n\",\n    \"    \\n\",\n    \"    St[0]=S*d**N;\\n\",\n    \"    \\n\",\n    \"    for j in range(1, N+1): \\n\",\n    \"        St[j] = St[j-1] * u/d;\\n\",\n    \"    \\n\",\n    \"    for j in range(1, N+1):\\n\",\n    \"        if Option_type == 'P':\\n\",\n    \"            C[j] = max(K-St[j],0);\\n\",\n    \"        elif Option_type == 'C':\\n\",\n    \"            C[j] = max(St[j]-K,0);\\n\",\n    \"    \\n\",\n    \"    for i in range(N, 0, -1):\\n\",\n    \"        for j in range(0, i):\\n\",\n    \"            C[j] = disc*(pu*C[j+1]+pd*C[j]);\\n\",\n    \"            \\n\",\n    \"    return C[0]\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"##### Input\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 33,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"What is the current stock price? 100\\n\",\n      \"What is the strike price? 110\\n\",\n      \"What is the expiration date of the options? (mm-dd-yyyy) 3-1-2020\\n\",\n      \"What is the continuously compounding risk-free interest rate in percentage(%)? 5\\n\",\n      \"What is the volatility in percentage(%)? 30\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"## input the current stock price and check if it is a number.\\n\",\n    \"S = input(\\\"What is the current stock price? \\\");\\n\",\n    \"while True:\\n\",\n    \"    try:\\n\",\n    \"        S = float(S)\\n\",\n    \"        break\\n\",\n    \"    except:\\n\",\n    \"        print(\\\"The current stock price has to be a NUMBER.\\\")\\n\",\n    \"        S = input(\\\"What is the current stock price? \\\")\\n\",\n    \"\\n\",\n    \"## input the strike price and check if it is a number.\\n\",\n    \"K = input(\\\"What is the strike price? \\\");\\n\",\n    \"while True:\\n\",\n    \"    try:\\n\",\n    \"        K = float(K)\\n\",\n    \"        break\\n\",\n    \"    except:\\n\",\n    \"        print(\\\"The the strike price has to be a NUMBER.\\\")\\n\",\n    \"        K = input(\\\"What is the strike price? \\\")\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"## input the expiration_date and calculate the days between today and the expiration date.\\n\",\n    \"while True:\\n\",\n    \"    expiration_date = input(\\\"What is the expiration date of the options? (mm-dd-yyyy) \\\")\\n\",\n    \"    try:\\n\",\n    \"        expiration_date = datetime.strptime(expiration_date, \\\"%m-%d-%Y\\\")\\n\",\n    \"    except ValueError as e:\\n\",\n    \"        print(\\\"error: %s\\\\nTry again.\\\" % (e,))\\n\",\n    \"    else:\\n\",\n    \"        break\\n\",\n    \"T = (expiration_date - datetime.utcnow()).days / 365\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"## input the continuously compounding risk-free interest rate and check if it is a number.\\n\",\n    \"r = input(\\\"What is the continuously compounding risk-free interest rate in percentage(%)? \\\");\\n\",\n    \"while True:\\n\",\n    \"    try:\\n\",\n    \"        r = float(r)\\n\",\n    \"        break\\n\",\n    \"    except:\\n\",\n    \"        print(\\\"The continuously compounding risk-free interest rate has to be a NUMBER.\\\")\\n\",\n    \"        r = input(\\\"What is the continuously compounding risk-free interest rate in percentage(%)? \\\")\\n\",\n    \"        \\n\",\n    \"\\n\",\n    \"## input the volatility and check if it is a number.\\n\",\n    \"sigma = input(\\\"What is the volatility in percentage(%)? \\\"); \\n\",\n    \"while True:\\n\",\n    \"    try:\\n\",\n    \"        sigma = float(sigma)\\n\",\n    \"        if sigma > 100 or sigma < 0:\\n\",\n    \"            print ( \\\"The range of sigma has to be in [0,100].\\\")\\n\",\n    \"            sigma = input(\\\"What is the volatility in percentage(%)? \\\")\\n\",\n    \"        break\\n\",\n    \"    except:\\n\",\n    \"        print(\\\"The volatility has to be a NUMBER.\\\")\\n\",\n    \"        sigma = input(\\\"What is the volatility in percentage(%)? \\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 34,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style>\\n\",\n       \"    .dataframe thead tr:only-child th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: left;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Symbol</th>\\n\",\n       \"      <th>Input</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Underlying price</th>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>100.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Strike price</th>\\n\",\n       \"      <td>K</td>\\n\",\n       \"      <td>110.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Time to maturity</th>\\n\",\n       \"      <td>T</td>\\n\",\n       \"      <td>2.221918</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Risk-free interest rate</th>\\n\",\n       \"      <td>r</td>\\n\",\n       \"      <td>5.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Volatility</th>\\n\",\n       \"      <td>sigma</td>\\n\",\n       \"      <td>30.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"                        Symbol       Input\\n\",\n       \"Underlying price             S  100.000000\\n\",\n       \"Strike price                 K  110.000000\\n\",\n       \"Time to maturity             T    2.221918\\n\",\n       \"Risk-free interest rate      r    5.000000\\n\",\n       \"Volatility               sigma   30.000000\"\n      ]\n     },\n     \"execution_count\": 34,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"data = {'Symbol': ['S', 'K', 'T', 'r', 'sigma'],\\n\",\n    \"        'Input': [S, K, T , r , sigma]}\\n\",\n    \"input_frame = DataFrame(data, columns=['Symbol', 'Input'], \\n\",\n    \"                   index=['Underlying price', 'Strike price', 'Time to maturity', 'Risk-free interest rate', 'Volatility'])\\n\",\n    \"input_frame\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"##### Output\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 35,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style>\\n\",\n       \"    .dataframe thead tr:only-child th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: left;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Option</th>\\n\",\n       \"      <th>Price</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Cox-Ross-Rubinstein</th>\\n\",\n       \"      <td>Call</td>\\n\",\n       \"      <td>18.350952</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Cox-Ross-Rubinstein</th>\\n\",\n       \"      <td>Put</td>\\n\",\n       \"      <td>16.784775</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Jarrow-Rudd</th>\\n\",\n       \"      <td>Call</td>\\n\",\n       \"      <td>18.343573</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Jarrow-Rudd</th>\\n\",\n       \"      <td>Put</td>\\n\",\n       \"      <td>16.777730</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"                    Option      Price\\n\",\n       \"Cox-Ross-Rubinstein   Call  18.350952\\n\",\n       \"Cox-Ross-Rubinstein    Put  16.784775\\n\",\n       \"Jarrow-Rudd           Call  18.343573\\n\",\n       \"Jarrow-Rudd            Put  16.777730\"\n      ]\n     },\n     \"execution_count\": 35,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"r = r/100; sigma = sigma/100;\\n\",\n    \"binomial_model_pricing = {'Option' : ['Call', 'Put', 'Call', 'Put'],\\n\",\n    \"                          'Price': [Cox_Ross_Rubinstein_Tree(S, K, T, r, sigma,1000,'C'), Cox_Ross_Rubinstein_Tree(S, K, T, r, sigma,1000,'P'),\\n\",\n    \"                                     Jarrow_Rudd_Tree(S, K, T, r, sigma,1000,'C'), Jarrow_Rudd_Tree(S, K, T, r, sigma,1000,'P')]}\\n\",\n    \"binomial_model_pricing_frame = DataFrame(binomial_model_pricing, columns=[ 'Option', 'Price'], \\n\",\n    \"                   index = ['Cox-Ross-Rubinstein','Cox-Ross-Rubinstein', 'Jarrow-Rudd', 'Jarrow-Rudd'])                                        \\n\",\n    \"binomial_model_pricing_frame\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"##### Plot call / put options price with different steps\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 36,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x119d9eeb8>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"## call option with different steps \\n\",\n    \"runs1 = list(range(50,5000,50))\\n\",\n    \"CRR1 = []\\n\",\n    \"JR1 = []\\n\",\n    \"\\n\",\n    \"for i in runs1:\\n\",\n    \"    CRR1.append(Cox_Ross_Rubinstein_Tree(S, K, T, r, sigma,i ,'C'))\\n\",\n    \"    JR1.append(Jarrow_Rudd_Tree(S, K, T, r, sigma,i ,'C'))\\n\",\n    \"\\n\",\n    \"plt.plot(runs1, CRR1, label='Cox_Ross_Rubinstein')\\n\",\n    \"plt.plot(runs1, JR1, label='Jarrow_Rudd')\\n\",\n    \"plt.legend(loc='upper right')\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 37,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x1197ceda0>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"## put option with different steps \\n\",\n    \"runs2 = list(range(50,5000,50))\\n\",\n    \"CRR2 = []\\n\",\n    \"JR2 = []\\n\",\n    \"\\n\",\n    \"for i in runs2:\\n\",\n    \"    CRR2.append(Cox_Ross_Rubinstein_Tree(S, K, T, r, sigma,i ,'P'))\\n\",\n    \"    JR2.append(Jarrow_Rudd_Tree(S, 110, T, r, sigma,i ,'P'))\\n\",\n    \"\\n\",\n    \"plt.plot(runs2, CRR2, label='Cox_Ross_Rubinstein')\\n\",\n    \"plt.plot(runs2, JR2, label='Jarrow_Rudd')\\n\",\n    \"plt.legend(loc='upper right')\\n\",\n    \"plt.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"collapsed\": true\n   },\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.6.1\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "Options Calculator with Black Scholes model.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Options Calculator with Black Scholes model\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"In order to know more information about a stock option, this options calculator with Black-Scholes Model, the first widely used model for option pricing, can provide the call/put option price, d1, d2, and Greek letters. It can assist investors in establishing an option trading strategy. \"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### Certain assumptions must be made due to this calculator is modeled by Black-Scholes model. \\n\",\n    \"  * It works on European options that can only be exercised at expiration.\\n\",\n    \"  * No dividends are paid out during the option’s life.\\n\",\n    \"  * Stock markets are efficient. \\n\",\n    \"  * There are no transaction and commissions costs in buying the option.\\n\",\n    \"  * The risk-free rate and volatility of the underlying are known and constant.\\n\",\n    \"  * The returns on the underlying are normally distributed.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### Input variables:\\n\",\n    \"  * Underlying price (per share): S; \\n\",\n    \"  * Strike price of the option (per share): K;\\n\",\n    \"  * Time to maturity (years): T;\\n\",\n    \"  * Continuously compounding risk-free interest rate: r;\\n\",\n    \"  * Volatility: sigma;\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### Output Variables:\\n\",\n    \"The cumulative density function of normal distribution N(.)\\n\",\n    \"- N(d2) is the risk-adjusted probability that the option will be exercised.\\n\",\n    \"- N(d1) is the probability of receiving the stock at expiration of the option.\\n\",\n    \"\\n\",\n    \"The Greek letters\\n\",\n    \"- Delta: The rate of change of the option price respected to the rate of the change of underlying asset price. \\n\",\n    \"- Gamma: The rate of change of delta respected to the rate of change of underlying asset price.\\n\",\n    \"- Vega: The rate of change of the option price respected to the volatility of the underlying asset. \\n\",\n    \"- Rho: The rate of the option price respected to the interest rate. \\n\",\n    \"- Theta: The rate of change of the option price respected to the passage of time.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"## import certain packages\\n\",\n    \"from math import log, sqrt, pi, exp\\n\",\n    \"from scipy.stats import norm\\n\",\n    \"from datetime import datetime, date\\n\",\n    \"import numpy as np\\n\",\n    \"import pandas as pd\\n\",\n    \"from pandas import DataFrame\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# Underlying price (per share): S; \\n\",\n    \"# Strike price of the option (per share): K;\\n\",\n    \"# Time to maturity (years): T;\\n\",\n    \"# Continuously compounding risk-free interest rate: r;\\n\",\n    \"# Volatility: sigma;\\n\",\n    \"\\n\",\n    \"## define two functions, d1 and d2 in Black-Scholes model\\n\",\n    \"def d1(S,K,T,r,sigma):\\n\",\n    \"    return(log(S/K)+(r+sigma**2/2.)*T)/sigma*sqrt(T)\\n\",\n    \"def d2(S,K,T,r,sigma):\\n\",\n    \"    return d1(S,K,T,r,sigma)-sigma*sqrt(T)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"## define the call options price function\\n\",\n    \"def bs_call(S,K,T,r,sigma):\\n\",\n    \"    return S*norm.cdf(d1(S,K,T,r,sigma))-K*exp(-r*T)*norm.cdf(d2(S,K,T,r,sigma))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"## define the put options price function\\n\",\n    \"def bs_put(S,K,T,r,sigma):\\n\",\n    \"    return K*exp(-r*T)-S+bs_call(S,K,T,r,sigma)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"## define the Call_Greeks of an option\\n\",\n    \"def call_delta(S,K,T,r,sigma):\\n\",\n    \"    return norm.cdf(d1(S,K,T,r,sigma))\\n\",\n    \"def call_gamma(S,K,T,r,sigma):\\n\",\n    \"    return norm.pdf(d1(S,K,T,r,sigma))/(S*sigma*sqrt(T))\\n\",\n    \"def call_vega(S,K,T,r,sigma):\\n\",\n    \"    return 0.01*(S*norm.pdf(d1(S,K,T,r,sigma))*sqrt(T))\\n\",\n    \"def call_theta(S,K,T,r,sigma):\\n\",\n    \"    return 0.01*(-(S*norm.pdf(d1(S,K,T,r,sigma))*sigma)/(2*sqrt(T)) - r*K*exp(-r*T)*norm.cdf(d2(S,K,T,r,sigma)))\\n\",\n    \"def call_rho(S,K,T,r,sigma):\\n\",\n    \"    return 0.01*(K*T*exp(-r*T)*norm.cdf(d2(S,K,T,r,sigma)))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"## define the Put_Greeks of an option\\n\",\n    \"def put_delta(S,K,T,r,sigma):\\n\",\n    \"    return -norm.cdf(-d1(S,K,T,r,sigma))\\n\",\n    \"def put_gamma(S,K,T,r,sigma):\\n\",\n    \"    return norm.pdf(d1(S,K,T,r,sigma))/(S*sigma*sqrt(T))\\n\",\n    \"def put_vega(S,K,T,r,sigma):\\n\",\n    \"    return 0.01*(S*norm.pdf(d1(S,K,T,r,sigma))*sqrt(T))\\n\",\n    \"def put_theta(S,K,T,r,sigma):\\n\",\n    \"    return 0.01*(-(S*norm.pdf(d1(S,K,T,r,sigma))*sigma)/(2*sqrt(T)) + r*K*exp(-r*T)*norm.cdf(-d2(S,K,T,r,sigma)))\\n\",\n    \"def put_rho(S,K,T,r,sigma):\\n\",\n    \"    return 0.01*(-K*T*exp(-r*T)*norm.cdf(-d2(S,K,T,r,sigma)))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"###### Input \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"What is the current stock price? 100\\n\",\n      \"What is the strike price? 100\\n\",\n      \"What is the expiration date of the options? (mm-dd-yyyy) 02-03-2019\\n\",\n      \"What is the continuously compounding risk-free interest rate in percentage(%)? 20\\n\",\n      \"What is the volatility in percentage(%)? 20\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"## input the current stock price and check if it is a number.\\n\",\n    \"S = input(\\\"What is the current stock price? \\\");\\n\",\n    \"while True:\\n\",\n    \"    try:\\n\",\n    \"        S = float(S)\\n\",\n    \"        break\\n\",\n    \"    except:\\n\",\n    \"        print(\\\"The current stock price has to be a NUMBER.\\\")\\n\",\n    \"        S = input(\\\"What is the current stock price? \\\")\\n\",\n    \"\\n\",\n    \"## input the strike price and check if it is a number.\\n\",\n    \"K = input(\\\"What is the strike price? \\\");\\n\",\n    \"while True:\\n\",\n    \"    try:\\n\",\n    \"        K = float(K)\\n\",\n    \"        break\\n\",\n    \"    except:\\n\",\n    \"        print(\\\"The the strike price has to be a NUMBER.\\\")\\n\",\n    \"        K = input(\\\"What is the strike price? \\\")\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"## input the expiration_date and calculate the days between today and the expiration date.\\n\",\n    \"while True:\\n\",\n    \"    expiration_date = input(\\\"What is the expiration date of the options? (mm-dd-yyyy) \\\")\\n\",\n    \"    try:\\n\",\n    \"        expiration_date = datetime.strptime(expiration_date, \\\"%m-%d-%Y\\\")\\n\",\n    \"    except ValueError as e:\\n\",\n    \"        print(\\\"error: %s\\\\nTry again.\\\" % (e,))\\n\",\n    \"    else:\\n\",\n    \"        break\\n\",\n    \"T = (expiration_date - datetime.utcnow()).days / 365\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"## input the continuously compounding risk-free interest rate and check if it is a number.\\n\",\n    \"r = input(\\\"What is the continuously compounding risk-free interest rate in percentage(%)? \\\");\\n\",\n    \"while True:\\n\",\n    \"    try:\\n\",\n    \"        r = float(r)\\n\",\n    \"        break\\n\",\n    \"    except:\\n\",\n    \"        print(\\\"The continuously compounding risk-free interest rate has to be a NUMBER.\\\")\\n\",\n    \"        r = input(\\\"What is the continuously compounding risk-free interest rate in percentage(%)? \\\")\\n\",\n    \"        \\n\",\n    \"\\n\",\n    \"## input the volatility and check if it is a number.\\n\",\n    \"sigma = input(\\\"What is the volatility in percentage(%)? \\\"); \\n\",\n    \"while True:\\n\",\n    \"    try:\\n\",\n    \"        sigma = float(sigma)\\n\",\n    \"        if sigma > 100 or sigma < 0:\\n\",\n    \"            print ( \\\"The range of sigma has to be in [0,100].\\\")\\n\",\n    \"            sigma = input(\\\"What is the volatility in percentage(%)? \\\")\\n\",\n    \"        break\\n\",\n    \"    except:\\n\",\n    \"        print(\\\"The volatility has to be a NUMBER.\\\")\\n\",\n    \"        sigma = input(\\\"What is the volatility in percentage(%)? \\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Symbol</th>\\n\",\n       \"      <th>Input</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Underlying price</th>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>100.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Strike price</th>\\n\",\n       \"      <td>K</td>\\n\",\n       \"      <td>100.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Time to maturity</th>\\n\",\n       \"      <td>T</td>\\n\",\n       \"      <td>0.128767</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Risk-free interest rate</th>\\n\",\n       \"      <td>r</td>\\n\",\n       \"      <td>20.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Volatility</th>\\n\",\n       \"      <td>sigma</td>\\n\",\n       \"      <td>20.000000</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"                        Symbol       Input\\n\",\n       \"Underlying price             S  100.000000\\n\",\n       \"Strike price                 K  100.000000\\n\",\n       \"Time to maturity             T    0.128767\\n\",\n       \"Risk-free interest rate      r   20.000000\\n\",\n       \"Volatility               sigma   20.000000\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"## make a DataFrame of these inputs\\n\",\n    \"\\n\",\n    \"data = {'Symbol': ['S', 'K', 'T', 'r', 'sigma'],\\n\",\n    \"        'Input': [S, K, T , r , sigma]}\\n\",\n    \"input_frame = DataFrame(data, columns=['Symbol', 'Input'], \\n\",\n    \"                   index=['Underlying price', 'Strike price', 'Time to maturity', 'Risk-free interest rate', 'Volatility'])\\n\",\n    \"input_frame\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"###### Output\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Call</th>\\n\",\n       \"      <th>Put</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Price</th>\\n\",\n       \"      <td>4.112199</td>\\n\",\n       \"      <td>1.569736</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>delta</th>\\n\",\n       \"      <td>0.520269</td>\\n\",\n       \"      <td>-0.479731</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>gamma</th>\\n\",\n       \"      <td>0.055516</td>\\n\",\n       \"      <td>0.055516</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>vega</th>\\n\",\n       \"      <td>0.142972</td>\\n\",\n       \"      <td>0.142972</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>rho</th>\\n\",\n       \"      <td>0.061698</td>\\n\",\n       \"      <td>-0.063795</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>theta</th>\\n\",\n       \"      <td>-0.206861</td>\\n\",\n       \"      <td>-0.011946</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"           Call       Put\\n\",\n       \"Price  4.112199  1.569736\\n\",\n       \"delta  0.520269 -0.479731\\n\",\n       \"gamma  0.055516  0.055516\\n\",\n       \"vega   0.142972  0.142972\\n\",\n       \"rho    0.061698 -0.063795\\n\",\n       \"theta -0.206861 -0.011946\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"## calculate the call / put option price and the greeks of the call / put option\\n\",\n    \"r = r/100; sigma = sigma/100;\\n\",\n    \"price_and_greeks = {'Call' : [bs_call(S,K,T,r,sigma), call_delta(S,K,T,r,sigma), call_gamma(S,K,T,r,sigma),call_vega(S,K,T,r,sigma), call_rho(S,K,T,r,sigma), call_theta(S,K,T,r,sigma)],\\n\",\n    \"                    'Put' : [bs_put(S,K,T,r,sigma), put_delta(S,K,T,r,sigma), put_gamma(S,K,T,r,sigma),put_vega(S,K,T,r,sigma), put_rho(S,K,T,r,sigma), put_theta(S,K,T,r,sigma)]}\\n\",\n    \"price_and_greeks_frame = DataFrame(price_and_greeks, columns=['Call','Put'], index=['Price', 'delta', 'gamma','vega','rho','theta'])\\n\",\n    \"price_and_greeks_frame\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### Implied volatility\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Implied volatility (IV) is “implying” the volatility of the stock will be in the future, based on price changes in an option. \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Put or Call option? (P/C)  P\\n\",\n      \"What is the option price? 8\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"## input a put or call option price\\n\",\n    \"\\n\",\n    \"option = input (\\\"Put or Call option? (P/C)  \\\")\\n\",\n    \"while option != 'P' and option !='C' :\\n\",\n    \"    print (\\\"error: this option does not match the format (P/C) \\\\nTry again.\\\")\\n\",\n    \"    option = input (\\\"Put or Call option? (P/C)  \\\")\\n\",\n    \"\\n\",\n    \"Price = input(\\\"What is the option price? \\\");\\n\",\n    \"while True:\\n\",\n    \"    try:\\n\",\n    \"        Price = float(Price)\\n\",\n    \"        break\\n\",\n    \"    except:\\n\",\n    \"        print(\\\"The the option price has to be a NUMBER.\\\")\\n\",\n    \"        Price = input(\\\"What is the option price? \\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[['Price' 'S' 'K' 'T' 'r']\\n\",\n      \" ['8.0' '100.0' '100.0' '0.12876712328767123' '0.2']]\\n\",\n      \"The implied volatility is 66.70000000000005 %.\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"## to calculate the volatility of a put/call option\\n\",\n    \"\\n\",\n    \"def implied_volatility(Price,S,K,T,r):\\n\",\n    \"    sigma = 0.001\\n\",\n    \"    print (np.array([['Price', 'S', 'K', 'T', 'r'], [Price, S, K, T, r]]))\\n\",\n    \"    if option == 'C':\\n\",\n    \"        while sigma < 1:\\n\",\n    \"            Price_implied = S*norm.cdf(d1(S,K,T,r,sigma))-K*exp(-r*T)*norm.cdf(d2(S,K,T,r,sigma))\\n\",\n    \"            if Price-(Price_implied) < 0.001:\\n\",\n    \"                return sigma\\n\",\n    \"            sigma += 0.001\\n\",\n    \"        return \\\"It could not find the right volatility of the call option.\\\"\\n\",\n    \"    else:\\n\",\n    \"        while sigma < 1:\\n\",\n    \"            Price_implied = K*exp(-r*T)-S+bs_call(S,K,T,r,sigma)\\n\",\n    \"            if Price-(Price_implied) < 0.001:\\n\",\n    \"                return sigma\\n\",\n    \"            sigma += 0.001\\n\",\n    \"        return \\\"It could not find the right volatility of the put option.\\\"\\n\",\n    \"    return\\n\",\n    \"\\n\",\n    \"print (\\\"The implied volatility is \\\" + str (100* implied_volatility(Price,S,K,T,r)) + \\\" %.\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.6.6\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "README.md",
    "content": "# Options Calculator \n\nOptions calculator with Black-Scholes model and binomial model\n\n## Project Statement:\nAs other financial products, an option should be completely understood what it is, why the price is changed overnight, and which information should be understood before trading one option. \n\nOptions are contracts that give investors the right to buy or sell an asset at a strike price at or before the maturity day. With options, it is possible to profit whether the stock goes up, down or sideways in the future. Moreover, options can be used to cut the losses and protect the gains. However, if an investor does not completely understand option trading, this lack of knowledge may cause a huge loss. \n\n## 1. Black-Scholes Model\n\nIn order to know more information about a stock option, this options calculator with Black-Scholes Model, the first widely used model for option pricing, can provide the call/put option price, d1, d2, and Greek letters. It can assist investors in establishing an option trading strategy. \n\n\nCertain assumptions must be made due to this calculator is modeled by Black-Scholes model. \n* It works on European options that can only be exercised at expiration.\n* No dividends are paid out during the option’s life.\n* Stock markets are efficient. The movement of the markets cannot be predicted, and there is continuous trading\n* There are no transaction and commissions costs in buying the option.\n* The risk-free rate and volatility of the underlying are known and constant.\n* The returns on the underlying are normally distributed.\n\n#### Input variables:\n* Underlying price (per share)\n* Strike price of the option (per share)\n* Time to maturity (years)\n* Continuously compounding risk-free interest rate (%)\n* Volatility (%)\n\n#### Output Variables:\n* d1: N(d2), the cumulative density function of normal distribution, is the risk-adjusted probability that the option will be exercised.\n* d2: N(d1), the cumulative density function of normal distribution, is the probability of receiving the stock at expiration of the option.\n\n* The Greek letters, including delta, gamma, vega, rho, and theta, represent the sensitivities of the option price to a single –unit change in the value of either a state variable or a parameter. \n  - The delta of an option is defined as the rate of change of the option price respected to the rate of the change of underlying asset price. \n  -\tThe gamma is defined as the rate of change of delta respected to the rate of change of underlying asset price.\n  -\tThe vega of an option is defined as the rate of change of the option price respected to the volatility of the underlying asset. \n  -\tThe rho of an option is defined as the rate of the option price respected to the interest rate. \n  -\tThe theta of an option is defined as the rate of change of the option price respected to the passage of time.\n\n## 2. Binomial Model\nBinomial model is arguably the simplest techniques used for option pricing. In this calculator, the options price will be calculated by two binomial-tree methods,Cox-Ross-Rubinstein and Jarrow-Rudd (the equal-probability model). \n\nEach of the approaches has its advantages and disadvantages for pricing different types of options. However, they all involve a similar tree-step process.\n\n* There are only two possible prices for the underlying asset on the next day.\n* The two possible prices are the up-price and down-price\n* No dividends are paid out during the option’s life.\n* The risk-free rate is constant throughout the life of the option\n* There are no transaction and commissions costs in buying the option.\n* Investors are risk neutral\n\n#### ** All trees are built from four parameters (u, d, p and q). \n- The parameters u and d are how much the underlying will go up or down in each discrete time. \n- The parameters p and q are the probabilities for the price to go up and down respectively. Moreover, assume p+q=1.\n\n\n#### ** Note that the model assumes that the price of the equity underlying the option follows a random walk.\n\n\n## Python Resources:\n\n* Pandas: Pandas is a Python package for data analysis. In particular, it offers data structures and operations for manipulating numerical tables and time series. \n\n* Numpy: Numpy is a fundamental package to support for multi-dimensional arrays and matrices. It is not only used for scientific computing, but also for multi-dimensional container of generic data.\n\n* Math: Math provides access to the mathematical functions, such as pi, log, exp, sqrt, and other mathematical functions.  \n\n* Statistics: Statistics provides access to the statistics functions, such as norm_pdf, norm_cdf, mean, stdev, and other statistics functions.\n\n* matplotlib.pyplot\n\n* datetime\n"
  }
]