{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "##内容索引\n", "1. 相关性分析 --- cov函数、diagonal函数、trace函数、corrcoef函数\n", "2. 多项式拟合 --- polyfit函数、polyval函数、roots函数、polyder函数\n", "3. 计算净额成交量 --- sign函数、piecewise函数\n", "4. 模拟交易过程 --- vectorize函数、round函数\n", "5. 数据平滑 --- hanning函数" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np\n", "from matplotlib.pyplot import plot\n", "from matplotlib.pyplot import show" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##1. 股票相关性分析\n", "本例子中, 我们使用2个示例数据集提供收盘价数据,第一家公司是BHP Billiton(BHP),其主要业务是石油、金属和钻石开采;第二家公司是Vale(VALE),也是一家金属开采业公司,他们有部分业务是重合的。我们来分析一下他们的股票相关性。" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# 首先读入两只股票的收盘价,并计算收益率\n", "bhp_cp = np.loadtxt('BHP.csv', delimiter=',', usecols=(6,), unpack=True)\n", "vale_cp = np.loadtxt('VALE.csv', delimiter=',', usecols=(6,), unpack=True)\n", "bhp_returns = np.diff(bhp_cp) / bhp_cp[:-1]\n", "vale_returns = np.diff(vale_cp) / vale_cp[:-1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "协方差描述的是两个变量共同变化的趋势,其实就是归一化前的相关系数。\n", "使用cov函数计算**股票收益率的协方差矩阵**" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Covariance:\n", "[[ 0.00028179 0.00019766]\n", " [ 0.00019766 0.00030123]]\n" ] } ], "source": [ "covariance = np.cov(bhp_returns, vale_returns)\n", "print 'Covariance:\\n', covariance" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Covariance diagonal:\n", "[ 0.00028179 0.00030123]\n", "Covariance trace:\n", "0.00058302354992\n", "Correlation coefficient:\n", "[[ 1.00173366 0.70264666]\n", " [ 0.70264666 1.0708476 ]]\n" ] } ], "source": [ "# 查看协方差矩阵对角线的元素\n", "print 'Covariance diagonal:\\n', covariance.diagonal()\n", "# 计算矩阵的迹,即对角线之和\n", "print 'Covariance trace:\\n', covariance.trace()\n", "# 计算相关系数,相关系数是协方差除以各自标准差的乘积\n", "print 'Correlation coefficient:\\n', covariance / (bhp_returns.std() * vale_returns.std())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "用相关系数来度量两只股票的相关程度。相关系数的取值范围在-1到1之间,一组数据域自身的相关系数为1.使用corrcoef函数计算相关系数。" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Correlation coefficient:\n", "[[ 1. 0.67841747]\n", " [ 0.67841747 1. ]]\n" ] } ], "source": [ "# 使用corrcoef计算更加精确\n", "print 'Correlation coefficient:\\n', np.corrcoef(bhp_returns, vale_returns)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "相关系数矩阵关于对角线对称,BHP与VALE的相关系数等于VALE和BHP的相关系数。看起来0.68的相关系数表示他们的相关程度似乎不是很强。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "###判断两只股票的价格走势是否同步\n", "如果它们的差值偏离了平均差值2倍于标准差的距离,则认为他们走势不同步" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Out of sync : False\n" ] } ], "source": [ "difference = bhp_cp - vale_cp\n", "avg = np.mean(difference)\n", "dev = np.std(difference)\n", "# 检查最后一次收盘价是否在同步状态\n", "print \"Out of sync : \", np.abs(difference[-1] - avg) > 2*dev" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "这说明,最后一次收盘价不再同步状态,我们暂时不能进行交易" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 绘制收益率曲线\n", "t = np.arange(len(bhp_returns))\n", "plot(t, bhp_returns, lw=1)\n", "plot(t, vale_returns, lw=2)\n", "show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##2. 多项式拟合\n", "NumPy中的plotfit函数可以用多项式去拟合一系列数据点,无论这些数据点是否来自连续函数都适用。" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Polynomial fit\n", "[ 1.11655581e-03 -5.28581762e-02 5.80684638e-01 5.79791202e+01]\n" ] } ], "source": [ "# 用三次多项式去拟合两只股票收盘价的差价\n", "t = np.arange(len(bhp_cp))\n", "poly = np.polyfit(t, bhp_cp-vale_cp, 3)\n", "print \"Polynomial fit\\n\", poly" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Next value: 57.9743076081\n" ] } ], "source": [ "# 用刚才得到的多项式对象,推断下一个值\n", "print \"Next value: \", np.polyval(poly, t[-1]+1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "理想情况下,BHP和VALE股票收盘价的差价越小越好。在极限情况下,差值可以在某个点为0。用roots函数找到拟合多项式函数在什么时候达到0。" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Roots: [ 35.48624287+30.62717062j 35.48624287-30.62717062j -23.63210575 +0.j ]\n" ] } ], "source": [ "print \"Roots: \", np.roots(poly)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "###求极值" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Dervative:\n", "[ 0.00334967 -0.10571635 0.58068464]\n" ] } ], "source": [ "# 极值位于导数为0的点\n", "der = np.polyder(poly)\n", "print \"Dervative:\\n\", der\n", "# 得到多项式导函数的系数" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Extremas: [ 24.47820054 7.08205278]\n" ] } ], "source": [ "# 求出导函数的根,即找出原多项式函数的极值点\n", "print \"Extremas: \", np.roots(der)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Maximum index: 7\n", "Minimum index: 24\n" ] } ], "source": [ "# 通过argmax和argmin函数找到最大最小值点来检查结果\n", "vals = np.polyval(poly, t)\n", "print \"Maximum index: \", np.argmax(vals)\n", "print \"Minimum index: \", np.argmin(vals)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "###绘制拟合曲线" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nLhJ5CCG0uf8Pf3+efBJDiRUAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot(t, bhp_cp-vale_cp)\n", "plot(t, vals)\n", "show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##3. 计算净额成交量\n", "成交量表示价格波动的大小,净额成交量(On-Balance Volume)是由当日收盘价、前一天的收盘价以及当日成交量计算得出的。\n", "\n", "以前一日为基期计算当日的OBV的值(可认为基期的OBV的值为0)。若当日收盘价高于前一日收盘价,则本日OBV等于基期OBV加上当日成交量,否则减去当日成交量。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**我们需要在成交量前面乘上一个有收盘价变化决定的正负号。**" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Change: [ 1.92 -1.08 -1.26 0.63 -1.54 -0.28 0.25 -0.6 2.15 0.69 -1.33 1.16\n", " 1.59 -0.26 -1.29 -0.13 -2.12 -3.91 1.28 -0.57 -2.07 -2.07 2.5 1.18\n", " 1.03 -0.88 1.31 1.24 -0.59]\n" ] } ], "source": [ "cp, volume = np.loadtxt('BHP.csv', delimiter=',', usecols=(6,7), unpack=True)\n", "change = np.diff(cp)\n", "print \"Change:\", change" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "使用NumPy的sign函数返回每个元素的正负号。" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Signs:\n", "[ 1. -1. -1. 1. -1. -1. 1. -1. 1. 1. -1. 1. 1. -1. -1. -1. -1. -1.\n", " 1. -1. -1. -1. 1. 1. 1. -1. 1. 1. -1.]\n" ] } ], "source": [ "signs = np.sign(change)\n", "print \"Signs:\\n\", signs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "使用Numpy的piecewise函数获取数组元素的正负。piecewise(分段),可以根据给定取值,得到分段。" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Pieces:\n", "[ 1. -1. -1. 1. -1. -1. 1. -1. 1. 1. -1. 1. 1. -1. -1. -1. -1. -1.\n", " 1. -1. -1. -1. 1. 1. 1. -1. 1. 1. -1.]\n" ] } ], "source": [ "pieces = np.piecewise(change, [change<0, change>0], [-1,1])\n", "print \"Pieces:\\n\", pieces" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Arrays equal? True\n" ] } ], "source": [ "# 检查两次输出是否一致\n", "print \"Arrays equal?\", np.array_equal(signs, pieces)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "On balance volume: \n", "[ 2620800. -2461300. -3270900. 2650200. -4667300. -5359800. 7768400.\n", " -4799100. 3448300. 4719800. -3898900. 3727700. 3379400. -2463900.\n", " -3590900. -3805000. -3271700. -5507800. 2996800. -3434800. -5008300.\n", " -7809799. 3947100. 3809700. 3098200. -3500200. 4285600. 3918800.\n", " -3632200.]\n" ] } ], "source": [ "# OBV值的计算依赖于前一日的收盘价\n", "print \"On balance volume: \\n\", volume[1:]*signs" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "##4. 模拟交易过程" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "使用vectorize函数可以减少你的程序中使用循环的次数,NumPy中的vectorize函数相当于Python中的map函数。我们用它来计算单个交易日的利润。" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# 读入数据\n", "# op is opening price,hp is the highest price\n", "# lp is the lowest price, cp is closing price\n", "op, hp, lp, cp = np.loadtxt('BHP.csv', delimiter=',', usecols=(3,4,5,6), unpack=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "我们尝试以比开盘价稍低一点的价格买入股票。如果这个价格不在当日的股价范围内,则尝试买入失败,没有获利,也没有亏损,我们返回0。否则,我们将以当日收盘价卖出,所获得的利润即买入卖出的差价。" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def calc_profit(op, high, low, close):\n", " # 以开盘价买入,这里不考虑买入多少股\n", " buy = op\n", " \n", " if low < buy < high:\n", " return (close-buy) / buy\n", " else:\n", " return 0" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Profits:\n", "[ 0.00655139 0.01131437 0.00116464 0.00679832 0.01381543 0.00054148\n", " -0.01105862 0.00467747 -0.00714131 0.00459991 -0.00221496 -0.01872699\n", " 0.00575141 0.0012513 -0.00374532 -0.02113771 0.00661545 -0.00774693\n", " -0.00775281 0.01529918 0.00964047 0.02802081 -0.01656818 0.00068713\n", " -0.01083436 -0.00599135 -0.00882682 0.005024 0.00440238 0.00276488]\n" ] } ], "source": [ "# 矢量化一个函数,这样可以避免使用循环\n", "func = np.vectorize(calc_profit)\n", "profits = func(op, hp, lp, cp)\n", "print 'Profits:\\n', profits" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of trades:\n", "30 100.0 %\n", "Average profit/loss % : 0.02\n" ] } ], "source": [ "# 我们选择非零利润的交易日并计算平均值\n", "real_trades = profits[profits != 0]\n", "print 'Number of trades:\\n', len(real_trades), round(100.0 * len(real_trades)/len(cp), 2),\"%\"\n", "print \"Average profit/loss % :\", round(np.mean(real_trades) * 100, 2)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of winning trades 18 60.0 %\n", "Average profit % 0.72\n" ] } ], "source": [ "# 选择正盈利的交易日并计算平均利润\n", "winning_trades = profits[profits > 0]\n", "print \"Number of winning trades\", len(winning_trades), round(100.0*len(winning_trades)/len(cp),2),\"%\"\n", "print \"Average profit %\", round(np.mean(winning_trades) *100, 2)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of winning trades 12 40.0 %\n", "Average profit % -1.01\n" ] } ], "source": [ "# 选择负盈利的交易日并计算平均损失\n", "losing_trades = profits[profits < 0]\n", "print \"Number of winning trades\", len(losing_trades), round(100.0*len(losing_trades)/len(cp),2),\"%\"\n", "print \"Average profit %\", round(np.mean(losing_trades) *100, 2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##5. 数据平滑\n", "噪声数据往往很难处理,我们需要对其进行平滑处理。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "hanning函数式一个加权余弦的窗函数,我们使用hanning函数平滑股票收益率的数组。\n", "\n", "离散卷积运算函数convolve的文档[convolve函数文档](http://docs.scipy.org/doc/numpy/reference/generated/numpy.convolve.html#numpy.convolve)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Weights:\n", "[ 0. 0.1882551 0.61126047 0.95048443 0.95048443 0.61126047\n", " 0.1882551 0. ]\n" ] } ], "source": [ "# 调用hanning函数计算权重,生成一个长度为N的窗\n", "# 这里N为8\n", "N = 8\n", "weights = np.hanning(N)\n", "print \"Weights:\\n\", weights" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# 首先读入两只股票的收盘价,并计算收益率\n", "bhp_cp = np.loadtxt('BHP.csv', delimiter=',', usecols=(6,), unpack=True)\n", "vale_cp = np.loadtxt('VALE.csv', delimiter=',', usecols=(6,), unpack=True)\n", "bhp_returns = np.diff(bhp_cp) / bhp_cp[:-1]\n", "vale_returns = np.diff(vale_cp) / vale_cp[:-1]\n", "\n", "# convolve函数,离散线性卷积运算\n", "smooth_bhp = np.convolve(weights/weights.sum(), bhp_returns)[N-1 : -N+1]\n", "smooth_vale = np.convolve(weights/weights.sum(), vale_returns)[N-1 : -N+1]" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from matplotlib.pyplot import legend\n", "\n", "t = np.arange(N-1, len(bhp_returns))\n", "plot(t, bhp_returns[N-1:], lw=1.0, label='bhp returns')\n", "plot(t, smooth_bhp, lw=2.0, label='smooth bhp')\n", "plot(t, vale_returns[N-1:], lw=1.0, label='vale returns')\n", "plot(t, smooth_vale, lw=2.0, label='smooth vale')\n", "legend(loc='best')\n", "show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "图中折线有交叉,这些**交叉点可能是股价趋势的转折点**,至少可以表明BHP和VALE之间的股价关系发生了变化。这些转折点可能会经常出现,我们可以利用他们预测未来的股价走势。" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "# 使用多项式拟合平滑后的数据\n", "K = 5\n", "t = np.arange(N-1, len(bhp_returns))\n", "poly_bhp = np.polyfit(t, smooth_bhp, K)\n", "poly_vale = np.polyfit(t, smooth_vale, K)\n", "\n", "fig = plt.figure()\n", "ax1 = fig.add_subplot(211)\n", "ax1.plot(t, smooth_bhp, label=\"smooth bhp\")\n", "poly_bhp_value = np.polyval(poly_bhp, t)\n", "ax1.plot(t, poly_bhp_value, label='poly bhp')\n", "plt.legend()\n", "\n", "ax2 = fig.add_subplot(212)\n", "ax2.plot(t, smooth_vale, label=\"smooth vale\")\n", "poly_vale_value = np.polyval(poly_vale, t)\n", "ax2.plot(t, poly_vale_value, label='poly vale')\n", "plt.legend()\n", "show()" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Intersection points: [ 28.77520493+0.j 25.42365070+0.j 18.03997643+0.j\n", " 7.88070929+2.42429295j 7.88070929-2.42429295j]\n" ] } ], "source": [ "# 得到交叉点的x坐标\n", "# 通过求多项式函数差,再求根\n", "poly_sub = np.polysub(poly_bhp, poly_vale)\n", "xpoints = np.roots(poly_sub)\n", "print \"Intersection points:\", xpoints" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Real number? [ True True True False False]\n", "Real intersection points: [ 28.77520493 25.4236507 18.03997643 0. 0. ]\n" ] } ], "source": [ "# 判断是否为实数\n", "# select选出实数\n", "reals = np.isreal(xpoints)\n", "print \"Real number?\",reals\n", "\n", "xpoints = np.select([reals], [xpoints])\n", "xpoints = xpoints.real\n", "print \"Real intersection points:\", xpoints" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sans 0s [ 28.77520493 25.4236507 18.03997643]\n" ] } ], "source": [ "# 去除0元素\n", "# trim_zeros函数可以去掉一维数组中开头和末尾为0的元素\n", "print \"Sans 0s\", np.trim_zeros(xpoints)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "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.5" } }, "nbformat": 4, "nbformat_minor": 0 }