diff --git a/nb/fred-georeturns.ipynb b/nb/fred-georeturns.ipynb index 3bba7f4..65ceb9d 100644 --- a/nb/fred-georeturns.ipynb +++ b/nb/fred-georeturns.ipynb @@ -1,985 +1,884 @@ { - "metadata": { - "name": "", - "signature": "sha256:99159f50a56b9d50b0e82032368b63351365330ee92a1dab740c272b8f0e6af5" - }, - "nbformat": 3, - "nbformat_minor": 0, - "worksheets": [ + "cells": [ { - "cells": [ - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "Geometric mean returns on FRED series" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We examine economic and financial time series where Holt-Winters is used to forecast one-year ahead. Daily data for bonds, equity, and gold is then analyzed.\n", - "\n", - "The focus is on geometric mean returns because they optimally express mean-variance under logarithmic utility." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "*Dependencies:*\n", - "\n", - " - Linux, bash\n", - " - Python: matplotlib, pandas\n", - " - Modules: yi_1tool, yi_plot, yi_timeseries, yi_fred\n", - " \n", - "*CHANGE LOG*\n", - "\n", - " 2015-05-26 Code revision using template v14.12.21.\n", - " 2014-10-11 Code review. Template 2014-09-28.\n", - " 2014-09-01 First version." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# NOTEBOOK settings and system details: [00-tpl v14.12.21]\n", - "\n", - "# Assume that the backend is LINUX (our particular distro is Ubuntu, running bash shell):\n", - "print '\\n :: TIMESTAMP of last notebook execution:'\n", - "!date\n", - "print '\\n :: IPython version:'\n", - "!ipython --version\n", - "\n", - "# Automatically reload modified modules:\n", - "%load_ext autoreload\n", - "%autoreload 2\n", - "# 0 disables autoreload.\n", - "# Generate plots inside notebook:\n", - "%matplotlib inline\n", - "\n", - "# DISPLAY options\n", - "from IPython.display import Image \n", - "# e.g. Image(filename='holt-winters-equations.png', embed=True) # url= also works\n", - "from IPython.display import YouTubeVideo\n", - "# e.g. YouTubeVideo('1j_HxD4iLn8', start='43', width=600, height=400)\n", - "from IPython.display import HTML # useful for snippets\n", - "# e.g. HTML('')\n", - "\n", - "import pandas as pd\n", - "print '\\n :: pandas version:'\n", - "print pd.__version__\n", - "# pandas DataFrames are represented as text by default; enable HTML representation:\n", - "# [Deprecated: pd.core.format.set_printoptions( notebook_repr_html=True ) ]\n", - "pd.set_option( 'display.notebook_repr_html', False )\n", - "\n", - "# MATH display, use %%latex, rather than the following:\n", - "# from IPython.display import Math\n", - "# from IPython.display import Latex\n", - "\n", - "print '\\n :: Working directory (set as $workd):'\n", - "workd, = !pwd\n", - "print workd + '\\n'" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - " :: TIMESTAMP of last notebook execution:\n", - "Thu Jun 25 20:35:28 PDT 2015\r\n" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - " :: IPython version:\n" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "2.3.0\r\n" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - " :: pandas version:\n", - "0.15.0\n", - "\n", - " :: Working directory (set as $workd):\n" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "/home/yaya/Dropbox/share/git/nous/fecon235/nb\n", - "\n" - ] - } - ], - "prompt_number": 1 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from yi_1tools import *\n", - "from yi_plot import *\n", - "from yi_timeseries import *\n", - "from yi_fred import *" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 2 - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Download data and construct a dataframe" + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Comparative geometric mean returns\n", + "\n", + "We examine economic and financial time series where Holt-Winters \n", + "is used to forecast one-year ahead. Daily data for bonds, equity, \n", + "and gold is then analyzed.\n", + "\n", + "Our focus is on geometric mean returns since they \n", + "optimally express mean-variance under logarithmic utility. \n", + "We shall cover portfolio optimization in another notebook.\n", + "\n", + "[ ] TODO: *use sympy to symbolically derive geometric mean \n", + "return from the moments of an asset's return distribution.* \n", + "Our function georet() gives a *numerical* approximation. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*Dependencies:*\n", + "\n", + "- Repository: https://github.com/rsvp/fecon235\n", + "- Python: matplotlib, pandas\n", + " \n", + "*CHANGE LOG*\n", + "\n", + " 2016-01-05 MAJOR REWRITE: use pattern from monthly and daily series\n", + " for new functions groupget, grouppc, groupgeoret.\n", + " Forecast print out replaced by preservable groupholtf.\n", + " Dictionary comprehension clarifies code.\n", + " 2016-01-03 Fix issue #2 with v4 and p6 upgrades.\n", + " 2015-05-26 Code revision using template v14.12.21.\n", + " 2014-10-11 Code review. Template 2014-09-28.\n", + " 2014-09-01 First version." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from fecon235.fecon235 import *" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " :: Python 2.7.10\n", + " :: IPython 4.0.0\n", + " :: jupyter 1.0.0\n", + " :: notebook 4.0.6\n", + " :: matplotlib 1.4.3\n", + " :: numpy 1.10.1\n", + " :: pandas 0.17.1\n", + " :: pandas_datareader 0.2.0\n", + " :: Repository: fecon235 v4.15.1230 develop\n", + " :: Timestamp: 2016-01-06, 17:06:06 UTC\n", + " :: $pwd: /media/yaya/virt15h/virt/dbx/Dropbox/ipy/fecon235/nb\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We shall retrieve the following data of monthly frequency: **(aggregated) inflation, bonds (zero coupon equivalent of 10-y Treasury), equities (S&P 500), and gold (London PM fix) -- all denominated in US dollars -- then lastly, the real trade-weighted USD index (Federal Reserve) and US home prices (per Case-Shiller).** The details for each series is given in their respective notebooks.\n", - "\n", - "*Home prices will create a 3-month lag, due to their release cycle.*" + } + ], + "source": [ + "# PREAMBLE-p6.15.1223 :: Settings and system details\n", + "from __future__ import absolute_import, print_function\n", + "system.specs()\n", + "pwd = system.getpwd() # present working directory as variable.\n", + "print(\" :: $pwd:\", pwd)\n", + "# If a module is modified, automatically reload it:\n", + "%load_ext autoreload\n", + "%autoreload 2\n", + "# Use 0 to disable this feature.\n", + "\n", + "# Notebook DISPLAY options:\n", + "# Represent pandas DataFrames as text; not HTML representation:\n", + "import pandas as pd\n", + "pd.set_option( 'display.notebook_repr_html', False )\n", + "# Beware, for MATH display, use %%latex, NOT the following:\n", + "# from IPython.display import Math\n", + "# from IPython.display import Latex\n", + "from IPython.display import HTML # useful for snippets\n", + "# e.g. HTML('')\n", + "from IPython.display import Image \n", + "# e.g. Image(filename='holt-winters-equations.png', embed=True) # url= also works\n", + "from IPython.display import YouTubeVideo\n", + "# e.g. YouTubeVideo('1j_HxD4iLn8', start='43', width=600, height=400)\n", + "from IPython.core import page\n", + "get_ipython().set_hook('show_in_pager', page.as_hook(page.display_page), 0)\n", + "# Or equivalently in config file: \"InteractiveShell.display_page = True\", \n", + "# which will display results in secondary notebook pager frame in a cell.\n", + "\n", + "# Generate PLOTS inside notebook, \"inline\" generates static png:\n", + "%matplotlib inline \n", + "# \"notebook\" argument allows interactive zoom and resize." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Download data and construct a dataframe\n", + "\n", + "We retrieve the following data of monthly frequency: **(aggregated) inflation, \n", + "bonds (zero coupon equivalent of 10-y Treasury), equities (S&P 500), and \n", + "gold (London PM fix)** -- all denominated in US dollars -- **then lastly, the \n", + "real trade-weighted USD index (Federal Reserve) and US home prices (per Case-Shiller).** \n", + "The details for each series is given in their respective notebooks. \n", + "If the available data has daily frequency, we use the pandas method called \n", + "\"resampling\" to induce monthly data (enter \"monthly??\" in an \n", + "input cell for more details).\n", + "\n", + "ATTENTION: *The inclusion of home prices, unfortunately, will create a 3-month lag, \n", + "due to their release cycle. Since this is a comparative study, \n", + "the rest of the data will appear somewhat stale, but this \n", + "section is intended for long-term trends.* \n", + "Second half of this notebook will examine more responsive daily data." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " :: Case-Shiller prepend successfully goes back to 1987.\n", + " :: S&P 500 prepend successfully goes back to 1957.\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Specify monthly series of interest as ms list:\n", - "ms = [ m4infl, m4zero10, m4spx, m4xau, m4usdrtb, m4homepx ]\n", - "names = ['Infl', 'Zero10', 'SPX', 'XAU', 'USD', 'Homes']\n", + } + ], + "source": [ + "# Specify monthly series of interest as a dictionary:\n", + "msdic = {'Infl' : m4infl, 'Zero10' : m4zero10, 'SPX' : m4spx, \n", + " 'XAU' : m4xau, 'USD' : m4usdrtb, 'Homes' : m4homepx }\n", + "\n", + "# Download data into a dataframe:\n", + "msdf = groupget( msdic )\n", + "# \"groupget??\" at input cell gives function details." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After downloading the level series, we compute the YoY percentage change \n", + "for each series. *This will be the a trailing 12-month statistic, \n", + "thus it is overlapping.*" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Construct the mega YoY dataframe:\n", + "mega = grouppc( msdf, freq=12 )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Define start time and get stats" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Define start time as t0\n", + "t0 = '1988'\n", + "\n", + "# We can easily rerun the rest of this notebook \n", + "# by specifying another start time, then: Cell > Run All Below" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Homes Infl SPX USD XAU Zero10\n", + "count 334.000000 334.000000 334.000000 334.000000 334.000000 334.000000\n", + "mean 3.905883 2.397870 8.708560 -0.034278 4.657274 2.247932\n", + "std 8.002381 1.015202 16.260123 5.224677 15.495695 7.390370\n", + "min -18.906156 -0.183948 -42.349361 -10.574015 -27.752361 -18.521264\n", + "25% -1.069951 1.678485 2.316010 -3.627323 -6.904147 -3.085161\n", + "50% 4.490362 2.349958 10.596906 -0.157484 1.745723 2.892972\n", + "75% 10.605588 2.847579 19.535143 2.929578 13.956456 7.705685\n", + "max 17.077118 5.243597 52.051354 14.502797 60.357143 20.492399\n", "\n", - "# Download into a dictionary:\n", - "msd = {}\n", - "for i in ms:\n", - " msd[i] = getfred(i)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - " :: S&P 500 prepend successfully goes back to 1957.\n", - " :: Case-Shiller prepend successfully goes back to 1987." - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 3 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "After downloading the level series, we compute the YoY percentage change for each series. *This will be the a trailing 12-month statistic, thus it's overlapping.*" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Compute the YoY percentage change:\n", - "msdc = {}\n", - "for i in ms:\n", - " msdc[i] = pcent( msd[i], 12 )" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 4 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Construct the mega YoY dataframe:\n", - "mega = paste( [ msdc[i] for i in ms ] )\n", - "# Give names to the columns for mega:\n", - "mega.columns = names" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 5 - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Define start time and get stats" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Start time given by t0\n", - "t0 = '1988'" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 6 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "stats( mega[t0:] )" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - " Infl Zero10 SPX XAU USD Homes\n", - "count 327.000000 327.000000 327.000000 327.000000 327.000000 327.000000\n", - "mean 2.424121 2.229173 8.753083 4.949457 -0.286063 3.882495\n", - "std 1.005295 7.463804 16.416248 15.524655 4.982369 8.088091\n", - "min -0.180575 -18.521264 -42.349361 -27.752361 -10.577564 -18.906156\n", - "25% 1.690927 -3.217100 2.288186 -6.463883 -3.809645 -1.218646\n", - "50% 2.366964 2.912582 10.726925 1.898076 -0.357301 4.293769\n", - "75% 2.887417 7.752083 19.981864 14.325670 2.682498 10.684985\n", - "max 5.242059 20.492399 52.051354 60.357143 14.508997 17.077118\n", - "\n", - " :: Index on min:\n", - "Infl 2009-07-01\n", - "Zero10 1994-10-01\n", - "SPX 2009-03-01\n", - "XAU 2013-12-01\n", - "USD 2008-03-01\n", - "Homes 2009-01-01\n", - "dtype: datetime64[ns]\n", - "\n", - " :: Index on max:\n", - "Infl 1990-10-01\n", - "Zero10 1996-01-01\n", - "SPX 2010-03-01\n", - "XAU 2006-05-01\n", - "USD 2009-03-01\n", - "Homes 2004-07-01\n", - "dtype: datetime64[ns]\n", - "\n", - " :: Head:\n", - " Infl Zero10 SPX XAU USD Homes\n", - "T \n", - "1988-01-01 3.984315 -12.661625 -6.207571 17.042392 -9.836868 12.139461\n", - "1988-02-01 3.876021 -8.068941 -8.186030 9.982617 -8.633477 11.661442\n", - "1988-03-01 3.924380 -9.248410 -8.156954 8.841782 -9.393214 11.345646\n", - "1988-04-01 3.992870 -5.477528 -8.960111 2.878355 -8.283502 10.974485\n", - "1988-05-01 4.017727 -4.487925 -11.871026 -1.578661 -7.507266 10.543908\n", - "1988-06-01 4.129092 -4.738070 -10.689462 0.022137 -7.401580 10.559567\n", - "1988-07-01 4.276206 -5.671538 -12.487441 -3.115990 -6.469468 10.756853\n", - "\n", - " :: Tail:\n", - " Infl Zero10 SPX XAU USD Homes\n", - "T \n", - "2014-09-01 1.573155 2.870055 18.259104 -8.035048 1.924209 4.982426\n", - "2014-10-01 1.590927 2.873362 13.047620 -6.736243 4.278896 4.557101\n", - "2014-11-01 1.397419 3.603244 14.134137 -8.234146 4.984866 4.353347\n", - "2014-12-01 1.098285 6.108084 14.380677 -2.298029 6.786695 4.482448\n", - "2015-01-01 0.731306 9.213133 10.175566 1.235684 7.608924 4.485425\n", - "2015-02-01 0.806330 6.585098 14.399577 -7.207207 8.760392 4.996752\n", - "2015-03-01 0.849246 6.019017 11.453936 -11.421092 10.734463 4.990347" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - " :: Correlation matrix:\n", - " Infl Zero10 SPX XAU USD Homes\n", - "Infl 1.000000 -0.059018 -0.016182 -0.072354 -0.308788 0.005064\n", - "Zero10 -0.059018 1.000000 -0.137220 -0.000802 0.214137 -0.295339\n", - "SPX -0.016182 -0.137220 1.000000 -0.212138 -0.049899 0.248055\n", - "XAU -0.072354 -0.000802 -0.212138 1.000000 -0.513692 -0.244964\n", - "USD -0.308788 0.214137 -0.049899 -0.513692 1.000000 0.039124\n", - "Homes 0.005064 -0.295339 0.248055 -0.244964 0.039124 1.000000" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 7 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "There is not much correlation among our assets, except a mild negative between gold XAU and USD. Next, the boxplot gives us an idea of the range of returns, and their persistence. It's a visual aid to the geometric mean returns which is most significant as investment metric." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Overlapping YoY percentage change, recently:\n", - "boxplot(mega[t0:], 'Assets YoYm')\n", - "# where the red dot represents the latest point." - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "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\nQmCC\n", - "text": [ - "" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - " :: Finished: boxplot-Assets_YoYm.png\n" - ] - } - ], - "prompt_number": 8 - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Geometric mean returns on non-overlapping periods" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Geometric mean returns, non-overlapping, annualized:\n", - "for i in range(len(ms)):\n", - " print names[i], georet(msd[ms[i]][t0:], 12)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Infl " - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[2.33, 2.33, 0.5, 12]\n", - "Zero10 " - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[2.0, 2.25, 7.19, 12]\n", - "SPX " - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[7.82, 8.57, 12.23, 12]\n", - "XAU " - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[3.28, 4.14, 13.09, 12]\n", - "USD " - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[0.03, 0.12, 4.12, 12]\n", - "Homes " - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[3.43, 3.46, 2.55, 12]\n" - ] - } - ], - "prompt_number": 9 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Note: the geometric returns do not include interest and dividend payouts for bonds and equities. Some observations in chronological order:\n", + " :: Index on min:\n", + "Homes 2009-01-01\n", + "Infl 2009-07-01\n", + "SPX 2009-03-01\n", + "USD 2008-03-01\n", + "XAU 2013-12-01\n", + "Zero10 1994-10-01\n", + "dtype: datetime64[ns]\n", "\n", - "- 2014-09-01, georet since 2010\n", - " - Inflation at 1.7% which is below Fed target of 2%.\n", - " - Total return on bonds, approx 2.52 + 2.33 = 4.85%\n", - " - Total return on equity, approx. 11.9 + 2 = 13.9% -- very heated.\n", - " - Gold indecisive about breaking 1260 LTS.\n", - " - USD though at -0.69%, will strengthen given Draghi wanting weak EUR.\n", - " \n", - " \n", - " - 2014-10-11, georet since 2004\n", - " - Inflation over ten years is running 2% annually.\n", - " - Gold dominates over ten years.\n", - " - Gold recently holds at 1180 triple local bottom.\n", + " :: Index on max:\n", + "Homes 2004-07-01\n", + "Infl 1990-10-01\n", + "SPX 2010-03-01\n", + "USD 2009-03-01\n", + "XAU 2006-05-01\n", + "Zero10 1996-01-01\n", + "dtype: datetime64[ns]\n", "\n", + " :: Head:\n", + " Homes Infl SPX USD XAU Zero10\n", + "T \n", + "1988-01-01 12.139461 3.984319 -6.207571 -9.836868 17.042392 -12.661625\n", + "1988-02-01 11.661442 3.875810 -8.186030 -8.633477 9.982617 -8.068941\n", + "1988-03-01 11.345646 3.923987 -8.156954 -9.393214 8.841782 -9.248410\n", + "1988-04-01 10.974485 3.992633 -8.960111 -8.283502 2.878355 -5.477528\n", + "1988-05-01 10.543908 4.017451 -11.871026 -7.507266 -1.578661 -4.487925\n", + "1988-06-01 10.559567 4.128604 -10.689462 -7.401580 0.022137 -4.738070\n", + "1988-07-01 10.756853 4.275829 -12.487441 -6.469468 -3.115990 -5.671538\n", "\n", - " - 2014-10-12, georet since 1988\n", - " - Inflation in the long-run about 3% annually.\n", - " - Bond price alone increases 2% annually (excludes interest income).\n", - " - Gold at 1.73% does not keep up with inflation.\n", - " - USD at break-even over the long-run.\n", - " - Home prices have georet of 3.6%.\n", + " :: Tail:\n", + " Homes Infl SPX USD XAU Zero10\n", + "T \n", + "2015-04-01 4.833607 0.790537 12.280293 10.154619 -7.736721 7.202302\n", + "2015-05-01 4.844291 0.815938 12.167416 9.815597 -7.530004 3.148595\n", + "2015-06-01 4.841549 0.893118 7.790849 10.680445 -7.225832 2.011656\n", + "2015-07-01 4.969711 0.891452 6.329319 12.875617 -12.641221 1.966971\n", + "2015-08-01 5.097901 0.907884 6.557453 14.025825 -13.606178 2.058782\n", + "2015-09-01 5.391610 0.842386 -2.590674 13.156224 -9.018853 3.285862\n", + "2015-10-01 5.565592 0.879616 3.866075 10.834236 -5.184130 2.195704\n", "\n", - "- 2015-05-27, georet since 1988\n", - " - Inflation in the long-run drops 70 bp to about 2.3% annually.\n", - " - Bond price continues its increase at 2% annually.\n", - " - Gold at 3.4% reacting more to stronger USD (cf. correlation).\n", - " - Home prices also have georet of 3.4% (but low 2.6% volatility)." + " :: Correlation matrix:\n", + " Homes Infl SPX USD XAU Zero10\n", + "Homes 1.000000 0.005092 0.247100 0.043519 -0.245234 -0.294438\n", + "Infl 0.005092 1.000000 -0.008046 -0.357532 -0.047562 -0.066079\n", + "SPX 0.247100 -0.008046 1.000000 -0.054522 -0.207546 -0.136715\n", + "USD 0.043519 -0.357532 -0.054522 1.000000 -0.523893 0.207311\n", + "XAU -0.245234 -0.047562 -0.207546 -0.523893 1.000000 -0.002806\n", + "Zero10 -0.294438 -0.066079 -0.136715 0.207311 -0.002806 1.000000\n" ] - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "Forecasts using Holt-Winters method" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We forecast one-year ahead using the monthly data. Note that current infl is rebased to 1, thus 1.02 would signify 2% increase." + } + ], + "source": [ + "# Slice the data:\n", + "stats( mega[t0:] )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "There is not much correlation among our assets, \n", + "except a mild negative between gold XAU and USD. \n", + "(2015-05-26 at -0.51)\n", + "\n", + "\n", + "## Boxplot of overlapping annual changes\n", + "\n", + "The boxplot gives us an idea of the range of annual returns, \n", + "and their persistence due to overlap. Thus trends \n", + "can be easily discerned.\n", + "\n", + "It is also a visual aid for the geometric mean returns \n", + "which is most significant as investment metric. \n", + "\n", + "As usual, the *red line* plots the median, but \n", + "the **red dot** represents the latest point." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAEKCAYAAAACS67iAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XucXHV9//HXW8JFibBJFQKIrgYiF4FFBbEq2XBJsEFE\nbQFRySpW+7OCiFVAwCTlYpCqQKq2WiRRC0IVUUgJiSUToCJUYSMSMBKIBiFBDCBBQEk+vz/Od7In\nk5nZ3Zk5c26f5+MxMOf+/cyZfOd7Pud7viszwznnXP69KO0COOec6wyv0J1zriC8QnfOuYLwCt05\n5wrCK3TnnCsIr9Cdc64gvEJ3zrmC8ArdZZKkeZLOS7sczuWJV+gdIKkiaZ2kbRI+zixJ325huyMl\nrZX0V7F520q6T9JHOrVNKyTdJOmIOossvNrZ94CkW4dZ518krZD0xxDbB2qW90n6uaRnJP1M0gGx\nZa8L5f+9pI119l2R9Kykp8PrvmHK8vFwjOckXVFn+eGS7g9luVnSK4fZX8P1JU2RtETSk5Iearaf\n4T6HsPyTkh6V9JSky5v9W5A0XtIPJK2XtErSe9uM8yJJj4fXnJplvSHOZ8L5PXy4WPPMK/Q2SeoF\n3gZsBI5JtTANmNli4Hrg0tjsc4DfmdnXO7XNaEnaHngDsLTRKp04zjDWA0eb2Q7ADOBSSW8O5dsG\n+CHwLaAHmA/8UNLWYds/A98FTm6wbwP+0cxeGl57D1OW3wHnAd+sXSDpZcD3gbOBccDPgKsb7WgE\n668H/gP49DBlGvZzkDQNOAM4DHgV8BpgdpNdfgV4DtgJeB/wNUn7tBjnR4F3AvuH1zvCvKqrgJ8D\n48M+vxeOUUxm5q82XsDngNuALwLX1yz7G+Be4I/Aw8CnwvyXATcATwB/AG4BFJbtSvSFfgx4EDgl\nzD8KeJ6oEnkauDvMHwBWhmM8CJzYoJw7hDL8DfA6YB3QG473o1COXwMfHm6bsKyX6EdsAPhtWPZR\n4CDgFyG2ucN8dscA1zVYdgVwXng/Lnxej4XjXA/sFlt3i88A2Iuo0nghfF7rRng+fwh8MryfCjxc\ns/w3wLSaeXsAG+vsawlwcgvfqfOAK2rmfQS4LTb9EuBPwKQG+xjR+sARwEPDlKfR5zA1vL8SOD+2\nbArwaIN9bR++x3vE5s0HPt9inD+p+c5+ELg9vJ8UvgPbx5YvBT7a7r/7rL68hd6+k4DvAP8JTJO0\nU2zZ5cBHLGr97QvcHOZ/ClhNVLHvBJxlZibpRUSV1d1EFe3hwGmSpprZQuBC4LsWtfYODC3cS4Gj\nwjHeDAzWK6SZ/RH4B+DfQ7lmmdkqohbmb4FdgL8FLpQ0ZZht4g4mqtCOD2U5i6ilti9wnKRDm3x2\nfwMsaLK8SuH4rwyvZ4F/hU2t/C0+AzO7n+gH5vbweY0f9iDSi4l+kO4Ns/Yl+nGKWxbmj9TnQ0rm\nNkmTR7hNvSuTfcOxATCzPwEPEP3Q1jPa9ZsZ7nPYJ36ssO7OksYBSPqKpK+EZZOAF8zsgQb7alTu\nfcO+TpQUP1a9Y8f39aCZPdPgWIXjFXobJL2VqIK5xszuImolnhhb5c/AvpJ2MLOnzOzu2PxdiFq7\nG8zsf8P8g4CXmdn5ZvaCmT1EdFl8QvWQbPmPfSOwn6QXm9laM1veqLxmdgNwO9HVwGWSdgf+GjjD\nzP5sZsvC8U5qtE2d3Z4Xtl1MdBl/lZk9bmaPALcCBzYqD/B24L+bLK+WYZ2Z/cDMnjOz9UQ/bPHK\nsdFnMNqUzb8R/RgsCtNjgadq1vkj8NIR7u8M4NVEP85fB66X9JoRbFfv3sH24di1ZRnbYB+jXb+Z\n4T6H2uXV474UwMz+0cz+MbZubbmertlXvXJX93WlmcXz9/WOPbbBstpyF45X6O2ZASwys3Vh+qow\nr+o9RK3QVeEG2SFh/sVErY5FklZKOiPMfxWwq6Qnqi+iFm+81b9JaHkcT9SKfkTSDZJeO0yZ7wV+\nFd7vSpSKiLdgfgvs1mSbWmtj75+tM123ApG0H/CUmf1umPIi6SWS/j3cQHuK6LJ5R0lq8TOod4yL\niVp7x8VmP02UdorbkS0rnLrM7E4ze8bM/mJm3wL+l+j7gKQbYzdL31uzab0fovUNyvK0pN1j+/rj\ncOuPpOw16n0OPbF91R5rx9h2tRqVq1ruRp95o3LXO/b6JsfqYYTnL4+8Qm9RuDw/Dpgc7u4/CpwG\nHCBpfwAz+5mZHQu8HLgOuCbMX29m/2RmE4nyyKdLOoyoMn3IzMbFXjuY2dHhsFv0pDCzRWY2FZgA\n3A98Y7iix94/AoyXFK90X0mUN2+0zWg16qkyknRLddtPEV2qH2xmOxK1zjddrTT5DEbUS0bSbGAa\nUU54fWzRvUQ32uL2Zygl0zIze7sN3Sy9qnZxnU3uBeI9bLYHJgL3mtnq2L52GG79Fopb73PYL7av\ne4G+2LIDgLVm9kSdfa0Axkjao2b9+L5GU+56x/5lbNlrar7f8WMVjlforTuW6Ibb3kRfkgPC+1uB\nkyRtLel9knY0sw1ELYwNAJKOlrSHJBG1FjaE151ELa7PSHqxpK0UdY17YzjmWqA3bIeknSS9M3zp\n/wI8Uz3GSJjZaqKbSp9X1CVxf+BDRPcEOqXRj8HbaV6hx9NLY4la+09JGg/M3LRS889gLfCKWK+U\nLQ8inQW8FziyTgVUATZIOjV8PqcS/ajeHNt+O2Cb8H5bSduG9ztKmiZpO0ljJL2PqDfUwiZl2Srs\nbwywVdjfVmHxD4DXSXp3WGcmUXpoRYPdNV1fke2ArcPktmrc1XC4z+FbwMmS9g5583OJbmpvIVxR\nXQv8c7jyeivwDqDaHXe0cX6LqEG0q6TdgNOBeeFYK4juKc0M5+HdRPcQvt9gX/nX7l1V4JNEv4j3\nEN3t3paoi9Biol/jRUBPp+7iZuUF3AhcXGf+3xG1fLcO66wjyuPdAfx1WOc04CGiS8LVwNmx7XcJ\nn+OjYdufAIeFZeOJfjDWEXXnmkD0j+1Jol4lNwN7DVPumcC3YtO7Ed2I/QNRGugjw20T5vUSVZwv\nis1bDRwam/428Nk6++sh6rHyoiblvAL459hnsoToR/F+op4QG4gaJA0/g3AObgixPdbgOBuJfiye\njr3OjC3vC5/1n8L/D6j5DDaG14bw/wfDspcT/UD/MZTrJ8Dhw5ybWbH9VV+fiy0/HLgvlOVm4JXD\n7K/h+kB/nbLf3GRfDT+HsPyTwBqi7/rlwNaxZV8DvhabHkdUca8HVgEnjKLc7wN+WbP+ReEc/wGY\nU7PsVeG786ewz8PSrjuSfFW7yrUk/CLeCuxtZs9LuproJte+wONm9oWQHx5nZme2fCBXKJKOA95t\nZicMu7JzbsQ6kXIZA7xE0hiiPqOPEOWF54fl84nSE85VPQF8Oe1COFc0bbXQASR9Ajif6LL1JjP7\ngKQnzKzaB1VEPSnGtV1a55xzDbXVQg83QI5h6InDsZLeH1/Hol8M/0vUzjmXsDFtbl99bPgPAJKu\nJXpSb42kCWa2RtIuRDfANiPJK3nnnGuBmdXtPdZuDv03wCGhi52IKvjlRL0mqg/YzCDqg12vUF17\nzZw5M/U70B6fx+fxFe/V7diaaauFbmZ3SvoecBdRn+y7iB5xfilwjaSTibolHddwJ12yatWqtIuQ\nKI8v3zy+/MpSbO2mXDCzWUT9Z+PWEbXWnXPOdUlpnhQdGBhIuwiJ8vjyzePLryzF1na3xZYPLFla\nx3bOubyShCV0UzQ3KpVK2kVIlMeXbx5ffmUpttJU6M45V3SecnHOuRzxlItzzpVAaSr0LOW5kuDx\n5ZvHl19Ziq00FbpzzhWd59Cdcy5HPIfunHMlUJoKPUt5riR4fPnm8eVXlmIrTYXunHNF5zl055zL\nEc+hO+dcCZSmQs9SnisJHl++eXz5laXYSlOhO+dc0XkO3TnncsRz6M45VwKlqdCzlOdKgseXbx5f\nfmUpttJU6M45V3SeQ3fOuRzxHLpzzpVAaSr0LOW5kuDx5ZvHl19Ziq3tCl1Sj6TvSbpP0nJJb5I0\nXtJiSSskLZLU04nCOueca6ztHLqk+cBSM/umpDHA9sDZwONm9gVJZwDjzOzMmu08h+5cSVQq0N+f\ndimKIbEcuqQdgbeZ2TcBzOwFM3sKOAaYH1abDxzbznGcc/mWoaxEobWbcnk18HtJV0i6S9I3JG0P\n7Gxma8M6a4Gd2zxO27KU50qCx5dvRY9v1apK2kVITJbO3ZgObP964ONm9n+SLgE2S62YmUmqm1sZ\nGBigt7cXgJ6eHvr6+ugP12XVD6lT04ODgx3dX9amPb58TxcxvsFBePLJaHr+/Ci+3t7+kHpJv3x5\nma5UKsybNw9gU33ZSFs5dEkTgNvN7NVh+q3AWcBrgClmtkbSLsASM9urZlvPoTtXErNmRS/XvsRy\n6Ga2BlgtaVKYdQRwL3A9MCPMmwFc185xnHPODa8T/dBPAf5T0jJgf+ACYA5wpKQVwGFhOlXVS5ii\n8vjyrejx9fRU0i5CYrJ07trNoWNmy4CD6iw6ot19O+eKoa8v7RKUg4/l4pxzOeJjuTjnXAmUpkLP\nUp4rCR5fvnl8+ZWl2EpToTvnXNF5Dt0553LEc+gu9zJ0VetcZpWmQs9SnisJRY9v3rxK2kVIVNHP\nX5Hjy1JspanQnXPpCUPVuIR5Dt1lVqUylGqZPRtmzoze9/f72Np542O5dE6zHHrbT4o6l5Taitsr\nBOeaK03KJUt5riQUPb4ij6cNxTx/lcpQy3z27Mqm90ULNUvnzlvoLhd8LJD8iV9hfec7foXVDZ5D\nd84lrrcXVq1KuxTF4Dl051zXxW9q/+Y3Qy10v6mdHM+hF4THl29Fj6/6J+eKKEvnzlvoLhcGB71V\nlzfxlvh113kOvRs8h+5ywfsx59vAAIS/c+za5GO5OOdSNTCQdgnKoTQVepbyXEkoYnxl6ccMxTx/\nm6ukXYDEZOnceQ7dZVY8B7tqladcsk6qmwUYEU+/dobn0F0ueA493yTwf+6d4Tl0l3vewyXfqgOr\nuWSVpkLPUp4rCUWIT1LD15QpjZe1c6mfFUU4f83091fSLkJisnTuOlKhS9pK0t2Srg/T4yUtlrRC\n0iJJPZ04jis2M2v4giXDLHfOdSSHLul04A3AS83sGElfAB43sy9IOgMYZ2Zn1mzjOXQ3Yp5Ddy7S\nLIfedoUu6RXAPOAC4HQze4ek+4HJZrZW0gSgYmZ71WznFbpzzo1S0jdFvwx8GtgYm7ezma0N79cC\nO3fgOG3JUp4rCR5fvnl8+ZWl2Nrqhy7paOAxM7tbUn+9dczMJNVtig8MDNDb2wtAT08PfX199Ifu\nDNUPqVPTg+GPGia1/7SnPb58Txc9vjlzih1fktOVSoV5YdyEan3ZSFspF0kXAh8AXgC2A3YArgUO\nAvrNbI2kXYAlnnJxrry8H3rnJJZyMbPPmtnuZvZq4ATgZjP7APAjYEZYbQZwXTvHcc45N7xO90Ov\n/gbPAY6UtAI4LEynqnoJU1RFj29goJJ2ERJV9PPnY7l0R8cqdDNbambHhPfrzOwIM5tkZlPN7MlO\nHceV0/z5aZfAuezzsVxcLngONt/8/HWOj+XinEuVj+XSHaWp0LOU50pC0eMrcg4Win/+fCyX7ihN\nhe6cc0XnOXSXCz6Wi3ORRMdyaZVX6M45N3p+U5Rs5bmS4PHlm8eXX1mKrTQVunMuPWEoEpcwT7k4\n5xLn/dA7x1MuzjlXAqWp0LOU50pC0ePzsVzyrpJ2ARKTpXNXmgrd5ZuP5eLc8DyH7nLBc7D55uev\nczyH7pxLlY/l0h2lqdCzlOdKQtHjK3IOFop//nwsl+4oTYXunHNF5zl0lws+lotzER/LxTnnCsJv\nipKtPFcSPL588/jyK0uxlaZCd86lx8dy6Q5PuTjnEuf90DvHUy7OOVcCpanQs5TnSkLR4/OxXPKu\nknYBEpOlc9dWhS5pd0lLJN0r6ZeSTg3zx0taLGmFpEWSejpTXFdWPpaLc8NrK4cuaQIwwcwGJY0F\nfg4cC3wQeNzMviDpDGCcmZ1Zs63n0N2IeQ423/z8dU5iOXQzW2Nmg+H9euA+YDfgGKDapppPVMk7\n50rKx3Lpjo7l0CX1AgcCdwA7m9nasGgtsHOnjtOqLOW5klD0+Iqcg4Xin7+8j+UiqeVXN43pxE5C\nuuX7wCfM7Ol4EGZmkupebA0MDNDb2wtAT08PfX199Pf3A0Nf8E5NDw4OdnR/WZsuenwwSKWSnfL4\n+StXfEuWLGm4vPo+qeNXKhXmhY781fqykbb7oUvaGrgBuNHMLgnz7gf6zWyNpF2AJWa2V812nkMv\nofHj4Yknune8ceNg3bruHc+5pCWWQ1fUFL8cWF6tzIMfATPC+xnAde0cxxXHE09EN8e69ermj4cr\npywNGtduDv0twPuBKZLuDq+jgDnAkZJWAIeF6VTFL4uKyOPLN48vv2bPrqRdhE3ayqGb2W00/lE4\nop19O+eKY9482HQ7xCWmUGO5tHNH2fP53dHt/sje/zkbinweuv+dLslYLmbW8su5NBU4I+G6qFAV\nejNFzuGBx5d3n/lMJe0iJKySdgESVEm7AJuUpkJ3LsseeCDtErhWzZgx/DrdUqgcejP+NymzwXPo\nQyqVoVTL7NlDj8f39xfvBmKWz0PelCaH3szs2WmXwLnNDQ5uXqlX34eHKjNp/Pioch7tC1rbbvz4\ndOPNm9JU6FnKcyWh6DnmIsbX1xdvjVc2ve/rS7NUzbX6YNiSJZXCPhiWpe9mR8Zycc4Nb8tutZMZ\ny67sxR0cwEtZMPtp7udNzJ79CLB0szW9J5YbidLk0D2Hlw2eQx9yy4IF3PSJT3DBypWb5p09cSLT\nLr2UQ6dPT7Fkjfn5S5/n0J3LoEWXXbZZZQ5wwcqVLJ47N6USuVZkqbNF7ir01m/KVAp9UyZLebxm\njBZOgkSllZMnRcfLqDHPP7/pfSU2f6vnnut6WZKWl+9nK7I0lkvuKvTWb8r4aH1ZIFocNrHFEyiy\ne73+wrbb1p2/YbvtulwSVxS5y6F7Di/f/PwNqZdD/+zEiRzlOfTUjteKLI3l4hV6xo5XdH7+NnfL\nggUsnjuXrZ57jg3bbceRp5yS2coc/PzV4xU63a/QK5VK7M+ZJX+8bms1vm7z81efn7/OHq+bpApm\n/V08XuMKvfD90G9ZsIBFl13Gw2vX8uOdd2bqqadmugXknEtHO38esZWRu5P484iFbqF3op9vHloI\nAPvtB/fck3YphueX7PXlZayhIp+/vMRW2pTLOdOmcf6iRVvMP3faNM5buLDjx0uTlzMbx2uVlzP9\n4+UlttI+WFSmfr5FHavmlgULOGfaNAb6+jhn2jRuWbAg7SIlpJJ2ARJV5H7oWYqt0Dn0ovfz3W8/\nuO++oekx4WzuvXc+0i/DiafMKkA/cHZIn/l9EOe2lLuUy2juPtwC3ARcEJv3WeAo4NDRHDMj18Jb\nDu60DNgnvB8DvBDeLwcO2GzNrAzu5Cmz+ryc6R8vL7EVqpeLsBF/CIcCLFjAubF+vkeNsp+vRGae\nNWxWKUdfjurp3J/slLp18ZRZXDFTZi5vqj3oxjz/PC9su20metDlrkIfrUOnT+fQ6dNz08+3dRWi\npERxxFNmFYaiy3LKrPWubxWk/lFvlUTXtyQU7d9fVtOBiVXoko4CLgG2Av7DzC5K6liFMsoOrbcA\ni4A3MYlztIKpjDKdBF2/1h9piGM5lV+zkqsZ6nZ6HBO58aZTOH+E+xg3roUCtqE61tBoVSqt/dm5\nVvo/u/qigeNGtu4iNk/lQjRS5rlHHz3if38W+2/HmFnHX0SV+ANAL7A1MAjsXbOOtaLFzVqWxvFG\n+hrLDXYcEzebeRwTbSw3jHgf48Z1N77RWnrDDXbOtGk2mcl2zrRptvSGG9IuUlNF/362OLRae68u\nhjZSMydPrlvWmZMnJ3K8zbfDrEHdm1QL/WDgATNbBSDpu8A7gfuabeRG17o7Z9plnL9o8/G0r2Yl\n506by3kLi9ELpJoyk6AysvugLkGjuYfVkeNl6B5WXFZ70CXVD303YHVs+uEwLzVZ6ivaKd7PvjiK\n+P2MK1p8U089lbMnTgSGvpmfnTiRI085JbUyQXI59BH9qA4MDNDb2wtAT08PfX19m26cVL8AtdPV\nW2ONljeaHgx/Sn2k67d7vCSmp0yZQtwkxjIrvK/+ofh+YMHSXzC7Jrm6ZMmS1MvfzjQMhjxzNsrT\naNqYAhr6R14t/XDTg8MsbzRdzcN2K76i//sb6fE2br89O518MucuXcrqNWu4fJtteOO73rXphmgn\nj1epVJg3bx7ApvqykUT6oUs6BJhlZkeF6bOAjRa7MerD57Yvj+NptyrL5yGu6N/PIh8vL7Gl0Q/9\nZ8CeknqBR4Djgfd2aufdvLPf7V4So1GttM+dO5fV9z/H7nuNvp99XsycmXYJnMu+RHLoZvYC8HGi\nBzWXA1ebWUduiLZ6qxwqLW2X9T6+h06fznkLF9J32izOW7iwkJU5QH9/Je0iJGroEryYihxflmJL\nrB+6md0I3JjU/t3m+vrSLoFzLm35G8ul5ePlIwfr8i0vedhuHa/dx+O7nUPvplaf8i3UWC7OZZ3f\n44nU/QMzGXg8vpFWfziy1Fgs9Hjom6ukXYBEZSmPl4S8xOf3eIYsuuyyTZV5Jcy7YOVKFs+dm1qZ\nklFJuwCblKZCnzEj7RK4doRuuC5HfLTM7itNhT5vXn/aRUhUkUayq2f+/P60i5Cw/rQL0HHxx+P7\nY/PTfjy+8/rTLsAmpanQnXPdFX88vioLj8cXWWkq9LzkYFtV9PiylKdMRiXtAoyYNLLX5KOnc9nK\nSzmIafRxAAcxjbkrL2Xy0dNHvI8s3/StmjGjknYRNvFeLs5lQF7u8Yy+N8d0YDpSBbP+zhcoAwYG\n0i7BkNL0Q3f5lqWuYW70/Px1TrN+6KVJucyalXYJXDt8LBfnhleaCn327EraRUhU0XPoPpZL3lXS\nLkBisnTuSlOhO+dc0ZUmh+45PJc2tTEmQN7vN82aVdy0Z7dja5ZD9wrdOefa0P0B0vymKEXO4UG2\n8nhJ8PjyrdjxVdIuwCalqdDz0s/X1edjuTg3vNKkXFy+ecrMZZWnXJxzznVcaSr0Yufwih9flvKU\nSSj6+RsYqKRdhMRkaSyX0lTozrn0zJ+fdgmS42O54Dl0NzqeQ883P3+d4zl0ivtQQ1n4WC7ODa80\nFbqP5ZJvPpZL3lXSLkBisnTuWq7QJV0s6T5JyyRdK2nH2LKzJP1a0v2SpnamqM4555ppOYcu6Ujg\nf8xso6Q5AGZ2pqR9gCuBg4DdgB8Dk8xsY832/ui/cyXhY7l0TuJjuUh6F/AeM3u/pLOAjWZ2UVi2\nEJhlZj+t2abjFfqWgx9NZugPuM4KL4gu/5ZutqbfoHXONZKlgdW6cVP0Q8B/h/e7Ag/Hlj1M1FJP\nnJnVvCqYzcJsFjNmDL2P5m++bt5lKY+XBI8v3/Ie35Z1y9BryZIlTZd3U9O/KSppMTChzqLPmtn1\nYZ2zgT+b2ZVNdlU3qoGBAXp7ewHo6emhr6+P/v5+YOgL0KnpNWsGqVQ6t7+sTQ8ODmaqPJ2enjOn\n2PEV/fwVPb4kpyuVCvPCYEbV+rKRtlIukgaAvwcON7PnwrwzAcxsTpheCMw0sztqtu1qDj2qzLt2\nONdhfg/EuUgiOXRJRwFfBCab2eOx+dWbogczdFN0j9ra2x8scqPhFbpzkaRy6HOBscBiSXdL+iqA\nmS0HrgGWAzcCH8tCzV29hCmqosdX5H7MUPzzV+SxXLJ07prm0Jsxsz2bLLsQuLDVfbtyat6T4D1I\nUxouzUCbwTUxf76Pad8NPpaLy4X+/ug+iMsnT5l1jo/l4nLvySfTLoFz2VeaCj1Lea4kFDG+Sy6J\nWub9/bBsWWXT+0suSbdcSSji+dtcJe0CJCZL567lHLpzSTvttOgFMHasp1ycG47n0F1mVSpDlfjs\n2UND6FZb6i4/ijyWS7d5Dt05lyqvzLujNC30SqWy6bHaIip6fBMmVFizpj/tYiSm6OevyPF1O7Zm\nLXTPobvMiqdc1q4dauV5yiWbsjQiYVmVpoXu8m1gwB9McQ48h+4KYJhB5pxzlKhCz1Jf0SQUPb7H\nH6+kXYREFf38FTm+LMVWmgrd5dv69WmXwLns8xy6ywXvx+xcxHu5uFyqfbCoynu5OFdfaVroRe4H\nC8WPb2Cgwrx5/WkXIzFFP39Fji9L/dA9h+6ccwVRmha6y7dLLhkaqMu5MvMWuss9Hw/dueGVpkLP\nUl/RJBQ9vlWrKmkXIVFFP39Fji9LsXkvF5dZ8V4u8+cPPS3qvVycq89z6C4XfCwX5yKeQ3e5d9tt\naZfAuewrTYWepTxXEooe39q1lbSLkKiin78ix5el2NrOoUv6FHAx8DIzWxfmnQV8CNgAnGpmi9o9\njiufeA59/XofD9254bSVQ5e0O/AN4LXAG8xsnaR9gCuBg4DdgB8Dk8xsY822nkN3TV1yCVx3XfR+\n6VKYPDl6f+yx3ifdlVeSY7l8CfgM8MPYvHcCV5nZX4BVkh4ADgZ+2uaxXMn09Q31P1+6dKhV3teX\nWpGcy7SWc+iS3gk8bGa/qFm0K/BwbPphopZ6qrKU50pC0eODStoFSFTRz1+R48tSbE1b6JIWAxPq\nLDobOAuYGl+9ya7q5lYGBgboDZ2Le3p66Ovr2zTITfVD6tT04OBgR/eXtemixjdrVjR90UWDIXee\nrfL5+fP4kp6uVCrMC312e4f5010t5dAlvQ74H+BPYdYrgN8BbwI+CGBmc8K6C4GZZnZHzT48h+6a\nqh0+d+bM6L3fFHVl1iyH3pEHiyQ9xJY3RQ9m6KboHrW1t1fobjT6+iA08pwrtW48WLSpZjaz5cA1\nwHLgRuBjWai5q5cwRVX0+DyHnm9Fji9LsXVkLBcze03N9IXAhZ3YtyuveMpl2TLvh+7ccHwsF5cL\n/jdFnYv4WC7OOVcCpanQs5TnSkLR4+vpqaRdhEQV/fwVOb4sxVaaCt3lmz8d6tzwPIfunHM54jl0\n55wrgdJOYAWBAAAIhklEQVRU6FnKcyXB48s3jy+/shRbaSp055wrOs+hO+dcjngO3TnnSqA0FXqW\n8lxJ8PjyzePLryzFVpoK3Tnnis5z6M45lyOeQ3fOuRIoTYWepTxXEjy+fPP48itLsZWmQnfOuaLz\nHLpzzuWI59Cdc64ESlOhZynPlQSPL988vvzKUmylqdCdc67oPIfunHM54jl055wrgbYqdEmnSLpP\n0i8lXRSbf5akX0u6X9LU9ovZvizluZLg8eWbx5dfWYqt5Qpd0hTgGGB/M3sd8C9h/j7A8cA+wFHA\nVyWlfiUwODiYdhES5fHlm8eXX1mKrZ2K9v8BnzezvwCY2e/D/HcCV5nZX8xsFfAAcHBbpeyAJ598\nMu0iJMrjyzePL7+yFFs7FfqewKGSfiqpIumNYf6uwMOx9R4GdmvjOM4550ZgTLOFkhYDE+osOjts\nO87MDpF0EHAN8JoGu0q9O8uqVavSLkKiPL588/jyK0uxtdxtUdKNwBwzWxqmHwAOAT4MYGZzwvyF\nwEwzu6Nm+9Qreeecy6NG3RabttCHcR1wGLBU0iRgGzN7XNKPgCslfYko1bIncOdIC+Scc6417VTo\n3wS+Keke4M/ASQBmtlzSNcBy4AXgY/4EkXPOJS+1J0Wdc851Vur9w0dK0vqa6QFJc9MqTxpqP4MG\n67xN0r2S7pK0V7iCyjxJZ4cH1JZJulvSwaH31P2SBiXdJmmSpK0k/UzS22LbLpL0njTL34ik3tpz\nIGmWpE9JOkTSHSHe5ZJmhuUDkn4fzuEKSQslvTmdCJqTtLukByWNC9PjwvQrw/Rpkp6VtENsmy3+\n7YZz/Ybulh4kvSt8/vHXBknTOrDvhZKekHR9zfxXh/P+a0nflbR1u8eqyk2FzpY9Zcp4aTGSmN8H\nXGhmrweeS7g8HREqq+nAgWZ2AHA4sJoo3hPNrA+YD1xsZhuAjwH/KmmMpPcCL5jZ91Mqfiuq53Ee\n8GEzOxDYl6inWHX5VWb2ejObBMwBrpW0V9dLOgwzWw18jaiMhP//u5n9Nky/l+ge2rvjm9XbVYP5\niTKzH5jZgdUXUSy3mNlNw22roMkqXwA+UGf+RcAXzWxP4Ang5FbKXk+eKvRamz7I0Aq6ObTufixp\n9zB/nqSvSrpd0kpJkyV9M7SGrohtP1XSTyT9XNI1krYP8+eE1u4ySRd3P8T6JPWHFs1/haEXvhPm\nfxj4O+A8Sd8mPz96E4DHYw+prTOzR2vWuRXYIyy/E7gdmA1cAHy8i2XtpJ2ANQAWuS+2bNP328wq\nwNeBj3S1dCP3ZeAQSacBf83QU+MTge2Bc4kq9kwLnTvOJVTCkj4t6c7w739WmNcr6VeS5gP3ALtL\nuljSPZJ+Iem46v7M7GagNrMgYArwvTBrPnBsp2Jo56Zot71Y0t2x6fHAD8P7ucAVZvZtSR8ELgPe\nFZb1mNmbJR0D/IjoC7cc+D9JBwC/I+pXf7iZPSvpDOB0SV8BjjWzvQDil4wZ0Uc0vMKjwP9KeouZ\n/YektwDXm9m1knrTLOAoLAI+J+lXwI+Bq83slrCsWrG9A/hFbJuziB5a+5KZPdi1knbWl4FfSaoA\nC4H5ZvZ8g3XvAj7arYKNhpm9IOkzwI3AkeEqCuAE4CqiH+PXStrJzB5Lq5zNhLTHlcDpZvawojGo\n9jCzgxUNXfLDkOZbTdSw+ICZ3RlSfQcA+wMvJ6pXbjGzNQ0O9VfAk2a2MUz/jg4+eJmnFvqzNZdG\nn2PoH/shRCcD4DvAW8N7A6r5q18Ca83s3tDr5l6gN2y7D/CT8INxEvBK4CngOUmXS3oX8Gyi0Y3e\nnWb2SIhlEHhVbFmuuoSa2TPAG4haoL8HrpY0Iyz+z3Be3gz8U2yzycCTwH7dLGsLGl0lmZmdB7yR\n6AftRKJKHeqfv6z/W3078Aibn48TiH6cDbiW6OoRmnwmyRVvWOcB95jZf4XpqcDU8N37OfBawhUi\n8JtwlQjwFuDKcIX1GLAUOKiL5d5MnlrotWq/9I0qsT+H/28E4q2fjUTxbwAWm9mJWxxAOpgon/u3\nRJf1h7dT4A6Lx7KBfJ9LQotlKdFzDfcA1Qr9RDO7K75uSIldRHTpOk/S283sxq4WeOT+AIyrmfdX\nwIMA4eri3yR9A/i9pPEN9nMg0ZVl5kjqA44g+tG9TdJ3iVqrewKLQ5p5G+Ah4CvU/0zGA493q8xx\nkvqJruhfX7Po82b29Zp1e4FnandRM20N3kMUe4+kF4Xv/CuIWukdkfVf/ZH6CVFrAKKbgrc0WTfO\ngJ8Cbwn5PiRtL2nPUGn0hIridKLLqizLVas8TlHvlT1jsw4EflNdXGeTzxG1/FYQ3SD9sqRtEy5m\nS8xsPfCootFJCRX2NKKKb3rsptokouc2nqjdh6TJwN8D3+hOqUculP9rwCfCDdKLgS8S5cxnmtmr\nw2s3YFdFvV9+RvRvbuewjzcSPZi4OoXyjwOuAE4KV4pVi4APxe6n7Sbp5XV2cStwvKQXheWHsvmD\nlJt9f8PVyhKGrlZmED2k2RF5atXV6+VSnXcKcIWkTwOPAR9ssN0Wl3Th6dYB4KpYpXA28DRR3mw7\nopPyybYjaF+zWBoty8ON0bHAXEk9RJXar4nyxd+jpvyS9iUa0fMAADMblHQTcAbwz90s9CicBHxF\n0dPTALPM7CFJFwJfkvQnorjfZ2amaFiM4yW9FXgJUWv+3Wb2q1RK39zfA6vM7H/C9FeJ/v2dAOxd\ns+4PgOPN7GJJnwD+O+Snnya9m6b/QHQ18W81HVY+T5TGvT3Mfxp4PzW9cczsB4p6aS0L8z9dvU8g\n6VaiVM1YSauBD5nZYqLv6nclnU90b+TyTgXjDxY551xBFCXl4pxzpecVunPOFYRX6M45VxBeoTvn\nXEF4he6ccwXhFbpzzhWEV+jOOVcQXqE751xB/H8TC57Y0axpUwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " :: Finished: boxplot-Assets_YoYm.png\n" ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# 12-periods ahead forecasts use default alpha and beta values (robust update):\n", - "for i in range(len(ms)):\n", - " print names[i] \n", - " print holtfred(msd[ ms[i]], h=12 )\n", - " # ^we use all available data to forecast\n", - " print '------------------------------------'" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Infl\n", - " Forecast\n", - "0 1.000000\n", - "1 0.998873\n", - "2 0.999353\n", - "3 0.999834\n", - "4 1.000314\n", - "5 1.000794\n", - "6 1.001274\n", - "7 1.001755\n", - "8 1.002235\n", - "9 1.002715\n", - "10 1.003195\n", - "11 1.003675\n", - "12 1.004156" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "------------------------------------\n", - "Zero10\n", - " Forecast\n", - "0 80.929358\n", - "1 83.871671\n", - "2 84.151155\n", - "3 84.430640\n", - "4 84.710124\n", - "5 84.989608\n", - "6 85.269093\n", - "7 85.548577\n", - "8 85.828062\n", - "9 86.107546\n", - "10 86.387030\n", - "11 86.666515\n", - "12 86.945999" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "------------------------------------\n", - "SPX\n", - " Forecast\n", - "0 2105.200000\n", - "1 2146.564284\n", - "2 2161.256033\n", - "3 2175.947782\n", - "4 2190.639532\n", - "5 2205.331281\n", - "6 2220.023030\n", - "7 2234.714780\n", - "8 2249.406529\n", - "9 2264.098278\n", - "10 2278.790028\n", - "11 2293.481777\n", - "12 2308.173527" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "------------------------------------\n", - "XAU\n", - " Forecast\n", - "0 1178.500000\n", - "1 1178.805087\n", - "2 1172.707278\n", - "3 1166.609470\n", - "4 1160.511661\n", - "5 1154.413853\n", - "6 1148.316045\n", - "7 1142.218236\n", - "8 1136.120428\n", - "9 1130.022619\n", - "10 1123.924811\n", - "11 1117.827002\n", - "12 1111.729194" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "------------------------------------\n", - "USD\n", - " Forecast\n", - "0 93.018000\n", - "1 95.042219\n", - "2 95.923105\n", - "3 96.803990\n", - "4 97.684876\n", - "5 98.565762\n", - "6 99.446648\n", - "7 100.327534\n", - "8 101.208420\n", - "9 102.089306\n", - "10 102.970192\n", - "11 103.851077\n", - "12 104.731963" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "------------------------------------\n", - "Homes\n", - " Forecast\n", - "0 214289.270829\n", - "1 212418.051023\n", - "2 213348.196411\n", - "3 214278.341799\n", - "4 215208.487187\n", - "5 216138.632575\n", - "6 217068.777963\n", - "7 217998.923351\n", - "8 218929.068739\n", - "9 219859.214127\n", - "10 220789.359515\n", - "11 221719.504904\n", - "12 222649.650292" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "------------------------------------\n" - ] - } - ], - "prompt_number": 10 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Forecast log for monthly data\n", - "\n", - "Changing Holt-Winters *alpha* from 0.20 to 0.10 varies the forecast only slightly. The important parameter is *beta* to capture trend effects. Currently we shall rely on default Holt-Winters settings for robustness.\n", - "\n", - "\n", - "- 2014-09-01, Twelve-month Forecasts given data through 2014-07-01:\n", - " - Inflation at 1.44%.\n", - " - 10-y Bonds price -6.7%, thus rate +75 bp given zero10dur. \n", - " - SPX +16.6% to 2280.\n", - " - Gold tanks from 1286 to 1067. \n", - " - USD +1.4% broadly.\n", - "\n", - "\n", - "- 2014-10-11, Twelve-month Forecasts given ten-year data, robust HW:\n", - " - Inflation at 1.9%\n", - " - Zero10 indicates slight downward pressure on interest rates.\n", - " - SPX to 2239, but market seems skeptical.\n", - " - Gold tanks to 1184 (region which we have seen just recently).\n", - " - USD definitely has an upward bias against all FX, even NZD and AUD.\n", - " - Home prices looking to increase from \\$203K to \\$220K \n", - "\n", - "\n", - "- 2015-05-28, Twelve-month Forecasts given data through 2015-03-01, robust HW:\n", - " - Inflation at 0.5% (which seems dramatic).\n", - " - Zero10 price increases by 8.92%, thus 10-year rate decreases by 100 bp.\n", - " - SPX to 2322, but no metric says it's fair valued.\n", - " - Gold to 1130, which would break support.\n", - " - USD very strong, up 12% globally (QE-EU started, and possible Grexit).\n", - " - Home prices looking to increase from \\$214K to \\$223K" + } + ], + "source": [ + "# Overlapping YoY percentage change, recently:\n", + "boxplot(mega[t0:], 'Assets YoYm')\n", + "# where the red dot represents the latest point." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Red dot outside the mid-range box alerts us to unusual conditions. \n", + "Attention should also be paid to the extreme value \"slash\" marks \n", + "(where outliers are also revealed).\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Geometric mean returns on non-overlapping periods\n", + "\n", + "David E. Shaw, famous for his proprietary hedge fund, remarked that \n", + "one of the most important equations in finance is the penalization \n", + "of arithmetic mean by one-half of variance:\n", + "\n", + "$ g = \\mu - (\\sigma^2 / 2) $\n", + "\n", + "which turns out to be our geometric mean return. It is an approximation, \n", + "by the way, but good enough to maximize, instead of considering \n", + "intricate mean-variance trade-off. We find it useful also as a metric \n", + "for economic variables.\n", + "\n", + "The source code shows us that georet() first gives us \n", + "the *geometric* mean return, followed by \n", + "the **arithmetic mean return and volatility**, \n", + "then finally, the yearly frequency used -- in list format." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\u001b[1;31mSignature: \u001b[0m\u001b[0mgeoret\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdfx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0myearly\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m256\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mSource:\u001b[0m\n", + "def georet( dfx, yearly=256 ):\n", + " '''Compute geometric mean return in a summary list.'''\n", + " # yearly refers to frequency, e.g. 256 for daily trading days,\n", + " # 12 for monthly, \n", + " # 4 for quarterly.\n", + " #-alt dflg = np.log( dfx )\n", + " #-alt dfpc = dflg.diff( periods=1 )\n", + " dfpc = dfx.pct_change( periods=1 )\n", + " # ^instead of first difference of logged data,\n", + " # gives slightly higher arithmetic means.\n", + " mean = dfpc.mean().values.tolist()[0] * yearly\n", + " vari = dfpc.var().values.tolist()[0] * yearly\n", + " # ^summary statistics methods, see\n", + " # McKinney, p.139, Table 5-10.\n", + " geor = mean - (0.5*vari)\n", + " # ^arithmetic mean return penalized by risk, \n", + " # optimal choice under log utility.\n", + " lst = [ geor, mean, vari ** 0.5 ]\n", + " # ^^^^^^i.e. std sigma, or volatility.\n", + " lst = [ round(i*100, 2) for i in lst ]\n", + " # ^[ geor, mean, volatility ] in readable % form.\n", + " return lst + [ yearly ]\n", + "\u001b[1;31mFile: \u001b[0m~/Dropbox/ipy/fecon235/lib/yi_1tools.py\n", + "\u001b[1;31mType: \u001b[0mfunction" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# How are we computing geometric mean returns?\n", + "# Just add \"?\" or \"??\" to variables, procedures, etc.\n", + "# to find out the details, e.g.\n", + "\n", + "georet??" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'Homes': [3.39, 3.42, 2.53, 12],\n", + " 'Infl': [2.32, 2.32, 0.5, 12],\n", + " 'SPX': [7.58, 8.33, 12.25, 12],\n", + " 'USD': [0.19, 0.28, 4.13, 12],\n", + " 'XAU': [3.2, 4.05, 13.05, 12],\n", + " 'Zero10': [2.07, 2.33, 7.15, 12]}" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Geometric mean returns, non-overlapping, annualized:\n", + "groupgeoret( msdf[t0:], yearly=12 )\n", + " \n", + "# Note that we applied groupgeoret to msdf, not mega.\n", + "# Generally georet requires price levels.\n", + "# groupgeoret is just georet for group dataframes." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Note: the geometric returns do not include interest and dividend payouts for bonds and equities. Some observations in chronological order:\n", + "\n", + "- 2014-09-01, georet since 2010\n", + " - Inflation at 1.7% which is below Fed target of 2%.\n", + " - Total return on bonds, approx 2.52 + 2.33 = 4.85%\n", + " - Total return on equity, approx. 11.9 + 2 = 13.9% -- very heated.\n", + " - Gold indecisive about breaking 1260 LTS.\n", + " - USD though at -0.69%, will strengthen given Draghi wanting weak EUR.\n", + " \n", + " \n", + " - 2014-10-11, georet since 2004\n", + " - Inflation over ten years is running 2% annually.\n", + " - Gold dominates over ten years.\n", + " - Gold recently holds at 1180 triple local bottom.\n", + "\n", + "\n", + " - 2014-10-12, georet since 1988\n", + " - Inflation in the long-run about 3% annually.\n", + " - Bond price alone increases 2% annually (excludes interest income).\n", + " - Gold at 1.73% does not keep up with inflation.\n", + " - USD at break-even over the long-run.\n", + " - Home prices have georet of 3.6%.\n", + "\n", + "\n", + "- 2015-05-27, georet since 1988\n", + " - Inflation in the long-run drops 70 bp to about 2.3% annually.\n", + " - Bond price continues its increase at 2% annually.\n", + " - Gold at 3.4% reacting more to stronger USD (cf. correlation).\n", + " - Home prices also have georet of 3.4% (but low 2.6% volatility).\n", + "\n", + "\n", + "- 2016-01-03, georet since 1988\n", + " - Long-run inflation is 2.3% annually (Current Fed target: 2.0%).\n", + " - Bond price increases at 2% annually (but Fed has just hiked rates!).\n", + " - Equities at robust 7.6% annually (but ZIRP is finished).\n", + " - Gold moving along at 2.9% (reflecting horrible 2015 year).\n", + " - Nominal home prices at steady 3.4% per annum. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Forecasts using Holt-Winters method\n", + "\n", + "We forecast one-year ahead using the monthly data. \n", + "Note that the most current infl level is rebased to 1, \n", + "thus 1.02 would signify 2% increase." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + " Homes Infl SPX USD XAU Zero10\n", + "0 216295.322178 0.999125 2021.400000 97.185000 1165.050000 83.183904\n", + "1 216719.918400 0.999473 2067.207192 99.116894 1126.538411 83.140498\n", + "2 217393.597328 1.000433 2063.544333 99.945673 1117.644357 83.208857\n", + "3 218067.276256 1.001392 2059.881474 100.774452 1108.750303 83.277216\n", + "4 218740.955184 1.002352 2056.218615 101.603231 1099.856249 83.345574\n", + "5 219414.634112 1.003312 2052.555756 102.432010 1090.962195 83.413933\n", + "6 220088.313040 1.004272 2048.892897 103.260789 1082.068141 83.482292\n", + "7 220761.991968 1.005232 2045.230038 104.089568 1073.174088 83.550651\n", + "8 221435.670896 1.006192 2041.567179 104.918347 1064.280034 83.619010\n", + "9 222109.349824 1.007152 2037.904320 105.747125 1055.385980 83.687369\n", + "10 222783.028752 1.008112 2034.241461 106.575904 1046.491926 83.755727\n", + "11 223456.707680 1.009072 2030.578602 107.404683 1037.597872 83.824086\n", + "12 224130.386608 1.010032 2026.915743 108.233462 1028.703819 83.892445" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# These 12-periods ahead forecasts use default alpha and beta values\n", + "# found to be optimal for a fixed Kalman filter.\n", + "\n", + "groupholtf( msdf, h=12 )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Forecast log for monthly data\n", + "\n", + "Changing Holt-Winters *alpha* from 0.20 to 0.10 varies the forecast only slightly. The important parameter is *beta* to capture trend effects. Currently we shall rely on default Holt-Winters settings for robustness.\n", + "\n", + "\n", + "- 2014-09-01, Twelve-month Forecasts given data through 2014-07-01:\n", + " - Inflation at 1.44%.\n", + " - 10-y Bonds price -6.7%, thus rate +75 bp given zero10dur. \n", + " - SPX +16.6% to 2280.\n", + " - Gold tanks from 1286 to 1067. \n", + " - USD +1.4% broadly.\n", + "\n", + "\n", + "- 2014-10-11, Twelve-month Forecasts given ten-year data, robust HW:\n", + " - Inflation at 1.9%\n", + " - Zero10 indicates slight downward pressure on interest rates.\n", + " - SPX to 2239, but market seems skeptical.\n", + " - Gold tanks to 1184 (region which we have seen just recently).\n", + " - USD definitely has an upward bias against all FX, even NZD and AUD.\n", + " - Home prices looking to increase from \\$203K to \\$220K \n", + "\n", + "\n", + "- 2015-05-28, Twelve-month Forecasts given data through 2015-03-01, robust HW:\n", + " - Inflation at 0.5% (which seems dramatic).\n", + " - Zero10 price increases by 8.92%, thus 10-year rate decreases by 100 bp.\n", + " - SPX to 2322, but no metric says it's fair valued.\n", + " - Gold to 1130, which would break support.\n", + " - USD very strong, up 12% globally (QE-EU started, and possible Grexit).\n", + " - Home prices looking to increase from \\$214K to \\$223K\n", + "\n", + "\n", + "- 2016-01-03, Twelve-month Forecasts given data through 2015-10-01, robust HW:\n", + " - Inflation at 1.1% (still below Fed target, see https://git.io/fed)\n", + " - Bonds and equities, forecasting Zero10 and SPX, will be flat.\n", + " - Gold to continue down trend, expected to fall to \\$941 in a year.\n", + " - USD 10% higher in light of divergence between Fed hike(s) and ECB QE.\n", + " - Home prices expected to be flat (but watch mortgage spreads)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# DAILY DATA, including major FX\n", + "\n", + "We examine bonds (zero coupon equivalent of 10-y Treasury), \n", + "equities (SPX), gold (XAU), EURUSD, and USDJPY \n", + "at higher frequency (daily) for the most recent developments. \n", + "\n", + "*Inflation, real trade-weighted USD index, and US home price data \n", + "have a slow monthly release schedule. \n", + "And for home price data, there is a three month lag.* " + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Specify daily series of interest as a dictionary\n", + "# where key is name, and value is its data code:\n", + "dsdic = { 'Zero10' : d4zero10, 'SPX' : d4spx, 'XAU' : d4xau, \n", + " 'EURUSD' : d4eurusd, 'USDJPY' : d4usdjpy }" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " :: S&P 500 prepend successfully goes back to 1957.\n" ] - }, - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "DAILY DATA" + } + ], + "source": [ + "# Download data into a dataframe:\n", + "dsdf = groupget( dsdic )" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Construct the dega YoY percent dataframe:\n", + "dega = grouppc( dsdf, freq=256 )\n", + "# ^for daily data" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Set the start date for daily series:\n", + "u0 = '2010-01-01'" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " :: Finished: boxplot-Assets_YoYd.png\n" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We examine bonds (zero coupon equivalent of 10-y Treasury), equities (SPX), gold (XAU), EURUSD, and USDJPY at higher frequency (daily) for the most recent developments. \n", + } + ], + "source": [ + "# Plot overlapping percentage changes:\n", + "boxplot( dega[u0:], 'Assets YoYd' )\n", + "\n", + "# Note that the \"last\" timestamp will be more\n", + "# recent than for the monthly series." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Although monthly data is more suitable for making long-term forecasts, \n", + "daily data is much more sensitive to immediate market perturbations. \n", + "\n", + "2016-01-03 Good example of the foregoing remark is the \n", + "reaction in the overall market due to the first Fed rate hike \n", + "in almost a decade on 2015-12-16. ZIRP, zero interest rate program, \n", + "has been terminated, along with US quantitative easing, \n", + "thus asset prices must adjust to financing constraints. \n", + "Note how equities and gold are now below their mid-range boxes." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " EURUSD SPX USDJPY XAU Zero10\n", + "count 1565.000000 1565.000000 1565.000000 1565.000000 1565.000000\n", + "mean -3.239333 14.108931 4.967449 4.568358 1.861880\n", + "std 9.126193 10.118387 11.876045 18.700101 6.470399\n", + "min -23.984762 -6.776581 -14.310589 -29.210332 -13.248728\n", + "25% -10.613876 7.172626 -6.285016 -9.629768 -1.231181\n", + "50% -2.304728 13.200272 2.984473 -0.627657 2.419923\n", + "75% 3.984704 19.505195 15.422171 23.593619 5.626088\n", + "max 21.056554 65.300874 30.357599 52.361809 18.075299\n", "\n", - "[Inflation, real trade-weighted USD, and US home price data have a slow release schedule (monthly).] " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Specify daily series of interest:\n", - "ds = [ d4zero10, d4spx, d4xau, d4eurusd, d4usdjpy ]\n", - "names = [ 'Zero10', 'SPX', 'XAU', 'EURUSD', 'USDJPY' ]\n", + " :: Index on min:\n", + "EURUSD 2015-03-11\n", + "SPX 2015-08-25\n", + "USDJPY 2011-03-17\n", + "XAU 2013-12-26\n", + "Zero10 2010-01-07\n", + "dtype: datetime64[ns]\n", "\n", - "# Download into a dictionary:\n", - "dsd = {}\n", - "for i in ds:\n", - " dsd[i] = getfred(i)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - " :: S&P 500 prepend successfully goes back to 1957.\n" - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Compute the YoY percentage change (overlaping):\n", - "dsdc = {}\n", - "for i in ds:\n", - " dsdc[i] = pcent( dsd[i], 256 )" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 12 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Construct the YoY dataframe:\n", - "dega = paste( [ dsdc[i] for i in ds ] )\n", - "# Give names to the columns for mega:\n", - "dega.columns = names" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 13 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Start from the recent:\n", - "u0 = '2010-01-01'" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 14 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Overlapping YoY percentage change, recently:\n", - "boxplot( dega[u0:], 'Assets YoYd' )" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "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\n", - "text": [ - "" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - " :: Finished: boxplot-Assets_YoYd.png\n" - ] - } - ], - "prompt_number": 15 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Geometric mean returns, non-overlapping, annualized:\n", - "for i in range(len(ds)):\n", - " print names[i], georet( dsd[ds[i]][u0:] )" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Zero10 " - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[2.33, 2.61, 7.52, 256]\n", - "SPX " - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[11.36, 12.57, 15.53, 256]\n", - "XAU " - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[1.36, 2.89, 17.49, 256]\n", - "EURUSD " - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[-4.21, -3.77, 9.43, 256]\n", - "USDJPY " - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[4.96, 5.4, 9.33, 256]\n" - ] - } - ], - "prompt_number": 16 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Forecast log for daily data\n", + " :: Index on max:\n", + "EURUSD 2011-06-06\n", + "SPX 2010-03-02\n", + "USDJPY 2013-05-28\n", + "XAU 2011-09-06\n", + "Zero10 2012-02-01\n", + "dtype: datetime64[ns]\n", "\n", - "- 2014-10-11, Really near-term picture is too bright for SPX while XAU looks dark. Sell stocks, and start to accumulate gold.\n", + " :: Head:\n", + " EURUSD SPX USDJPY XAU Zero10\n", + "T \n", + "2010-01-01 4.506344 22.574830 2.117389 27.081507 -11.463243\n", + "2010-01-04 6.846980 27.252204 2.548476 32.369431 -11.776234\n", + "2010-01-05 7.904398 30.595454 2.878992 35.822249 -11.858700\n", + "2010-01-06 9.137748 30.437376 3.212493 36.721113 -12.554147\n", + "2010-01-07 8.653408 35.492867 4.513889 37.583688 -13.248728\n", + "2010-01-08 9.645639 35.702942 3.471370 39.104938 -13.173018\n", + "2010-01-11 9.755361 34.919776 1.783143 38.290855 -12.321456\n", "\n", + " :: Tail:\n", + " EURUSD SPX USDJPY XAU Zero10\n", + "T \n", + "2015-12-23 -10.670281 -0.771985 1.340707 -11.422056 -0.618486\n", + "2015-12-24 -9.470292 0.101511 0.392157 -11.422056 -0.706616\n", + "2015-12-25 -9.470292 0.101511 0.392157 -11.422056 -0.706616\n", + "2015-12-28 -8.589263 -0.082596 0.083195 -8.852389 -1.058205\n", + "2015-12-29 -8.407451 2.859575 0.668673 -10.825000 -2.451747\n", + "2015-12-30 -8.579088 3.033541 1.978691 -12.414790 -2.969830\n", + "2015-12-31 -8.130288 0.890468 0.627510 -12.432879 -2.711703\n", "\n", - "- 2015-05-28, XAU georet changed from 2.6% to 1.6%. Zero10 monthly forecast is basically unchanged. Real rate is what matters for gold. USD stronger by 4.8% against both the EUR and JPY." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "# Show esp. correlations:\n", - "stats( dega[u0:] )" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - " Zero10 SPX XAU EURUSD USDJPY\n", - "count 1426.000000 1426.000000 1426.000000 1426.000000 1426.000000\n", - "mean 1.902672 15.245862 5.972715 -2.194030 4.307208\n", - "std 6.762567 9.818755 18.978442 8.842339 12.024459\n", - "min -13.248728 -5.657641 -29.210332 -23.984762 -14.310589\n", - "25% -3.402214 9.723296 -8.516970 -8.651129 -6.838512\n", - "50% 2.684079 14.060072 2.285300 -0.706405 1.967362\n", - "75% 6.184020 20.287348 24.319358 4.492467 15.174316\n", - "max 18.075299 65.300874 52.361809 21.056554 30.357599\n", - "\n", - " :: Index on min:\n", - "Zero10 2010-01-07\n", - "SPX 2011-10-03\n", - "XAU 2013-12-26\n", - "EURUSD 2015-03-11\n", - "USDJPY 2011-03-17\n", - "dtype: datetime64[ns]\n", - "\n", - " :: Index on max:\n", - "Zero10 2012-02-01\n", - "SPX 2010-03-02\n", - "XAU 2011-09-06\n", - "EURUSD 2011-06-06\n", - "USDJPY 2013-05-28\n", - "dtype: datetime64[ns]\n", - "\n", - " :: Head:\n", - " Zero10 SPX XAU EURUSD USDJPY\n", - "T \n", - "2010-01-01 -11.463243 22.574830 27.081507 4.506344 2.117389\n", - "2010-01-04 -11.776234 27.252204 32.369431 6.846980 2.548476\n", - "2010-01-05 -11.858700 30.595454 35.822249 7.904398 2.878992\n", - "2010-01-06 -12.554147 30.437376 36.721113 9.137748 3.212493\n", - "2010-01-07 -13.248728 35.492867 37.583688 8.653408 4.513889\n", - "2010-01-08 -13.173018 35.702942 39.104938 9.645639 3.471370\n", - "2010-01-11 -12.321456 34.919776 38.290855 9.755361 1.783143\n", - "\n", - " :: Tail:\n", - " Zero10 SPX XAU EURUSD USDJPY\n", - "T \n", - "2015-06-11 1.966382 7.760938 -7.186454 -17.181396 21.006265\n", - "2015-06-12 2.237337 6.870700 -8.522815 -17.195301 21.003535\n", - "2015-06-15 2.418714 6.192973 -9.988571 -17.076402 20.794987\n", - "2015-06-16 2.782262 6.811338 -10.334983 -17.325094 21.089303\n", - "2015-06-17 2.419197 7.715977 -10.656049 -17.250515 21.658670\n", - "2015-06-18 1.966775 8.252489 -8.726030 -16.380701 20.756757\n", - "2015-06-19 2.419923 7.805459 -8.259958 -16.715650 20.696439" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "\n", - " :: Correlation matrix:\n", - " Zero10 SPX XAU EURUSD USDJPY\n", - "Zero10 1.000000 -0.750870 0.418415 -0.575325 -0.417933\n", - "SPX -0.750870 1.000000 -0.152196 0.404478 0.159153\n", - "XAU 0.418415 -0.152196 1.000000 0.074339 -0.866292\n", - "EURUSD -0.575325 0.404478 0.074339 1.000000 -0.093702\n", - "USDJPY -0.417933 0.159153 -0.866292 -0.093702 1.000000" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n" - ] - } - ], - "prompt_number": 17 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "- 2015-05-29, Suprisingly, very little correlation between EURUSD and USDJPY: -6%. Gold appears more correlated with USDJPY at -87% than EURUSD at +6%" + " :: Correlation matrix:\n", + " EURUSD SPX USDJPY XAU Zero10\n", + "EURUSD 1.000000 0.471964 -0.163779 0.158736 -0.524794\n", + "SPX 0.471964 1.000000 0.090843 -0.052154 -0.687276\n", + "USDJPY -0.163779 0.090843 1.000000 -0.859083 -0.400329\n", + "XAU 0.158736 -0.052154 -0.859083 1.000000 0.409829\n", + "Zero10 -0.524794 -0.687276 -0.400329 0.409829 1.000000\n" ] } ], - "metadata": {} + "source": [ + "stats(dega[u0:])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- 2015-05-29, Suprisingly, very little correlation between EURUSD and USDJPY: -6%. Gold appears more correlated with USDJPY at -87% than EURUSD at +6%\n", + "\n", + "- 2016-01-05, Given the latest Fed hike, the correlation to watch is between equities and bonds (-0.69 SPX and Zero10)." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + " EURUSD SPX USDJPY XAU Zero10\n", + "T \n", + "2015-12-23 1.0875 2064.29 120.94 1068.25 81.685673\n", + "2015-12-24 1.0955 2060.99 120.32 1068.25 81.830579\n", + "2015-12-25 1.0955 2060.99 120.32 1068.25 81.830579\n", + "2015-12-28 1.0983 2056.50 120.30 1068.25 81.903134\n", + "2015-12-29 1.0916 2078.36 120.44 1070.10 81.324593\n", + "2015-12-30 1.0912 2063.36 120.60 1060.00 81.396674\n", + "2015-12-31 1.0859 2043.94 120.27 1060.00 81.685673" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# What are the latest daily prices?\n", + "tail( dsdf )" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'EURUSD': [-4.54, -4.08, 9.64, 256],\n", + " 'SPX': [9.92, 11.16, 15.76, 256],\n", + " 'USDJPY': [4.19, 4.63, 9.3, 256],\n", + " 'XAU': [-0.41, 1.08, 17.27, 256],\n", + " 'Zero10': [2.28, 2.56, 7.48, 256]}" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Geometric mean returns, non-overlapping, annualized:\n", + "groupgeoret( dsdf[u0:], yearly=256 )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Closing remarks on daily data\n", + "\n", + "- 2014-10-11, Really near-term picture is too bright for SPX while XAU looks dark. Sell stocks, and start to accumulate gold.\n", + "\n", + "\n", + "- 2015-05-28, XAU georet changed from 2.6% to 1.6%. Zero10 monthly forecast is basically unchanged. Real rate is what matters for gold. USD stronger by 4.8% against both the EUR and JPY.\n", + "\n", + "\n", + "- 2016-01-03, XAU georet changed from 1.6% to -0.41%, commodities including oil going through a bear market. Bonds have not sold off despite 2015-12-16 Fed rate hike, probably due to world appetite for USD which is stronger by about 4.3% against EUR and JPY. SPX looks vulnerable given the past maxims about rate hikes, but the Fed is actually still very accomodative.\n", + "\n", + "[ ] TODO: notebook on r\\* the so-called natural interest rate." + ] } - ] -} \ No newline at end of file + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.10" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +}