Skip to content

Commit

Permalink
12/27
Browse files Browse the repository at this point in the history
  • Loading branch information
cxh1996108 committed Dec 27, 2021
1 parent 3d1cfc5 commit c03cf64
Show file tree
Hide file tree
Showing 29 changed files with 2,044 additions and 0 deletions.
227 changes: 227 additions & 0 deletions .ipynb_checkpoints/Black-Scholes Calculator-checkpoint.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,227 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Black-Scholes Calculator"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"import scipy\n",
"m = 6\n",
"n = 61\n",
"S0 = 70\n",
"S1 = 130\n",
"K = 100\n",
"r = 0.12\n",
"T = 1.0\n",
"sigma = 0.10"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\ProgramData\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:6: RuntimeWarning: divide by zero encountered in true_divide\n",
" \n",
"C:\\ProgramData\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:6: RuntimeWarning: invalid value encountered in true_divide\n",
" \n"
]
}
],
"source": [
"time = scipy.linspace(T, 0.0, m)\n",
"S = scipy.linspace(S0, S1, n)\n",
"logSoverK = scipy.log(S/K)\n",
"n12 = (r + sigma **2/2) * (T - time)\n",
"numerd1 = logSoverK[scipy.newaxis, :] + n12[:, scipy.newaxis]\n",
"d1 = numerd1 / (sigma * scipy.sqrt(T - time)[:, scipy.newaxis])"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\ProgramData\\Anaconda3\\lib\\site-packages\\scipy\\stats\\_distn_infrastructure.py:879: RuntimeWarning: invalid value encountered in greater\n",
" return (self.a < x) & (x < self.b)\n",
"C:\\ProgramData\\Anaconda3\\lib\\site-packages\\scipy\\stats\\_distn_infrastructure.py:879: RuntimeWarning: invalid value encountered in less\n",
" return (self.a < x) & (x < self.b)\n",
"C:\\ProgramData\\Anaconda3\\lib\\site-packages\\scipy\\stats\\_distn_infrastructure.py:1738: RuntimeWarning: invalid value encountered in greater_equal\n",
" cond2 = (x >= self.b) & cond0\n",
"C:\\ProgramData\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:4: RuntimeWarning: divide by zero encountered in true_divide\n",
" after removing the cwd from sys.path.\n",
"C:\\ProgramData\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:6: RuntimeWarning: invalid value encountered in multiply\n",
" \n"
]
}
],
"source": [
"from scipy.stats import norm\n",
"Delta = norm.cdf(d1)\n",
"denom1 = (scipy.sqrt(2 * scipy.pi) * sigma * scipy.sqrt(T - time))[:,scipy.newaxis]\n",
"factor1 = 1/(denom1 * S)\n",
"factor2 = scipy.exp(-d1 ** 2/2)\n",
"Gamma = factor1 * factor2\n"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
" 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
" 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
" 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
" 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
" 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
" 0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n",
" 0.00000000e+00, 0.00000000e+00, nan, 1.00000000e+00,\n",
" 1.00000000e+00, 1.00000000e+00, 1.00000000e+00, 1.00000000e+00,\n",
" 1.00000000e+00, 1.00000000e+00, 1.00000000e+00, 1.00000000e+00,\n",
" 1.00000000e+00, 1.00000000e+00, 1.00000000e+00, 1.00000000e+00,\n",
" 1.00000000e+00, 1.00000000e+00, 1.00000000e+00, 1.00000000e+00,\n",
" 1.00000000e+00, 1.00000000e+00, 1.00000000e+00, 1.00000000e+00,\n",
" 1.00000000e+00, 1.00000000e+00, 1.00000000e+00, 1.00000000e+00,\n",
" 1.00000000e+00, 1.00000000e+00, 1.00000000e+00, 1.00000000e+00,\n",
" 1.00000000e+00],\n",
" [6.01382828e-14, 6.26955737e-13, 5.74204721e-12, 4.64334125e-11,\n",
" 3.33133588e-10, 2.13023244e-09, 1.21945617e-08, 6.27574120e-08,\n",
" 2.91526051e-07, 1.22712145e-06, 4.69802901e-06, 1.64181064e-05,\n",
" 5.25553893e-05, 1.54617082e-04, 4.19430354e-04, 1.05245368e-03,\n",
" 2.45038099e-03, 5.30973314e-03, 1.07404346e-02, 2.03409083e-02,\n",
" 3.61744974e-02, 6.05906930e-02, 9.58694121e-02, 1.43729360e-01,\n",
" 2.04810977e-01, 2.78287647e-01, 3.61747927e-01, 4.51421161e-01,\n",
" 5.42712896e-01, 6.30917615e-01, 7.11924939e-01, 7.82749629e-01,\n",
" 8.41784056e-01, 8.88762237e-01, 9.24501504e-01, 9.50528351e-01,\n",
" 9.68694888e-01, 9.80863100e-01, 9.88693730e-01, 9.93540763e-01,\n",
" 9.96429726e-01, 9.98089528e-01, 9.99009691e-01, 9.99502411e-01,\n",
" 9.99757492e-01, 9.99885284e-01, 9.99947295e-01, 9.99976466e-01,\n",
" 9.99989780e-01, 9.99995681e-01, 9.99998223e-01, 9.99999287e-01,\n",
" 9.99999721e-01, 9.99999894e-01, 9.99999960e-01, 9.99999986e-01,\n",
" 9.99999995e-01, 9.99999998e-01, 9.99999999e-01, 1.00000000e+00,\n",
" 1.00000000e+00],\n",
" [6.20562781e-07, 1.87590526e-06, 5.32503139e-06, 1.42304381e-05,\n",
" 3.58880634e-05, 8.56098609e-05, 1.93599726e-04, 4.15929717e-04,\n",
" 8.50670599e-04, 1.65954464e-03, 3.09408947e-03, 5.52327771e-03,\n",
" 9.45715745e-03, 1.55590234e-02, 2.46377741e-02, 3.76132838e-02,\n",
" 5.54512369e-02, 7.90696571e-02, 1.09226213e-01, 1.46401609e-01,\n",
" 1.90698110e-01, 2.41772170e-01, 2.98815753e-01, 3.60593072e-01,\n",
" 4.25529802e-01, 4.91842686e-01, 5.57690755e-01, 6.21326707e-01,\n",
" 6.81228392e-01, 7.36195351e-01, 7.85402350e-01, 8.28409298e-01,\n",
" 8.65133241e-01, 8.95792389e-01, 9.20833947e-01, 9.40857142e-01,\n",
" 9.56540768e-01, 9.68581746e-01, 9.77648068e-01, 9.84346885e-01,\n",
" 9.89206455e-01, 9.92669494e-01, 9.95094968e-01, 9.96765396e-01,\n",
" 9.97897161e-01, 9.98651873e-01, 9.99147430e-01, 9.99467969e-01,\n",
" 9.99672295e-01, 9.99800703e-01, 9.99880293e-01, 9.99928967e-01,\n",
" 9.99958346e-01, 9.99975855e-01, 9.99986161e-01, 9.99992155e-01,\n",
" 9.99995601e-01, 9.99997559e-01, 9.99998659e-01, 9.99999271e-01,\n",
" 9.99999607e-01],\n",
" [1.38233219e-04, 2.76901743e-04, 5.32583238e-04, 9.85218346e-04,\n",
" 1.75575748e-03, 3.01897103e-03, 5.01608338e-03, 8.06504275e-03,\n",
" 1.25657139e-02, 1.89971416e-02, 2.79044431e-02, 3.98739251e-02,\n",
" 5.54966066e-02, 7.53222533e-02, 9.98079384e-02, 1.29266658e-01,\n",
" 1.63822282e-01, 2.03376911e-01, 2.47595481e-01, 2.95910422e-01,\n",
" 3.47546629e-01, 4.01564443e-01, 4.56916101e-01, 5.12509665e-01,\n",
" 5.67273857e-01, 6.20217570e-01, 6.70478979e-01, 7.17360830e-01,\n",
" 7.60350352e-01, 7.99124060e-01, 8.33539196e-01, 8.63614608e-01,\n",
" 8.89504392e-01, 9.11467681e-01, 9.29837665e-01, 9.44992325e-01,\n",
" 9.57328677e-01, 9.67241593e-01, 9.75107614e-01, 9.81273668e-01,\n",
" 9.86050190e-01, 9.89707969e-01, 9.92477891e-01, 9.94552813e-01,\n",
" 9.96090803e-01, 9.97219177e-01, 9.98038824e-01, 9.98628475e-01,\n",
" 9.99048695e-01, 9.99345441e-01, 9.99553138e-01, 9.99697256e-01,\n",
" 9.99796420e-01, 9.99864097e-01, 9.99909919e-01, 9.99940704e-01,\n",
" 9.99961231e-01, 9.99974819e-01, 9.99983750e-01, 9.99989578e-01,\n",
" 9.99993357e-01],\n",
" [2.05422185e-03, 3.35277647e-03, 5.31315663e-03, 8.18547073e-03,\n",
" 1.22746057e-02, 1.79371476e-02, 2.55723768e-02, 3.56068042e-02,\n",
" 4.84724713e-02, 6.45801093e-02, 8.42890929e-02, 1.07876801e-01,\n",
" 1.35510367e-01, 1.67223819e-01, 2.02903177e-01, 2.42281365e-01,\n",
" 2.84943753e-01, 3.30344080e-01, 3.77829402e-01, 4.26671899e-01,\n",
" 4.76104743e-01, 5.25359033e-01, 5.73698908e-01, 6.20452327e-01,\n",
" 6.65035679e-01, 7.06971062e-01, 7.45895881e-01, 7.81565044e-01,\n",
" 8.13846640e-01, 8.42712306e-01, 8.68223761e-01, 8.90516966e-01,\n",
" 9.09785302e-01, 9.26262966e-01, 9.40209524e-01, 9.51896265e-01,\n",
" 9.61594780e-01, 9.69567898e-01, 9.76062967e-01, 9.81307286e-01,\n",
" 9.85505431e-01, 9.88838144e-01, 9.91462463e-01, 9.93512754e-01,\n",
" 9.95102372e-01, 9.96325705e-01, 9.97260384e-01, 9.97969533e-01,\n",
" 9.98503917e-01, 9.98903951e-01, 9.99201491e-01, 9.99421420e-01,\n",
" 9.99582996e-01, 9.99701003e-01, 9.99786696e-01, 9.99848578e-01,\n",
" 9.99893022e-01, 9.99924775e-01, 9.99947344e-01, 9.99963305e-01,\n",
" 9.99974539e-01],\n",
" [1.02586924e-02, 1.48186897e-02, 2.09233905e-02, 2.89068792e-02,\n",
" 3.91148918e-02, 5.18875894e-02, 6.75396707e-02, 8.63392451e-02,\n",
" 1.08487174e-01, 1.34098690e-01, 1.63189010e-01, 1.95664332e-01,\n",
" 2.31319171e-01, 2.69840391e-01, 3.10817706e-01, 3.53759846e-01,\n",
" 3.98115129e-01, 4.43294885e-01, 4.88697995e-01, 5.33734882e-01,\n",
" 5.77849434e-01, 6.20537669e-01, 6.61362284e-01, 6.99962642e-01,\n",
" 7.36060143e-01, 7.69459214e-01, 8.00044461e-01, 8.27774671e-01,\n",
" 8.52674460e-01, 8.74824375e-01, 8.94350226e-01, 9.11412321e-01,\n",
" 9.26195149e-01, 9.38897952e-01, 9.49726457e-01, 9.58885927e-01,\n",
" 9.66575589e-01, 9.72984408e-01, 9.78288093e-01, 9.82647208e-01,\n",
" 9.86206213e-01, 9.89093262e-01, 9.91420591e-01, 9.93285337e-01,\n",
" 9.94770647e-01, 9.95946964e-01, 9.96873398e-01, 9.97599098e-01,\n",
" 9.98164581e-01, 9.98602979e-01, 9.98941173e-01, 9.99200814e-01,\n",
" 9.99399218e-01, 9.99550141e-01, 9.99664441e-01, 9.99750633e-01,\n",
" 9.99815360e-01, 9.99863770e-01, 9.99899835e-01, 9.99926600e-01,\n",
" 9.99946390e-01]])"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Delta"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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.0"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
124 changes: 124 additions & 0 deletions .ipynb_checkpoints/Finding the implied volatility-checkpoint.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"# http://www.codeandfinance.com/finding-implied-vol.html\n",
"import numpy as np\n",
"import pandas as pd\n",
"import math\n",
"from scipy.stats import norm\n",
"import datetime"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"def find_vol(target_value, call_put, S, K, T, r):\n",
" MAX_ITERATIONS = 100\n",
" PRECISION = 1.0e-5\n",
" i = 0\n",
" sigma = 0.5\n",
" for i in range(0, MAX_ITERATIONS):\n",
" price = bs_price(call_put, S, K, T, r, sigma)\n",
" vega = bs_vega(call_put, S, K, T, r, sigma)\n",
"\n",
" price = price\n",
" diff = target_value - price # our root\n",
"\n",
" print (i, sigma, diff)\n",
"\n",
" if (abs(diff) < PRECISION):\n",
" return sigma\n",
" sigma = sigma + diff/vega # f(x) / f'(x)\n",
" i = i + 1\n",
"\n",
" # value wasn't found, return best guess so far\n",
" return sigma"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"n = norm.pdf\n",
"N = norm.cdf\n",
"\n",
"def bs_price(cp_flag,S,K,T,r,v,q=0.0):\n",
" d1 = (np.log(S/K)+(r+v*v/2.)*T)/(v*np.sqrt(T))\n",
" d2 = d1-v*np.sqrt(T)\n",
" if cp_flag == 'c':\n",
" price = S*np.exp(-q*T)*N(d1)-K*np.exp(-r*T)*N(d2)\n",
" else:\n",
" price = K*np.exp(-r*T)*N(-d2)-S*np.exp(-q*T)*N(-d1)\n",
" return price\n",
"\n",
"def bs_vega(cp_flag,S,K,T,r,v,q=0.0):\n",
" d1 = (np.log(S/K)+(r+v*v/2.)*T)/(v*np.sqrt(T))\n",
" return S * np.sqrt(T)*n(d1)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0 0.5 -21.669539271534063\n",
"1 0.21879739316064523 0.03217154881230044\n",
"2 0.21921383628613422 1.9891615465894574e-08\n",
"Implied vol: 21.92%\n",
"Market price = 17.50\n",
"Model price = 17.50\n"
]
}
],
"source": [
"V_market = 17.5\n",
"K = 585\n",
"T = (datetime.date(2014,10,18) - datetime.date(2014,9,8)).days / 365.\n",
"S = 586.08\n",
"r = 0.0002\n",
"cp = 'c' # call option\n",
"\n",
"implied_vol = find_vol(V_market, cp, S, K, T, r)\n",
"\n",
"print('Implied vol: %.2f%%' % (implied_vol * 100))\n",
"print('Market price = %.2f' % V_market)\n",
"print('Model price = %.2f' % bs_price(cp, S, K, T, r, implied_vol))"
]
}
],
"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.0"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Loading

0 comments on commit c03cf64

Please sign in to comment.