├── Advanced ├── 1. Hedging Option with Replicating Portfolio.ipynb ├── 2. Pension Planning using HJB eqn.ipynb ├── 3. Pension Planning with RL.ipynb ├── 4. High Frequency Trading with RL.ipynb ├── SOBI.csv └── fig │ ├── 1_ReplicatingPF.gif │ ├── 2_PensionPlan1.png │ ├── 2_PensionPlan2.png │ ├── 3_PensionPlanRL.png │ └── 4_HFT_RL.png ├── Basic ├── 1. Modern Portfolio Theory.ipynb ├── 190329put.csv ├── 2. Return Distribution Analysis with Risk Measure.ipynb ├── 3. Naive Classification Procedure for ML Trading.ipynb ├── 4. ELS Pricing.ipynb ├── 5. Volatility Surface.ipynb └── fig │ ├── 1_MPT.png │ ├── 2_Distribution_Analysis.png │ ├── 3_Classification.png │ ├── 4_ELS.jpg │ └── 5_Volsurface.png ├── LICENSE.md └── README.md /Advanced/fig/1_ReplicatingPF.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coorung/Finance-World/983d05541d8f85529f6ccf802b27d73c9eeecf53/Advanced/fig/1_ReplicatingPF.gif -------------------------------------------------------------------------------- /Advanced/fig/2_PensionPlan1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coorung/Finance-World/983d05541d8f85529f6ccf802b27d73c9eeecf53/Advanced/fig/2_PensionPlan1.png -------------------------------------------------------------------------------- /Advanced/fig/2_PensionPlan2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coorung/Finance-World/983d05541d8f85529f6ccf802b27d73c9eeecf53/Advanced/fig/2_PensionPlan2.png -------------------------------------------------------------------------------- /Advanced/fig/3_PensionPlanRL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coorung/Finance-World/983d05541d8f85529f6ccf802b27d73c9eeecf53/Advanced/fig/3_PensionPlanRL.png -------------------------------------------------------------------------------- /Advanced/fig/4_HFT_RL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coorung/Finance-World/983d05541d8f85529f6ccf802b27d73c9eeecf53/Advanced/fig/4_HFT_RL.png -------------------------------------------------------------------------------- /Basic/190329put.csv: -------------------------------------------------------------------------------- 1 | type,date,strike,mv 2 | P,2019-04-11,215,0.01 3 | P,2019-04-11,217.5,0.01 4 | P,2019-04-11,220,0.01 5 | P,2019-04-11,222.5,0.01 6 | P,2019-04-11,225,0.01 7 | P,2019-04-11,227.5,0.01 8 | P,2019-04-11,230,0.01 9 | P,2019-04-11,232.5,0.01 10 | P,2019-04-11,235,0.01 11 | P,2019-04-11,237.5,0.01 12 | P,2019-04-11,240,0.01 13 | P,2019-04-11,242.5,0.01 14 | P,2019-04-11,245,0.02 15 | P,2019-04-11,247.5,0.03 16 | P,2019-04-11,250,0.03 17 | P,2019-04-11,252.5,0.04 18 | P,2019-04-11,255,0.06 19 | P,2019-04-11,257.5,0.08 20 | P,2019-04-11,260,0.12 21 | P,2019-04-11,262.5,0.19 22 | P,2019-04-11,265,0.31 23 | P,2019-04-11,267.5,0.53 24 | P,2019-04-11,270,0.88 25 | P,2019-04-11,272.5,1.43 26 | P,2019-04-11,275,2.24 27 | P,2019-04-11,277.5,3.35 28 | P,2019-04-11,280,4.85 29 | P,2019-04-11,282.5,6.8 30 | P,2019-04-11,285,8.9 31 | P,2019-04-11,287.5,11.25 32 | P,2019-04-11,290,13.45 33 | P,2019-04-11,292.5,15.85 34 | P,2019-04-11,295,19.25 35 | P,2019-04-11,297.5,21.35 36 | P,2019-04-11,300,23.45 37 | P,2019-04-11,302.5,27.2 38 | P,2019-04-11,305,29.7 39 | P,2019-04-11,307.5,32.2 40 | P,2019-04-11,310,34.7 41 | P,2019-04-11,312.5,37.2 42 | P,2019-04-11,315,39.7 43 | P,2019-04-11,317.5,42.2 44 | P,2019-04-11,320,44.7 45 | P,2019-04-11,322.5,47.2 46 | P,2019-04-11,325,49.7 47 | P,2019-04-11,327.5,52.2 48 | P,2019-04-11,330,53 49 | P,2019-05-09,215,0.02 50 | P,2019-05-09,217.5,0.02 51 | P,2019-05-09,220,0.03 52 | P,2019-05-09,222.5,0.04 53 | P,2019-05-09,225,0.04 54 | P,2019-05-09,227.5,0.05 55 | P,2019-05-09,230,0.06 56 | P,2019-05-09,232.5,0.06 57 | P,2019-05-09,235,0.08 58 | P,2019-05-09,237.5,0.09 59 | P,2019-05-09,240,0.12 60 | P,2019-05-09,242.5,0.14 61 | P,2019-05-09,245,0.18 62 | P,2019-05-09,247.5,0.23 63 | P,2019-05-09,250,0.29 64 | P,2019-05-09,252.5,0.37 65 | P,2019-05-09,255,0.48 66 | P,2019-05-09,257.5,0.62 67 | P,2019-05-09,260,0.82 68 | P,2019-05-09,262.5,1.08 69 | P,2019-05-09,265,1.42 70 | P,2019-05-09,267.5,1.87 71 | P,2019-05-09,270,2.45 72 | P,2019-05-09,272.5,3.19 73 | P,2019-05-09,275,4.06 74 | P,2019-05-09,277.5,5.27 75 | P,2019-05-09,280,6.57 76 | P,2019-05-09,282.5,7.75 77 | P,2019-05-09,285,10 78 | P,2019-05-09,287.5,11.7 79 | P,2019-05-09,290,14.2 80 | P,2019-05-09,292.5,15.6 81 | P,2019-05-09,295,19.8 82 | P,2019-05-09,297.5,22.15 83 | P,2019-05-09,300,24.5 84 | P,2019-05-09,302.5,26.9 85 | P,2019-05-09,305,28.7 86 | P,2019-05-09,307.5,31.8 87 | P,2019-05-09,310,34.3 88 | P,2019-05-09,312.5,36.75 89 | P,2019-05-09,315,39.25 90 | P,2019-05-09,317.5,41.75 91 | P,2019-05-09,320,44.25 92 | P,2019-05-09,322.5,46.7 93 | P,2019-05-09,325,49.2 94 | P,2019-05-09,327.5,51.7 95 | P,2019-05-09,330,54.2 96 | P,2019-06-13,200,0.04 97 | P,2019-06-13,202.5,0.04 98 | P,2019-06-13,205,0.05 99 | P,2019-06-13,207.5,0.06 100 | P,2019-06-13,210,0.07 101 | P,2019-06-13,212.5,0.08 102 | P,2019-06-13,215,0.08 103 | P,2019-06-13,217.5,0.09 104 | P,2019-06-13,220,0.12 105 | P,2019-06-13,222.5,0.13 106 | P,2019-06-13,225,0.15 107 | P,2019-06-13,227.5,0.18 108 | P,2019-06-13,230,0.2 109 | P,2019-06-13,232.5,0.25 110 | P,2019-06-13,235,0.29 111 | P,2019-06-13,237.5,0.34 112 | P,2019-06-13,240,0.43 113 | P,2019-06-13,242.5,0.5 114 | P,2019-06-13,245,0.6 115 | P,2019-06-13,247.5,0.74 116 | P,2019-06-13,250,0.87 117 | P,2019-06-13,252.5,1.05 118 | P,2019-06-13,255,1.25 119 | P,2019-06-13,257.5,1.51 120 | P,2019-06-13,260,1.8 121 | P,2019-06-13,262.5,2.3 122 | P,2019-06-13,265,2.7 123 | P,2019-06-13,267.5,3.65 124 | P,2019-06-13,270,3.96 125 | P,2019-06-13,272.5,4.75 126 | P,2019-06-13,275,5.77 127 | P,2019-06-13,277.5,7.97 128 | P,2019-06-13,280,8.88 129 | P,2019-06-13,282.5,10.95 130 | P,2019-06-13,285,10.7 131 | P,2019-06-13,287.5,13.8 132 | P,2019-06-13,290,15 133 | P,2019-06-13,292.5,18.3 134 | P,2019-06-13,295,20.35 135 | P,2019-06-13,297.5,22.5 136 | P,2019-06-13,300,23.25 137 | P,2019-06-13,302.5,26.95 138 | P,2019-06-13,305,29.25 139 | P,2019-06-13,307.5,31.6 140 | P,2019-06-13,310,33.05 141 | P,2019-06-13,312.5,36.4 142 | P,2019-06-13,315,38.85 143 | P,2019-06-13,317.5,41.25 144 | P,2019-06-13,320,43.75 145 | P,2019-06-13,322.5,46.2 146 | P,2019-06-13,325,48.65 147 | P,2019-06-13,327.5,51.15 148 | P,2019-06-13,330,53.6 149 | P,2019-06-13,332.5,56.1 150 | P,2019-06-13,335,58.6 151 | P,2019-06-13,337.5,61.1 152 | P,2019-06-13,340,63.55 153 | P,2019-06-13,342.5,66.05 154 | P,2019-06-13,345,68.55 155 | P,2019-06-13,347.5,71.05 156 | P,2019-06-13,350,73.5 157 | P,2019-06-13,352.5,76 158 | P,2019-06-13,355,78.5 159 | P,2019-06-13,357.5,81 160 | P,2019-06-13,360,83.5 161 | P,2019-06-13,362.5,85.95 162 | P,2019-06-13,365,88.45 163 | P,2019-06-13,367.5,90.95 164 | P,2019-06-13,370,93.45 165 | P,2019-06-13,372.5,95.95 166 | P,2019-06-13,375,98.4 167 | P,2019-06-13,377.5,100.9 168 | P,2019-06-13,380,103.4 169 | P,2019-06-13,382.5,105.9 170 | P,2019-06-13,385,108.4 171 | P,2019-06-13,387.5,110.85 172 | P,2019-06-13,390,113.35 173 | P,2019-06-13,392.5,115.85 174 | P,2019-06-13,395,118.35 175 | P,2019-06-13,397.5,120.85 176 | P,2019-06-13,400,123.8 177 | P,2019-07-11,225,0.3 178 | P,2019-07-11,227.5,0.36 179 | P,2019-07-11,230,0.41 180 | P,2019-07-11,232.5,0.09 181 | P,2019-07-11,235,0.14 182 | P,2019-07-11,237.5,0.19 183 | P,2019-07-11,240,0.29 184 | P,2019-07-11,242.5,0.91 185 | P,2019-07-11,245,1.07 186 | P,2019-07-11,247.5,0.74 187 | P,2019-07-11,250,1.45 188 | P,2019-07-11,252.5,1.31 189 | P,2019-07-11,255,1.69 190 | P,2019-07-11,257.5,2.15 191 | P,2019-07-11,260,2.67 192 | P,2019-07-11,262.5,3.6 193 | P,2019-07-11,265,4.21 194 | P,2019-07-11,267.5,4.93 195 | P,2019-07-11,270,5.87 196 | P,2019-07-11,272.5,6.94 197 | P,2019-07-11,275,7.69 198 | P,2019-07-11,277.5,9.38 199 | P,2019-07-11,280,10.85 200 | P,2019-07-11,282.5,12.35 201 | P,2019-07-11,285,14 202 | P,2019-07-11,287.5,15.75 203 | P,2019-07-11,290,17.5 204 | P,2019-07-11,292.5,19.5 205 | P,2019-07-11,295,21.45 206 | P,2019-07-11,297.5,23.5 207 | P,2019-07-11,300,25.7 208 | P,2019-07-11,302.5,27.85 209 | P,2019-07-11,305,30.1 210 | P,2019-07-11,307.5,32.35 211 | P,2019-07-11,310,34.65 212 | P,2019-07-11,312.5,37.05 213 | P,2019-07-11,315,39.4 214 | P,2019-07-11,317.5,41.8 215 | P,2019-07-11,320,44.2 216 | P,2019-07-11,322.5,46.65 217 | P,2019-07-11,325,49.1 218 | P,2019-07-11,327.5,51.55 219 | P,2019-07-11,330,54 220 | P,2019-08-08,235,0.85 221 | P,2019-08-08,237.5,0.38 222 | P,2019-08-08,240,0.51 223 | P,2019-08-08,242.5,0.69 224 | P,2019-08-08,245,0.86 225 | P,2019-08-08,247.5,1.15 226 | P,2019-08-08,250,1.45 227 | P,2019-08-08,252.5,1.83 228 | P,2019-08-08,255,2.55 229 | P,2019-08-08,257.5,2.75 230 | P,2019-08-08,260,3.41 231 | P,2019-08-08,262.5,4.09 232 | P,2019-08-08,265,4.85 233 | P,2019-08-08,267.5,5.78 234 | P,2019-08-08,270,6.71 235 | P,2019-08-08,272.5,7.82 236 | P,2019-08-08,275,9.02 237 | P,2019-08-08,277.5,10.25 238 | P,2019-08-08,280,11.7 239 | P,2019-08-08,282.5,13.2 240 | P,2019-08-08,285,14.7 241 | P,2019-08-08,287.5,16.45 242 | P,2019-08-08,290,18.2 243 | P,2019-08-08,292.5,20 244 | P,2019-08-08,295,21.95 245 | P,2019-08-08,297.5,23.9 246 | P,2019-08-08,300,25.95 247 | P,2019-08-08,302.5,28.1 248 | P,2019-08-08,305,30.25 249 | P,2019-08-08,307.5,32.4 250 | P,2019-08-08,310,34.7 251 | P,2019-08-08,312.5,37 252 | P,2019-08-08,315,39.25 253 | P,2019-08-08,317.5,41.65 254 | P,2019-08-08,320,44 255 | P,2019-08-08,322.5,46.35 256 | P,2019-08-08,325,48.8 257 | P,2019-08-08,327.5,51.2 258 | P,2019-08-08,330,53.65 259 | P,2019-09-11,195,0.19 260 | P,2019-09-11,197.5,0.01 261 | P,2019-09-11,200,0.25 262 | P,2019-09-11,202.5,0.01 263 | P,2019-09-11,205,0.32 264 | P,2019-09-11,207.5,0.01 265 | P,2019-09-11,210,0.39 266 | P,2019-09-11,212.5,0.51 267 | P,2019-09-11,215,0.46 268 | P,2019-09-11,217.5,0.6 269 | P,2019-09-11,220,0.58 270 | P,2019-09-11,222.5,0.74 271 | P,2019-09-11,225,0.73 272 | P,2019-09-11,227.5,0.91 273 | P,2019-09-11,230,0.93 274 | P,2019-09-11,232.5,0.38 275 | P,2019-09-11,235,1.2 276 | P,2019-09-11,237.5,0.65 277 | P,2019-09-11,240,1.59 278 | P,2019-09-11,242.5,1.79 279 | P,2019-09-11,245,2.05 280 | P,2019-09-11,247.5,1.62 281 | P,2019-09-11,250,2.92 282 | P,2019-09-11,252.5,2.46 283 | P,2019-09-11,255,2.92 284 | P,2019-09-11,257.5,3.53 285 | P,2019-09-11,260,5.09 286 | P,2019-09-11,262.5,4.87 287 | P,2019-09-11,265,5.74 288 | P,2019-09-11,267.5,6.66 289 | P,2019-09-11,270,7.59 290 | P,2019-09-11,272.5,8.74 291 | P,2019-09-11,275,9.94 292 | P,2019-09-11,277.5,11.15 293 | P,2019-09-11,280,12.55 294 | P,2019-09-11,282.5,14 295 | P,2019-09-11,285,15.5 296 | P,2019-09-11,287.5,17.15 297 | P,2019-09-11,290,18.85 298 | P,2019-09-11,292.5,20.6 299 | P,2019-09-11,295,22.45 300 | P,2019-09-11,297.5,24.4 301 | P,2019-09-11,300,26.35 302 | P,2019-09-11,302.5,28.3 303 | P,2019-09-11,305,30.45 304 | P,2019-09-11,307.5,32.6 305 | P,2019-09-11,310,34.75 306 | P,2019-09-11,312.5,36.95 307 | P,2019-09-11,315,39.25 308 | P,2019-09-11,317.5,41.5 309 | P,2019-09-11,320,43.8 310 | P,2019-09-11,322.5,46.15 311 | P,2019-09-11,325,48.5 312 | P,2019-09-11,327.5,50.9 313 | P,2019-09-11,330,53.25 314 | P,2019-09-11,332.5,55.7 315 | P,2019-09-11,335,58.1 316 | P,2019-09-11,337.5,60.5 317 | P,2019-09-11,340,62.95 318 | P,2019-09-11,342.5,65.4 319 | P,2019-09-11,345,67.85 320 | P,2019-09-11,347.5,70.3 321 | P,2019-09-11,350,72.75 322 | P,2019-09-11,352.5,75.25 323 | P,2019-09-11,355,77.7 324 | P,2019-09-11,357.5,80.15 325 | P,2019-09-11,360,82.65 326 | P,2019-09-11,362.5,85.1 327 | P,2019-09-11,365,87.6 328 | P,2019-12-12,195,0.51 329 | P,2019-12-12,200,0.62 330 | P,2019-12-12,205,0.78 331 | P,2019-12-12,210,0.88 332 | P,2019-12-12,215,1.1 333 | P,2019-12-12,220,1.28 334 | P,2019-12-12,225,1.6 335 | P,2019-12-12,230,1.91 336 | P,2019-12-12,235,2.42 337 | P,2019-12-12,240,2.8 338 | P,2019-12-12,245,2.56 339 | P,2019-12-12,250,4.55 340 | P,2019-12-12,255,6.05 341 | P,2019-12-12,260,6.45 342 | P,2019-12-12,265,8.2 343 | P,2019-12-12,270,10.05 344 | P,2019-12-12,275,12.2 345 | P,2019-12-12,280,14.85 346 | P,2019-12-12,285,17.65 347 | P,2019-12-12,290,20.55 348 | P,2019-12-12,295,24.2 349 | P,2019-12-12,300,27.25 350 | P,2019-12-12,305,31.7 351 | P,2019-12-12,310,34.5 352 | P,2019-12-12,315,39.9 353 | P,2019-12-12,320,43.35 354 | P,2019-12-12,325,48.7 355 | P,2019-12-12,330,53.2 356 | P,2019-12-12,335,57.85 357 | P,2019-12-12,340,62.55 358 | P,2019-12-12,345,67.3 359 | P,2019-12-12,350,72.1 360 | P,2019-12-12,355,76.9 361 | P,2019-12-12,360,81.75 362 | P,2019-12-12,365,86.65 363 | P,2019-12-12,370,91.55 364 | P,2019-12-12,375,96.45 365 | P,2019-12-12,380,101.35 366 | P,2019-12-12,385,106.25 367 | P,2019-12-12,390,111.2 368 | P,2019-12-12,395,116.1 369 | P,2019-12-12,400,121.05 370 | P,2020-03-12,215,1.87 371 | P,2020-03-12,220,0.89 372 | P,2020-03-12,225,1.25 373 | P,2020-03-12,230,1.81 374 | P,2020-03-12,235,2.46 375 | P,2020-03-12,240,3.34 376 | P,2020-03-12,245,4.36 377 | P,2020-03-12,250,5.66 378 | P,2020-03-12,255,7.1 379 | P,2020-03-12,260,8.9 380 | P,2020-03-12,265,10.8 381 | P,2020-03-12,270,13.15 382 | P,2020-03-12,275,15.5 383 | P,2020-03-12,280,18.4 384 | P,2020-03-12,285,21.3 385 | P,2020-03-12,290,24.55 386 | P,2020-03-12,295,28 387 | P,2020-03-12,300,31.55 388 | P,2020-03-12,305,35.45 389 | P,2020-03-12,310,39.3 390 | P,2020-03-12,315,43.5 391 | P,2020-03-12,320,47.7 392 | P,2020-03-12,325,52.05 393 | P,2020-03-12,330,56.5 394 | P,2020-03-12,335,61 395 | P,2020-03-12,340,65.65 396 | P,2020-03-12,345,70.3 397 | P,2020-06-11,200,1.65 398 | P,2020-06-11,210,2.36 399 | P,2020-06-11,220,3.21 400 | P,2020-06-11,230,4.52 401 | P,2020-06-11,240,5.91 402 | P,2020-06-11,250,8.06 403 | P,2020-06-11,260,11.05 404 | P,2020-06-11,270,15.75 405 | P,2020-06-11,280,19.85 406 | P,2020-06-11,290,25.8 407 | P,2020-06-11,300,32.6 408 | P,2020-06-11,310,40.15 409 | P,2020-06-11,320,48.15 410 | P,2020-06-11,330,56.6 411 | P,2020-06-11,340,65.5 412 | P,2020-06-11,350,74.6 413 | P,2020-06-11,360,83.9 414 | P,2020-06-11,370,93.4 415 | P,2020-12-10,200,2.71 416 | P,2020-12-10,210,3.6 417 | P,2020-12-10,220,4.83 418 | P,2020-12-10,230,6.88 419 | P,2020-12-10,240,8.33 420 | P,2020-12-10,250,11 421 | P,2020-12-10,260,15.25 422 | P,2020-12-10,270,18.4 423 | P,2020-12-10,280,23.2 424 | P,2020-12-10,290,28.85 425 | P,2020-12-10,300,35.25 426 | P,2020-12-10,310,41.65 427 | P,2020-12-10,320,49.2 428 | P,2020-12-10,330,57.25 429 | P,2020-12-10,340,65.55 430 | P,2020-12-10,350,74.35 431 | P,2020-12-10,360,83.15 432 | P,2020-12-10,370,92.35 433 | P,2020-12-10,380,101.55 434 | P,2020-12-10,390,111 435 | P,2020-12-10,400,120.4 436 | P,2021-12-09,200,4.91 437 | P,2021-12-09,210,3.53 438 | P,2021-12-09,220,5.14 439 | P,2021-12-09,230,7.51 440 | P,2021-12-09,240,10.3 441 | P,2021-12-09,250,13.65 442 | P,2021-12-09,260,17.75 443 | P,2021-12-09,270,22.15 444 | P,2021-12-09,280,27.55 445 | P,2021-12-09,290,33.1 446 | P,2021-12-09,300,39.6 447 | P,2021-12-09,310,46.1 448 | P,2021-12-09,320,53.45 449 | P,2021-12-09,330,60.85 450 | P,2021-12-09,340,68.8 451 | P,2021-12-09,350,78.5 452 | -------------------------------------------------------------------------------- /Basic/2. Return Distribution Analysis with Risk Measure.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 2, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import numpy as np\n", 10 | "import math\n", 11 | "from scipy.stats import skew, kurtosis, kurtosistest\n", 12 | "import matplotlib.pyplot as plt\n", 13 | "from scipy.stats import norm, t\n", 14 | "import FinanceDataReader as fdr\n", 15 | "\n", 16 | "ticker = '005930' # Samsung Electronics in KRX\n", 17 | "\n", 18 | "rtn = fdr.DataReader(ticker, '2015-01-01', '2017-12-31')['Change']" 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": 7, 24 | "metadata": {}, 25 | "outputs": [ 26 | { 27 | "name": "stdout", 28 | "output_type": "stream", 29 | "text": [ 30 | "Gaussian mean = 0.00102\n", 31 | "Gaussian std = 0.01623\n", 32 | "\n", 33 | "nu = 6.00\n", 34 | "Student t mean = 0.00127\n", 35 | "Student t std = 0.01317\n" 36 | ] 37 | } 38 | ], 39 | "source": [ 40 | "mu_gaussian, sig_gaussian = norm.fit(rtn)\n", 41 | "\n", 42 | "dx = 0.0001 # resolution\n", 43 | "x = np.arange(-0.1, 0.1, dx)\n", 44 | "\n", 45 | "# Gaussian fitting\n", 46 | "gaussian_pdf = norm.pdf(x, mu_gaussian, sig_gaussian)\n", 47 | "print(\"Gaussian mean = %.5f\" % mu_gaussian)\n", 48 | "print(\"Gaussian std = %.5f\" % sig_gaussian)\n", 49 | "print()\n", 50 | "\n", 51 | "# Student t fitting\n", 52 | "parm = t.fit(rtn)\n", 53 | "nu, mu_t, sig_t = parm\n", 54 | "nu = np.round(nu)\n", 55 | "t_pdf = t.pdf(x, nu, mu_t, sig_t)\n", 56 | "print(\"nu = %.2f\" % nu)\n", 57 | "print(\"Student t mean = %.5f\" % mu_t)\n", 58 | "print(\"Student t std = %.5f\" % sig_t)" 59 | ] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "execution_count": 10, 64 | "metadata": {}, 65 | "outputs": [ 66 | { 67 | "name": "stdout", 68 | "output_type": "stream", 69 | "text": [ 70 | "99% 1-day Gaussian VaR = 3.67%\n", 71 | "99% 1-day Gaussian CVaR = 4.22%\n", 72 | "99% 1-day Student t VaR = 4.06%\n", 73 | "99% 1-day Student t CVaR = 5.62%\n" 74 | ] 75 | } 76 | ], 77 | "source": [ 78 | "# Compute VaRs and CVaRs\n", 79 | " \n", 80 | "h = 1\n", 81 | "alpha = 0.01 # significance level\n", 82 | "lev = 100*(1-alpha)\n", 83 | "xanu = t.ppf(alpha, nu)\n", 84 | " \n", 85 | "CVaR_n = alpha**-1 * norm.pdf(norm.ppf(alpha))*sig_gaussian - mu_gaussian\n", 86 | "VaR_n = norm.ppf(1-alpha)*sig_gaussian - mu_gaussian\n", 87 | " \n", 88 | "VaR_t = np.sqrt((nu-2)/nu) * t.ppf(1-alpha, nu)*sig_gaussian - h*mu_gaussian\n", 89 | "CVaR_t = -1/alpha * (1-nu)**(-1) * (nu-2+xanu**2) * \\\n", 90 | " t.pdf(xanu, nu)*sig_gaussian - h*mu_gaussian\n", 91 | " \n", 92 | "print(\"%g%% %g-day Gaussian VaR = %.2f%%\" % (lev, h, VaR_n*100))\n", 93 | "print(\"%g%% %g-day Gaussian CVaR = %.2f%%\" % (lev, h, CVaR_n*100))\n", 94 | "print(\"%g%% %g-day Student t VaR = %.2f%%\" % (lev, h, VaR_t *100))\n", 95 | "print(\"%g%% %g-day Student t CVaR = %.2f%%\" % (lev, h, CVaR_t*100))" 96 | ] 97 | }, 98 | { 99 | "cell_type": "code", 100 | "execution_count": 19, 101 | "metadata": {}, 102 | "outputs": [ 103 | { 104 | "data": { 105 | "image/png": "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\n", 106 | "text/plain": [ 107 | "
" 108 | ] 109 | }, 110 | "metadata": { 111 | "needs_background": "light" 112 | }, 113 | "output_type": "display_data" 114 | } 115 | ], 116 | "source": [ 117 | "plt.figure(num=1, figsize=(11, 6))\n", 118 | "grey = .77, .77, .77\n", 119 | "# main figure\n", 120 | "plt.hist(rtn, bins=50, normed=True, color=grey, edgecolor='none')\n", 121 | "plt.axis(\"tight\")\n", 122 | "plt.plot(x, gaussian_pdf, 'b', label=\"Gaussian PDF\")\n", 123 | "plt.axis(\"tight\")\n", 124 | "plt.plot(x, t_pdf, 'g', label=\"Student t PDF\")\n", 125 | "plt.xlim([-0.2, 0.1])\n", 126 | "plt.ylim([0, 50])\n", 127 | "plt.legend(loc=\"best\")\n", 128 | "plt.xlabel(\"Daily Returns of Samsung Electronics\")\n", 129 | "plt.ylabel(\"Normalized Return Distribution\")\n", 130 | "\n", 131 | "# inset\n", 132 | "a = plt.axes([.22, .35, .3, .4])\n", 133 | "plt.hist(rtn, bins=50, normed=True, color=grey, edgecolor='none')\n", 134 | "plt.plot(x, gaussian_pdf, 'b')\n", 135 | "plt.plot(x, t_pdf, 'g')\n", 136 | "# Student VaR line\n", 137 | "plt.plot([-CVaR_t, -CVaR_t], [0, 3], c='r')\n", 138 | "# Gaussian VaR line\n", 139 | "plt.plot([-CVaR_n, -CVaR_n], [0, 4], c='b')\n", 140 | "plt.text(-CVaR_n-0.015, 4.1, \"Gaussian CVaR\", color='b')\n", 141 | "plt.text(-CVaR_t-0.0171, 3.1, \"Student t CVaR\", color='r')\n", 142 | "plt.xlim([-0.09, -0.02])\n", 143 | "plt.ylim([0, 5])\n", 144 | "plt.show()" 145 | ] 146 | }, 147 | { 148 | "cell_type": "markdown", 149 | "metadata": {}, 150 | "source": [ 151 | "reference : http://www.quantatrisk.com/2016/12/08/conditional-value-at-risk-normal-student-t-var-model-python/" 152 | ] 153 | }, 154 | { 155 | "cell_type": "code", 156 | "execution_count": null, 157 | "metadata": {}, 158 | "outputs": [], 159 | "source": [] 160 | } 161 | ], 162 | "metadata": { 163 | "kernelspec": { 164 | "display_name": "Python 3", 165 | "language": "python", 166 | "name": "python3" 167 | }, 168 | "language_info": { 169 | "codemirror_mode": { 170 | "name": "ipython", 171 | "version": 3 172 | }, 173 | "file_extension": ".py", 174 | "mimetype": "text/x-python", 175 | "name": "python", 176 | "nbconvert_exporter": "python", 177 | "pygments_lexer": "ipython3", 178 | "version": "3.7.3" 179 | }, 180 | "toc": { 181 | "base_numbering": 1, 182 | "nav_menu": {}, 183 | "number_sections": true, 184 | "sideBar": true, 185 | "skip_h1_title": false, 186 | "title_cell": "Table of Contents", 187 | "title_sidebar": "Contents", 188 | "toc_cell": false, 189 | "toc_position": {}, 190 | "toc_section_display": true, 191 | "toc_window_display": false 192 | }, 193 | "varInspector": { 194 | "cols": { 195 | "lenName": 16, 196 | "lenType": 16, 197 | "lenVar": 40 198 | }, 199 | "kernels_config": { 200 | "python": { 201 | "delete_cmd_postfix": "", 202 | "delete_cmd_prefix": "del ", 203 | "library": "var_list.py", 204 | "varRefreshCmd": "print(var_dic_list())" 205 | }, 206 | "r": { 207 | "delete_cmd_postfix": ") ", 208 | "delete_cmd_prefix": "rm(", 209 | "library": "var_list.r", 210 | "varRefreshCmd": "cat(var_dic_list()) " 211 | } 212 | }, 213 | "types_to_exclude": [ 214 | "module", 215 | "function", 216 | "builtin_function_or_method", 217 | "instance", 218 | "_Feature" 219 | ], 220 | "window_display": false 221 | } 222 | }, 223 | "nbformat": 4, 224 | "nbformat_minor": 2 225 | } 226 | -------------------------------------------------------------------------------- /Basic/3. Naive Classification Procedure for ML Trading.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "Paper : [Deep neural networks, gradient-boosted trees,\n", 8 | "random forests: Statistical arbitrage on the S&P 500](https://www.econstor.eu/bitstream/10419/130166/1/856307327.pdf)" 9 | ] 10 | }, 11 | { 12 | "cell_type": "markdown", 13 | "metadata": {}, 14 | "source": [ 15 | "## Classification framework in Trading" 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": 1, 21 | "metadata": {}, 22 | "outputs": [ 23 | { 24 | "data": { 25 | "text/html": [ 26 | "
\n", 27 | "\n", 40 | "\n", 41 | " \n", 42 | " \n", 43 | " \n", 44 | " \n", 45 | " \n", 46 | " \n", 47 | " \n", 48 | " \n", 49 | " \n", 50 | " \n", 51 | " \n", 52 | " \n", 53 | " \n", 54 | " \n", 55 | " \n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | " \n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | "
CloseOpenHighLowVolumeChange
Date
2000-01-0339.1639.7540.3838.9413460000.0-0.0278
2000-01-0438.4138.6939.0938.2514510000.0-0.0192
2000-01-0540.5039.0040.8838.9117490000.00.0544
2000-01-0642.5940.3142.9140.0919460000.00.0516
2000-01-0742.4742.9743.1242.0016600000.0-0.0028
\n", 109 | "
" 110 | ], 111 | "text/plain": [ 112 | " Close Open High Low Volume Change\n", 113 | "Date \n", 114 | "2000-01-03 39.16 39.75 40.38 38.94 13460000.0 -0.0278\n", 115 | "2000-01-04 38.41 38.69 39.09 38.25 14510000.0 -0.0192\n", 116 | "2000-01-05 40.50 39.00 40.88 38.91 17490000.0 0.0544\n", 117 | "2000-01-06 42.59 40.31 42.91 40.09 19460000.0 0.0516\n", 118 | "2000-01-07 42.47 42.97 43.12 42.00 16600000.0 -0.0028" 119 | ] 120 | }, 121 | "execution_count": 1, 122 | "metadata": {}, 123 | "output_type": "execute_result" 124 | } 125 | ], 126 | "source": [ 127 | "import numpy as np\n", 128 | "import pandas as pd\n", 129 | "import FinanceDataReader as fdr\n", 130 | "\n", 131 | "ticker = 'xom'\n", 132 | "start_date = '2000-1-1'\n", 133 | "end_date = '2019-1-1'\n", 134 | "\n", 135 | "df = fdr.DataReader(ticker, start_date, end_date)\n", 136 | "df.head()" 137 | ] 138 | }, 139 | { 140 | "cell_type": "code", 141 | "execution_count": 3, 142 | "metadata": {}, 143 | "outputs": [ 144 | { 145 | "data": { 146 | "text/plain": [ 147 | "" 148 | ] 149 | }, 150 | "execution_count": 3, 151 | "metadata": {}, 152 | "output_type": "execute_result" 153 | }, 154 | { 155 | "data": { 156 | "image/png": "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\n", 157 | "text/plain": [ 158 | "
" 159 | ] 160 | }, 161 | "metadata": { 162 | "needs_background": "light" 163 | }, 164 | "output_type": "display_data" 165 | } 166 | ], 167 | "source": [ 168 | "df['Close'].plot()" 169 | ] 170 | }, 171 | { 172 | "cell_type": "markdown", 173 | "metadata": {}, 174 | "source": [ 175 | "### Features Contruction" 176 | ] 177 | }, 178 | { 179 | "cell_type": "code", 180 | "execution_count": 4, 181 | "metadata": {}, 182 | "outputs": [], 183 | "source": [ 184 | "XOM = df\n", 185 | "# Features construction \n", 186 | "XOM['Open-Close'] = (XOM.Open - XOM.Close)/XOM.Open\n", 187 | "XOM['High-Low'] = (XOM.High - XOM.Low)/XOM.Low\n", 188 | "XOM['std_5'] = XOM['Change'].rolling(5).std()\n", 189 | "XOM['ret_5'] = XOM['Change'].rolling(5).mean()\n", 190 | "XOM.dropna(inplace=True)\n", 191 | "\n", 192 | "# X is the input variable\n", 193 | "X = XOM[['Open-Close', 'High-Low', 'std_5', 'ret_5']]\n", 194 | "\n", 195 | "# Y is the target or output variable (target : If tomorrow's price will go up 1, otherwise -1)\n", 196 | "y = np.where(XOM['Close'].shift(-1) > XOM['Close'], 1, -1)" 197 | ] 198 | }, 199 | { 200 | "cell_type": "markdown", 201 | "metadata": {}, 202 | "source": [ 203 | "### Training ML Model" 204 | ] 205 | }, 206 | { 207 | "cell_type": "code", 208 | "execution_count": 5, 209 | "metadata": {}, 210 | "outputs": [ 211 | { 212 | "name": "stdout", 213 | "output_type": "stream", 214 | "text": [ 215 | "(3581, 4) (1194, 4)\n", 216 | "(3581,) (1194,)\n" 217 | ] 218 | } 219 | ], 220 | "source": [ 221 | "# Total dataset length\n", 222 | "dataset_length = XOM.shape[0]\n", 223 | "\n", 224 | "# Training dataset length\n", 225 | "split = int(dataset_length * 0.75)\n", 226 | "\n", 227 | "# Splittiing the X and y into train and test datasets\n", 228 | "X_train, X_test = X[:split], X[split:]\n", 229 | "y_train, y_test = y[:split], y[split:]\n", 230 | "\n", 231 | "# Print the size of the train and test dataset\n", 232 | "print(X_train.shape, X_test.shape)\n", 233 | "print(y_train.shape, y_test.shape)" 234 | ] 235 | }, 236 | { 237 | "cell_type": "code", 238 | "execution_count": 6, 239 | "metadata": {}, 240 | "outputs": [ 241 | { 242 | "name": "stderr", 243 | "output_type": "stream", 244 | "text": [ 245 | "/Users/cheongyeongja/anaconda3/envs/machine/lib/python3.7/site-packages/sklearn/ensemble/forest.py:245: FutureWarning: The default value of n_estimators will change from 10 in version 0.20 to 100 in 0.22.\n", 246 | " \"10 in version 0.20 to 100 in 0.22.\", FutureWarning)\n" 247 | ] 248 | } 249 | ], 250 | "source": [ 251 | "from sklearn.ensemble import GradientBoostingClassifier,RandomForestClassifier\n", 252 | "from sklearn.neural_network import MLPClassifier\n", 253 | "from sklearn.ensemble import VotingClassifier\n", 254 | "\n", 255 | "\n", 256 | "clf1 = GradientBoostingClassifier(random_state=1)\n", 257 | "clf2 = RandomForestClassifier(random_state=1)\n", 258 | "clf3 = MLPClassifier(hidden_layer_sizes=(7,3), learning_rate='invscaling' ,random_state=1)\n", 259 | "clf = VotingClassifier(estimators=[('gb', clf1), ('rf', clf2), ('nn', clf3)], voting='soft')\n", 260 | "\n", 261 | "# Create the model on train dataset\n", 262 | "# clf = tree.DecisionTreeClassifier(random_state=5) # random_state is random seed\n", 263 | "model = clf.fit(X_train, y_train)" 264 | ] 265 | }, 266 | { 267 | "cell_type": "code", 268 | "execution_count": 7, 269 | "metadata": { 270 | "scrolled": false 271 | }, 272 | "outputs": [ 273 | { 274 | "name": "stdout", 275 | "output_type": "stream", 276 | "text": [ 277 | "Correct Prediction: 591\n", 278 | "Total Prediction: 1194\n", 279 | "Accuracy : 49.497487437185924 %\n" 280 | ] 281 | } 282 | ], 283 | "source": [ 284 | "from sklearn.metrics import accuracy_score\n", 285 | "\n", 286 | "# Calculate the accuracy\n", 287 | "print('Correct Prediction: ', accuracy_score(y_test, model.predict(X_test), normalize=False))\n", 288 | "print('Total Prediction: ', X_test.shape[0])\n", 289 | "print('Accuracy : {} %'.format(accuracy_score(y_test, model.predict(X_test), normalize=True)*100))" 290 | ] 291 | }, 292 | { 293 | "cell_type": "markdown", 294 | "metadata": {}, 295 | "source": [ 296 | "### Cross validation for the machine learning model" 297 | ] 298 | }, 299 | { 300 | "cell_type": "code", 301 | "execution_count": 8, 302 | "metadata": {}, 303 | "outputs": [ 304 | { 305 | "name": "stdout", 306 | "output_type": "stream", 307 | "text": [ 308 | "Train: TEST:\n", 309 | "[1194 1195 1196 ... 4772 4773 4774] [ 0 1 2 ... 1191 1192 1193]\n", 310 | "[ 0 1 2 ... 4772 4773 4774] [1194 1195 1196 ... 2385 2386 2387]\n", 311 | "[ 0 1 2 ... 4772 4773 4774] [2388 2389 2390 ... 3579 3580 3581]\n", 312 | "[ 0 1 2 ... 3579 3580 3581] [3582 3583 3584 ... 4772 4773 4774]\n" 313 | ] 314 | } 315 | ], 316 | "source": [ 317 | "from sklearn.model_selection import KFold\n", 318 | "\n", 319 | "kf = KFold(n_splits=4,shuffle=False)\n", 320 | "\n", 321 | "print(\"Train: \", \"TEST:\")\n", 322 | "for train_index, test_index in kf.split(X):\n", 323 | " print(train_index, test_index)" 324 | ] 325 | }, 326 | { 327 | "cell_type": "code", 328 | "execution_count": 9, 329 | "metadata": {}, 330 | "outputs": [], 331 | "source": [ 332 | "from sklearn.metrics import confusion_matrix\n", 333 | "\n", 334 | "%matplotlib inline\n", 335 | "import matplotlib.pyplot as plt\n", 336 | "import seaborn as sn" 337 | ] 338 | }, 339 | { 340 | "cell_type": "code", 341 | "execution_count": 10, 342 | "metadata": {}, 343 | "outputs": [ 344 | { 345 | "name": "stderr", 346 | "output_type": "stream", 347 | "text": [ 348 | "/Users/cheongyeongja/anaconda3/envs/machine/lib/python3.7/site-packages/sklearn/ensemble/forest.py:245: FutureWarning: The default value of n_estimators will change from 10 in version 0.20 to 100 in 0.22.\n", 349 | " \"10 in version 0.20 to 100 in 0.22.\", FutureWarning)\n", 350 | "/Users/cheongyeongja/anaconda3/envs/machine/lib/python3.7/site-packages/sklearn/ensemble/forest.py:245: FutureWarning: The default value of n_estimators will change from 10 in version 0.20 to 100 in 0.22.\n", 351 | " \"10 in version 0.20 to 100 in 0.22.\", FutureWarning)\n", 352 | "/Users/cheongyeongja/anaconda3/envs/machine/lib/python3.7/site-packages/sklearn/ensemble/forest.py:245: FutureWarning: The default value of n_estimators will change from 10 in version 0.20 to 100 in 0.22.\n", 353 | " \"10 in version 0.20 to 100 in 0.22.\", FutureWarning)\n", 354 | "/Users/cheongyeongja/anaconda3/envs/machine/lib/python3.7/site-packages/sklearn/ensemble/forest.py:245: FutureWarning: The default value of n_estimators will change from 10 in version 0.20 to 100 in 0.22.\n", 355 | " \"10 in version 0.20 to 100 in 0.22.\", FutureWarning)\n" 356 | ] 357 | }, 358 | { 359 | "name": "stdout", 360 | "output_type": "stream", 361 | "text": [ 362 | "[49.83249581239531, 49.916247906197654, 50.67001675041875, 50.37720033528919]\n" 363 | ] 364 | }, 365 | { 366 | "data": { 367 | "image/png": "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\n", 368 | "text/plain": [ 369 | "
" 370 | ] 371 | }, 372 | "metadata": { 373 | "needs_background": "light" 374 | }, 375 | "output_type": "display_data" 376 | } 377 | ], 378 | "source": [ 379 | "# Initialize the accuracy of the models to blank list. The accuracy of each model will be appended to this list\n", 380 | "accuracy_model = []\n", 381 | "\n", 382 | "array = [[0,0],[0,0]]\n", 383 | "\n", 384 | "# Iterate over each train-test split\n", 385 | "for train_index, test_index in kf.split(X):\n", 386 | " # Split train-test\n", 387 | " X_train, X_test = X.iloc[train_index], X.iloc[test_index]\n", 388 | " y_train, y_test = y[train_index], y[test_index]\n", 389 | " \n", 390 | " # Train the model\n", 391 | " model = clf.fit(X_train, y_train)\n", 392 | " \n", 393 | " # Append to accuracy_model the accuracy of the model\n", 394 | " accuracy_model.append(accuracy_score(y_test, model.predict(X_test), normalize=True)*100)\n", 395 | " \n", 396 | " c = confusion_matrix(y_test, model.predict(X_test)) \n", 397 | " \n", 398 | " # Add the score to the previous confusion matrix of previous model\n", 399 | " array = array + c\n", 400 | "\n", 401 | "# Print the accuracy \n", 402 | "print(accuracy_model)\n", 403 | " \n", 404 | " \n", 405 | "# Create a pandas dataframe that stores the output of confusion matrix \n", 406 | "df = pd.DataFrame(array, index = ['Up', 'Down'], columns = ['Up', 'Down'])\n", 407 | "\n", 408 | "# Plot the heatmap\n", 409 | "plt.rcParams['figure.figsize'] = [30, 15]\n", 410 | "plt.rcParams.update({'font.size': 20})\n", 411 | "plt.rc('axes', labelsize = 25)\n", 412 | "plt.rc('figure', titlesize = 30)\n", 413 | "\n", 414 | "sn.heatmap(df, annot=True, cmap='Greens', fmt='g')\n", 415 | "plt.xlabel('Predicted')\n", 416 | "plt.ylabel('Actual')\n", 417 | "plt.show()" 418 | ] 419 | }, 420 | { 421 | "cell_type": "markdown", 422 | "metadata": {}, 423 | "source": [ 424 | "### Stability of the Model Check" 425 | ] 426 | }, 427 | { 428 | "cell_type": "code", 429 | "execution_count": 11, 430 | "metadata": { 431 | "scrolled": true 432 | }, 433 | "outputs": [ 434 | { 435 | "name": "stdout", 436 | "output_type": "stream", 437 | "text": [ 438 | "Mean : 50.198990201075226 Std : 0.3420110394305758\n" 439 | ] 440 | } 441 | ], 442 | "source": [ 443 | "print('Mean :', np.mean(accuracy_model), 'Std :',np.std(accuracy_model))" 444 | ] 445 | } 446 | ], 447 | "metadata": { 448 | "kernelspec": { 449 | "display_name": "Python 3", 450 | "language": "python", 451 | "name": "python3" 452 | }, 453 | "language_info": { 454 | "codemirror_mode": { 455 | "name": "ipython", 456 | "version": 3 457 | }, 458 | "file_extension": ".py", 459 | "mimetype": "text/x-python", 460 | "name": "python", 461 | "nbconvert_exporter": "python", 462 | "pygments_lexer": "ipython3", 463 | "version": "3.7.3" 464 | }, 465 | "toc": { 466 | "base_numbering": 1, 467 | "nav_menu": {}, 468 | "number_sections": true, 469 | "sideBar": true, 470 | "skip_h1_title": false, 471 | "title_cell": "Table of Contents", 472 | "title_sidebar": "Contents", 473 | "toc_cell": false, 474 | "toc_position": {}, 475 | "toc_section_display": true, 476 | "toc_window_display": false 477 | }, 478 | "varInspector": { 479 | "cols": { 480 | "lenName": 16, 481 | "lenType": 16, 482 | "lenVar": 40 483 | }, 484 | "kernels_config": { 485 | "python": { 486 | "delete_cmd_postfix": "", 487 | "delete_cmd_prefix": "del ", 488 | "library": "var_list.py", 489 | "varRefreshCmd": "print(var_dic_list())" 490 | }, 491 | "r": { 492 | "delete_cmd_postfix": ") ", 493 | "delete_cmd_prefix": "rm(", 494 | "library": "var_list.r", 495 | "varRefreshCmd": "cat(var_dic_list()) " 496 | } 497 | }, 498 | "types_to_exclude": [ 499 | "module", 500 | "function", 501 | "builtin_function_or_method", 502 | "instance", 503 | "_Feature" 504 | ], 505 | "window_display": false 506 | } 507 | }, 508 | "nbformat": 4, 509 | "nbformat_minor": 2 510 | } 511 | -------------------------------------------------------------------------------- /Basic/4. ELS Pricing.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 2, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import numpy as np\n", 10 | "from datetime import date\n", 11 | "\n", 12 | "n = 10000 # 시뮬레이션 횟수\n", 13 | "r = 0.0165 # 이자율\n", 14 | "volatility = 0.1778 # 변동성\n", 15 | "\n", 16 | "# 장이 열리는 일자만 고려할 시\n", 17 | "#n0 = np.datetime64('2018-03-23') # 최초 기준가격평가일\n", 18 | "## datatime.date(2018,03,23)과 동일\n", 19 | "#n1 = np.datetime64('2018-09-19') # 1차 조기상환일\n", 20 | "#n2 = np.datetime64('2019-03-20') # 2차 조기상환일\n", 21 | "#n3 = np.datetime64('2019-09-19') # 3차 조기상환일\n", 22 | "#n4 = np.datetime64('2020-03-19') # 4차 조기상환일\n", 23 | "#n5 = np.datetime64('2020-09-21') # 5차 조기상환일\n", 24 | "#n6 = np.datetime64('2021-03-19') # 만기 상환일\n", 25 | "#\n", 26 | "#T1 = np.busday_count(n0, n1) # 1차 조기상환일까지 남은 일수, 128\n", 27 | "#T2 = np.busday_count(n0, n2) # 2차 조기상환일까지 남은 일수, 258\n", 28 | "#T3 = np.busday_count(n0, n3) # 3차 조기상환일까지 남은 일수, 389\n", 29 | "#T4 = np.busday_count(n0, n4) # 4차 조기상환일까지 남은 일수, 519\n", 30 | "#T5 = np.busday_count(n0, n5) # 5차 조기상환일까지 남은 일수, 651\n", 31 | "#T6 = np.busday_count(n0, n6) # 만기일까지 남은 일수, 780\n", 32 | "\n", 33 | "# 365일 다 고려할 시\n", 34 | "n0 = date.toordinal(date(2018,3,23)) # 최초 기준가격평가일\n", 35 | "n1 = date.toordinal(date(2018,9,19)) # 1차 조기상환일\n", 36 | "n2 = date.toordinal(date(2019,3,20)) # 2차 조기상환일\n", 37 | "n3 = date.toordinal(date(2019,9,19)) # 3차 조기상환일\n", 38 | "n4 = date.toordinal(date(2020,3,19)) # 4차 조기상환일\n", 39 | "n5 = date.toordinal(date(2020,9,21)) # 5차 조기상환일\n", 40 | "n6 = date.toordinal(date(2021,3,19)) # 만기 조기상환일\n", 41 | "\n", 42 | "T1 = n1-n0 # 1차 조기상환일까지 남은 일수, 180\n", 43 | "T2 = n2-n0 # 2차 조기상환일까지 남은 일수, 362\n", 44 | "T3 = n3-n0 # 3차 조기상환일까지 남은 일수, 545\n", 45 | "T4 = n4-n0 # 4차 조기상환일까지 남은 일수, 727\n", 46 | "T5 = n5-n0 # 5차 조기상환일까지 남은 일수, 913\n", 47 | "T6 = n6-n0 # 만기일까지 남은 일수, 1092\n", 48 | "\n", 49 | "\n", 50 | "#oneyar # 1년을 장 개시일 기준으로 할 때\n", 51 | "oneyear = 365\n", 52 | "total_date = T6 # 780\n", 53 | "dt = 1/oneyear # 시간 격자 간격\n", 54 | "S = np.zeros((total_date+1, 1)) # 주가벡터 생성(781,1)\n", 55 | "S[0] = 100 # 초기 주가\n", 56 | "strike_price = S[0] * [0.95, 0.95, 0.95, 0.90, 0.90, 0.85] #(6,)\n", 57 | "repay_n = len(strike_price) # 조기상환횟수, 6\n", 58 | "coupon_rate = [0.022, 0.044, 0.066, 0.088, 0.11, 0.132] # 조기행사시 받는 쿠폰 이자율\n", 59 | "check_day = [T1, T2, T3, T4, T5, T6] # 조기상환일 벡터 \n", 60 | "\n", 61 | "total_payoff = np.zeros((repay_n, 1)) # 전체 payoff 벡터\n", 62 | "payment = np.zeros((repay_n, 1)) # 조기상환시 payoff 벡터\n", 63 | "\n", 64 | "facevalue = 10000\n", 65 | "kib = 0.65 * S[0] # Knock In Barrier : 65\n", 66 | "dummy = 0.132\n", 67 | "\n", 68 | "#%% 조기상환시의 payoff 벡터 생성\n", 69 | "for i in range(repay_n):\n", 70 | " payment[i] = facevalue * (1 + coupon_rate[i])\n", 71 | "# payment : array([[10220.],\n", 72 | "# [10440.],\n", 73 | "# [10660.],\n", 74 | "# [10880.],\n", 75 | "# [11100.],\n", 76 | "# [11320.]])\n", 77 | "\n", 78 | "#%% Monte-Carlo Simulation을 이용한 ELS Pricing\n", 79 | "for i in range(n):\n", 80 | " # 임의의 주가 경로 생성\n", 81 | " for j in range(total_date):\n", 82 | " S[j+1] = S[j]*np.exp((r-0.5*volatility**2)*dt \\\n", 83 | " + volatility*np.sqrt(dt)*np.random.randn(1))\n", 84 | " \n", 85 | " # 조기상환일 체크하여 payoff 결정\n", 86 | " S_checkday = S[check_day] # 해당 조기 상환일의 주가\n", 87 | " payoff = np.zeros((repay_n, 1)) # payoff 벡터 초기화\n", 88 | " \n", 89 | " repay_event = 0 # 조기상환이 되지 않은 상태를 의미함. for문을 빠져나감\n", 90 | " \n", 91 | " for j in range(repay_n):\n", 92 | " if S_checkday[j] >= strike_price[j]: # 만약 해당일의 주가가 행사가격보다 크거나 같으면,\n", 93 | " payoff[j] = payment[j] # 조기상환시 약속한 지불금액이 payoff가 된다.\n", 94 | " repay_event = 1 # 조기상환이 된 상태를 의미함\n", 95 | " break\n", 96 | " \n", 97 | " # 조기상환이 되지 않고 만기까지 온 경우\n", 98 | " if repay_event == 0:\n", 99 | " if min(S) > kib : # Knock-In-barrier 아래로 내려간적이 없으면\n", 100 | " payoff[-1] = facevalue*(1 + dummy) # 액면가에 dummy rate를 곱한 만큼 지불(가장 좋은 상황)\n", 101 | " else:\n", 102 | " payoff[-1] = facevalue*(S[-1]/S[0]) # 액면가에 마지막주가/초기가 만큼 곱해서 지불(가장 안 좋은 상황)\n", 103 | " \n", 104 | " # 한 번 시뮬레이션이 끝날 때 마다 total_payoff 해당 상황 자리에 쌓아줌\n", 105 | " total_payoff = total_payoff + payoff\n", 106 | "\n", 107 | "mean_payoff = total_payoff/n #모든 시뮬레이션 payoff의 평균을 구함\n", 108 | "\n", 109 | "#%% ELS Pricing\n", 110 | "discount_payoff = np.zeros_like(mean_payoff)\n", 111 | "for i in range(repay_n):\n", 112 | " discount_payoff[i] = mean_payoff[i]*np.exp(-r*check_day[i]/oneyear)\n", 113 | "\n", 114 | "\n", 115 | "Price = sum(discount_payoff) " 116 | ] 117 | }, 118 | { 119 | "cell_type": "code", 120 | "execution_count": 3, 121 | "metadata": {}, 122 | "outputs": [ 123 | { 124 | "name": "stdout", 125 | "output_type": "stream", 126 | "text": [ 127 | "[9872.34264275]\n" 128 | ] 129 | } 130 | ], 131 | "source": [ 132 | "print(Price)" 133 | ] 134 | }, 135 | { 136 | "cell_type": "code", 137 | "execution_count": null, 138 | "metadata": {}, 139 | "outputs": [], 140 | "source": [] 141 | } 142 | ], 143 | "metadata": { 144 | "kernelspec": { 145 | "display_name": "Python 3", 146 | "language": "python", 147 | "name": "python3" 148 | }, 149 | "language_info": { 150 | "codemirror_mode": { 151 | "name": "ipython", 152 | "version": 3 153 | }, 154 | "file_extension": ".py", 155 | "mimetype": "text/x-python", 156 | "name": "python", 157 | "nbconvert_exporter": "python", 158 | "pygments_lexer": "ipython3", 159 | "version": "3.7.3" 160 | }, 161 | "toc": { 162 | "base_numbering": 1, 163 | "nav_menu": {}, 164 | "number_sections": true, 165 | "sideBar": true, 166 | "skip_h1_title": false, 167 | "title_cell": "Table of Contents", 168 | "title_sidebar": "Contents", 169 | "toc_cell": false, 170 | "toc_position": {}, 171 | "toc_section_display": true, 172 | "toc_window_display": false 173 | }, 174 | "varInspector": { 175 | "cols": { 176 | "lenName": 16, 177 | "lenType": 16, 178 | "lenVar": 40 179 | }, 180 | "kernels_config": { 181 | "python": { 182 | "delete_cmd_postfix": "", 183 | "delete_cmd_prefix": "del ", 184 | "library": "var_list.py", 185 | "varRefreshCmd": "print(var_dic_list())" 186 | }, 187 | "r": { 188 | "delete_cmd_postfix": ") ", 189 | "delete_cmd_prefix": "rm(", 190 | "library": "var_list.r", 191 | "varRefreshCmd": "cat(var_dic_list()) " 192 | } 193 | }, 194 | "types_to_exclude": [ 195 | "module", 196 | "function", 197 | "builtin_function_or_method", 198 | "instance", 199 | "_Feature" 200 | ], 201 | "window_display": false 202 | } 203 | }, 204 | "nbformat": 4, 205 | "nbformat_minor": 2 206 | } 207 | -------------------------------------------------------------------------------- /Basic/fig/1_MPT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coorung/Finance-World/983d05541d8f85529f6ccf802b27d73c9eeecf53/Basic/fig/1_MPT.png -------------------------------------------------------------------------------- /Basic/fig/2_Distribution_Analysis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coorung/Finance-World/983d05541d8f85529f6ccf802b27d73c9eeecf53/Basic/fig/2_Distribution_Analysis.png -------------------------------------------------------------------------------- /Basic/fig/3_Classification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coorung/Finance-World/983d05541d8f85529f6ccf802b27d73c9eeecf53/Basic/fig/3_Classification.png -------------------------------------------------------------------------------- /Basic/fig/4_ELS.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coorung/Finance-World/983d05541d8f85529f6ccf802b27d73c9eeecf53/Basic/fig/4_ELS.jpg -------------------------------------------------------------------------------- /Basic/fig/5_Volsurface.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coorung/Finance-World/983d05541d8f85529f6ccf802b27d73c9eeecf53/Basic/fig/5_Volsurface.png -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 U. Jang 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Finance World 2 | Optimization techniques on the financial area for the hedging, investment strategies, and risk measures. 3 | Codes are categorized to Basic & Advanced, as the Financial engineering or Market microstructure concept are included or not. I am trying to visualize it to grasp well but recommend that check the reference paper before you give yourself over to code, especially in Advanced folder. 4 | 5 | This repository will be added & fixed continuously 6 | 7 | ## Basic 8 | ### 1. Modern Portfolio Theory 9 | ![MPT](./Basic/fig/1_MPT.png) 10 | ### 2. Return Distribution Analysis with Risk Measure 11 | ![2. Return Distribution Analysis with Risk Measure](./Basic/fig/2_Distribution_Analysis.png) 12 | ### 3. Naive Classification Procedure for ML Trading 13 | ![3. Naive Classification Procedure for ML Trading](./Basic/fig/3_Classification.png) 14 | ### 4. ELS Pricing(Kor) 15 | (The figure below is only intended to show the structure of the ELS. Code result is just a price of ELS) 16 | ![4. ELS Pricing](./Basic/fig/4_ELS.jpg) 17 | ### 5. Volatility Surface 18 | ![5. Volatility Surface](./Basic/fig/5_Volsurface.png) 19 | 20 | ## Advanced 21 | 22 | ### 1. Hedging Option with Replicating Portfolio(Kor) 23 | ![1. Hedging Option with Replicating Portfolio](./Advanced/fig/1_ReplicatingPF.gif) 24 | ### 2. Pension Planning using HJB eqn 25 | ![2. Pension Planning using HJB eqn](./Advanced/fig/2_PensionPlan1.png) 26 | ![2. Pension Planning using HJB eqn](./Advanced/fig/2_PensionPlan2.png) 27 | ### 3. Pension Planning with RL 28 | ![3. Pension Planning with RL](./Advanced/fig/3_PensionPlanRL.png) 29 | ### 4. High Frequency Trading with RL 30 | ![4. High Frequency Trading with RL](./Advanced/fig/4_HFT_RL.png) 31 | 32 | 33 | (*cont'd*) 34 | 35 | MIT License 36 | 37 | Copyright (c) 2019 U. Jang 38 | --------------------------------------------------------------------------------