211 lines
7.4 KiB
Plaintext
211 lines
7.4 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"# Load Packages"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"metadata": {
|
||
"tags": []
|
||
},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"printyellow (generic function with 1 method)"
|
||
]
|
||
},
|
||
"execution_count": 1,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"using Printf, Dates, Statistics, CSV, DataFrames\n",
|
||
"include(\"jlFiles/printmat.jl\")"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"# Loading Some Data with CSV.jl"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"The first 4 lines of Data/Options_prices_US_Canada.csv:\n",
|
||
"\n",
|
||
"symbol,exchange,date,adjusted close,option symbol,expiration,strike,call/put,style,ask,bid,volume,open interest,unadjusted\n",
|
||
"SPX,CBOE,03/30/17,2368.06,SPXW 170331C00300000,03/31/17,300,C,E,2073.9,2062.9,0,0,2368.927\n",
|
||
"SPX,CBOE,03/30/17,2368.06,SPXW 170331P00300000,03/31/17,300,P,E,0.1,0,0,0,2368.927\n",
|
||
"SPX,CBOE,03/30/17,2368.06,SPXW 170331C00400000,03/31/17,400,C,E,1974.1,1962.7,0,0,2368.927\n",
|
||
"\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"DataFile = \"Data/Options_prices_US_Canada.csv\"\n",
|
||
"\n",
|
||
"println(\"The first 4 lines of $(DataFile):\\n\")\n",
|
||
"txt = readlines(DataFile)\n",
|
||
"printmat(txt[1:4])"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"Use `normalizenames` to get names that can be used in Julia as variables names and specify the `dateformat` used in the csv file (to convert to proper Julia dates). The dates in the file are given as `03/30/17` which CSV/DataFrames interpret as 30 March year 17 (AD). We add `Dates.Year(2000)` to get year 2017."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"metadata": {
|
||
"tags": []
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"\u001b[1m13952×10 DataFrame\u001b[0m\n",
|
||
"\u001b[1m Row \u001b[0m│\u001b[1m symbol \u001b[0m\u001b[1m date \u001b[0m\u001b[1m close \u001b[0m\u001b[1m expiration \u001b[0m\u001b[1m strike \u001b[0m\u001b[1m call_put \u001b[0m\u001b[1m ask \u001b[0m\u001b[1m\u001b[0m ⋯\n",
|
||
"\u001b[1m \u001b[0m│\u001b[90m String3 \u001b[0m\u001b[90m Date \u001b[0m\u001b[90m Float64 \u001b[0m\u001b[90m Date \u001b[0m\u001b[90m Float64 \u001b[0m\u001b[90m String1 \u001b[0m\u001b[90m Float64 \u001b[0m\u001b[90m\u001b[0m ⋯\n",
|
||
"───────┼────────────────────────────────────────────────────────────────────────\n",
|
||
" 1 │ SPX 2017-03-30 2368.06 2017-03-31 300.0 C 2073.9 ⋯\n",
|
||
" 2 │ SPX 2017-03-30 2368.06 2017-03-31 300.0 P 0.1\n",
|
||
" 3 │ SPX 2017-03-30 2368.06 2017-03-31 400.0 C 1974.1\n",
|
||
" 4 │ SPX 2017-03-30 2368.06 2017-03-31 400.0 P 0.05\n",
|
||
" 5 │ SPX 2017-03-30 2368.06 2017-03-31 500.0 C 1874.1 ⋯\n",
|
||
" 6 │ SPX 2017-03-30 2368.06 2017-03-31 500.0 P 0.05\n",
|
||
" 7 │ SPX 2017-03-30 2368.06 2017-03-31 600.0 C 1774.1\n",
|
||
" 8 │ SPX 2017-03-30 2368.06 2017-03-31 600.0 P 0.05\n",
|
||
" 9 │ SPX 2017-03-30 2368.06 2017-03-31 700.0 C 1673.9 ⋯\n",
|
||
" 10 │ SPX 2017-03-30 2368.06 2017-03-31 700.0 P 0.05\n",
|
||
" 11 │ SPX 2017-03-30 2368.06 2017-03-31 750.0 C 1624.1\n",
|
||
" ⋮ │ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋱\n",
|
||
" 13943 │ XIU 2017-03-30 23.06 2019-03-15 21.0 C 3.21\n",
|
||
" 13944 │ XIU 2017-03-30 23.06 2019-03-15 21.0 P 1.71 ⋯\n",
|
||
" 13945 │ XIU 2017-03-30 23.06 2019-03-15 22.0 C 2.53\n",
|
||
" 13946 │ XIU 2017-03-30 23.06 2019-03-15 22.0 P 2.03\n",
|
||
" 13947 │ XIU 2017-03-30 23.06 2019-03-15 23.0 C 1.97\n",
|
||
" 13948 │ XIU 2017-03-30 23.06 2019-03-15 23.0 P 2.51 ⋯\n",
|
||
" 13949 │ XIU 2017-03-30 23.06 2019-03-15 24.0 C 1.5\n",
|
||
" 13950 │ XIU 2017-03-30 23.06 2019-03-15 24.0 P 3.12\n",
|
||
" 13951 │ XIU 2017-03-30 23.06 2019-03-15 25.0 C 1.13\n",
|
||
" 13952 │ XIU 2017-03-30 23.06 2019-03-15 25.0 P 3.64 ⋯\n",
|
||
"\u001b[36m 3 columns and 13931 rows omitted\u001b[0m"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"df1 = CSV.read(DataFile,DataFrame,normalizenames=true,dateformat=\"mm/dd/yy\")\n",
|
||
"\n",
|
||
"df1.date .+= Dates.Year(2000) #03/30/17 to 03/30/2017\n",
|
||
"df1.expiration .+= Dates.Year(2000)\n",
|
||
"\n",
|
||
"select!(df1,Not([:exchange,:option_symbol,:style,:unadjusted])) #deleting some columns\n",
|
||
"rename!(df1,:adjusted_close => :close) #renaming a column\n",
|
||
"\n",
|
||
"show(df1)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"# Task 1\n",
|
||
"\n",
|
||
"Create a new DataFrame that contains only the data for SPX and those option contracts that were traded (volume > 0). Hint: `df1[vv, :]` picks out the rows of the data frame for which `vv` is `true`. "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"# Task 2\n",
|
||
"\n",
|
||
"Create a *group* for each expiration date. These groups can be referred to as `dataG2[key]`.\n",
|
||
"\n",
|
||
"Hints: `groupby()`"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"# Task 3\n",
|
||
"\n",
|
||
"Print the number of contracts (`nrow`) and the sum of the open interest `:open_interest=>sum` for each of the expiration dates.\n",
|
||
"\n",
|
||
"Hint: `combine()`"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"# Task 4 \n",
|
||
"Creating two new DataFrames: for expiration date 2017-04-21 and another for 2017-06-16.\n",
|
||
"\n",
|
||
"Hint: `dataG2[(expiration = Date(\"2017-04-21\"),)]`"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"# Task 5\n",
|
||
"\n",
|
||
"For the expiration date 2017-04-21, calculate the mid price as the average of the `.ask` and `.bid`. \n",
|
||
"\n",
|
||
"Plot the mid price as a function of the strike price `.strike` for put options. Add a curve another curve for the call options."
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
}
|
||
],
|
||
"metadata": {
|
||
"@webio": {
|
||
"lastCommId": null,
|
||
"lastKernelId": null
|
||
},
|
||
"anaconda-cloud": {},
|
||
"kernelspec": {
|
||
"display_name": "Julia 1.7.0",
|
||
"language": "julia",
|
||
"name": "julia-1.7"
|
||
},
|
||
"language_info": {
|
||
"file_extension": ".jl",
|
||
"mimetype": "application/julia",
|
||
"name": "julia",
|
||
"version": "1.7.0"
|
||
},
|
||
"nteract": {
|
||
"version": "0.23.1"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 4
|
||
}
|