{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Libraries Installation" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.0.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m23.2.1\u001b[0m\n", "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", "\n", "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.0.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m23.2.1\u001b[0m\n", "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", "\n", "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.0.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m23.2.1\u001b[0m\n", "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", "\n", "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.0.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m23.2.1\u001b[0m\n", "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n" ] } ], "source": [ "!pip install yfinance -q\n", "!pip install pandas -q\n", "!pip install numpy -q\n", "!pip install matplotlib -q" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "import yfinance as yf\n", "import pandas as pd\n", "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Setup portfolio" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [], "source": [ "amount_to_invest = 50_000.0\n", "assets = [\"PETR3.SA\", \"CMIG3.SA\", \"CPLE6.SA\", \"RANI3.SA\", \"TAEE11.SA\", \"FESA4.SA\", \"UNIP6.SA\"]\n", "weights = [32.5183, 18.4078, 12.6776, 11.1030, 10.3605, 9.1889, 5.7439]" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [], "source": [ "if sum(weights) != 100.0:\n", " sum(weights)" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [], "source": [ "buy_orders = {\n", " asset: (weights / 100) * amount_to_invest\n", " for asset, weights in zip(assets, weights)\n", "}" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'PETR3.SA': 16259.150000000003,\n", " 'CMIG3.SA': 9203.900000000001,\n", " 'CPLE6.SA': 6338.8,\n", " 'RANI3.SA': 5551.5,\n", " 'TAEE11.SA': 5180.25,\n", " 'FESA4.SA': 4594.45,\n", " 'UNIP6.SA': 2871.95}" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "buy_orders" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [], "source": [ "if sum(buy_orders.values()) != amount_to_invest:\n", " sum(buy_orders.values())" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [], "source": [ "assets = list(buy_orders.keys())" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['PETR3.SA',\n", " 'CMIG3.SA',\n", " 'CPLE6.SA',\n", " 'RANI3.SA',\n", " 'TAEE11.SA',\n", " 'FESA4.SA',\n", " 'UNIP6.SA']" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "assets" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [], "source": [ "total_invested = sum(buy_orders.values())" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "50000.0" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "total_invested" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Import financial assets data" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [], "source": [ "start = \"2017-02-01\"\n", "\n", "assets_history_price = yf.download(assets, start=start, progress=False)[\"Adj Close\"]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Dummy portfolio simulation" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "CMIG3.SA 4.455539\n", "CPLE6.SA 1.778329\n", "FESA4.SA 6.051053\n", "PETR3.SA 6.434494\n", "RANI3.SA 2.162255\n", "TAEE11.SA 11.382806\n", "UNIP6.SA 2.045254\n", "Name: 2017-02-01 00:00:00, dtype: float64" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "first_line = assets_history_price.iloc[0]\n", "first_line" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [], "source": [ "buy_orders_df = pd.Series(data = buy_orders, index=assets)" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [], "source": [ "number_of_shares = round(buy_orders_df / first_line, 0)" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [], "source": [ "net_worth = assets_history_price * number_of_shares" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [], "source": [ "net_worth[\"Total net worth\"] = net_worth.sum(axis=1)" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
| \n", " | CMIG3.SA | \n", "CPLE6.SA | \n", "FESA4.SA | \n", "PETR3.SA | \n", "RANI3.SA | \n", "TAEE11.SA | \n", "UNIP6.SA | \n", "Total net worth | \n", "
|---|---|---|---|---|---|---|---|---|
| Date | \n", "\n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " |
| 2017-02-01 | \n", "9205.144042 | \n", "6337.965883 | \n", "4592.748901 | \n", "16259.967590 | \n", "5550.509322 | \n", "5179.176650 | \n", "2871.536605 | \n", "49997.048993 | \n", "
| 2017-02-02 | \n", "9615.273934 | \n", "6465.322914 | \n", "4614.160777 | \n", "16038.055955 | \n", "5550.509322 | \n", "5222.037277 | \n", "2855.359305 | \n", "50360.719485 | \n", "
| 2017-02-03 | \n", "9906.921354 | \n", "6517.062172 | \n", "4603.454839 | \n", "16481.878019 | \n", "5550.509322 | \n", "5231.563163 | \n", "2851.314646 | \n", "51142.703515 | \n", "
| 2017-02-06 | \n", "9788.441837 | \n", "6415.574983 | \n", "4571.338111 | \n", "16108.668256 | \n", "5530.758809 | \n", "5164.888473 | \n", "2891.758229 | \n", "50471.428698 | \n", "
| 2017-02-07 | \n", "9742.872944 | \n", "6495.171587 | \n", "4603.454839 | \n", "15906.927777 | \n", "5550.509322 | \n", "5131.551127 | \n", "2871.536605 | \n", "50302.024201 | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
| 2023-08-04 | \n", "39171.358109 | \n", "30579.119728 | \n", "38784.898842 | \n", "83087.762699 | \n", "27004.221810 | \n", "16191.813316 | \n", "114720.838715 | \n", "349540.013219 | \n", "
| 2023-08-07 | \n", "38572.220158 | \n", "30757.320408 | \n", "37570.500000 | \n", "83643.696144 | \n", "28085.397628 | \n", "16125.270538 | \n", "113007.957001 | \n", "347762.361876 | \n", "
| 2023-08-08 | \n", "39150.701576 | \n", "30792.961224 | \n", "36963.300579 | \n", "83593.164627 | \n", "27312.880881 | \n", "16066.050625 | \n", "112320.000000 | \n", "346199.059512 | \n", "
| 2023-08-09 | \n", "40183.701576 | \n", "30935.521088 | \n", "36750.778610 | \n", "84553.417686 | \n", "27595.250000 | \n", "15783.949375 | \n", "112221.720428 | \n", "348024.338764 | \n", "
| 2023-08-11 | \n", "40948.119370 | \n", "32325.478912 | \n", "34299.208958 | \n", "84578.693085 | \n", "27466.899510 | \n", "15847.650833 | \n", "108725.763428 | \n", "344191.814095 | \n", "
1625 rows × 8 columns
\n", "| \n", " | IBOV | \n", "CMIG3.SA | \n", "CPLE6.SA | \n", "FESA4.SA | \n", "PETR3.SA | \n", "RANI3.SA | \n", "TAEE11.SA | \n", "UNIP6.SA | \n", "Total net worth | \n", "
|---|---|---|---|---|---|---|---|---|---|
| Date | \n", "\n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " |
| 2017-02-01 | \n", "64836.000000 | \n", "9205.144042 | \n", "6337.965883 | \n", "4592.748901 | \n", "16259.967590 | \n", "5550.509322 | \n", "5179.176650 | \n", "2871.536605 | \n", "49997.048993 | \n", "
| 2017-02-02 | \n", "64578.000000 | \n", "9615.273934 | \n", "6465.322914 | \n", "4614.160777 | \n", "16038.055955 | \n", "5550.509322 | \n", "5222.037277 | \n", "2855.359305 | \n", "50360.719485 | \n", "
| 2017-02-03 | \n", "64954.000000 | \n", "9906.921354 | \n", "6517.062172 | \n", "4603.454839 | \n", "16481.878019 | \n", "5550.509322 | \n", "5231.563163 | \n", "2851.314646 | \n", "51142.703515 | \n", "
| 2017-02-06 | \n", "63993.000000 | \n", "9788.441837 | \n", "6415.574983 | \n", "4571.338111 | \n", "16108.668256 | \n", "5530.758809 | \n", "5164.888473 | \n", "2891.758229 | \n", "50471.428698 | \n", "
| 2017-02-07 | \n", "64199.000000 | \n", "9742.872944 | \n", "6495.171587 | \n", "4603.454839 | \n", "15906.927777 | \n", "5550.509322 | \n", "5131.551127 | \n", "2871.536605 | \n", "50302.024201 | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
| 2023-08-04 | \n", "119508.000000 | \n", "39171.358109 | \n", "30579.119728 | \n", "38784.898842 | \n", "83087.762699 | \n", "27004.221810 | \n", "16191.813316 | \n", "114720.838715 | \n", "349540.013219 | \n", "
| 2023-08-07 | \n", "119380.000000 | \n", "38572.220158 | \n", "30757.320408 | \n", "37570.500000 | \n", "83643.696144 | \n", "28085.397628 | \n", "16125.270538 | \n", "113007.957001 | \n", "347762.361876 | \n", "
| 2023-08-08 | \n", "119090.000000 | \n", "39150.701576 | \n", "30792.961224 | \n", "36963.300579 | \n", "83593.164627 | \n", "27312.880881 | \n", "16066.050625 | \n", "112320.000000 | \n", "346199.059512 | \n", "
| 2023-08-09 | \n", "118409.000000 | \n", "40183.701576 | \n", "30935.521088 | \n", "36750.778610 | \n", "84553.417686 | \n", "27595.250000 | \n", "15783.949375 | \n", "112221.720428 | \n", "348024.338764 | \n", "
| 2023-08-11 | \n", "118065.140625 | \n", "40948.119370 | \n", "32325.478912 | \n", "34299.208958 | \n", "84578.693085 | \n", "27466.899510 | \n", "15847.650833 | \n", "108725.763428 | \n", "344191.814095 | \n", "
1617 rows × 9 columns
\n", "| \n", " | IBOV | \n", "CMIG3.SA | \n", "CPLE6.SA | \n", "FESA4.SA | \n", "PETR3.SA | \n", "RANI3.SA | \n", "TAEE11.SA | \n", "UNIP6.SA | \n", "Total net worth | \n", "
|---|---|---|---|---|---|---|---|---|---|
| Date | \n", "\n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " | \n", " |
| 2017-02-01 | \n", "1.000000 | \n", "1.000000 | \n", "1.000000 | \n", "1.000000 | \n", "1.000000 | \n", "1.000000 | \n", "1.000000 | \n", "1.000000 | \n", "1.000000 | \n", "
| 2017-02-02 | \n", "0.996021 | \n", "1.044554 | \n", "1.020094 | \n", "1.004662 | \n", "0.986352 | \n", "1.000000 | \n", "1.008276 | \n", "0.994366 | \n", "1.007274 | \n", "
| 2017-02-03 | \n", "1.001820 | \n", "1.076238 | \n", "1.028258 | \n", "1.002331 | \n", "1.013648 | \n", "1.000000 | \n", "1.010115 | \n", "0.992958 | \n", "1.022914 | \n", "
| 2017-02-06 | \n", "0.986998 | \n", "1.063367 | \n", "1.012245 | \n", "0.995338 | \n", "0.990695 | \n", "0.996442 | \n", "0.997241 | \n", "1.007042 | \n", "1.009488 | \n", "
| 2017-02-07 | \n", "0.990175 | \n", "1.058416 | \n", "1.024804 | \n", "1.002331 | \n", "0.978288 | \n", "1.000000 | \n", "0.990804 | \n", "1.000000 | \n", "1.006100 | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
| 2023-08-04 | \n", "1.843235 | \n", "4.255377 | \n", "4.824753 | \n", "8.444812 | \n", "5.109959 | \n", "4.865179 | \n", "3.126330 | \n", "39.951028 | \n", "6.991213 | \n", "
| 2023-08-07 | \n", "1.841261 | \n", "4.190290 | \n", "4.852869 | \n", "8.180395 | \n", "5.144149 | \n", "5.059968 | \n", "3.113481 | \n", "39.354524 | \n", "6.955658 | \n", "
| 2023-08-08 | \n", "1.836788 | \n", "4.253133 | \n", "4.858493 | \n", "8.048187 | \n", "5.141041 | \n", "4.920788 | \n", "3.102047 | \n", "39.114946 | \n", "6.924390 | \n", "
| 2023-08-09 | \n", "1.826285 | \n", "4.365353 | \n", "4.880986 | \n", "8.001913 | \n", "5.200098 | \n", "4.971661 | \n", "3.047579 | \n", "39.080721 | \n", "6.960898 | \n", "
| 2023-08-11 | \n", "1.820981 | \n", "4.448395 | \n", "5.100292 | \n", "7.468122 | \n", "5.201652 | \n", "4.948537 | \n", "3.059878 | \n", "37.863269 | \n", "6.884243 | \n", "
1616 rows × 9 columns
\n", "