Skip to content

Instantly share code, notes, and snippets.

@tycoi2005
Created November 20, 2024 15:02
Show Gist options
  • Save tycoi2005/84dacbc53190d637c460fb4027257317 to your computer and use it in GitHub Desktop.
Save tycoi2005/84dacbc53190d637c460fb4027257317 to your computer and use it in GitHub Desktop.
MODULE 6 | LESSON 4 LOCAL VOLATILITY MODELS: CEV IN PRACTICE
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"('2024-11-22',\n",
" '2024-11-29',\n",
" '2024-12-06',\n",
" '2024-12-13',\n",
" '2024-12-20',\n",
" '2024-12-27',\n",
" '2025-01-17',\n",
" '2025-02-21',\n",
" '2025-03-21',\n",
" '2025-04-17',\n",
" '2025-06-20',\n",
" '2025-07-18',\n",
" '2025-09-19',\n",
" '2026-01-16',\n",
" '2027-01-15')"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from scipy.optimize import minimize\n",
"import yfinance as yf\n",
"import pandas as pd\n",
"from datetime import datetime\n",
"ibm = yf.Ticker(\"ibm\")\n",
"\n",
"ibm.options"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>contractSymbol</th>\n",
" <th>lastTradeDate</th>\n",
" <th>strike</th>\n",
" <th>lastPrice</th>\n",
" <th>bid</th>\n",
" <th>ask</th>\n",
" <th>change</th>\n",
" <th>percentChange</th>\n",
" <th>volume</th>\n",
" <th>openInterest</th>\n",
" <th>impliedVolatility</th>\n",
" <th>inTheMoney</th>\n",
" <th>contractSize</th>\n",
" <th>currency</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>IBM250117C00060000</td>\n",
" <td>2024-08-08 19:56:23+00:00</td>\n",
" <td>60.0</td>\n",
" <td>132.30</td>\n",
" <td>140.10</td>\n",
" <td>141.90</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>503</td>\n",
" <td>0</td>\n",
" <td>0.000010</td>\n",
" <td>True</td>\n",
" <td>REGULAR</td>\n",
" <td>USD</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>IBM250117C00065000</td>\n",
" <td>2023-11-08 20:56:28+00:00</td>\n",
" <td>65.0</td>\n",
" <td>83.20</td>\n",
" <td>96.05</td>\n",
" <td>98.65</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>60</td>\n",
" <td>0</td>\n",
" <td>0.000010</td>\n",
" <td>True</td>\n",
" <td>REGULAR</td>\n",
" <td>USD</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>IBM250117C00070000</td>\n",
" <td>2024-02-07 20:52:18+00:00</td>\n",
" <td>70.0</td>\n",
" <td>113.25</td>\n",
" <td>124.50</td>\n",
" <td>128.55</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>1950</td>\n",
" <td>0</td>\n",
" <td>0.000010</td>\n",
" <td>True</td>\n",
" <td>REGULAR</td>\n",
" <td>USD</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>IBM250117C00075000</td>\n",
" <td>2024-02-07 20:31:07+00:00</td>\n",
" <td>75.0</td>\n",
" <td>108.10</td>\n",
" <td>119.50</td>\n",
" <td>123.50</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>0.000010</td>\n",
" <td>True</td>\n",
" <td>REGULAR</td>\n",
" <td>USD</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>IBM250117C00080000</td>\n",
" <td>2024-02-07 20:31:07+00:00</td>\n",
" <td>80.0</td>\n",
" <td>103.10</td>\n",
" <td>114.55</td>\n",
" <td>118.60</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>0.000010</td>\n",
" <td>True</td>\n",
" <td>REGULAR</td>\n",
" <td>USD</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>IBM250117C00085000</td>\n",
" <td>2024-09-16 14:03:05+00:00</td>\n",
" <td>85.0</td>\n",
" <td>132.97</td>\n",
" <td>145.80</td>\n",
" <td>149.10</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>3.207155</td>\n",
" <td>True</td>\n",
" <td>REGULAR</td>\n",
" <td>USD</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>IBM250117C00090000</td>\n",
" <td>2024-11-11 20:41:58+00:00</td>\n",
" <td>90.0</td>\n",
" <td>124.90</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>979</td>\n",
" <td>1</td>\n",
" <td>0.000010</td>\n",
" <td>True</td>\n",
" <td>REGULAR</td>\n",
" <td>USD</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>IBM250117C00095000</td>\n",
" <td>2024-11-11 20:36:02+00:00</td>\n",
" <td>95.0</td>\n",
" <td>119.00</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>24</td>\n",
" <td>1</td>\n",
" <td>0.000010</td>\n",
" <td>True</td>\n",
" <td>REGULAR</td>\n",
" <td>USD</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>IBM250117C00100000</td>\n",
" <td>2024-11-13 18:26:44+00:00</td>\n",
" <td>100.0</td>\n",
" <td>111.76</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>4</td>\n",
" <td>24</td>\n",
" <td>0.000010</td>\n",
" <td>True</td>\n",
" <td>REGULAR</td>\n",
" <td>USD</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>IBM250117C00105000</td>\n",
" <td>2024-11-13 18:12:56+00:00</td>\n",
" <td>105.0</td>\n",
" <td>106.44</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>4</td>\n",
" <td>19</td>\n",
" <td>0.000010</td>\n",
" <td>True</td>\n",
" <td>REGULAR</td>\n",
" <td>USD</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>IBM250117C00110000</td>\n",
" <td>2024-11-11 20:37:12+00:00</td>\n",
" <td>110.0</td>\n",
" <td>104.00</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>13</td>\n",
" <td>0</td>\n",
" <td>0.000010</td>\n",
" <td>True</td>\n",
" <td>REGULAR</td>\n",
" <td>USD</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>IBM250117C00115000</td>\n",
" <td>2024-11-11 20:42:02+00:00</td>\n",
" <td>115.0</td>\n",
" <td>99.35</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>2140</td>\n",
" <td>237</td>\n",
" <td>0.000010</td>\n",
" <td>True</td>\n",
" <td>REGULAR</td>\n",
" <td>USD</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>IBM250117C00120000</td>\n",
" <td>2024-11-18 20:54:46+00:00</td>\n",
" <td>120.0</td>\n",
" <td>89.22</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>9</td>\n",
" <td>65</td>\n",
" <td>0.000010</td>\n",
" <td>True</td>\n",
" <td>REGULAR</td>\n",
" <td>USD</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>IBM250117C00125000</td>\n",
" <td>2024-11-14 17:27:15+00:00</td>\n",
" <td>125.0</td>\n",
" <td>83.17</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>3</td>\n",
" <td>885</td>\n",
" <td>0.000010</td>\n",
" <td>True</td>\n",
" <td>REGULAR</td>\n",
" <td>USD</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>IBM250117C00130000</td>\n",
" <td>2024-11-18 20:49:03+00:00</td>\n",
" <td>130.0</td>\n",
" <td>79.27</td>\n",
" <td>0.00</td>\n",
" <td>0.00</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>27</td>\n",
" <td>296</td>\n",
" <td>0.000010</td>\n",
" <td>True</td>\n",
" <td>REGULAR</td>\n",
" <td>USD</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" contractSymbol lastTradeDate strike lastPrice bid \\\n",
"0 IBM250117C00060000 2024-08-08 19:56:23+00:00 60.0 132.30 140.10 \n",
"1 IBM250117C00065000 2023-11-08 20:56:28+00:00 65.0 83.20 96.05 \n",
"2 IBM250117C00070000 2024-02-07 20:52:18+00:00 70.0 113.25 124.50 \n",
"3 IBM250117C00075000 2024-02-07 20:31:07+00:00 75.0 108.10 119.50 \n",
"4 IBM250117C00080000 2024-02-07 20:31:07+00:00 80.0 103.10 114.55 \n",
"5 IBM250117C00085000 2024-09-16 14:03:05+00:00 85.0 132.97 145.80 \n",
"6 IBM250117C00090000 2024-11-11 20:41:58+00:00 90.0 124.90 0.00 \n",
"7 IBM250117C00095000 2024-11-11 20:36:02+00:00 95.0 119.00 0.00 \n",
"8 IBM250117C00100000 2024-11-13 18:26:44+00:00 100.0 111.76 0.00 \n",
"9 IBM250117C00105000 2024-11-13 18:12:56+00:00 105.0 106.44 0.00 \n",
"10 IBM250117C00110000 2024-11-11 20:37:12+00:00 110.0 104.00 0.00 \n",
"11 IBM250117C00115000 2024-11-11 20:42:02+00:00 115.0 99.35 0.00 \n",
"12 IBM250117C00120000 2024-11-18 20:54:46+00:00 120.0 89.22 0.00 \n",
"13 IBM250117C00125000 2024-11-14 17:27:15+00:00 125.0 83.17 0.00 \n",
"14 IBM250117C00130000 2024-11-18 20:49:03+00:00 130.0 79.27 0.00 \n",
"\n",
" ask change percentChange volume openInterest impliedVolatility \\\n",
"0 141.90 0.0 0.0 503 0 0.000010 \n",
"1 98.65 0.0 0.0 60 0 0.000010 \n",
"2 128.55 0.0 0.0 1950 0 0.000010 \n",
"3 123.50 0.0 0.0 2 0 0.000010 \n",
"4 118.60 0.0 0.0 3 0 0.000010 \n",
"5 149.10 0.0 0.0 3 0 3.207155 \n",
"6 0.00 0.0 0.0 979 1 0.000010 \n",
"7 0.00 0.0 0.0 24 1 0.000010 \n",
"8 0.00 0.0 0.0 4 24 0.000010 \n",
"9 0.00 0.0 0.0 4 19 0.000010 \n",
"10 0.00 0.0 0.0 13 0 0.000010 \n",
"11 0.00 0.0 0.0 2140 237 0.000010 \n",
"12 0.00 0.0 0.0 9 65 0.000010 \n",
"13 0.00 0.0 0.0 3 885 0.000010 \n",
"14 0.00 0.0 0.0 27 296 0.000010 \n",
"\n",
" inTheMoney contractSize currency \n",
"0 True REGULAR USD \n",
"1 True REGULAR USD \n",
"2 True REGULAR USD \n",
"3 True REGULAR USD \n",
"4 True REGULAR USD \n",
"5 True REGULAR USD \n",
"6 True REGULAR USD \n",
"7 True REGULAR USD \n",
"8 True REGULAR USD \n",
"9 True REGULAR USD \n",
"10 True REGULAR USD \n",
"11 True REGULAR USD \n",
"12 True REGULAR USD \n",
"13 True REGULAR USD \n",
"14 True REGULAR USD "
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from datetime import date\n",
"\n",
"Mat = date(2025, 1, 17)\n",
"T = Mat - date.today()\n",
"\n",
"opt = ibm.option_chain('2025-01-17')\n",
"callData = opt.calls\n",
"putData = opt.puts\n",
"\n",
"callData.head(15)"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"\n",
"price = ibm.info['currentPrice']\n",
"price\n",
"\n",
"df_call = callData\n",
"df_call = df_call[df_call[\"impliedVolatility\"] > 0]\n",
"df_call[\"strike\"] = df_call[\"strike\"].astype(float)\n",
"df_call = df_call[\n",
" df_call[\"strike\"] > price * 0.8\n",
"] # We will only consider those options within a certain range of the current price\n",
"df_call = df_call[\n",
" df_call[\"strike\"] < price * 1.2\n",
"] # One reason for this is that it is precisely those options that are most often traded.\n",
"\n",
"\n",
"df_call.plot(kind=\"scatter\", x=\"strike\", y=\"impliedVolatility\", color=\"red\")\n",
"plt.grid()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Mean Squared Error is 6.177529518698698\n"
]
},
{
"data": {
"image/png": "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xxtdunQxrr/+emPnzp1+rxOtYwzkZ7Shrzl+htis4/vqq6+MSy65xEhJSTHatWtnnHHGGcadd95pVFZW+r1OS43P8mPRAAAApsNiXwAAYFoEGQAAYFoEGQAAYFoEGQAAYFoEGQAAYFoEGQAAYFoEGQAAYFoEGQAAYFoEGQCm8uWXX8pisWjbtm2SpBUrVshisdR7UCaA1qFNpAsAgMaMHTtWBw4c0Ntvv+1ry8rKktPpVKdOnSJXGICoQZABYCpxcXFKT0+PdBkAogSXlgBE3Ouvv65evXopMTFRHTt2VP/+/XXnnXfqxRdf1DvvvCOLxSKLxaIVK1bUu7R0vEOHDmnw4MG66KKLfJeb/vd//1dnnXWWEhIS1LNnT82dO7flBgcgrJiRARBRTqdT1113nR566CH95je/UVVVlT788EONHj1aX331lVwul+bPny9JSklJ0f79+xt9rQMHDmjIkCFKSkrS0qVL1b59e7388su6//779fTTT+vcc8/V1q1bddNNN+mUU07RmDFjWmqYAMKEIAMgopxOp44eParhw4erW7dukqRevXpJkhITE1VbWxvQpaTS0lJde+216tGjhxYuXKi2bdtKkgoKCvToo49q+PDhkqTs7GwVFxfr2WefJcgAMYAgAyCi+vTpoyuuuEK9evXSoEGDNHDgQF199dU69dRTg3qdAQMGKDc3V6+++qri4uIkSQcPHtTu3bs1btw43XTTTb6+R48eld1uD+k4AEQGQQZARMXFxWnp0qVau3at/t//+3966qmndM8992jDhg1Bvc6QIUP0xhtvqLi42DejU11dLUl67rnndMEFF9Q7LwDzI8gAiDiLxaKLLrpIF110ke6//35169ZNb731ltq2bSu32x3Qa8yaNUtJSUm64oortGLFCjkcDqWlpSkzM1N79uzRyJEjwzwKAJFAkAEQURs2bNCyZcs0cOBApaamasOGDfr3v/+ts846SzU1NVqyZIl27dqljh07nvBy0COPPCK3263LL79cK1asUM+ePTVjxgxNmjRJdrtd+fn5qq2t1aZNm/T9999r6tSpLTRKAOFCkAEQUTabTatWrdLs2bPlcrnUrVs3Pfrooxo8eLDOP/98rVixQueff76qq6u1fPly/exnP2vy9R5//HG/MPOHP/xB7du318MPP6w777xTp5xyinr16qXJkye3yPgAhJfFMAwj0kUAAAA0BxviAQAA0yLIAAAA0yLIAAAA0yLIAAAA0yLIAAAA0yLIAAAA0yLIAAAA0yLIAAAA0yLIAAAA0yLIAAAA0yLIAAAA0/r/c30kI8o4220AAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"from scipy.stats import ncx2\n",
"from sklearn.metrics import mean_squared_error\n",
"\n",
"# Variables\n",
"S0 = price\n",
"r = 0.05\n",
"Td = T.days / 365\n",
"\n",
"sigma = 0.35\n",
"beta = 1.25\n",
"\n",
"\n",
"def C(t, K, sigma, beta):\n",
" #print (\"C \", \"t \",t ,\"K: \",K, \" sigma \", sigma, \" beta \", beta)\n",
" zb = 2 + 2 / (2 - beta)\n",
" kappa = 2 * r / (sigma**2 * (2 - beta) * (np.exp(r * (2 - beta) * t) - 1))\n",
" x = kappa * S0 ** (2 - beta) * np.exp(r * (2 - beta) * t)\n",
" y = kappa * K ** (2 - beta)\n",
" return S0 * (1 - ncx2.cdf(2 * y, zb, 2 * x)) - K * np.exp(-r * t) * (\n",
" ncx2.cdf(2 * x, zb - 2, 2 * y)\n",
" )\n",
"\n",
"\n",
"test_strikes = df_call[\"strike\"]\n",
"modelprices = C(Td, test_strikes, sigma, beta)\n",
"realprices = df_call[\"lastPrice\"]\n",
"plt.plot(test_strikes, modelprices, \"o\", label=\"Model\")\n",
"plt.plot(test_strikes, realprices, \"o\", label=\"Real\")\n",
"plt.xlabel(\"stike\")\n",
"plt.ylabel(\"Option price\")\n",
"plt.legend()\n",
"err = mean_squared_error(modelprices.values, realprices)\n",
"print(\"Mean Squared Error is \", err)"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Optimization process results:\n",
" message: CONVERGENCE: REL_REDUCTION_OF_F_<=_FACTR*EPSMCH\n",
" success: True\n",
" status: 0\n",
" fun: 1.9688761586935655\n",
" x: [ 2.260e-01 1.921e+00]\n",
" nit: 24\n",
" jac: [-6.525e-03 -3.531e-02]\n",
" nfev: 165\n",
" njev: 55\n",
" hess_inv: <2x2 LbfgsInvHessProduct with dtype=float64>\n"
]
}
],
"source": [
"def error(params):\n",
" sigma = params[0]\n",
" beta = params[1]\n",
" modelprices = C(Td, test_strikes, sigma, beta)\n",
" realprices = df_call[\"lastPrice\"]\n",
"\n",
" #print(modelprices)\n",
" if np.any(np.isnan(modelprices)):\n",
" return 10000000\n",
" if np.any(np.isnan(realprices)):\n",
" return 10000000\n",
" return mean_squared_error(modelprices, realprices)\n",
"\n",
"\n",
"bnds = ((0, None), (0, None))\n",
"res = minimize(\n",
" error, (0.65, 1.8), bounds=bnds\n",
") # We will establish some initial guesses here (careful with altering this too much!)\n",
"print(\"Optimization process results:\")\n",
"print(res)"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x163260910>"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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DV871Z+3pz+/ubQEAABMiyADAABMiyADAABMK2iCzNNPPy2LxeK69UtyXjubOnWqEhISFB0drbFjx6q8vDxwRQIAgKASFEFm69atevnll9W3b1+39vvvv18rV67UihUrtHbtWpWUlOj6668PUJUAACDYBDzI1NXVady4cXrllVdct31JUnV1tf74xz/qt7/9ra655hoNHDhQixYt0saNG5ttygMAADqmgAeZqVOnasSIERo6dKhb+/bt29XY2OjW3rt3b/Xo0UOFhYWtnq+hoUE1NTVuHwAAIDQFdEO8119/XTt27NDWrVubHSsrK1Pnzp0VFxfn1p6UlKSysrJWzzl37lzNmTPH26UCAIAgFLAZmW+++Ub33Xef/vznP3t106HZs2erurra9fHNN9947dwAAHRkkyZN0pgxYwJdhpuABZnt27eroqJCAwYMUKdOndSpUyetXbtWL774ojp16qSkpCQdO3ZMVVVVbp9XXl6u5OTkVs8bERGh2NhYtw8AAPzOYZeK/yl9+obzvw67T99u0qRJslgsslgsCg8PV3p6uh566CHV19f79H0DLWCXlq699lp9+umnbm233XabevfurVmzZiktLU3h4eFas2aNxo4dK0nat2+fvv76a2VnZweiZAAAPFOULxXMkmpKfmiLTZVy50kZo3z2trm5uVq0aJEaGxu1fft2TZw4URaLRfPmzfPZewZawGZkYmJilJmZ6fZx1llnKSEhQZmZmbLZbJo8ebJmzpypDz/8UNu3b9dtt92m7OxsXXbZZYEqGwCAUyvKl5ZPcA8xklRT6mwvyvfZW0dERCg5OVlpaWkaM2aMhg4dqtWrV0uSHA6H5s6dq/T0dEVFRalfv3564403XJ9rt9s1efJk1/ELL7xQL7zwgs9q9Zagfvr1888/L6vVqrFjx6qhoUE5OTl66aWXAl0WAAAtc9idMzFq6XnMhiSLVPCw1HuEZA3zaSm7d+/Wxo0b1bNnT0nOm2GWLl2qP/zhD7rgggu0bt06jR8/Xt26ddOVV14ph8Oh7t27a8WKFUpISNDGjRt11113KSUlRTfeeKNPaz0TQRVkPvroI7fXkZGRWrBggRYsWBCYggAAaIuDG5vPxLgxpJpDzn7pV3j97d99911FR0fr+PHjamhokNVq1e9//3s1NDToqaee0j/+8Q/X8ozzzjtP69ev18sv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ybnAcNeuXaqqqlJpaakKCgp0+PBhnXfeeZLMM75p06bp3Xff1Ycffqju3bu72j2pPzk5udldTE2vzTBGT5jh+/B046utrVVubq5iYmL01ltvKTw83HUsVL6GNptNF1xwgYYMGaI33nhDe/fu1VtvvSXJHGNsbXwffPCBDhw4oLi4OHXq1Ml1SXDs2LG66qqrJJl7fC0ZNGiQJGn//v2S/Dw+r664CTE6xWLfiRMnGgMHDmzW3rTIcNu2ba62VatWBeUiw5PHV11dbUgy3nvvPbd+d911lzFs2DDDMH5YTPrGG2+4ju/duzcoF8Oe6uvX5PPPPzesVquxatUqwzCCf3wOh8OYOnWqkZqaanz++efNjntSf9MivPLyclefl19+2YiNjTXq6+t9P4jTON0YT3S6xb7B+H3oyfiqq6uNyy67zLjyyiuNI0eONDseSl/DJvX19UZUVJSxaNEiwzCCe4ynG19paanx6aefun1IMl544QXjyy+/NAzD3ONryfr16w1Jxscff2wYhn/HR5A5SW1trbFz505j586dhiTjt7/9rbFz507j4MGDrj7V1dVGly5djIULF7Z4jtzcXKN///7G5s2bjfXr1xsXXHCBccstt/hrCKd0uvFdeeWVxsUXX2x8+OGHxpdffmksWrTIiIyMNF566SXXOe6++26jR48exgcffGBs27bNyM7ONrKzswM1JDenG9/y5cuNDz/80Dhw4IDx9ttvGz179jSuv/56t3ME8/imTJli2Gw246OPPjJKS0tdH0ePHnX1OV39x48fNzIzM43rrrvO2LVrl1FQUGB069bNmD17diCG1IwnYywtLTV27txpvPLKK4YkY926dcbOnTuNw4cPu/oE6/fh6cZXXV1tDBo0yOjTp4+xf/9+tz7Hjx83DMP8X8MDBw4YTz31lLFt2zbj4MGDxoYNG4yRI0ca8fHxrh98wTxGT/6OnuzkX6zMPL79+/cbTz75pLFt2zajuLjYeOedd4zzzjvPGDJkiOsc/hwfQeYkTb/hnfwxceJEV5+XX37ZiIqKMqqqqlo8x+HDh41bbrnFiI6ONmJjY43bbrvNqK2t9dMITu104ystLTUmTZpkpKamGpGRkcaFF15oPPfcc4bD4XCd47vvvjPuuece4+yzzza6dOli/Pd//7dRWloaoBG5O934XnjhBaN79+5GeHi40aNHD+Oxxx5rditgMI+vpbFJcv0Waxie1f/VV18Zw4cPN6KiooyuXbsaDzzwgOvW3kDzZIx5eXmn7ROs34enG19rf4clGcXFxa7zmPlreOjQIWP48OFGYmKiER4ebnTv3t249dZbjb1797qdJ1jH6Mnf0ZY+5+QZYrOO7+uvvzaGDBlixMfHGxEREcb5559vPPjgg0Z1dbXbefw1Psv3RQMAAJgOi30BAIBpEWQAAIBpEWQAAIBpEWQAAIBpEWQAAIBpEWQAAIBpEWQAAIBpEWQAAIBpEWQAmNKvfvUrXXLJJa7XkyZN0pgxYwJWD4DAIMgACLh///vfmjJlinr06KGIiAglJycrJydHGzZskCRZLBa9/fbbbp/zy1/+UmvWrAlAtQCCSadAFwAAY8eO1bFjx7RkyRKdd955Ki8v15o1a3T48OFWPyc6OlrR0dF+rBJAMGJGBkBAVVVV6Z///KfmzZunq6++Wj179lRWVpZmz56tUaNG6dxzz5Uk/fd//7csFovr9cmXlk62detWdevWTfPmzXO9zx133KFu3bopNjZW11xzjT7++GMfjw6ArxFkAARU08zK22+/rYaGhmbHt27dKklatGiRSktLXa9P5YMPPtCwYcP061//WrNmzZIk3XDDDaqoqND777+v7du3a8CAAbr22mtVWVnp3QEB8CuCDICA6tSpkxYvXqwlS5YoLi5Ol19+uR555BF98sknkqRu3bpJkuLi4pScnOx63Zq33npLo0eP1ssvv6y77rpLkrR+/Xpt2bJFK1as0KWXXqoLLrhAzz77rOLi4vTGG2/4doAAfIogAyDgxo4dq5KSEuXn5ys3N1cfffSRBgwYoMWLF7fpPJs3b9YNN9ygP/3pT7rppptc7R9//LHq6uqUkJDgmgGKjo5WcXGxDhw44OXRAPAnFvsCCAqRkZEaNmyYhg0bpscff1x33HGH8vLyNGnSJI/P0atXLyUkJOjVV1/ViBEjFB4eLkmqq6tTSkqKPvroo2afExcX550BAAgIZmQABKWMjAwdOXJEkhQeHi673X7az+natas++OAD7d+/XzfeeKMaGxslSQMGDFBZWZk6deqk888/3+2ja9euPh0HAN8iyAAIqMOHD+uaa67R0qVL9cknn6i4uFgrVqzQM888o9GjR0uSzj33XK1Zs0ZlZWX69ttvT3m+xMREffDBB9q7d69uueUWHT9+XEOHDlV2drbGjBmjv//97/rqq6+0ceNGPfroo9q2bZs/hgnARwgyAAIqOjpagwYN0vPPP68hQ4YoMzNTjz/+uO688079/ve/lyQ999xzWr16tdLS0tS/f//TnjM5OVkffPCBPv30U40bN04Oh0PvvfeehgwZottuu00/+tGPdPPNN+vgwYNKSkry9RAB+JDFMAwj0EUAAAC0BzMyAADAtAgyAADAtAgyAADAtAgyAADAtAgyAADAtAgyAADAtAgyAADAtAgyAADAtAgyAADAtAgyAADAtAgyAADAtP4/klkc/cCQUREAAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"modelprices = C(Td, test_strikes, res.x[0], res.x[1])\n",
"#modelprices = C(Td, test_strikes,0.6479448674526602, 1.22)\n",
"realprices = df_call[\"lastPrice\"]\n",
"plt.plot(test_strikes, modelprices, \"o\", label=\"Model\")\n",
"plt.plot(test_strikes, realprices, \"o\", label=\"Real\")\n",
"plt.xlabel(\"Stike\")\n",
"plt.ylabel(\"Option price\")\n",
"plt.legend()"
]
}
],
"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.13.0"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment