diff --git a/BLallocation.ipynb b/BLallocation.ipynb new file mode 100644 index 0000000..6f76029 --- /dev/null +++ b/BLallocation.ipynb @@ -0,0 +1,948 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Downloading data\n" + ] + }, + { + "cell_type": "code", + "execution_count": 186, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import yfinance as yf\n", + "from tqdm import tqdm\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 215, + "metadata": {}, + "outputs": [], + "source": [ + "tickers = [\"SAF.PA\", \"ATO.PA\", \"MC.PA\", \"AIR.PA\", \"RNO.PA\", \"HO.PA\", \"ENGI.PA\", \"CS.PA\", \"ENR.DE\", \"TOT\"]\n", + "period = \"2y\"" + ] + }, + { + "cell_type": "code", + "execution_count": 216, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[*********************100%***********************] 10 of 10 completed\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
AIR.PAATO.PACS.PAENGI.PAENR.DEHO.PAMC.PARNO.PASAF.PATOT
Date
2020-12-2891.98000375.30000319.72800112.90029.73000075.680000504.00000036.110001119.94999742.413864
2020-12-2993.07000075.76000219.73600012.75529.90000076.320000512.79998836.255001120.50000042.512001
2020-12-3091.25000075.33999619.67600112.69530.00000075.440002513.09997635.945000119.00000042.669998
2020-12-3189.77999974.77999919.51199912.520NaN74.900002510.89999435.759998115.94999741.910000
2021-01-0489.88999976.12000319.43800012.80530.12999975.180000512.09997635.759998116.15000242.240002
\n", + "
" + ], + "text/plain": [ + " AIR.PA ATO.PA CS.PA ENGI.PA ENR.DE HO.PA \\\n", + "Date \n", + "2020-12-28 91.980003 75.300003 19.728001 12.900 29.730000 75.680000 \n", + "2020-12-29 93.070000 75.760002 19.736000 12.755 29.900000 76.320000 \n", + "2020-12-30 91.250000 75.339996 19.676001 12.695 30.000000 75.440002 \n", + "2020-12-31 89.779999 74.779999 19.511999 12.520 NaN 74.900002 \n", + "2021-01-04 89.889999 76.120003 19.438000 12.805 30.129999 75.180000 \n", + "\n", + " MC.PA RNO.PA SAF.PA TOT \n", + "Date \n", + "2020-12-28 504.000000 36.110001 119.949997 42.413864 \n", + "2020-12-29 512.799988 36.255001 120.500000 42.512001 \n", + "2020-12-30 513.099976 35.945000 119.000000 42.669998 \n", + "2020-12-31 510.899994 35.759998 115.949997 41.910000 \n", + "2021-01-04 512.099976 35.759998 116.150002 42.240002 " + ] + }, + "execution_count": 216, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ohlc = yf.download(tickers, period=period)\n", + "prices = ohlc[\"Adj Close\"]\n", + "prices.tail()" + ] + }, + { + "cell_type": "code", + "execution_count": 217, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[*********************100%***********************] 1 of 1 completed\n" + ] + }, + { + "data": { + "text/plain": [ + "Date\n", + "2019-01-04 4737.120117\n", + "2019-01-07 4719.169922\n", + "2019-01-08 4773.270020\n", + "2019-01-09 4813.580078\n", + "2019-01-10 4805.660156\n", + "Name: Adj Close, dtype: float64" + ] + }, + "execution_count": 217, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "market_prices = yf.download(\"^FCHI\", period=period)[\"Adj Close\"]\n", + "market_prices.head()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 218, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████| 10/10 [00:52<00:00, 5.23s/it]\n" + ] + } + ], + "source": [ + "mcaps = {}\n", + "for t in tqdm(tickers):\n", + " stock = yf.Ticker(t)\n", + " mcaps[t] = stock.info[\"marketCap\"]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 219, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'SAF.PA': 49588846592,\n", + " 'ATO.PA': 8368633344,\n", + " 'MC.PA': 258050244608,\n", + " 'AIR.PA': 70448144384,\n", + " 'RNO.PA': 10383272960,\n", + " 'HO.PA': 16002814976,\n", + " 'ENGI.PA': 30947381248,\n", + " 'CS.PA': 46335721472,\n", + " 'ENR.DE': 12153989120,\n", + " 'TOT': 115031777280}" + ] + }, + "execution_count": 219, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mcaps" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Constructing the prior¶\n" + ] + }, + { + "cell_type": "code", + "execution_count": 220, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.5192887221015647" + ] + }, + "execution_count": 220, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pypfopt\n", + "from pypfopt import black_litterman, risk_models\n", + "from pypfopt import BlackLittermanModel, plotting\n", + "\n", + "S = risk_models.CovarianceShrinkage(prices).ledoit_wolf()\n", + "delta = black_litterman.market_implied_risk_aversion(market_prices)\n", + "delta" + ] + }, + { + "cell_type": "code", + "execution_count": 221, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plotting.plot_covariance(S, plot_correlation=True);\n" + ] + }, + { + "cell_type": "code", + "execution_count": 222, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "AIR.PA 0.211825\n", + "ATO.PA 0.119270\n", + "CS.PA 0.144821\n", + "ENGI.PA 0.117126\n", + "ENR.DE 0.027212\n", + "HO.PA 0.137638\n", + "MC.PA 0.142937\n", + "RNO.PA 0.198128\n", + "SAF.PA 0.208179\n", + "TOT 0.165422\n", + "dtype: float64" + ] + }, + "execution_count": 222, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "market_prior = black_litterman.market_implied_prior_returns(mcaps, delta, S)\n", + "market_prior" + ] + }, + { + "cell_type": "code", + "execution_count": 223, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "market_prior.plot.barh(figsize=(10,5));\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Views" + ] + }, + { + "cell_type": "code", + "execution_count": 224, + "metadata": {}, + "outputs": [], + "source": [ + "# You don't have to provide views on all the assets\n", + "viewdict = {\n", + " \"SAF.PA\":-0.01, \n", + " \"ATO.PA\":0.15, \n", + " \"MC.PA\":-0.06, \n", + " \"AIR.PA\":0.06, \n", + " \"RNO.PA\":-0.12, \n", + " \"HO.PA\":0.12, \n", + " \"ENGI.PA\" : 0.16, \n", + " \"TOT\" : 0.17,\n", + " \"ENR.DE\":-0.027,\n", + " \"CS.PA\":0.22,\n", + "}\n", + "\n", + "bl = BlackLittermanModel(S, pi=market_prior, absolute_views=viewdict)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## View confidences\n" + ] + }, + { + "cell_type": "code", + "execution_count": 225, + "metadata": {}, + "outputs": [], + "source": [ + "confidences = [\n", + " 0.7,#SAFRAN\n", + " 0.7,#ATOS\n", + " 0.3,#LVMH\n", + " 0.6,#AIRBUS\n", + " 0.3,#RNO\n", + " 0.6,#Thales\n", + " 0.3,#ENGIE\n", + " 0.3,#TOTAL\n", + " 0.3,#SIEMENS ENERGY\n", + " 0.3 #AXA\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 226, + "metadata": {}, + "outputs": [], + "source": [ + "bl = BlackLittermanModel(S, pi=market_prior, absolute_views=viewdict, omega=\"idzorek\", view_confidences=confidences)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 227, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = plt.subplots(figsize=(7,7))\n", + "im = ax.imshow(bl.omega)\n", + "\n", + "# We want to show all ticks...\n", + "ax.set_xticks(np.arange(len(bl.tickers)))\n", + "ax.set_yticks(np.arange(len(bl.tickers)))\n", + "\n", + "ax.set_xticklabels(bl.tickers)\n", + "ax.set_yticklabels(bl.tickers)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 228, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0.00565162, 0.00271865, 0.01110961, 0.00951223, 0.03600989,\n", + " 0.00438299, 0.01260051, 0.02032509, 0.00301437, 0.01406578])" + ] + }, + "execution_count": 228, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.diag(bl.omega)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 229, + "metadata": {}, + "outputs": [], + "source": [ + "def stockreturn(prices, ticker, shift=1):\n", + " stock_returns = (prices[ticker] / prices[ticker] .shift(shift)) - 1\n", + " stock_returns = stock_returns.to_frame()\n", + " stock_returns.columns = [f'{ticker} {shift} days Return']\n", + " return stock_returns\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for t in tickers:\n", + " fig, axs = plt.subplots(2, 3, figsize=(3*6, 2*6))\n", + " for ax, shift in zip(axs.flat, [1, 5, 20, 50, 100, 100]):\n", + " try:\n", + " x = stockreturn(prices, t, shift=shift)*100\n", + " sns.histplot(x, kde=True, ax = ax, bins=30) #binwidth=10)\n", + " ax.axvline(np.nanmean(x.values), color=\"red\")\n", + " ax.axvline(np.nanmean(x.values) - np.nanstd(x.values), color=\"green\")\n", + " ax.axvline(np.nanmean(x.values) + np.nanstd(x.values), color=\"green\")\n", + " except ValueError:\n", + " pass\n", + " plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 232, + "metadata": {}, + "outputs": [], + "source": [ + "intervals = [\n", + " (-0.2, 0.4),#SAFRAN\n", + " (-0.12, 0.2),#ATOS\n", + " (0, 0.25),#LVMH\n", + " (-0.35, 0.4),#AIRBUS\n", + " (-0.2, 0.5),#RNO\n", + " (-0.2, 0.1),#Thales\n", + " (-0.15, 0.25),#ENGIE\n", + " (-0.2, 0.2),#TOTAL\n", + " (0.15, 0.35),#SIEMENS ENERGY\n", + " (-0.2, 0.25),#AXA\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 233, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.09000000000000002, 0.0256, 0.015625, 0.140625, 0.12249999999999998, 0.022500000000000006, 0.04000000000000001, 0.04000000000000001, 0.009999999999999998, 0.050625]\n" + ] + } + ], + "source": [ + "variances = []\n", + "for lb, ub in intervals:\n", + " sigma = (ub - lb)/2\n", + " variances.append(sigma ** 2)\n", + "\n", + "print(variances)\n", + "omega = np.diag(variances)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Posterior estimates" + ] + }, + { + "cell_type": "code", + "execution_count": 234, + "metadata": {}, + "outputs": [], + "source": [ + "# We are using the shortcut to automatically compute market-implied prior\n", + "bl = BlackLittermanModel(S, pi=\"market\", market_caps=mcaps, risk_aversion=delta,\n", + " absolute_views=viewdict, omega=omega)" + ] + }, + { + "cell_type": "code", + "execution_count": 235, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "AIR.PA 0.149304\n", + "ATO.PA 0.086622\n", + "CS.PA 0.104913\n", + "ENGI.PA 0.083511\n", + "ENR.DE 0.003077\n", + "HO.PA 0.096104\n", + "MC.PA 0.084387\n", + "RNO.PA 0.133561\n", + "SAF.PA 0.145681\n", + "TOT 0.125007\n", + "dtype: float64" + ] + }, + "execution_count": 235, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Posterior estimate of returns\n", + "ret_bl = bl.bl_returns()\n", + "ret_bl" + ] + }, + { + "cell_type": "code", + "execution_count": 236, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
PriorPosteriorViews
AIR.PA0.2118250.1493040.060
ATO.PA0.1192700.0866220.150
CS.PA0.1448210.1049130.220
ENGI.PA0.1171260.0835110.160
ENR.DE0.0272120.003077-0.027
HO.PA0.1376380.0961040.120
MC.PA0.1429370.084387-0.060
RNO.PA0.1981280.133561-0.120
SAF.PA0.2081790.145681-0.010
TOT0.1654220.1250070.170
\n", + "
" + ], + "text/plain": [ + " Prior Posterior Views\n", + "AIR.PA 0.211825 0.149304 0.060\n", + "ATO.PA 0.119270 0.086622 0.150\n", + "CS.PA 0.144821 0.104913 0.220\n", + "ENGI.PA 0.117126 0.083511 0.160\n", + "ENR.DE 0.027212 0.003077 -0.027\n", + "HO.PA 0.137638 0.096104 0.120\n", + "MC.PA 0.142937 0.084387 -0.060\n", + "RNO.PA 0.198128 0.133561 -0.120\n", + "SAF.PA 0.208179 0.145681 -0.010\n", + "TOT 0.165422 0.125007 0.170" + ] + }, + "execution_count": 236, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rets_df = pd.DataFrame([market_prior, ret_bl, pd.Series(viewdict)], \n", + " index=[\"Prior\", \"Posterior\", \"Views\"]).T\n", + "rets_df" + ] + }, + { + "cell_type": "code", + "execution_count": 237, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtEAAAHwCAYAAABg0TMJAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAAt1klEQVR4nO3de5hlZX0n+u/PRgMKZiIS9YgIJDiR4dJqc4ktKCYqmhhUotwmJlEPR4+OJBoimZxJMpkx4zg6OkYGQjxOcE4MOKKCDt7wEhA10pqWgGBsCcYWEwETJREv4O/8sXdTRVPd1KKqa1WzP5/nqaf2ulX9ej27V333u971vtXdAQAAFu8+YxcAAAA7GyEaAAAGEqIBAGAgIRoAAAYSogEAYCAhGgAABtpl7ALuiQc/+MG97777jl0GAAD3cp/97Gdv6u69tl6/U4bofffdNxs2bBi7DAAA7uWq6isLrdedAwAABhKiAQBgICEaAAAG2in7RAMAcFc/+MEPsnnz5nz3u98du5Sdzq677pq99947973vfRe1vxANAHAvsXnz5uyxxx7Zd999U1Vjl7PT6O7cfPPN2bx5c/bbb79FHaM7BwDAvcR3v/vd7LnnngL0QFWVPffcc1ALvhANAHAvIkDfM0PPmxANAMCyWbNmTdauXZuDDjooz33uc/Od73xnwf0e//jHr3Bly0ufaACAe6lnvvLCZf157339cXe7z2677ZaNGzcmSU455ZScffbZecUrXnHH9ttvvz1r1qzJJz/5yUX/3i3HrCZaogEA2CGOOuqobNq0KR//+MdzzDHH5OSTT87BBx+cJNl9992TTB7qO/3003PQQQfl4IMPzvnnn58kCx6zmmiJBgBg2d122215//vfn2OPPTZJ8pnPfCZXXXXVXUa/eNe73pWNGzfm85//fG666aYcdthhOfroo7d7zGqgJRoAgGVz6623Zu3atVm3bl322WefvPCFL0ySHH744QuG4U984hM56aSTsmbNmjzkIQ/JE5/4xFxxxRXbPWY10BINAMCymd8ner4HPOABC+7f3dv8Wds6ZjXQEg0AwGiOPvronH/++bn99ttz44035tJLL83hhx8+dll3S0s0AACjefazn51PfepTOfTQQ1NVee1rX5uHPvShufbaa8cubbtqe03oq9W6det6w4YNY5cBALCqXHPNNXn0ox89dhk7rYXOX1V9trvXbb2v7hwAADCQEA0AAAPpEw0r4PLjjl/0vusvvGAHVgIALAct0QAAMJAQDQAAAwnRAAAwkBANAMCyWbNmTdauXZuDDjooz33uc/Od73xn0PHXX3993v72t9+j3/34xz/+Hh13T3iwEADgXup5579kWX/eO0446273mT/t9ymnnJKzzz47r3jFKxb9O7aE6JNPPnnRx9x+++1Zs2ZNPvnJTw4+5p7SEg0AwA5x1FFHZdOmTfnmN7+ZZz3rWTnkkENy5JFH5sorr0yS/Pmf/3nWrl2btWvX5jGPeUxuueWWnHHGGbnsssuydu3avOENb8jtt9+e008/PYcddlgOOeSQ/NEf/VGS5OMf/3iOOeaYnHzyyTn44IOTJLvvvnuSpLtz+umn56CDDsrBBx+c888/f5vH3FNaogEAWHa33XZb3v/+9+fYY4/N7/7u7+Yxj3lM3vOe9+SjH/1onv/852fjxo153etelzPPPDPr16/PP/3TP2XXXXfNa17zmrzuda/L+973viTJOeeckx/90R/NFVdcke9973tZv359nvrUpyZJPvOZz+Sqq67Kfvvtd6ff/a53vSsbN27M5z//+dx000057LDDcvTRR2/3mKGEaAAAls2tt96atWvXJpm0RL/whS/MEUcckQsumMyD8OQnPzk333xzvvWtb2X9+vV5xStekVNOOSXPec5zsvfee9/l533oQx/KlVdemXe+851Jkm9961v50pe+lPvd7345/PDDFwzDn/jEJ3LSSSdlzZo1echDHpInPvGJueKKK/LABz5wm8cMNbMh+pmvvHDR+7739cftwEoAAO495veJ3qK777JfVeWMM87Iz/3cz+Xiiy/OkUcemUsuueQu+3V3/vAP/zBPe9rT7rT+4x//eB7wgAcsWMNCv2+LbR0zlD7RAADsUEcffXT+9E//NMkk/D74wQ/OAx/4wHz5y1/OwQcfnFe96lVZt25drr322uyxxx655ZZb7jj2aU97Ws4666z84Ac/SJL89V//df75n//5bn/f+eefn9tvvz033nhjLr300hx++OHL+m+a2ZZoAABWxu/93u/lV3/1V3PIIYfk/ve/f84999wkyRvf+MZ87GMfy5o1a3LggQfm6U9/eu5zn/tkl112yaGHHppf+ZVfyWmnnZbrr78+j33sY9Pd2WuvvfKe97xnu7/v2c9+dj71qU/l0EMPTVXlta99bR760Ifm2muvXbZ/U22vuXu1WrduXW/YsGFJP0N3DlbS5ccdv+h91194wQ6sBIB7s2uuuSaPfvSjxy5jp7XQ+auqz3b3uq331Z0DAAAG0p0DAGAZDLnLnbjTvbPTEg0AAAMJ0QAAMJAQDQAAAwnRAAAw0LKE6Ko6tqq+WFWbquqMBbafUlVXTr8+WVWHLvZYAAB2Dk960pPywQ9+8E7r3vjGN2b//ffPa17zmpGq2jGWPDpHVa1JcmaSpyTZnOSKqrqou78wb7e/SfLE7v6Hqnp6knOSHLHIYwEAuAeGzFOwGHc3l8FJJ52U8847705TdJ933nk599xzc9RRRy1rLWNbjpbow5Ns6u7ruvv7Sc5LcqcxW7r7k939D9PFTyfZe7HHAgCwc/jFX/zFvO9978v3vve9JMn111+fG264IZs2bcrLXvayJMmNN96Y448/PocddlgOO+ywXH755UmSgw8+OP/4j/+Y7s6ee+6Zt73tbUmSX/qlX8oll1ySq6++OocffnjWrl2bQw45JF/60pfG+UdOLUeIfniSr85b3jxdty0vTPL+e3gsAACr1J577pnDDz88H/jAB5JMWqFPOOGEVNUd+5x22mn59V//9VxxxRW54IIL8qIXvShJsn79+lx++eW5+uqrs//+++eyyy5Lknz605/OkUcembPPPjunnXZaNm7cmA0bNmTvvfe+awEraDkmW6kF1i04l3hVHZNJiH7CPTj21CSnJsk+++wzvEoAAHa4LV06jjvuuJx33nl561vfmiuvvPKO7Zdcckm+8IW5nrvf/va3c8stt+Soo47KpZdemkc+8pF5yUteknPOOSdf+9rX8qAHPSi77757fvqnfzqvfvWrs3nz5jznOc/JAQccMMY/7w7L0RK9Ockj5i3vneSGrXeqqkOSvCXJcd1985Bjk6S7z+nudd29bq+99lqGsgEAWG7Petaz8pGPfCSf+9zncuutt+axj33snbb/8Ic/zKc+9als3LgxGzduzNe+9rXsscceOfroo3PZZZflsssuy5Oe9KTstddeeec733lHX+qTTz45F110UXbbbbc87WlPy0c/+tEx/nl3WI6W6CuSHFBV+yX5WpITk5w8f4eq2ifJu5L8Unf/9ZBjAYDVy1TXbG333XfPk570pLzgBS/ISSeddJft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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "rets_df.plot.bar(figsize=(12,8));\n" + ] + }, + { + "cell_type": "code", + "execution_count": 238, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "S_bl = bl.bl_cov()\n", + "plotting.plot_covariance(S_bl);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Portfolio allocation" + ] + }, + { + "cell_type": "code", + "execution_count": 239, + "metadata": {}, + "outputs": [], + "source": [ + "from pypfopt import EfficientFrontier, objective_functions\n" + ] + }, + { + "cell_type": "code", + "execution_count": 240, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\D580656\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\pypfopt\\efficient_frontier.py:196: UserWarning: max_sharpe transforms the optimisation problem so additional objectives may not work as expected.\n", + " \"max_sharpe transforms the optimisation problem so additional objectives may not work as expected.\"\n" + ] + }, + { + "data": { + "text/plain": [ + "OrderedDict([('AIR.PA', 0.15461),\n", + " ('ATO.PA', 0.08262),\n", + " ('CS.PA', 0.10543),\n", + " ('ENGI.PA', 0.07508),\n", + " ('ENR.DE', 0.0),\n", + " ('HO.PA', 0.08636),\n", + " ('MC.PA', 0.07824),\n", + " ('RNO.PA', 0.12136),\n", + " ('SAF.PA', 0.14898),\n", + " ('TOT', 0.14732)])" + ] + }, + "execution_count": 240, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ef = EfficientFrontier(ret_bl, S_bl)\n", + "ef.add_objective(objective_functions.L2_reg)\n", + "ef.max_sharpe()\n", + "weights = ef.clean_weights()\n", + "weights" + ] + }, + { + "cell_type": "code", + "execution_count": 248, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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IiIiW2PZISIiIltj2SEiIiJbY9khIiIiW2PZISIiIltj2SEiIiJbY9khIhoGEflTETkuIm+KyBERWRF73C0it0Xkrx96/Q4ROR177RER+UiP5z4hIs2xx0+IyKYez31YRJSIzEred0dkDyw7RERDJCKrAHwQwGKl1AIAjwG4Gnv6cQCnAWwUEXnoS39ZKVUce/vhQ89tVUoVA1gP4K9EZHTs8acB7AHwsfh/J0T2xrJDRDR0hQBuK6UCAKCUuq2UuhZ77mkAXwNwBcDKwR5YKXULwHkAE0UkE0AJgE+CZYdo0Fh2iIiG7gUA40XkjIj8k4iUAoCIpAF4D4DnAfwA0eLT0//rcRkrr7cDi8gUAFMAnAPwIQA/VUqdAXBXRBYn5tshsieWHSKiIVJKtQNYAuA3ATQD2Coin0D00tarSqlOANsAfFhEXD2+tOdlrDsPHbZCRI4gWpI+rZS6i2hZejb2/LN4Z3kiokdw6w5ARJTKlFIRADsA7BCRYwB+DUAIQImIXIq9LA/AuwC8NIBDblVKfe7BJ7GRn3cDmCciCoALgBKRP1RKqbh9I0Q2xpEdIqIhEpGZIjK9x0PFiI7wrAEwQSk1SSk1CcBnMfTRmI8A+J5SamLseOMBXIydg4gGgGWHiGjoMgF8N3ab+JsA5gA4AeCVB5OWY+oAPCUivocPICKfEZHPPOIcTwP40UOPbQPwzPCiEzmHcBSUiIiI7IwjO0RERGRrLDtERERkayw7REREZGssO0RERGRrLDtERERkayw7REREZGssO0RERGRrLDtERERkayw7REREZGssO0RERGRrLDtERERkayw7REREZGssO0RERGRrLDtERERkayw7REREZGssO0RERGRrLDtERERkayw7REREZGssO0RERGRrLDtERERkayw7REREZGssO0RERGRrLDtERERkayw7REREZGssO0RERGRrLDtERERkayw7REREZGssO0RERGRrLDtERERkayw7REREZGssO0RERGRrLDtERERkayw7REREZGssO0RERGRrLDtERERkayw7REREZGssO0RERGRrLDtERERkayw7REREZGssO0RERGRr/z8ejwPr3h4yPQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "pd.Series(weights).plot.pie(figsize=(10,10));\n" + ] + }, + { + "cell_type": "code", + "execution_count": 249, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Leftover: $10.60\n" + ] + }, + { + "data": { + "text/plain": [ + "{'AIR.PA': 34,\n", + " 'ATO.PA': 22,\n", + " 'CS.PA': 108,\n", + " 'ENGI.PA': 116,\n", + " 'HO.PA': 23,\n", + " 'MC.PA': 3,\n", + " 'RNO.PA': 68,\n", + " 'SAF.PA': 26,\n", + " 'TOT': 70}" + ] + }, + "execution_count": 249, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from pypfopt import DiscreteAllocation\n", + "\n", + "da = DiscreteAllocation(weights, prices.iloc[-1], total_portfolio_value=20000)\n", + "alloc, leftover = da.lp_portfolio()\n", + "print(f\"Leftover: ${leftover:.2f}\")\n", + "alloc" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.8" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}