Skip to content

Instantly share code, notes, and snippets.

@kongscn
Last active August 7, 2017 02:42
Show Gist options
  • Save kongscn/9de3a9bdac9bf5f632d9 to your computer and use it in GitHub Desktop.
Save kongscn/9de3a9bdac9bf5f632d9 to your computer and use it in GitHub Desktop.
adf test half life ipython notebook
{
"metadata": {
"name": "",
"signature": "sha256:67ef237c0c9ece746bfe2500e488c467aabd97c00c8d8aae000151ee8323a44c"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Implementation of Stationary Test and Half-Life Calculation with Python in Chen's Algorithmic Trading Chapter 2\n",
"\n",
"In the following example, we apply adf test and calculate half-life time according to Chen's book *Algorithmic Trading* chapter 2,\n",
"using Python and `statsmodels` package."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%pylab inline"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"prompt_number": 1
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import Quandl\n",
"import numpy as np\n",
"import pandas as pd\n",
"import statsmodels.api as sm\n",
"import statsmodels.tsa.stattools as ts\n",
"import scipy.io as sio"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Get USD/CAD Data from Quandl.com"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"startdate = '2007-07-22'\n",
"enddate = '2012-03-28'\n",
"qcode = 'CURRFX/USDCAD'"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 3
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"url = Quandl.get(qcode, trim_start=startdate, trim_end=enddate, returns='url')\n",
"df = Quandl.get(qcode, trim_start=startdate, trim_end=enddate)\n",
"usdcad = df.Rate"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"usdcad.plot()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 5,
"text": [
"<matplotlib.axes.AxesSubplot at 0x848f198>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nRU5ErkJggg==\n",
"text": [
"<matplotlib.figure.Figure at 0x69ee860>"
]
}
],
"prompt_number": 5
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# ADF Test"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"ts.adfuller(usdcad, maxlag=1)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 6,
"text": [
"(-2.3466233030145998,\n",
" 0.15737142688333444,\n",
" 1,\n",
" 1221,\n",
" {'5%': -2.8639100200710828,\n",
" '1%': -3.435716995109265,\n",
" '10%': -2.568031835031368},\n",
" -9562.9337394440736)"
]
}
],
"prompt_number": 6
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Calculate Half-Life and Lookback"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"md = sm.OLS(usdcad.diff(), sm.add_constant(usdcad.shift()), missing='drop')\n",
"mdf = md.fit()\n",
"half_life = -np.log(2)/mdf.params[1]\n",
"lookback = np.round(half_life)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 7
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"half_life, lookback"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 8,
"text": [
"(280.64173746164386, 281.0)"
]
}
],
"prompt_number": 8
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## The OLS Regression Result"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print(mdf.summary())"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
" OLS Regression Results \n",
"==============================================================================\n",
"Dep. Variable: Rate R-squared: 0.001\n",
"Model: OLS Adj. R-squared: 0.000\n",
"Method: Least Squares F-statistic: 1.394\n",
"Date: Thu, 04 Dec 2014 Prob (F-statistic): 0.238\n",
"Time: 16:21:17 Log-Likelihood: 4558.0\n",
"No. Observations: 1222 AIC: -9112.\n",
"Df Residuals: 1220 BIC: -9102.\n",
"Df Model: 1 \n",
"Covariance Type: nonrobust \n",
"==============================================================================\n",
" coef std err t P>|t| [95.0% Conf. Int.]\n",
"------------------------------------------------------------------------------\n",
"const 0.0025 0.002 1.157 0.247 -0.002 0.007\n",
"Rate -0.0025 0.002 -1.181 0.238 -0.007 0.002\n",
"==============================================================================\n",
"Omnibus: 157.966 Durbin-Watson: 0.881\n",
"Prob(Omnibus): 0.000 Jarque-Bera (JB): 1621.257\n",
"Skew: 0.117 Prob(JB): 0.00\n",
"Kurtosis: 8.638 Cond. No. 26.5\n",
"==============================================================================\n",
"\n",
"Warnings:\n",
"[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n"
]
}
],
"prompt_number": 9
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Wrap Into One Function"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def adf_hl(price):\n",
" \"\"\"Calculate ADF test and Half-Life time.\n",
" :param price: A pandas.Series of data. \n",
" :return: (adf test result, half-life, lookback) \n",
" \"\"\"\n",
" # ADF test\n",
" adftest = ts.adfuller(price, maxlag=1)\n",
" # Half-Life\n",
" md = sm.OLS(price.diff(), sm.add_constant(price.shift()), missing='drop')\n",
" mdf = md.fit()\n",
" half_life = -np.log(2)/mdf.params[1]\n",
" lookback = np.round(half_life)\n",
" return adftest, half_life, lookback"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 10
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"adf_hl(usdcad)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 11,
"text": [
"((-2.3466233030145998,\n",
" 0.15737142688333444,\n",
" 1,\n",
" 1221,\n",
" {'5%': -2.8639100200710828,\n",
" '1%': -3.435716995109265,\n",
" '10%': -2.568031835031368},\n",
" -9562.9337394440736),\n",
" 280.64173746164386,\n",
" 281.0)"
]
}
],
"prompt_number": 11
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Why the Result Is Different?\n",
"\n",
"Because the **data is different**. \n",
"Let's try it with the same data used in the Chen's book"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"mat = sio.loadmat('inputData_USDCAD_20120426.mat')\n",
"usdcad = mat['cl'][mat['hhmm']==1659]\n",
"usdcad = pd.Series(usdcad, name='USDCAD')"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 12
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"adf_hl(usdcad)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 13,
"text": [
"((-1.8693961749348129,\n",
" 0.34659219335600439,\n",
" 0,\n",
" 1236,\n",
" {'5%': -2.8638812231195359,\n",
" '1%': -3.4356517256484151,\n",
" '10%': -2.5680164989107781},\n",
" -8190.3235420441761),\n",
" 117.47697667883388,\n",
" 117.0)"
]
}
],
"prompt_number": 13
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## The ADF Result Is Still Different?\n",
"\n",
"When applying adf test, we need to choose the *right* lags. The lag used in Chen's book is fixed as 1, but in out code the lags are choosed automatically under a limit(here I set it to 1), and finally selected 0 in our example."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"_,_,lookback = adf_hl(usdcad)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 19
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"mktValue = -(usdcad - pd.rolling_mean(usdcad, lookback)) / pd.rolling_std(usdcad, lookback)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 20
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# pnl=lag(mktVal, 1).*(y-lag(y, 1))./lag(y, 1);\n",
"pnl = mktValue.shift() * usdcad.diff() / usdcad.shift()"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 21
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"pnl.cumsum().plot()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 22,
"text": [
"<matplotlib.axes.AxesSubplot at 0x91f2a58>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\npe9OAAAAAElFTkSuQmCC\n",
"text": [
"<matplotlib.figure.Figure at 0x924ba90>"
]
}
],
"prompt_number": 22
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment