通过多项式来拟合股票收盘价的趋势图
2016-09-10 19:18
218 查看
最近在研究Numpy,其功能非常强大,通过线性代数运算避开了很多的循环,从而使计算效率得到了明显的提高。
接下来,我就简单讲解一下,如何通过numpy构造多项式来拟合股票收盘价的趋势图。(如果有哪位朋友对这篇博文有兴趣,希望能够留下您的宝贵建议,我们一起交流学习。)
手上有一份数据,是创业环保(股票代码:600874)在8月份的交易行情数据:
其中第4个字段为每天的收盘价。
通过numpy中的loadtxt函数来导入载入数据
然后构造一些样本点,再通过numpy中的polyfit函数来构造多项式:
接下来要求出多项式的极值点,也就是导数为0的位置,但是多项式的导数还是多项式,所以之后还要求出导数函数的根。这些都可以通过numpy中的函数实现,灰常牛逼。。。
图中锯齿状的线为真实的趋势图,平滑的线为拟合效果。可以看到效果并不是很好,即使我们已经使用到了6次多项式。
接下来,我们可以先将原趋势图进行平滑化(计算其简单移动平均线),然后再对其拟合,这样效果会好一些。
这次就直接上代码了:
运行以上代码之后,效果图:
可以看到这次拟合其简单移动平均线的效果比较好,当然有兴趣的朋友可以通过改变指数大小来调整拟合效果。
接下来,我就简单讲解一下,如何通过numpy构造多项式来拟合股票收盘价的趋势图。(如果有哪位朋友对这篇博文有兴趣,希望能够留下您的宝贵建议,我们一起交流学习。)
手上有一份数据,是创业环保(股票代码:600874)在8月份的交易行情数据:
其中第4个字段为每天的收盘价。
通过numpy中的loadtxt函数来导入载入数据
c = np.loadtxt('CYHB.csv',delimiter = ',',usecols=(3,),unpack=True) #其中unpack设为True代表使得不同列的数据分开存储。 #当然还有其他参数,比如coverters,表示可以转换指定列的数据类型,这里用不到。
然后构造一些样本点,再通过numpy中的polyfit函数来构造多项式:
t = np.arange(len(c)) poly = np.polyfit(t,c,6) #其中c代表需要拟合的对象,6代表要构造一个六次多项式
接下来要求出多项式的极值点,也就是导数为0的位置,但是多项式的导数还是多项式,所以之后还要求出导数函数的根。这些都可以通过numpy中的函数实现,灰常牛逼。。。
der = np.polyder(poly) result= np.roots(poly,t) print result 结果为: [ 73.66730469 53.83198733 32.72301285 18.03165253 1.63883066] 这样看并不直观,我们通过polyval来复核结果,计算出多项式函数的值并在图中画出来: vals = np.polyval(poly,t) plot(t,c,lw = 1.0) plot(t,vals,lw = 2.0) show()
图中锯齿状的线为真实的趋势图,平滑的线为拟合效果。可以看到效果并不是很好,即使我们已经使用到了6次多项式。
接下来,我们可以先将原趋势图进行平滑化(计算其简单移动平均线),然后再对其拟合,这样效果会好一些。
这次就直接上代码了:
import numpy as np import os os.chdir('/home/sunnyin/Project/Python/ProjectOfSelf/Stock') c = np.loadtxt('CYHB.csv',delimiter = ',',usecols=(3,),unpack=True) N = 10 weights = np.ones(N)/N rwa_sma = np.convolve(weights,c) sma = np.convolve(weights,c)[N-1:-N+1] t = np.arange(N-1,len(c)) poly = np.polyfit(t,sma,6) print "Next value: ",np.polyval(poly,t[-1]+1) der = np.polyder(poly) vals = np.polyval(poly,t) plot(t,c[N-1:],lw = 3.0) plot(t,sma,lw = 2.0) plot(t,vals,lw = 1.0) show() #其中convolve函数是用来计算卷积的,对卷积不懂的可自行维基百科,还带动画哦,清晰易懂。 #权重我设为是一样的 #为什么会取这个区间[N-1:-N+1],是因为在这个区间内,卷积运算中的两个函数是完全重合的,具体讲解如下图所示:
运行以上代码之后,效果图:
可以看到这次拟合其简单移动平均线的效果比较好,当然有兴趣的朋友可以通过改变指数大小来调整拟合效果。
相关文章推荐
- Matlab通过多项式拟合求贝塞尔函数的导函数
- 趋势拟合告警-Apace实时数据库
- 趋势的股票会扭转而进一步上涨
- 最小二乘法多项式拟合
- 今天开始学模式识别与机器学习Pattern Recognition and Machine Learning 书,章节1.1,多项式曲线拟合(Polynomial Curve Fitting)
- 最小二乘法 多项式曲线拟合 原理公式理解 Python 实现
- 最小二乘法多项式曲线拟合原理与实现
- iOS 通过数字拼音快速搜索股票
- 基于时间序列的股票趋势预测模型
- 多项式拟合
- Pytorch 系列教程之一 使用Pytorch拟合多项式(多项式回归)
- jquery通过新浪财经的接口获取股票走势图和股票数据
- 通过java爬虫获取中国股票网的股票列表
- 在R语言中进行局部多项式回归拟合(LOESS)
- 模式识别与机器学习---读书笔记之多项式曲线拟合
- [Python]通过网易财经接口获取股票和指数的历史数据
- Apache Commons Math3学习笔记(2) - 多项式曲线拟合
- python中使用4次多项式回归模型在训练样本中进行拟合
- MATLAB在多项式插值及曲线拟合方面的应用