From 95f6ebcfa6140765d12f40784d19361d7ba688a3 Mon Sep 17 00:00:00 2001 From: Sergey Kikevich Date: Wed, 15 Sep 2021 18:44:20 +0300 Subject: [PATCH] docs: add more notebooks to readthedocs page --- README.md | 7 + docs/conf.py | 2 + docs/index.rst | 18 ++- docs/jupyter/funds.nblink | 3 + docs/jupyter/portfolio.nblink | 3 + docs/jupyter/quickstart.nblink | 3 + docs/quickstart.nblink | 3 - examples/01 howto.ipynb | 21 +++ examples/02 index funds perfomance.ipynb | 21 +++ examples/03 investment portfolios.ipynb | 196 +++++++++++++---------- 10 files changed, 183 insertions(+), 94 deletions(-) create mode 100644 docs/jupyter/funds.nblink create mode 100644 docs/jupyter/portfolio.nblink create mode 100644 docs/jupyter/quickstart.nblink delete mode 100644 docs/quickstart.nblink diff --git a/README.md b/README.md index 907f505..645dffa 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@

+ + docs python   @@ -34,6 +36,7 @@ _okama_ goes with **free** «end of day» historical stock markets data and macr - [Other historical data](#other-historical-data) - [Installation](#installation) - [Getting started](#getting-started) +- [Documentation](#documentation) - [RoadMap](#roadmap) - [Contributing to okama](#contributing-to-okama) - [Communication](#communication) @@ -157,6 +160,10 @@ map = ok.Plots(ls, ccy='USD').plot_transition_map(cagr=False) More examples are available in form of [Jupyter Notebooks](https://github.com/mbk-dev/okama/tree/master/examples). +## Documentation + +The official documentation is hosted on readthedocs.org: [https://okama.readthedocs.io/](https://okama.readthedocs.io/) + ## RoadMap The plan for _okama_ is to add more functions that will be useful to investors and asset managers. diff --git a/docs/conf.py b/docs/conf.py index dec6173..a6d6da0 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -50,6 +50,8 @@ # The encoding of source files. source_encoding = "utf-8" +add_module_names = False + # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. diff --git a/docs/index.rst b/docs/index.rst index 99be5ee..4123800 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -98,15 +98,23 @@ The latest development version can be installed directly from GitHub: The development version of *okama* can have technical and financial issues. Please use carefully at your own risk. +.. toctree:: + :maxdepth: 1 + :caption: Quick Start -Classes Overview -**************** + /jupyter/quickstart .. toctree:: - :maxdepth: 0 - :caption: Quick Start + :maxdepth: 1 + :caption: Index Funds Performance + + /jupyter/funds + +.. toctree:: + :maxdepth: 1 + :caption: Investment Portfolios - quickstart + /jupyter/portfolio .. autosummary:: :toctree: stubs diff --git a/docs/jupyter/funds.nblink b/docs/jupyter/funds.nblink new file mode 100644 index 0000000..29312f9 --- /dev/null +++ b/docs/jupyter/funds.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../examples/02 index funds perfomance.ipynb" +} diff --git a/docs/jupyter/portfolio.nblink b/docs/jupyter/portfolio.nblink new file mode 100644 index 0000000..22c78c7 --- /dev/null +++ b/docs/jupyter/portfolio.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../examples/03 investment portfolios.ipynb" +} diff --git a/docs/jupyter/quickstart.nblink b/docs/jupyter/quickstart.nblink new file mode 100644 index 0000000..72b2f8a --- /dev/null +++ b/docs/jupyter/quickstart.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../examples/01 howto.ipynb" +} diff --git a/docs/quickstart.nblink b/docs/quickstart.nblink deleted file mode 100644 index 3bec4ef..0000000 --- a/docs/quickstart.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../examples/01 howto.ipynb" -} diff --git a/examples/01 howto.ipynb b/examples/01 howto.ipynb index 52d5f4a..eb27df7 100644 --- a/examples/01 howto.ipynb +++ b/examples/01 howto.ipynb @@ -7,6 +7,20 @@ "\"Open" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can run the code examples in [Google Colab](https://colab.research.google.com/github/mbk-dev/okama/blob/master/examples/01%20howto.ipynb)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**To install the package:**" + ] + }, { "cell_type": "code", "execution_count": 1, @@ -16,6 +30,13 @@ "!pip install okama" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "import okama and matplotlib packages ..." + ] + }, { "cell_type": "code", "execution_count": 2, diff --git a/examples/02 index funds perfomance.ipynb b/examples/02 index funds perfomance.ipynb index 8323029..c741e07 100644 --- a/examples/02 index funds perfomance.ipynb +++ b/examples/02 index funds perfomance.ipynb @@ -7,6 +7,20 @@ "\"Open" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can run the code examples in [Google Colab](https://colab.research.google.com/github/mbk-dev/okama/blob/master/examples/02%20index%20funds%20perfomance.ipynb)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**To install the package:**" + ] + }, { "cell_type": "code", "execution_count": null, @@ -16,6 +30,13 @@ "!pip install okama" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "import okama and matplotlib packages ..." + ] + }, { "cell_type": "code", "execution_count": 1, diff --git a/examples/03 investment portfolios.ipynb b/examples/03 investment portfolios.ipynb index 0c91647..ba4ad6f 100644 --- a/examples/03 investment portfolios.ipynb +++ b/examples/03 investment portfolios.ipynb @@ -2,26 +2,50 @@ "cells": [ { "cell_type": "markdown", - "id": "driving-rehabilitation", + "id": "electric-camera", "metadata": {}, "source": [ - "\"Open" + "\"Open" + ] + }, + { + "cell_type": "markdown", + "id": "beautiful-ladder", + "metadata": {}, + "source": [ + "You can run the code examples in [Google Colab](https://colab.research.google.com/github/mbk-dev/okama/blob/master/examples/03%20investment%20portfolios.ipynb)." + ] + }, + { + "cell_type": "markdown", + "id": "noted-exception", + "metadata": {}, + "source": [ + "**To install the package:**" ] }, { "cell_type": "code", "execution_count": null, - "id": "driving-allowance", + "id": "healthy-removal", "metadata": {}, "outputs": [], "source": [ "!pip install okama" ] }, + { + "cell_type": "markdown", + "id": "coastal-estate", + "metadata": {}, + "source": [ + "import okama and matplotlib packages ..." + ] + }, { "cell_type": "code", "execution_count": 3, - "id": "vertical-fellowship", + "id": "minute-chain", "metadata": {}, "outputs": [], "source": [ @@ -33,7 +57,7 @@ }, { "cell_type": "markdown", - "id": "ordered-wellington", + "id": "beneficial-confidentiality", "metadata": {}, "source": [ "**Portfolio** and **AssetList** can be helpful to learn about investment portfolio properties and to compare various portfolios with each other. With **AssetList** we can even compare portfolio with stocks, indexes and other types of financial assets (portfolio is just a special case of a financial asset)." @@ -41,7 +65,7 @@ }, { "cell_type": "markdown", - "id": "offensive-slide", + "id": "subject-specialist", "metadata": {}, "source": [ "In this tutorial we will learn how to: \n", @@ -57,7 +81,7 @@ }, { "cell_type": "markdown", - "id": "engaging-judgment", + "id": "damaged-illustration", "metadata": {}, "source": [ "### Create an investment portfolio" @@ -65,7 +89,7 @@ }, { "cell_type": "markdown", - "id": "photographic-quest", + "id": "completed-fundamental", "metadata": {}, "source": [ "Portfolios are quite similar to AssetList, but we should specify **weights** and **rebalancing** strategy." @@ -73,7 +97,7 @@ }, { "cell_type": "markdown", - "id": "surprising-census", + "id": "needed-swimming", "metadata": {}, "source": [ "But all the arguments have default values and can be skept." @@ -82,7 +106,7 @@ { "cell_type": "code", "execution_count": 2, - "id": "expensive-filing", + "id": "lucky-defendant", "metadata": {}, "outputs": [ { @@ -112,7 +136,7 @@ }, { "cell_type": "markdown", - "id": "lucky-relay", + "id": "matched-cycle", "metadata": {}, "source": [ "Default ticker is 'SPY.US'. \n", @@ -124,7 +148,7 @@ }, { "cell_type": "markdown", - "id": "differential-bread", + "id": "higher-yorkshire", "metadata": {}, "source": [ "Let’s create Rick Ferri's Lazy Three Fund Portfolio (40/40/20). \n", @@ -136,7 +160,7 @@ }, { "cell_type": "markdown", - "id": "linear-julian", + "id": "prescription-fossil", "metadata": {}, "source": [ "**rebalancing_period** attribute can be: 'month', 'year' or 'none' (for not rebalanced portfolios)." @@ -145,7 +169,7 @@ { "cell_type": "code", "execution_count": 44, - "id": "statewide-preserve", + "id": "centered-laptop", "metadata": {}, "outputs": [ { @@ -175,7 +199,7 @@ }, { "cell_type": "markdown", - "id": "handy-atlas", + "id": "flush-communist", "metadata": {}, "source": [ "Available history date range is defined by the assets. \n", @@ -185,7 +209,7 @@ { "cell_type": "code", "execution_count": 4, - "id": "intimate-animation", + "id": "dated-experiment", "metadata": {}, "outputs": [ { @@ -210,7 +234,7 @@ { "cell_type": "code", "execution_count": 5, - "id": "scientific-catholic", + "id": "raising-arnold", "metadata": {}, "outputs": [ { @@ -230,7 +254,7 @@ }, { "cell_type": "markdown", - "id": "parliamentary-engine", + "id": "restricted-sailing", "metadata": {}, "source": [ "Here VXUS.US is a **stock with the shortest history** which is limiting the whole portfolio data." @@ -239,7 +263,7 @@ { "cell_type": "code", "execution_count": 6, - "id": "computational-species", + "id": "worthy-float", "metadata": {}, "outputs": [ { @@ -263,7 +287,7 @@ }, { "cell_type": "markdown", - "id": "driving-forestry", + "id": "hourly-symbol", "metadata": {}, "source": [ "On the other hand, the **inflation** is limiting the data from the left side. If you need last month’s data to be included `inflation=False` should be used in Portfolio instantiating." @@ -271,7 +295,7 @@ }, { "cell_type": "markdown", - "id": "enhanced-muscle", + "id": "subjective-tribute", "metadata": {}, "source": [ "The ticker of portfolio is set automaticaly: **portfolio_8291.PF** (index is a random number). \n", @@ -281,7 +305,7 @@ { "cell_type": "code", "execution_count": 45, - "id": "aboriginal-mentor", + "id": "celtic-baltimore", "metadata": {}, "outputs": [], "source": [ @@ -290,7 +314,7 @@ }, { "cell_type": "markdown", - "id": "armed-excitement", + "id": "identified-border", "metadata": {}, "source": [ "Wealth index (Cumulative Wealth Index) is a time series that presents the value of portfolio over historical time period. The initial investment is 1000 points in a base currency." @@ -299,7 +323,7 @@ { "cell_type": "code", "execution_count": 9, - "id": "meaningful-cooking", + "id": "noticed-square", "metadata": {}, "outputs": [ { @@ -319,7 +343,7 @@ }, { "cell_type": "markdown", - "id": "twenty-neighborhood", + "id": "tamil-environment", "metadata": {}, "source": [ "### Rebalancing strategy and asset allocaction" @@ -327,7 +351,7 @@ }, { "cell_type": "markdown", - "id": "metric-republican", + "id": "filled-egypt", "metadata": {}, "source": [ "Table with original asset allocation can be seen with `.table`:" @@ -336,7 +360,7 @@ { "cell_type": "code", "execution_count": 8, - "id": "solar-section", + "id": "fitting-shareware", "metadata": {}, "outputs": [ { @@ -406,7 +430,7 @@ }, { "cell_type": "markdown", - "id": "reduced-apparatus", + "id": "published-uruguay", "metadata": {}, "source": [ "RF3_portfolio has one year rebalancing period hence weight are subjects to change. \n", @@ -416,7 +440,7 @@ { "cell_type": "code", "execution_count": 11, - "id": "prescribed-groove", + "id": "amateur-pressing", "metadata": {}, "outputs": [ { @@ -436,7 +460,7 @@ }, { "cell_type": "markdown", - "id": "accompanied-being", + "id": "radio-freedom", "metadata": {}, "source": [ "let's create the same Rick Ferry portfolio, but without rebalancing (asset allocation will change and never return to the original weights)." @@ -445,7 +469,7 @@ { "cell_type": "code", "execution_count": 12, - "id": "affected-spotlight", + "id": "dried-seating", "metadata": {}, "outputs": [], "source": [ @@ -454,7 +478,7 @@ }, { "cell_type": "markdown", - "id": "eleven-passion", + "id": "unable-priority", "metadata": {}, "source": [ "Now it's easy to see how the weights get out of control over time... and we end up with portfolio overweight in stocks." @@ -463,7 +487,7 @@ { "cell_type": "code", "execution_count": 14, - "id": "fatal-female", + "id": "challenging-decimal", "metadata": {}, "outputs": [ { @@ -483,7 +507,7 @@ }, { "cell_type": "markdown", - "id": "strange-decision", + "id": "adolescent-relaxation", "metadata": {}, "source": [ "### Risk metrics of the portfolio" @@ -491,7 +515,7 @@ }, { "cell_type": "markdown", - "id": "worst-homework", + "id": "thermal-brush", "metadata": {}, "source": [ "Portfolio has several methods to see risk metrics. By default with 'risk' we understand return time series standard deviation:\n", @@ -509,7 +533,7 @@ { "cell_type": "code", "execution_count": 12, - "id": "ideal-operations", + "id": "peripheral-dragon", "metadata": {}, "outputs": [ { @@ -530,7 +554,7 @@ { "cell_type": "code", "execution_count": 13, - "id": "academic-quantity", + "id": "unsigned-wesley", "metadata": {}, "outputs": [ { @@ -551,7 +575,7 @@ { "cell_type": "code", "execution_count": 17, - "id": "spiritual-citation", + "id": "covered-house", "metadata": {}, "outputs": [ { @@ -571,7 +595,7 @@ }, { "cell_type": "markdown", - "id": "temporal-shanghai", + "id": "sonic-modification", "metadata": {}, "source": [ "Drawdowns (the percent decline from a previous peak) are easy to plot ..." @@ -580,7 +604,7 @@ { "cell_type": "code", "execution_count": 19, - "id": "respected-humor", + "id": "great-template", "metadata": {}, "outputs": [ { @@ -601,7 +625,7 @@ { "cell_type": "code", "execution_count": 6, - "id": "accessible-design", + "id": "binary-cable", "metadata": {}, "outputs": [ { @@ -626,7 +650,7 @@ }, { "cell_type": "markdown", - "id": "about-stranger", + "id": "sophisticated-pavilion", "metadata": {}, "source": [ "`reovery_period` highly related with Drawdowns. It shows the longest recovery period for the portfolio assets value after drawdowns." @@ -635,7 +659,7 @@ { "cell_type": "code", "execution_count": 8, - "id": "contrary-assistant", + "id": "mechanical-generic", "metadata": {}, "outputs": [ { @@ -655,7 +679,7 @@ }, { "cell_type": "markdown", - "id": "civilian-colors", + "id": "moved-glory", "metadata": {}, "source": [ "### Accumulated return, CAGR and dividend yield" @@ -663,7 +687,7 @@ }, { "cell_type": "markdown", - "id": "written-vacation", + "id": "copyrighted-concentrate", "metadata": {}, "source": [ "Portfolio has several metrics to measure the profits and return:" @@ -671,7 +695,7 @@ }, { "cell_type": "markdown", - "id": "alpha-carol", + "id": "tribal-correlation", "metadata": {}, "source": [ "- wealth_index (the value of portfolio over historical time period)\n", @@ -688,7 +712,7 @@ }, { "cell_type": "markdown", - "id": "immediate-perception", + "id": "passing-basement", "metadata": {}, "source": [ "Wealth index is a simpliest time series showing portfolio value growth (we have already seen it here). Sometimes it's worth to compare portfolio value growth with assets values. \n", @@ -698,7 +722,7 @@ { "cell_type": "code", "execution_count": 14, - "id": "perceived-benchmark", + "id": "through-function", "metadata": {}, "outputs": [ { @@ -718,7 +742,7 @@ }, { "cell_type": "markdown", - "id": "flying-sentence", + "id": "material-moisture", "metadata": {}, "source": [ "Mean reaturn (arithmetic mean) for the portfolio is an annualized version of monthly mean:" @@ -727,7 +751,7 @@ { "cell_type": "code", "execution_count": 15, - "id": "fleet-picnic", + "id": "married-admission", "metadata": {}, "outputs": [ { @@ -747,7 +771,7 @@ }, { "cell_type": "markdown", - "id": "greater-fusion", + "id": "photographic-liabilities", "metadata": {}, "source": [ "It's always good to see how portfolio perform on annual basis. Annual rate of return time series show portfolio return for each calendar year:" @@ -756,7 +780,7 @@ { "cell_type": "code", "execution_count": 16, - "id": "mathematical-mumbai", + "id": "wound-weekend", "metadata": {}, "outputs": [ { @@ -787,7 +811,7 @@ }, { "cell_type": "markdown", - "id": "portable-turner", + "id": "honest-client", "metadata": {}, "source": [ "... or in form of bar chart:" @@ -796,7 +820,7 @@ { "cell_type": "code", "execution_count": 18, - "id": "stupid-drawing", + "id": "annual-japanese", "metadata": {}, "outputs": [ { @@ -816,7 +840,7 @@ }, { "cell_type": "markdown", - "id": "drawn-thursday", + "id": "discrete-sally", "metadata": {}, "source": [ "One of the most important retrun metrics is CAGR (Compound Annual Growth Rate). It can be seen for trailing periods (parameter *period* is in years):" @@ -825,7 +849,7 @@ { "cell_type": "code", "execution_count": 19, - "id": "considered-sullivan", + "id": "floating-sensitivity", "metadata": {}, "outputs": [ { @@ -848,7 +872,7 @@ { "cell_type": "code", "execution_count": 20, - "id": "functioning-zambia", + "id": "cubic-artist", "metadata": {}, "outputs": [ { @@ -869,7 +893,7 @@ }, { "cell_type": "markdown", - "id": "natural-pioneer", + "id": "architectural-victor", "metadata": {}, "source": [ "Rolling CAGR for the portfolio is available with `get_rolling_cagr`:" @@ -878,7 +902,7 @@ { "cell_type": "code", "execution_count": 23, - "id": "retired-hanging", + "id": "current-aircraft", "metadata": {}, "outputs": [ { @@ -898,7 +922,7 @@ }, { "cell_type": "markdown", - "id": "unauthorized-carter", + "id": "raising-ranking", "metadata": {}, "source": [ "Cumulative return over a given trailing period can be calculated with `get_cumulative_return`. Period argument can be in years or YTD (Year To Date)." @@ -907,7 +931,7 @@ { "cell_type": "code", "execution_count": 25, - "id": "theoretical-currency", + "id": "colored-wagon", "metadata": {}, "outputs": [ { @@ -930,7 +954,7 @@ { "cell_type": "code", "execution_count": 27, - "id": "stretch-penguin", + "id": "renewable-jordan", "metadata": {}, "outputs": [ { @@ -952,7 +976,7 @@ }, { "cell_type": "markdown", - "id": "anticipated-bradley", + "id": "lined-array", "metadata": {}, "source": [ "Cumulative rolling return can be helpfull in the same situation as rolling CAGR:" @@ -961,7 +985,7 @@ { "cell_type": "code", "execution_count": 33, - "id": "mechanical-startup", + "id": "increased-hamilton", "metadata": {}, "outputs": [ { @@ -981,7 +1005,7 @@ }, { "cell_type": "markdown", - "id": "irish-defeat", + "id": "exterior-expansion", "metadata": {}, "source": [ "Last twelve months (LTM) dividend yield is available with `dividend_yield` property." @@ -990,7 +1014,7 @@ { "cell_type": "code", "execution_count": 34, - "id": "ahead-sphere", + "id": "british-seattle", "metadata": {}, "outputs": [ { @@ -1010,7 +1034,7 @@ }, { "cell_type": "markdown", - "id": "killing-import", + "id": "aggregate-facility", "metadata": {}, "source": [ "Portfolio has monthly dividends time series:" @@ -1019,7 +1043,7 @@ { "cell_type": "code", "execution_count": 38, - "id": "illegal-parish", + "id": "mature-malaysia", "metadata": {}, "outputs": [ { @@ -1050,7 +1074,7 @@ }, { "cell_type": "markdown", - "id": "eligible-visit", + "id": "hairy-exclusion", "metadata": {}, "source": [ "Calendar year dividends sum time series for the portfolio:" @@ -1059,7 +1083,7 @@ { "cell_type": "code", "execution_count": 40, - "id": "cosmetic-development", + "id": "covered-apple", "metadata": {}, "outputs": [ { @@ -1079,7 +1103,7 @@ }, { "cell_type": "markdown", - "id": "fitted-spanish", + "id": "passing-jackson", "metadata": {}, "source": [ "Finally the easiest way to see the portfolio basic properties is with `describe`:" @@ -1088,7 +1112,7 @@ { "cell_type": "code", "execution_count": 51, - "id": "stainless-tribute", + "id": "british-month", "metadata": {}, "outputs": [ { @@ -1218,7 +1242,7 @@ }, { "cell_type": "markdown", - "id": "waiting-morgan", + "id": "forced-sound", "metadata": {}, "source": [ "### Compare several portfolios" @@ -1226,7 +1250,7 @@ }, { "cell_type": "markdown", - "id": "criminal-calculation", + "id": "amended-oracle", "metadata": {}, "source": [ "Portfolio is a kind of financial asset and can be included in AssetList to compare with other portfolios (assets or benchmarks)." @@ -1234,7 +1258,7 @@ }, { "cell_type": "markdown", - "id": "retired-harassment", + "id": "manufactured-emperor", "metadata": {}, "source": [ "Lets create Rick Ferri 4 assets portfolio and compare the behaviour with 3 assets portfolio. " @@ -1243,7 +1267,7 @@ { "cell_type": "code", "execution_count": 41, - "id": "finite-rogers", + "id": "automatic-hygiene", "metadata": {}, "outputs": [], "source": [ @@ -1253,7 +1277,7 @@ }, { "cell_type": "markdown", - "id": "flush-trader", + "id": "swedish-booking", "metadata": {}, "source": [ "To compare properly with RF3 portfolio the same rebalancing period should be chosen:" @@ -1262,7 +1286,7 @@ { "cell_type": "code", "execution_count": 46, - "id": "dense-rating", + "id": "metric-survival", "metadata": {}, "outputs": [ { @@ -1292,7 +1316,7 @@ }, { "cell_type": "markdown", - "id": "featured-blank", + "id": "sharp-sphere", "metadata": {}, "source": [ "Now we create an AssetList to compare RF3 with RF4 and add a benchamrk (SP 500 TR index)." @@ -1301,7 +1325,7 @@ { "cell_type": "code", "execution_count": 48, - "id": "lined-significance", + "id": "animated-specific", "metadata": {}, "outputs": [ { @@ -1328,7 +1352,7 @@ }, { "cell_type": "markdown", - "id": "hungarian-family", + "id": "fabulous-saying", "metadata": {}, "source": [ "Some behavior will be seen with `wealth_indexes`:" @@ -1337,7 +1361,7 @@ { "cell_type": "code", "execution_count": 50, - "id": "exciting-omaha", + "id": "stopped-rider", "metadata": {}, "outputs": [ { @@ -1357,7 +1381,7 @@ }, { "cell_type": "markdown", - "id": "bound-parking", + "id": "american-realtor", "metadata": {}, "source": [ "But most important information can be seen for trailing periods with `describe` method:" @@ -1366,7 +1390,7 @@ { "cell_type": "code", "execution_count": 52, - "id": "fifty-baghdad", + "id": "married-warehouse", "metadata": {}, "outputs": [ { @@ -1563,7 +1587,7 @@ }, { "cell_type": "markdown", - "id": "married-nicholas", + "id": "south-jersey", "metadata": {}, "source": [ "### Forecast portfolios performance" @@ -1571,7 +1595,7 @@ }, { "cell_type": "markdown", - "id": "touched-treasurer", + "id": "violent-springfield", "metadata": {}, "source": [ "Forecasting methods are described in a dedicated notebook [07 forecasting.ipynb](https://github.com/mbk-dev/okama/blob/master/examples/07%20forecasting.ipynb)."