博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scripy实现最小二乘法与股票K线回归
阅读量:4211 次
发布时间:2019-05-26

本文共 1858 字,大约阅读时间需要 6 分钟。

python的Scripy提供了丰富的数学工具,python的科学计算包scipy的里面提供了一个函数,可以求出任意的想要拟合的函数的参数。那就是scipy.optimize包里面的leastsq函数。函数原型是:

leastsq(func, x0, args=(), Dfun=None, full_output=0, col_deriv=0, ftol=1.49012e-08, xtol=1.49012e-08, gtol=0.0, maxfev=0, epsfcn=0.0, factor=100, diag=None, warning=True)

一般我们只要指定前三个参数就可以了:

func 是我们自己定义的一个计算误差的函数,

x0 是计算的初始参数值

args 是指定func的其他参数

全部代码如下:

import numpy as npimport matplotlib.pyplot as pltfrom scipy.optimize import leastsq##样本数据(Xi,Yi),需要转换成数组(列表)形式Xi = np.array([160, 165, 158, 172, 159, 176, 160, 162, 171])Yi = np.array([58, 63, 57, 65, 62, 66, 58, 59, 62])##需要拟合的函数func :指定函数的形状 k= 0.42116973935 b= -8.28830260655def func(p, x):    k, b = p    return k * x + b##偏差函数:x,y都是列表:这里的x,y更上面的Xi,Yi中是一一对应的def error(p, x, y):    return func(p, x) - y    # k,b的初始值,可以任意设定,经过几次试验,发现p0的值会影响cost的值:Para[1]p0 = [1, 20]# 把error函数中除了p0以外的参数打包到args中(使用要求)Para = leastsq(error, p0, args=(Xi, Yi))print(Para)# 读取结果k, b = Para[0]print("k=", k, "b=", b)# 画样本点plt.figure(figsize=(8, 6))  ##指定图像比例:8:6plt.scatter(Xi, Yi, color="green", label="source", linewidth=2)# 画拟合直线x = np.linspace(150, 190, 100)  ##在150-190直接画100个连续点y = k * x + b  ##函数式plt.plot(x, y, color="red", label="target", linewidth=2)plt.legend()  # 绘制图例plt.show()

七日最小二乘法对股票K线划线

十四日最小二乘回归

二十八日最下回归划线

主要代码

#按不同步计算期间典型价格的线性回归def everyDayErChengPrice(sourceResult,step):    p0=[1,20]    global erChengPrice    count=len(sourceResult)    if count-step<0:        return    for i in range(count):        temp=[]        myStart=i        myEnd=i+step        if myEnd>count:            break        XI=sourceResult.values[myStart:myEnd][:,0]        YI=sourceResult['tprice'][myStart:myEnd]        Para = leastsq(error, p0, args=(XI, YI))        k, b = Para[0]        temp.append(XI)        temp.append(k * XI + b)        erChengPrice.append(temp)         #逐个计算最近7天的趋势everyDayErChengPrice(result,28)

转载地址:http://ylkmi.baihongyu.com/

你可能感兴趣的文章
StampedLock源码解析
查看>>
ReentrantReadWriteLock源码解析
查看>>
springboot源码解析(四)
查看>>
CompletionService实践
查看>>
YApi在Window上离线安装笔记
查看>>
Mysql学习笔记(十三)查看mysql日志
查看>>
JVM垃圾回收相关知识笔记
查看>>
Curator学习笔记(一)- 读写锁
查看>>
第一次炒股小记
查看>>
《redis in action》ZSet相关命令
查看>>
《redis in action》redis发布订阅
查看>>
《redis in action》sort排序命令
查看>>
《redis in action》redis事务
查看>>
《redis in action》key的自动过期
查看>>
《redis in action》redis持久化简介
查看>>
Oracle RAC Failover 详解
查看>>
批处理 自动修改 IP 地址
查看>>
Oracle RAC LoadBalance
查看>>
v$sql,v$sqlarea,v$sqltext 和 v$sql_plan 说明
查看>>
ORA-31623 When Submitting a Datapump Job [ID 308388.1]
查看>>