├── README.md
└── jupyter
├── .ipynb_checkpoints
├── Capital Asset Pricing Model Implementation-checkpoint.ipynb
├── Capital Asset Pricing Model-checkpoint.ipynb
├── Modern Portfolio Implementation -checkpoint.ipynb
├── Modern Portfolio Theory-checkpoint.ipynb
├── Stock Market Basics -checkpoint.ipynb
└── Untitled-checkpoint.ipynb
├── Capital Asset Pricing Model Implementation.ipynb
├── Capital Asset Pricing Model.ipynb
├── Modern Portfolio Implementation .ipynb
├── Modern Portfolio Theory.ipynb
├── Stock Market Basics .ipynb
├── Untitled.ipynb
└── images
├── CML2.jpg
├── SML.jpg
├── cal.png
├── efficientfrontier.png
├── lin_regress.png
└── markowitz_port_optimization.png
/README.md:
--------------------------------------------------------------------------------
1 | # Quantitative-Finance-Algorithmic-Trading-in-Python
2 | Quantitative Finance & Algorithmic Trading in Python course of Udemy
3 |
4 | This repository contains my jupyter notebooks and code for the udemy course Quantitative-Finance-Algorithmic-Trading-in-Python
5 |
6 | Quantitative Finance & Algorithmic Trading in Python
7 |
--------------------------------------------------------------------------------
/jupyter/.ipynb_checkpoints/Capital Asset Pricing Model Implementation-checkpoint.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [],
3 | "metadata": {},
4 | "nbformat": 4,
5 | "nbformat_minor": 2
6 | }
7 |
--------------------------------------------------------------------------------
/jupyter/.ipynb_checkpoints/Capital Asset Pricing Model-checkpoint.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Capital Asset Pricing Model\n",
8 | "\n",
9 | "Markowitz-model work fine, BUT we can not get rid of all risk by diversification!\n",
10 | "\n",
11 | "_*There are two types of risk:*_\n",
12 | "1. Unsystematic risk: \"Specific Risk\" - This is the risk specific to individual stocks. It can be diversified away by incresing the number of stocks in the portfolio\n",
13 | "\n",
14 | "**Unsystematic Risk is the component of a stock's return that is not correlated with market moves**\n",
15 | "\n",
16 | "2. Systematic Risk: \"Market Risk\" - This risk can not be diversified away. For example: interest rates, recession or wat\n",
17 | "\n",
18 | "**Capital Risk Pricing Model measures this risk**\n",
19 | "
\n",
20 | "\n",
21 | "## Expected Return\n",
22 | "It was formulated in the early 1960s by Sharpe and his colleagues\n",
23 | "\n",
24 | "**Note: ** We use SPY500 as a represention of them arket as a whole\n",
25 | "\n",
26 | "\n",
27 | "$E[r_a] = r_f + \\beta_a(E[r_m]-r_f)$\n",
28 | "\n",
29 | "- $E[r_a]$ = The expected return of investment: it may be a single stock or a portfolio *effecient or not it does not matter*\n",
30 | "\n",
31 | "- $r_f$ = Base return because of risk-free rate\n",
32 | "- $\\beta_a(E[r_m]-r_f)$ = Market excess return multiplied by a factor *(beta)*\n",
33 | "\n",
34 | "**Linear relationship between any stock expected return and market premium!**\n",
35 | "\n",
36 | "$\\beta_a = \\frac{Cov(r_a,r_m)}{Var(r_m)}$\n",
37 | "\n",
38 | "- According to **CAPM** *beta* is the only relevant measure of a stock's risk\n",
39 | "- Measures the stock's relative volatility: how much the price of a given stock goes up/down compared to that of the whole market\n",
40 | "\n",
41 | "
\n",
42 | "\n",
43 | "## Beta Value\n",
44 | "\n",
45 | "$\\beta_a = \\frac{Cov(r_a,r_m)}{Var(r_m)}$\n",
46 | "\n",
47 | "beta = how risky your portfolio is relative to the market\n",
48 | "\n",
49 | "- If your portfolio has no risk: your expected return is the risk-free return\n",
50 | "\n",
51 | "- If your portfolio is more risky than the market: your expected return will be higher\n",
52 | "\n",
53 | "- If you portfolio is less rsky than the market: your expected return will be less\n",
54 | "\n",
55 | "We know how to calculate the $\\beta$ value for a single stock: \n",
56 | "- Just calculate the covariance between stock and market (SPY500) over the variance of the market\n",
57 | "$~~~\\beta_a = \\frac{Cov(r_a,r_m)}{Var(r_m)}$\n",
58 | "\n",
59 | "***How to deal with a portfolio containing several stocks?***\n",
60 | "\n",
61 | "A given portfolio's $\\beta$ beta value is the weighted sum of the stocks' betas within one portfolio\n",
62 | " $\\beta_a = w_1\\beta_1 + w_2\\beta_2 + \\cdots + w_n\\beta_n$
\n",
63 | "\n",
64 | "The weights are the same as:\n",
65 | "\n",
66 | "\n",
67 | " stock: APPL GOOGL TSLA GE\n",
68 | " Precent: 20% 30% 25% 25%\n",
69 | " Weight: 0.2 0.3 0.25 0.25\n",
70 | " Weights = [0.2,0.3,0.25,0.25] = 1 (100%)\n",
71 | "\n",
72 | "$\\beta_a$ is a linear combination of $\\vec{b} \\cdot \\vec{w}$\n",
73 | "\\begin{equation}\n",
74 | "\\beta_a =\n",
75 | " \\vec{b}=\\begin{bmatrix}\n",
76 | " b_1 \\\\\n",
77 | " b_2 \\\\\n",
78 | " \\vdots\\\\\n",
79 | " b_n\\\\\n",
80 | " \\end{bmatrix}\n",
81 | "\\cdot\n",
82 | " \\vec{w}=\\begin{bmatrix}\n",
83 | " w_1 \\\\\n",
84 | " w_2 \\\\\n",
85 | " \\vdots\\\\\n",
86 | " w_n\\\\\n",
87 | " \\end{bmatrix}\n",
88 | "\\end{equation}\n"
89 | ]
90 | },
91 | {
92 | "cell_type": "markdown",
93 | "metadata": {
94 | "collapsed": true
95 | },
96 | "source": [
97 | "## Linear Regression w/ CAMP\n",
98 | "
\n",
99 | " $E[r_a] - r_f = \\alpha + \\beta(E[r_m]-r_f)$
\n",
100 | "\n",
101 | "Beta is the only relevant measure of risk: determines the additional premium beyond the risk-free rate\n",
102 | "\n",
103 | "**What is $\\alpha$ alpha?**\n",
104 | "\n",
105 | "*alpha $\\alpha$* is the difference between the actual return and the expected return.\n",
106 | "\n",
107 | " $\\alpha = E[r_a] - (r_f + \\beta(E[r_m]-r_f))$
\n",
108 | "\n",
109 | "**For example:**\n",
110 | " CAPM may estimate that a portfolio should return **15%**, but it actually earned **20%**. In this case alpha is the difference so **+5%**\n",
111 | "\n",
112 | "***FOR CAPM ALPHA IS ZERO!***\n",
113 | "\n",
114 | "\n",
115 | "***Why use monthly returns?***\n",
116 | "- use daily returns if you want to deal with microscopic data. For example holidays, etc.\n",
117 | "- Daily returns are best for superior sgort-term tactical forecasting\n",
118 | "- For long term models **monthly returns** are favourable. The main benefit is that with monthly data, returns are at least approximately normall distributed\n",
119 | "\n",
120 | "***Most of the models assume normal Distribution*** \n",
121 | "\n",
122 | "$\\beta = 0.5$ less volatile than the market\n",
123 | "\n",
124 | "- Stock market goes up by 10% -> this stock goes up by 5%\n",
125 | "- Stock market falls by 2% -> this stock falls by 1%\n",
126 | "\n",
127 | "$\\beta = 1.5$ 50% more volatile than the market\n",
128 | "\n",
129 | "- Stock market goes up by 10% -> this stock goes up by 15%\n",
130 | "- Stock market falls by 2% -> this stock falls by 3%"
131 | ]
132 | },
133 | {
134 | "cell_type": "code",
135 | "execution_count": null,
136 | "metadata": {
137 | "collapsed": true
138 | },
139 | "outputs": [],
140 | "source": [
141 | "$"
142 | ]
143 | }
144 | ],
145 | "metadata": {
146 | "kernelspec": {
147 | "display_name": "Python 3",
148 | "language": "python",
149 | "name": "python3"
150 | },
151 | "language_info": {
152 | "codemirror_mode": {
153 | "name": "ipython",
154 | "version": 3
155 | },
156 | "file_extension": ".py",
157 | "mimetype": "text/x-python",
158 | "name": "python",
159 | "nbconvert_exporter": "python",
160 | "pygments_lexer": "ipython3",
161 | "version": "3.6.3"
162 | }
163 | },
164 | "nbformat": 4,
165 | "nbformat_minor": 2
166 | }
167 |
--------------------------------------------------------------------------------
/jupyter/.ipynb_checkpoints/Modern Portfolio Theory-checkpoint.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [],
3 | "metadata": {},
4 | "nbformat": 4,
5 | "nbformat_minor": 2
6 | }
7 |
--------------------------------------------------------------------------------
/jupyter/.ipynb_checkpoints/Stock Market Basics -checkpoint.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [],
3 | "metadata": {},
4 | "nbformat": 4,
5 | "nbformat_minor": 2
6 | }
7 |
--------------------------------------------------------------------------------
/jupyter/.ipynb_checkpoints/Untitled-checkpoint.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 1,
6 | "metadata": {},
7 | "outputs": [
8 | {
9 | "data": {
10 | "image/png": "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\negAAAABJRU5ErkJggg==\n",
11 | "text/plain": [
12 | ""
13 | ]
14 | },
15 | "metadata": {},
16 | "output_type": "display_data"
17 | }
18 | ],
19 | "source": [
20 | "import numpy as np\n",
21 | "import pandas_datareader as web\n",
22 | "import matplotlib.pyplot as plt\n",
23 | "\n",
24 | "stocks = ['Shop']\n",
25 | "\n",
26 | "startDate = '01/01/2001'\n",
27 | "endDate = '01/01/2017'\n",
28 | "\n",
29 | "data = web.DataReader(stocks,data_source='yahoo',start=startDate,end=endDate)['Adj Close']\n",
30 | "\n",
31 | "dailyReturns = (data/data.shift(1))-1\n",
32 | "dailyReturns.hist(bins=100)\n",
33 | "plt.show()"
34 | ]
35 | },
36 | {
37 | "cell_type": "code",
38 | "execution_count": null,
39 | "metadata": {
40 | "collapsed": true
41 | },
42 | "outputs": [],
43 | "source": []
44 | }
45 | ],
46 | "metadata": {
47 | "kernelspec": {
48 | "display_name": "Python 3",
49 | "language": "python",
50 | "name": "python3"
51 | },
52 | "language_info": {
53 | "codemirror_mode": {
54 | "name": "ipython",
55 | "version": 3
56 | },
57 | "file_extension": ".py",
58 | "mimetype": "text/x-python",
59 | "name": "python",
60 | "nbconvert_exporter": "python",
61 | "pygments_lexer": "ipython3",
62 | "version": "3.6.3"
63 | }
64 | },
65 | "nbformat": 4,
66 | "nbformat_minor": 2
67 | }
68 |
--------------------------------------------------------------------------------
/jupyter/Capital Asset Pricing Model Implementation.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Captial Asset Pricing Model Implementation\n",
8 | "\n",
9 | "Appicable Equations:\n",
10 | "\n",
11 | "$E[r_a] = r_f + \\beta_a(E[r_m]-r_f)$\n",
12 | "\n",
13 | "- $E[r_a]$ = The expected return of investment: it may be a single stock or a portfolio *effecient or not it does not matter*\n",
14 | "\n",
15 | "- $r_f$ = Base return because of risk-free rate\n",
16 | "- $\\beta_a(E[r_m]-r_f)$ = Market excess return multiplied by a factor *(beta)*\n",
17 | "\n",
18 | " $\\beta_a = \\frac{Cov(r_a,r_m)}{Var(r_m)}$
\n",
19 | "\n",
20 | " $\\beta_a = w_1\\beta_1 + w_2\\beta_2 + \\cdots + w_n\\beta_n$
\n",
21 | "\n",
22 | " $\\alpha = E[r_a] - (r_f + \\beta(E[r_m]-r_f))$
"
23 | ]
24 | },
25 | {
26 | "cell_type": "code",
27 | "execution_count": 25,
28 | "metadata": {},
29 | "outputs": [
30 | {
31 | "name": "stdout",
32 | "output_type": "stream",
33 | "text": [
34 | "[[ 0.00230049 0.00093755]\n",
35 | " [ 0.00093755 0.00131399]]\n",
36 | "Beta from formula: 0.713510389352\n",
37 | "Beta from regression: 0.713510389352\n"
38 | ]
39 | },
40 | {
41 | "data": {
42 | "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAJoCAYAAAC3G1IbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3Xl8VNXdx/HvjxBMKkgQUEkQAbVR\nESGAUKEoSm3QR1ukbmhxqdXaulSxqVtbEPqILYpa7eb61AUpKlBKFcTaKBW1AgFBFBeWQlDEJaxB\nQ3KeP+6dMFkmmUkyd5Z83q9XXiZ3zr33Nzfnpsy355xrzjkBAAAAAAAAQWqT6AIAAAAAAADQ+hBK\nAQAAAAAAIHCEUgAAAAAAAAgcoRQAAAAAAAACRygFAAAAAACAwBFKAQAAAAAAIHCEUgAAJAEzu9DM\nXmjG/sVm9sOWrCmZRHt9zOwWM3soiJpagpmNMLNNUbadaGZPRNnWzOxRM/vCzP5jZsPNbE0z6nRm\ndoT//Z/M7JdNPVYzavg/M/t1S7dNFma23sy+FeG1lHs/AABEg1AKAIAYmNkFZrbEzHaa2Udm9ryZ\nfbO5x3XOPemc+3bYeapDgJZiZpf4xz23JY9bz3l6+udp20CbiWZW4V/HMjNbbGYnRGpf+/o00O52\n51xcwjn/PW0Jf19m1tbMPjEzF49zNsM3JZ0qqbtzbrBzbpFzLr8lDuycu9I5N7kljoX4I9ACACQz\nQikAAKJkZuMl3SPpdkkHS+oh6Q+SvpvIumJwsaTP/f8mg78659pL6irp35JmmZnVbtRQuJUAZZJO\nC/v5dElfJKiWhhwmab1zbleiCwEAAIiEUAoAgCiYWUdJkyRd5Zyb5Zzb5ZyrcM793TlX5LcZbGav\n+SN/PjKz+82sXdgxnJlda2ZrzexTM5tqZm381y4xs3/737/i77LCH0l0npl1MrN5ZrbVn5I1z8y6\nx1D/YZJOknSFpEIzOzjstS7+8crM7HMzWxRW141mVmpmO8xsjZmN9Le3MbObzOxDM/vMzGaa2YH+\nIUP1l/n1RxwBJUnOuQpJf5F0iKTO/rV41czuNrPPJU0Mvz7++fuY2UK/3i1mdou/vXqKW9iIrYvN\n7L/+Nb817BjZZvYX/3q+Y2Y/j2Iq3eOSLgr7+SJJj9W61rlmNtev7QMzu7zWOf/PP+dqScfXs++z\n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\nlHLOPSDpAUkaNGiQGzFiRNMrRlIrLi4Wv19I9AXsQ19AOPoDQugLCKEvIIS+kJreeecddejQocWP\nu2PHjpiOG2rboUMHPfzwwzr++OM1ZcoUbdiwQePGjdOuXbskSffff7+GDh2qSZMm6Z133tHw4cN1\n8cUX66yzzqq3XUPnOuWUU/TWW2+pQ4cOmjZtmh555BFJ0g9/+ENdd911kqT27dtr586dKi4u1sSJ\nE9WlSxetWrVKAwcO1BNPPKH77rtPH330kc4880x16dJFL774oi677DItWbJEZqYf/OAHuv766+vU\nkJWVpYKCgqivT7hkCqXelHSkmfWSVCrpfEkXRLOjmXWStNs596WZdZE0TNJv41YpAAAAAABIaXNK\nSjV1wRptLitXbk62igrzNbogllWEGte7d29VVVXpk08+0UEHHaSFCxcqKytL77//vsaOHaslS5bo\njjvu0J133ql58+ZJknbv3l1vu0j27t2r559/XqNGjdLSpUv16KOP6o033pBzTkOGDNFJJ51UJzQq\nKSnR22+/rdzcXA0bNkyvvvqqrr32Wk2bNk3/+te/1KVLFy1dulSlpaVatWqVJKmsrKxFr42URGtK\nOef2Srpa0gJJ70ia6Zx728wmmdl3JMnMjjezTZLOkfRnM3vb3/1oSUvMbIWkf0m6o9ZT+wAAAAAA\nACR5gdTNs1aqtKxcTlJpWblunrVSc0pKW/xcoWWTKioqdPnll6tv374655xztHp1/bFFtO3Ky8vV\nv39/DRo0SD169NBll12mf//73zrrrLO0//77q3379hozZowWLVpUZ9/Bgwere/fuatOmjfr376/1\n69fXadO7d2+tXbtW11xzjebPn68DDjig6RchgmQaKSXn3HOSnqu17Vdh378pb1pf7f0WS+ob9wIB\nAAAAAEDKm7pgjcorKmtsK6+o1NQFa1p0tNTatWuVkZGhgw46SLfddpsOPvhgrVixQlVVVcrKyqp3\nn7vvvjuqdtnZ2Vq+fHmNbdGuG77ffvtVf5+RkaG9e/fWadOpUyetWLFCCxYs0O9//3vNnDmzelpg\nS0makVIAAAAAAABB2FxWHtP2pti6dauuvPJKXX311TIzbdu2Td26dVObNm30+OOPq7LSC8U6dOig\nHTt2VO8XqV00TjzxRM2ZM0e7d+/Wrl27NHv2bA0fPjzq/cNr+fTTT1VVVaXvfe97mjx5spYtWxb1\n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\nACLi4QxIuPffl77+9ejaTpggTZwoSSouLtaIESPiVlZt5eXlevfdd+s956BBg5SXl6e5c+eqsrKy\nevTStm3bdN555+mhhx5Su3btVFRUpJ/+9Kd6/fXX6z1HS60pVVJSoqqqKq1bt05HHHFE9fbFixer\nuLi4RRcdb8p1WbZsmdauXatevXpp/fr1+vOf/6yioiKdeuqpevbZZ9WuXTsdd9xxmjdvns4999wW\nq1WqOZp98+bNyrtn3ygryVu0/Uc/+pEkadeuXS167lSVNKGUpMGSPnDOrZUkM5sh6buSwkOp70qa\n6H//jKT7rbVPwAQAAACSFA9nQOCuuUa6//7o2m7cKNUafZMoy5cvV2Vlpfr3r3+cxemnn64HH3xQ\nr776avW6TN26dauxSPbZZ5+t+fPnRzxHS6wpVVlZqVWrVunLL7/U8OHDddVVV+nggw/WypUr9cgj\nj6hfv3765S9/2axzhGvKdVm2bJmuuOIKff/735ck9evXT3v27NGf/vQnHXjggZKkQw89VHv37m2x\nOuuTm5urwYMHa9GiRRo3bpyGDh2qBx98UJ9++qlGjRqlF154Qffcc4/OO+88devWLa61JLNkmr6X\nJyl8fOAmf1u9bZxzeyVtkxQa89bLzErM7GUzGx7vYgEAAAA0rPZ0lrycbE0Z05f1pNAyNm+uOQ3P\nLHIgdeWVNafhOZc0gZS0b92kSOFLaN2m2bNnV2+bN2+eRo4cqdzcXHXs2FGFhYU65phj4lrnu+++\nq/Lyco0dO1aHHHKIJk+erJ///OdatGiRfvGLX6i4uFgdOnRosfM15bqUlJToO9/5TvXPK1as0De/\n+c3qQMo5p9WrV8f9WknSzJkzdcYZZ2jOnDkaP368srKytGjRIt1999066qijdP3112v79u1xryOZ\nWbSLi8WbmZ0jqdA590P/53GSBjvnrglr87bfZpP/84fyRljtlNTeOfeZmQ2UNEdSH+dcnd+umV0h\n6QpJOvjggwfOmDEjzu8MibJz5061b98+0WUgCdAXEEJfQDj6A0LoCwihLyS3wx57TL0efTSqtm/8\n5S8q79GjyedK9r6wcuVKTZgwQb/85S/Vp08ftWvXTpMnT9Zhhx2miy66KG7nXbhwoW6//Xbdd999\nOvbYY+N2nqbatm2bRo8erblz51aHY1OnTlVOTo4uv/xySVJpaakuvfRSPffcc2rbNrrJY8neH5LR\n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\nc1SSz3Q/Htn9/Mg52l2T5Ee6n/9Ckj9b6a/PbbjjIclVSU6dY59fSfKX3c+fkeStK/21ui3fWEjy\nbUlO77Y5LMn7kzyxe9+5YQxuSdYluSHJQ7s/w48nOXFWmzl/r5Oc2G1/eJITusdZ188x3Ubvtsix\ncHKSY7uff2+SyZ595ny9cBvt2yLHw/FJrp3nuB9K8pgkleQfpl8z3Eb3tpixMKvNSUk+03PfuWHM\nbn2OheOTfF+SNyZ5Ws/2hd5XOC8c5M1MKcbNU5Jc1P38oiRb52izJcl7W2u3ttZuS/LeJD/a26Cq\nHp7k6HTefDK+lmQ8HOC4b09yhv92jLyDHgutta+31t6XJK21byX5aJLjhtBnls6jk1zfWvtM92d4\ncTpjotd8v9dPSXJxa+2brbXPJrm+e7x+jsnoOeix0Frb2Vq7ubv9k0nuU1WHD6XXLJfFnBvmVFUP\nSnK/1toHWued6Bsz92sOo2WpxsJPJ3nLsvaU5XbAsdBa+1xr7RNJ7p6175x/SzovLI5QinFzTGvt\ni0nS/TjXFNmNSb7Qc/+m7rZeP53Ofz96K/0/tao+UVVvr6oHL2WnWTZLMR5e351u/fs9f3jcs09r\n7a4ktyf5jqXuPEtqSc4NVbUhyU8kuaJns3PD6OvnvD/f7/V8+/ZzTEbPYsZCr6cm2dla+2bPtrle\nLxhtix0PJ1TVzqr6x6r64Z72Nx3gmIyepTo3/FT2D6WcG8bLYl7fF/qbwXnhIB260h2A2arq8iTf\nOcdDL+73EHNsm32ZyWck+bme+3+f5C2ttW9W1S+l81+Sx4UVt8zj4Wdaa5NVdd8kl6QzJt54gH1Y\nIct9bqiqQ9P5Q/M1rbXPdDc7N4yHfn5n52sz3/a5/nHnPDD6FjMWOg9WPSLJK5I8oefx+V4vGG2L\nGQ9fTPIfWmu3VNUpSbZ3x4a/EcbTUpwbfjDJ11tr1/Y87twwfhbzOzzo3xL0QSjFyGmtPX6+x6rq\nS1X1oNbaF7vTJL88R7ObkmzuuX9cOuu9p4/x/UkOba1d0/Oct/S0/6t0/hhlBCzneGitTXY/fq2q\n3pzOdN43dvd5cJKbukHF/ZPcuvivhsVY7nNDkguTXNdae3XPczo3jIfp39lpxyW5eZ42s3+vF9r3\nQMdk9CxmLKSqjkvyd0l+vrV2w/QOC7xeMNoOejx0Z9N/M0laa9dU1Q1JvqvbvneJt3PDeFjUuaHr\n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\ngg==\n",
43 | "text/plain": [
44 | ""
45 | ]
46 | },
47 | "metadata": {},
48 | "output_type": "display_data"
49 | },
50 | {
51 | "name": "stdout",
52 | "output_type": "stream",
53 | "text": [
54 | "Expected return: 0.0901131588095\n"
55 | ]
56 | }
57 | ],
58 | "source": [
59 | "import matplotlib.pyplot as plt\n",
60 | "import numpy as np\n",
61 | "import pandas_datareader.data as web\n",
62 | "import pandas as pd\n",
63 | "import datetime\n",
64 | "import scipy.optimize as optimize\n",
65 | "\n",
66 | "\n",
67 | "def capm(startDate,endDate,ticker1, ticker2):\n",
68 | " \n",
69 | " risk_free_rate = 0.05\n",
70 | " # time frame for calcuating returns\n",
71 | " month = 12\n",
72 | " daily = 252 \n",
73 | " \n",
74 | " # get stock data from yahoo\n",
75 | " stock1 = web.get_data_yahoo(ticker1, startDate, endDate)\n",
76 | " stock2 = web.get_data_yahoo(ticker2, startDate, endDate)\n",
77 | " \n",
78 | " # we prefer monthly returns instead of daily returns\n",
79 | " return_stock1 = stock1.resample('M').last()\n",
80 | " return_stock2 = stock2.resample('M').last()\n",
81 | " \n",
82 | " # create a dataframe from thae data - adjusted close price is usually used\n",
83 | " data = pd.DataFrame({'s_adjclose':return_stock1['Adj Close'], 'm_adjclose':return_stock2['Adj Close']}, index=return_stock1.index)\n",
84 | " \n",
85 | " # use natural logarithm of the returns\n",
86 | " data[['s_returns','m_returns']] = np.log(data[['s_adjclose','m_adjclose']]/data[['s_adjclose','m_adjclose']].shift(1))\n",
87 | " \n",
88 | " # no need for NaN/missing values\n",
89 | " data = data.dropna()\n",
90 | " \n",
91 | " # Covariance Matrix: the diagonal items are the variances - off diagonals are the covariance\n",
92 | " # The matrix is symmetric: cov[0,1] = cov[1,0]\n",
93 | " covmat = np.cov(data[\"s_returns\"],data[\"m_returns\"])\n",
94 | " print(covmat)\n",
95 | " \n",
96 | " # calculate beta using covarience\n",
97 | " beta = covmat[0,1]/covmat[1,1]\n",
98 | " print(\"Beta from formula:\",beta)\n",
99 | " \n",
100 | " # Use linear Regression to fit a line to the data [Stock_Returns, market_returns] - slope is the beta\n",
101 | " beta,alpha = np.polyfit(data['m_returns'],data[\"s_returns\"],deg=1)\n",
102 | " print(\"Beta from regression:\", beta)\n",
103 | " \n",
104 | " # plot\n",
105 | " fig,axis = plt.subplots(1,figsize=(20,10))\n",
106 | " axis.scatter(data[\"m_returns\"],data[\"s_returns\"], label=\"Data Points\")\n",
107 | " axis.plot(data[\"m_returns\"],beta*data[\"m_returns\"] + alpha, color='red', label=\"CAPM Line\")\n",
108 | " plt.title('Capital Asset Pricing Model, finding alphas and betas')\n",
109 | " plt.xlabel('Makert return $R_m$', fontsize=18)\n",
110 | " plt.ylabel('Stock return $R_a$')\n",
111 | " plt.text(0.08,0.05, r'$R_a = \\beta * R_m + \\alpha$', fontsize=18)\n",
112 | " plt.legend()\n",
113 | " plt.grid(True)\n",
114 | " plt.show()\n",
115 | " \n",
116 | " # calculate the expected return acording to the CAPM formula \n",
117 | " expected_return = risk_free_rate + beta*(data['m_returns'].mean()*month-risk_free_rate)\n",
118 | " print(\"Expected return:\",expected_return)\n",
119 | "if __name__ == \"__main__\":\n",
120 | " # using historical data 2010-2017: the market is the S&P500\n",
121 | " capm('2010-01-01','2017-01-01','IBM','^GSPC')"
122 | ]
123 | },
124 | {
125 | "cell_type": "code",
126 | "execution_count": null,
127 | "metadata": {
128 | "collapsed": true
129 | },
130 | "outputs": [],
131 | "source": []
132 | }
133 | ],
134 | "metadata": {
135 | "kernelspec": {
136 | "display_name": "Python 3",
137 | "language": "python",
138 | "name": "python3"
139 | },
140 | "language_info": {
141 | "codemirror_mode": {
142 | "name": "ipython",
143 | "version": 3
144 | },
145 | "file_extension": ".py",
146 | "mimetype": "text/x-python",
147 | "name": "python",
148 | "nbconvert_exporter": "python",
149 | "pygments_lexer": "ipython3",
150 | "version": "3.6.3"
151 | }
152 | },
153 | "nbformat": 4,
154 | "nbformat_minor": 2
155 | }
156 |
--------------------------------------------------------------------------------
/jupyter/Capital Asset Pricing Model.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Capital Asset Pricing Model\n",
8 | "\n",
9 | "Markowitz-model work fine, BUT we can not get rid of all risk by diversification!\n",
10 | "\n",
11 | "_*There are two types of risk:*_\n",
12 | "1. Unsystematic risk: \"Specific Risk\" - This is the risk specific to individual stocks. It can be diversified away by incresing the number of stocks in the portfolio\n",
13 | "\n",
14 | "**Unsystematic Risk is the component of a stock's return that is not correlated with market moves**\n",
15 | "\n",
16 | "2. Systematic Risk: \"Market Risk\" - This risk can not be diversified away. For example: interest rates, recession or wat\n",
17 | "\n",
18 | "**Capital Risk Pricing Model measures this risk**\n",
19 | "
\n",
20 | "\n",
21 | "## Expected Return\n",
22 | "It was formulated in the early 1960s by Sharpe and his colleagues\n",
23 | "\n",
24 | "**Note: ** We use SPY500 as a represention of them arket as a whole\n",
25 | "\n",
26 | "\n",
27 | "$E[r_a] = r_f + \\beta_a(E[r_m]-r_f)$\n",
28 | "\n",
29 | "- $E[r_a]$ = The expected return of investment: it may be a single stock or a portfolio *effecient or not it does not matter*\n",
30 | "\n",
31 | "- $r_f$ = Base return because of risk-free rate\n",
32 | "- $\\beta_a(E[r_m]-r_f)$ = Market excess return multiplied by a factor *(beta)*\n",
33 | "\n",
34 | "**Linear relationship between any stock expected return and market premium!**\n",
35 | "\n",
36 | "$\\beta_a = \\frac{Cov(r_a,r_m)}{Var(r_m)}$\n",
37 | "\n",
38 | "- According to **CAPM** *beta* is the only relevant measure of a stock's risk\n",
39 | "- Measures the stock's relative volatility: how much the price of a given stock goes up/down compared to that of the whole market\n",
40 | "\n",
41 | "
\n",
42 | "\n",
43 | "## Beta Value\n",
44 | "\n",
45 | "$\\beta_a = \\frac{Cov(r_a,r_m)}{Var(r_m)}$\n",
46 | "\n",
47 | "beta = how risky your portfolio is relative to the market\n",
48 | "\n",
49 | "- If your portfolio has no risk: your expected return is the risk-free return\n",
50 | "\n",
51 | "- If your portfolio is more risky than the market: your expected return will be higher\n",
52 | "\n",
53 | "- If you portfolio is less rsky than the market: your expected return will be less\n",
54 | "\n",
55 | "We know how to calculate the $\\beta$ value for a single stock: \n",
56 | "- Just calculate the covariance between stock and market (SPY500) over the variance of the market\n",
57 | "$~~~\\beta_a = \\frac{Cov(r_a,r_m)}{Var(r_m)}$\n",
58 | "\n",
59 | "***How to deal with a portfolio containing several stocks?***\n",
60 | "\n",
61 | "A given portfolio's $\\beta$ beta value is the weighted sum of the stocks' betas within one portfolio\n",
62 | " $\\beta_a = w_1\\beta_1 + w_2\\beta_2 + \\cdots + w_n\\beta_n$
\n",
63 | "\n",
64 | "The weights are the same as:\n",
65 | "\n",
66 | "\n",
67 | " stock: APPL GOOGL TSLA GE\n",
68 | " Precent: 20% 30% 25% 25%\n",
69 | " Weight: 0.2 0.3 0.25 0.25\n",
70 | " Weights = [0.2,0.3,0.25,0.25] = 1 (100%)\n",
71 | "\n",
72 | "$\\beta_a$ is a linear combination of $\\vec{b} \\cdot \\vec{w}$\n",
73 | "\\begin{equation}\n",
74 | "\\beta_a =\n",
75 | " \\vec{b}=\\begin{bmatrix}\n",
76 | " b_1 \\\\\n",
77 | " b_2 \\\\\n",
78 | " \\vdots\\\\\n",
79 | " b_n\\\\\n",
80 | " \\end{bmatrix}\n",
81 | "\\cdot\n",
82 | " \\vec{w}=\\begin{bmatrix}\n",
83 | " w_1 \\\\\n",
84 | " w_2 \\\\\n",
85 | " \\vdots\\\\\n",
86 | " w_n\\\\\n",
87 | " \\end{bmatrix}\n",
88 | "\\end{equation}\n"
89 | ]
90 | },
91 | {
92 | "cell_type": "markdown",
93 | "metadata": {
94 | "collapsed": true
95 | },
96 | "source": [
97 | "## Linear Regression w/ CAMP\n",
98 | "
\n",
99 | " $E[r_a] - r_f = \\alpha + \\beta(E[r_m]-r_f)$
\n",
100 | "\n",
101 | "Beta is the only relevant measure of risk: determines the additional premium beyond the risk-free rate\n",
102 | "\n",
103 | "**What is $\\alpha$ alpha?**\n",
104 | "\n",
105 | "*alpha $\\alpha$* is the difference between the actual return and the expected return.\n",
106 | "\n",
107 | " $\\alpha = E[r_a] - (r_f + \\beta(E[r_m]-r_f))$
\n",
108 | "\n",
109 | "**For example:**\n",
110 | " CAPM may estimate that a portfolio should return **15%**, but it actually earned **20%**. In this case alpha is the difference so **+5%**\n",
111 | "\n",
112 | "***FOR CAPM ALPHA IS ZERO!***\n",
113 | "\n",
114 | "\n",
115 | "***Why use monthly returns?***\n",
116 | "- use daily returns if you want to deal with microscopic data. For example holidays, etc.\n",
117 | "- Daily returns are best for superior sgort-term tactical forecasting\n",
118 | "- For long term models **monthly returns** are favourable. The main benefit is that with monthly data, returns are at least approximately normall distributed\n",
119 | "\n",
120 | "***Most of the models assume normal Distribution*** \n",
121 | "\n",
122 | "$\\beta = 0.5$ less volatile than the market\n",
123 | "\n",
124 | "- Stock market goes up by 10% -> this stock goes up by 5%\n",
125 | "- Stock market falls by 2% -> this stock falls by 1%\n",
126 | "\n",
127 | "$\\beta = 1.5$ 50% more volatile than the market\n",
128 | "\n",
129 | "- Stock market goes up by 10% -> this stock goes up by 15%\n",
130 | "- Stock market falls by 2% -> this stock falls by 3%"
131 | ]
132 | },
133 | {
134 | "cell_type": "code",
135 | "execution_count": null,
136 | "metadata": {
137 | "collapsed": true
138 | },
139 | "outputs": [],
140 | "source": [
141 | "$"
142 | ]
143 | }
144 | ],
145 | "metadata": {
146 | "kernelspec": {
147 | "display_name": "Python 3",
148 | "language": "python",
149 | "name": "python3"
150 | },
151 | "language_info": {
152 | "codemirror_mode": {
153 | "name": "ipython",
154 | "version": 3
155 | },
156 | "file_extension": ".py",
157 | "mimetype": "text/x-python",
158 | "name": "python",
159 | "nbconvert_exporter": "python",
160 | "pygments_lexer": "ipython3",
161 | "version": "3.6.3"
162 | }
163 | },
164 | "nbformat": 4,
165 | "nbformat_minor": 2
166 | }
167 |
--------------------------------------------------------------------------------
/jupyter/Modern Portfolio Theory.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Modern Portfolio Theory\n",
8 | "\n",
9 | "It was formulated in the 1950's by Markowitz (award nobel prize for it)\n",
10 | "\n",
11 | "**What was the main idea?**\n",
12 | "A single stock is quite unpredictable: we do not know for certain whether the price will go up or down. **But** _we may combine several stocks_ in order to reduce the risk as much as possible!\n",
13 | "\n",
14 | "This is called **DIVERSIFICATION**\n",
15 | "\n",
16 | "Combining assests is the main idea: it is the same for Black-Scholes Model!\n",
17 | "\n",
18 | "The idea is the any loss is one stock is offest by the gain in other stocks in the portfoilo\n",
19 | "\n",
20 | "_*The model has several assumptions*_\n",
21 | " \n",
22 | " 1) The Returns are normally distributed\n",
23 | " - To describe normal distributions we need mean (mew) and variance(omega) exclusively\n",
24 | " \n",
25 | " 2) Investors are risk-averse: investors will take on more risk if they are expecting more reward\n",
26 | "\n",
27 | "*As always less risk less return*\n",
28 | "\n",
29 | "Modern Portfolio theory allows investors ro construct optimal portfolios offering maximum possible expected return for a given level of risk!\n",
30 | "\n",
31 | "**So what is an efficient portfolio?** \n",
32 | "This is a portfolio that has the highest reward for a given level of risk OR te lowest level of risk for a given reward! ng available stocks in a way that all positions are long\n",
33 | "\n",
34 | "\n",
35 | "# Mathimatical Formulation\n",
36 | "\n",
37 | "The investors are not allowed to set up short positions in a security\n",
38 | "\n",
39 | "So 100% of the wealth has to be divided amoung all options \n",
40 | "*For example: **APPL, GOOGL, TSLA, GE***\n",
41 | "\n",
42 | " stock: APPL GOOGL TSLA GE\n",
43 | " Precent: 20% 30% 25% 25%\n",
44 | " Weight: 0.2 0.3 0.25 0.25\n",
45 | " Weights = [0.2,0.3,0.25,0.25] = 1 (100%)\n",
46 | " \n",
47 | "Above is how an investor might split amounst all avaiable assets\n",
48 | "\n",
49 | "### Formulation:\n",
50 | "\n",
51 | "\n",
52 | "$w_{i}$ \\- weight of the i\\-th stock\n",
53 | "\n",
54 | "$r_{i}$ \\- return of the i\\-th stock *calculated based on historical data*\n",
55 | "\n",
56 | "$u_{i}$ \\- expected return for security i *it is mean more or less*\n",
57 | "\n",
58 | "***How to calculate the return?***\n",
59 | "\n",
60 | "We can calculate the return on a day by day basis with:\n",
61 | "\n",
62 | "*Daily Return*\n",
63 | "\n",
64 | "```\n",
65 | " ((stockPrice_n - stockPrice_n-1) / stockPrice_n-1) x 100 // returns %\n",
66 | "```\n",
67 | "\n",
68 | "***Usually we use the natural logarithm as the return!\n",
69 | "\n",
70 | "`log(((stockPrice_n - stockPrice_n-1) / stockPrice_n-1))`\n",
71 | "\n",
72 | "*We use log of return instead of actual prices of stocks as a form of normalization: Important for machine learning techniques and statistical analysis*\n",
73 | "\n",
74 | "`log((stockPrice_n / stockPrice_n-1) - 1)`\n",
75 | "\n",
76 | "*Using the log allows for faster algo's*\n",
77 | "\n",
78 | "\n",
79 | "\n"
80 | ]
81 | },
82 | {
83 | "cell_type": "markdown",
84 | "metadata": {},
85 | "source": [
86 | "## Expected return of a morkowitz model portfolio\n",
87 | "**Not a dynamic model, not ideal**\n",
88 | "\n",
89 | "$w_{i}$ \\- weight of the i\\-th # stock\n",
90 | "\n",
91 | "$r_{i}$ \\- return of the i\\-th stock # *calculated based on historical data*\n",
92 | "\n",
93 | "$u_{i}$ \\- expected return for security i # *it is mean more or less*\n",
94 | "\n",
95 | "*This model relies heavily on historical data. Historical mean performance is assumed to be the best estimator for future (expected) performance*\n",
96 | "\n",
97 | "$\\mu_{porfolio} = E($$\\sum_{i}w_{i}r_{i}$$)=$$\\sum_{i}w_{i}E(r_{i})$$=$$\\sum_{i}w_{i}\\mu_{i}$$ = \\underline{w}^{T} \\underline{\\mu}$\n",
98 | "\n",
99 | "***This is the expected return of the portfolio!***"
100 | ]
101 | },
102 | {
103 | "cell_type": "markdown",
104 | "metadata": {},
105 | "source": [
106 | "
\n",
107 | "## Risk and Return of a morkowitz model portfolio\n",
108 | "\n",
109 | "$\\underline{What~about~the~risk~of~the~portfolio?}$\n",
110 | "\n",
111 | "- The risk has something to do with the volatility, which has something to do with standard deviation and varience!\n",
112 | "\n",
113 | "Equation: $\\sigma_{ij} = E[(r_{i} - \\mu_{j})(r_{j}-\\mu_{i})]$ // *covariance*\n",
114 | "\n",
115 | "- Test: What is volatility? A - volatility is the measurement of dispersion of expected returns in a security\n",
116 | "\n",
117 | "**Covariance** measures how much TWO stocks vary together\n",
118 | "\n",
119 | "$\\rightarrow \\sigma_{ij} < 0$ // A negative covarience means returns have inverse relationship\n",
120 | "\n",
121 | "$\\rightarrow \\sigma_{ij} > 0$ // A postive covarience means returns are correlated \n",
122 | "\n",
123 | "**Markowitz's Theory** is abot diversifiation: Processing stocks with high positice covariance does NOT provide very much diversification!\n",
124 | " - The aim of diversification is to eliminate fluctuations in the long term\n",
125 | " \n",
126 | "**Variance** measures how much variation is in ONE stock\n",
127 | "\n",
128 | "Equation: $\\sigma_{i}^{2} = E[(r_{i} - \\mu_{i})^2]$ // *variance*\n",
129 | "\n",
130 | "- For calculating the variance of the port we need the covariance matrix of the stocks involved in the portfolio\n",
131 | "\n",
132 | "$\\Sigma =$ \n",
133 | "$\n",
134 | "\\begin{bmatrix}\n",
135 | " \\sigma^{2}_{1} & \\dots & \\sigma_{1n} \\\\\n",
136 | " \\vdots & \\ddots & \\vdots \\\\\n",
137 | " \\sigma_{n1} & \\dots & \\sigma^{2}_{n}\n",
138 | "\\end{bmatrix}\n",
139 | "$\n",
140 | "\n",
141 | "This covariance matrix contains the relationship between all the stocks in the port\n",
142 | "\n",
143 | "***Expected Port Variance***\n",
144 | "\n",
145 | "$\\sigma_{portfolio}^{2} = E[(r_{i}-\\mu_{i})^{2}] = \\Sigma_{i}\\Sigma_{j}w_{i}w_{j}\\sigma_{ij} \\\\ \\sigma_{portfolio}^{2} =\\underline{w}^{T}\\underline{\\Sigma}\\underline{w}$\n",
146 | "\n",
147 | "$\\sigma_{portfolio}= \\sqrt{\\underline{w}^{T}\\underline{\\Sigma}\\underline{w}}$ is linear algebra calculation which is a fast vectorized formula\n",
148 | "\n",
149 | "*Python implementation*:\n",
150 | "`portfolio_volatility = np.sqrt(np.dot(weights.T,np.dot(returns.cov()*252,weights))) \n",
151 | "`\n"
152 | ]
153 | },
154 | {
155 | "cell_type": "markdown",
156 | "metadata": {},
157 | "source": [
158 | "
\n",
159 | "## The Expected Return vs Expected Risk\n",
160 | "\n",
161 | "
\n",
162 | "\n",
163 | "The Dots represent different $w$ weight distrubitions $\\rightarrow$ different portfolio stock distrubitions\n",
164 | "\n",
165 | "An investor is interested in\n",
166 | "\n",
167 | "1. The maximum return given a fixed risk level\n",
168 | "2. The minimum risk given a fixed return\n",
169 | "\n",
170 | "These portfolios make up the so-called: ***Efficient-frontier***\n",
171 | "\n",
172 | "
\n",
173 | "\n",
174 | "This is the main feature of the Markowitz model: the investor can decide the risk or the expected return\n",
175 | "\n",
176 | "*Remember:* If you want to make money, you have to take risk!"
177 | ]
178 | },
179 | {
180 | "cell_type": "markdown",
181 | "metadata": {
182 | "collapsed": true
183 | },
184 | "source": [
185 | "
\n",
186 | "## Sharpe-Ratio\n",
187 | "\n",
188 | "***What is the Sharpe-ratio?***\n",
189 | "\n",
190 | "*It is one of the most import risk/return measures used in finance William Sharpe used this parameter!*\n",
191 | "\n",
192 | "1. It describes how much excess return you are receiving for extra volatility that you endure holding a riskier asset/stock\n",
193 | "\n",
194 | "2. It measures the excess return (risk oremium) per uint of standard deviation on an asset(s)\n",
195 | "\n",
196 | "Sharpe-ratio: $S(x) = \\frac{r_{x} - R_{f}}{StdDev(x)}$
\n",
197 | "- $r_{x}$: average rate of return of investment x\n",
198 | "- $R_{f}$: rate of return of risk-free security\n",
199 | "\n",
200 | "*A Sharpe-Ratio **S(x) > 1** is considered to be good*\n",
201 | "\n",
202 | "Relating back to the Vol vs Return, the best portfolio will be:\n",
203 | "- On the Efficient Frontier line\n",
204 | "- Be the best balance of StdDev (Volatility) and Rate of Return\n"
205 | ]
206 | },
207 | {
208 | "cell_type": "markdown",
209 | "metadata": {},
210 | "source": [
211 | "
\n",
212 | "## Capital Allocation Line\n",
213 | "\n",
214 | "
\n",
215 | "\n",
216 | "Investors can have risk-free assets as well usually: for example treasury bills\n",
217 | "\n",
218 | "Consider this fact what is the optimal portfolio now?\n",
219 | "\n",
220 | "The optimal portfolios lie on the capital allocation line!\n",
221 | "\n",
222 | "
\n",
223 | "\n",
224 | "
"
225 | ]
226 | },
227 | {
228 | "cell_type": "markdown",
229 | "metadata": {
230 | "collapsed": true
231 | },
232 | "source": [
233 | "### Efficient portfolios (portfolios that have maximum return for a given risk, or lowest level of risk for a fixed return) are on the capital allocation line!"
234 | ]
235 | },
236 | {
237 | "cell_type": "code",
238 | "execution_count": null,
239 | "metadata": {
240 | "collapsed": true
241 | },
242 | "outputs": [],
243 | "source": []
244 | }
245 | ],
246 | "metadata": {
247 | "kernelspec": {
248 | "display_name": "Python 3",
249 | "language": "python",
250 | "name": "python3"
251 | },
252 | "language_info": {
253 | "codemirror_mode": {
254 | "name": "ipython",
255 | "version": 3
256 | },
257 | "file_extension": ".py",
258 | "mimetype": "text/x-python",
259 | "name": "python",
260 | "nbconvert_exporter": "python",
261 | "pygments_lexer": "ipython3",
262 | "version": "3.6.3"
263 | }
264 | },
265 | "nbformat": 4,
266 | "nbformat_minor": 2
267 | }
268 |
--------------------------------------------------------------------------------
/jupyter/Stock Market Basics .ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "## Present value/future value of money "
8 | ]
9 | },
10 | {
11 | "cell_type": "markdown",
12 | "metadata": {},
13 | "source": [
14 | "### Time value of money\n",
15 | "\n",
16 | "The important concept in finance is that of the time value of money $x today is worth more than $x in a year's time!!!\n",
17 | "\n",
18 | "_Why_? because we may invest $x today\n",
19 | " -> we may invest it into stocks\n",
20 | " -> we can lend it to the bank for some interest\n",
21 | "Future money worth less because of inflation will push prices higher so the buying power of your money will be lower!\n"
22 | ]
23 | },
24 | {
25 | "cell_type": "markdown",
26 | "metadata": {},
27 | "source": [
28 | "### Future Value (FV)\n",
29 | "**Future Value** is the vlaue of a current asset at a specified date in the future based on assumed rate of growth over set time\n",
30 | "\n",
31 | "- Future Value = x (1 + r)^n\n",
32 | "\n",
33 | "**Present Value** is how much a future sum of money is worth today given a specified rate of interest\n",
34 | "\n",
35 | "- Present Value = x / (1 + r)^n\n",
36 | "\n",
37 | "\n",
38 | "r: interest rate (.05 to 5%)\n",
39 | "\n",
40 | "x: cash flow in future\n",
41 | "\n",
42 | "n: number of years"
43 | ]
44 | },
45 | {
46 | "cell_type": "markdown",
47 | "metadata": {},
48 | "source": [
49 | "### Continuous Model w/ Differential equations\n",
50 | "\n",
51 | "Suppose we have amount x(t) in the bank in time t. How much does this increase in value from one day to the next?\n",
52 | " \n",
53 | " /-Taylor-Expansion\n",
54 | " x(t+dt) - x(t) = dx(t)/dt * dt\n",
55 | " \\-The cange in the amount of money within a dt day\n",
56 | " \n",
57 | "But the interest I recieve must be proportional to the actual x(t) amount I have and the r interest rate and the dt time step!\n",
58 | "\n",
59 | " x(t+dt) - x(t) = dx(t)/dt * dt = r x(t) dt\n",
60 | " \n",
61 | " dx(t)/dt = r x(t) *The soultion is x(t) = x(0)e^(r*t)\n",
62 | "\n",
63 | "- Continuous Future = x(0)e^(r\\*t)\n",
64 | "- Continuous Present = x(0) / e^(r\\*t)"
65 | ]
66 | },
67 | {
68 | "cell_type": "markdown",
69 | "metadata": {},
70 | "source": [
71 | "## Time value of money implementation"
72 | ]
73 | },
74 | {
75 | "cell_type": "code",
76 | "execution_count": 13,
77 | "metadata": {},
78 | "outputs": [
79 | {
80 | "name": "stdout",
81 | "output_type": "stream",
82 | "text": [
83 | "Value of $100\n",
84 | "Future Discrete: 101.0\n",
85 | "Future Continuous: 101.00501670841679\n",
86 | "Present Discrete: 99.00990099009901\n",
87 | "Present Continuous: 99.00498337491682\n"
88 | ]
89 | }
90 | ],
91 | "source": [
92 | "from math import exp\n",
93 | " \n",
94 | "def discreteFutureValue(x,r,n):\n",
95 | " return x * (1+r)**n\n",
96 | "\n",
97 | "def discretePresentValue(x,r,n):\n",
98 | " return x / (1+r)**n\n",
99 | "\n",
100 | "def contFutureValue(x,r,n):\n",
101 | " return x * exp(r*n)\n",
102 | "\n",
103 | "def contPresentValue(x,r,n):\n",
104 | " return x / exp(r*n)\n",
105 | "\n",
106 | "if __name__ == \"__main__\":\n",
107 | " x = 100 # value of investment in dollars\n",
108 | " r = .01 # interest rate\n",
109 | " n = 1 # years\n",
110 | " print(\"Value of $100\")\n",
111 | " print(\"Future Discrete: \", discreteFutureValue(x,r,n))\n",
112 | " print(\"Future Continuous: \", contFutureValue(x,r,n))\n",
113 | " print(\"Present Discrete: \", discretePresentValue(x,r,n))\n",
114 | " print(\"Present Continuous: \", contPresentValue(x,r,n))"
115 | ]
116 | },
117 | {
118 | "cell_type": "markdown",
119 | "metadata": {},
120 | "source": [
121 | "### Stock Market Basics"
122 | ]
123 | },
124 | {
125 | "cell_type": "markdown",
126 | "metadata": {},
127 | "source": [
128 | "Stocks represent a small piece of ownship in the company\n",
129 | "\n",
130 | "Allows companies to sell ownership in an effort to raise money\n",
131 | "\n",
132 | "The shareholder gives money for a sontract stating how much of the company he owns\n",
133 | "\n",
134 | "**Why is this important**\n",
135 | "- Dividends + any growth of the stock's value\n",
136 | " (Dividends are payments made quaterly/bi-annually to shareholds, depends on the profitability of the given company)\n",
137 | "\n",
138 | "**What is volatility?**\n",
139 | "\n",
140 | "- Statistical measurement of the dispersion of returns for a given security\n",
141 | "- This is the amount of uncertainty/risk about the size of changes in the value of a given security (stock,bond, etc.)\n",
142 | "\n",
143 | "- We can measure volatility with standard deviation or variance between returns of the same security\n",
144 | "\n",
145 | "**Higher volatility == Higher risk**\n",
146 | "\n",
147 | "*How to approximate volatility?* With the **CAPM** Beta value\n",
148 | "\n",
149 | "__**CAPM - Capital Assetment Pricing Mangement**__\n",
150 | "\n",
151 | "Aim of stocks is to predict and trade future values \n",
152 | " "
153 | ]
154 | },
155 | {
156 | "cell_type": "markdown",
157 | "metadata": {},
158 | "source": [
159 | "### Commodities\n",
160 | "\n",
161 | "Commodities are raw products: gold, silver,oil\n",
162 | "\n",
163 | "These are traded on the FUTURE market\n",
164 | "- The price of these are unpredictable, but show seasonal trends/effects\n",
165 | "- Scarcit of the product results in higher prices and vice-versa\n",
166 | "- Most trading is done on the future market. You can make deals to buy/sell a given commodity at some time in the future."
167 | ]
168 | },
169 | {
170 | "cell_type": "markdown",
171 | "metadata": {},
172 | "source": [
173 | "### Currencies\n",
174 | "\n",
175 | "FOREX = Foreign Exchange\n",
176 | "\n",
177 | "- the top currencies to considerL USD, CAD, AUD, YEN and EUR\n",
178 | "- money is made by some mispricings: you can make arbitrage profits by exploiting these mispricings\n",
179 | "- Bellman-Ford algorithm\n",
180 | "- Fluctuation in exchange rates is unpredictable BUT it has something to do with interest rates\n",
181 | "- Bellman-Ford builds directed graph and performs shortest path to find arbitrage opportunities\n",
182 | "\n",
183 | "### Positions\n",
184 | "\n",
185 | "Long -> For long periods of ownership\n",
186 | "Short -> Expectation that the stock with momentarily inscrease before decreasing\n",
187 | "\n",
188 | "### Bonds \n",
189 | "Abond is a debt investment in which an investor loans money to an entity (company or government)\n",
190 | "- for a defined period of time\n",
191 | "- variable or fixed interest rate\n",
192 | "\n",
193 | "**BONDS ARE FIXED-INCOME SECURITIES**\n",
194 | "\n",
195 | "- interest rate of bonds are a bit higher than banks\n",
196 | "\n",
197 | "- Agencies assign ratings to bond issuers: if the issuer has poor credit -> risk of default is greater\n",
198 | "- The longer the bond maturity, greater the porbability of default\n",
199 | "- So bonds with longer time to maturity typically have higher interest rates\n",
200 | "\n",
201 | "**Bonds in general are less risk adverse than stocks**\n",
202 | "\n",
203 | "### Bond Price & Interest Rates \n",
204 | "\n",
205 | "Bonds Pricing\n",
206 | "\n",
207 | "par value - \\$1000\n",
208 | "10% rate/coupon\n",
209 | "2 years \n",
210 | "\n",
211 | "What does this mean?\n",
212 | "In two years the buyer will recieve \\$1000 plus 10% premium\n",
213 | "\n",
214 | "*How much would an investor pay for a bond? *\n",
215 | "We have to calculate the present value of that future cash flow (because we get \\$1000 in the future!) This reinforces that the most important concept in finance is that of the time value of money \\$x today is worth more than \\$x in the future\n",
216 | "\n",
217 | "There is an inverse relationship between interest rates and bond prices \n",
218 | "- if interest rates rise -> bond prices decline\n",
219 | "\n",
220 | "Present Value = 1000 / (1+.10)^2\n",
221 | "\n",
222 | "Present Value = 826.4462809917354\n"
223 | ]
224 | },
225 | {
226 | "cell_type": "markdown",
227 | "metadata": {},
228 | "source": [
229 | "### Bond price and Maturity\n",
230 | "\n",
231 | "two bonds:\n",
232 | "Bond A expires in 1 year\n",
233 | "Bond B expires in 10 years\n",
234 | "\n",
235 | "The interest rate (coupon) for bond V will be greater than for bond A... investors bear more risk for greater return. The longer the maturity the greater the risk something will happen to the company.\n",
236 | "\n",
237 | "### Bond Pricing Implementation\n",
238 | "\n",
239 | "Two types of bonds: \n",
240 | "\n",
241 | "- Zero-coupon bonds: we get the fixed value of bond at matrity\n",
242 | "Bond price = Present Value = par_value / (1 + marketRate)^n\n",
243 | "\n",
244 | "- Coupon bonds: we bond + coupon\n",
245 | "Bond price = (C/R)(1-(1/(1+r)^n)) + par_value/(1+r)^n\n",
246 | "\n",
247 | "\\*C: annual coupon payment \n",
248 | "\\*r: Interest Rate"
249 | ]
250 | },
251 | {
252 | "cell_type": "code",
253 | "execution_count": 12,
254 | "metadata": {},
255 | "outputs": [
256 | {
257 | "name": "stdout",
258 | "output_type": "stream",
259 | "text": [
260 | "Price of the zero-coupon bond: $889.00\n",
261 | "Price of the coupon bond: $1027.75\n"
262 | ]
263 | }
264 | ],
265 | "source": [
266 | "from math import exp\n",
267 | "\n",
268 | "def zeroBondPrice(par_value,market_rate,n):\n",
269 | " return par_value/(1+market_rate)**n\n",
270 | "\n",
271 | "def bondPrice(par_value,coupon, market_Rate,n):\n",
272 | " c = par_value *coupon\n",
273 | " return c/market_rate*(1-(1/(1+market_rate)**n))+ par_value/(1+market_rate)**n\n",
274 | "\n",
275 | "if __name__ == \"__main__\":\n",
276 | " par_value = 1000 # par value of the bond\n",
277 | " coupon = 0.05 # bond yield - coupon\n",
278 | " n = 3 # number of years \n",
279 | " market_rate = 0.04 #market rate of return\n",
280 | " \n",
281 | " print(\"Price of the zero-coupon bond: $%0.2f\" % zeroBondPrice(par_value,market_rate,n))\n",
282 | " print(\"Price of the coupon bond: $%0.2f\" % bondPrice(par_value, coupon,market_rate,n))"
283 | ]
284 | },
285 | {
286 | "cell_type": "code",
287 | "execution_count": null,
288 | "metadata": {
289 | "collapsed": true
290 | },
291 | "outputs": [],
292 | "source": []
293 | }
294 | ],
295 | "metadata": {
296 | "kernelspec": {
297 | "display_name": "Python 3",
298 | "language": "python",
299 | "name": "python3"
300 | },
301 | "language_info": {
302 | "codemirror_mode": {
303 | "name": "ipython",
304 | "version": 3
305 | },
306 | "file_extension": ".py",
307 | "mimetype": "text/x-python",
308 | "name": "python",
309 | "nbconvert_exporter": "python",
310 | "pygments_lexer": "ipython3",
311 | "version": "3.6.3"
312 | }
313 | },
314 | "nbformat": 4,
315 | "nbformat_minor": 2
316 | }
317 |
--------------------------------------------------------------------------------
/jupyter/Untitled.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 1,
6 | "metadata": {},
7 | "outputs": [
8 | {
9 | "data": {
10 | "image/png": "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\negAAAABJRU5ErkJggg==\n",
11 | "text/plain": [
12 | ""
13 | ]
14 | },
15 | "metadata": {},
16 | "output_type": "display_data"
17 | }
18 | ],
19 | "source": [
20 | "import numpy as np\n",
21 | "import pandas_datareader as web\n",
22 | "import matplotlib.pyplot as plt\n",
23 | "\n",
24 | "stocks = ['Shop']\n",
25 | "\n",
26 | "startDate = '01/01/2001'\n",
27 | "endDate = '01/01/2017'\n",
28 | "\n",
29 | "data = web.DataReader(stocks,data_source='yahoo',start=startDate,end=endDate)['Adj Close']\n",
30 | "\n",
31 | "dailyReturns = (data/data.shift(1))-1\n",
32 | "dailyReturns.hist(bins=100)\n",
33 | "plt.show()"
34 | ]
35 | },
36 | {
37 | "cell_type": "code",
38 | "execution_count": null,
39 | "metadata": {
40 | "collapsed": true
41 | },
42 | "outputs": [],
43 | "source": []
44 | }
45 | ],
46 | "metadata": {
47 | "kernelspec": {
48 | "display_name": "Python 3",
49 | "language": "python",
50 | "name": "python3"
51 | },
52 | "language_info": {
53 | "codemirror_mode": {
54 | "name": "ipython",
55 | "version": 3
56 | },
57 | "file_extension": ".py",
58 | "mimetype": "text/x-python",
59 | "name": "python",
60 | "nbconvert_exporter": "python",
61 | "pygments_lexer": "ipython3",
62 | "version": "3.6.3"
63 | }
64 | },
65 | "nbformat": 4,
66 | "nbformat_minor": 2
67 | }
68 |
--------------------------------------------------------------------------------
/jupyter/images/CML2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ceastIU/Quantitative-Finance-Algorithmic-Trading-in-Python/2c72b82577b3681b7b77f04ce55589e2082854c0/jupyter/images/CML2.jpg
--------------------------------------------------------------------------------
/jupyter/images/SML.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ceastIU/Quantitative-Finance-Algorithmic-Trading-in-Python/2c72b82577b3681b7b77f04ce55589e2082854c0/jupyter/images/SML.jpg
--------------------------------------------------------------------------------
/jupyter/images/cal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ceastIU/Quantitative-Finance-Algorithmic-Trading-in-Python/2c72b82577b3681b7b77f04ce55589e2082854c0/jupyter/images/cal.png
--------------------------------------------------------------------------------
/jupyter/images/efficientfrontier.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ceastIU/Quantitative-Finance-Algorithmic-Trading-in-Python/2c72b82577b3681b7b77f04ce55589e2082854c0/jupyter/images/efficientfrontier.png
--------------------------------------------------------------------------------
/jupyter/images/lin_regress.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ceastIU/Quantitative-Finance-Algorithmic-Trading-in-Python/2c72b82577b3681b7b77f04ce55589e2082854c0/jupyter/images/lin_regress.png
--------------------------------------------------------------------------------
/jupyter/images/markowitz_port_optimization.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ceastIU/Quantitative-Finance-Algorithmic-Trading-in-Python/2c72b82577b3681b7b77f04ce55589e2082854c0/jupyter/images/markowitz_port_optimization.png
--------------------------------------------------------------------------------