前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Scripy实现最小二乘法与股票K线回归

Scripy实现最小二乘法与股票K线回归

作者头像
写一点笔记
发布2020-11-10 13:07:20
1.2K0
发布2020-11-10 13:07:20
举报

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 np
import matplotlib.pyplot as plt
from 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.28830260655
def 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:6
plt.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)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员备忘录 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档