股票评分系统

本文介绍了一个股票评分系统的子环节——基于收盘价的评分设计。通过Python的科学计算库numpy和scipy,利用最小二乘法求解得分公式中的系数,实现股价到得分的转换。代码示例展示了如何拟合数据并绘制图像,以验证模型的拟合效果。

准备设计一个股票评分系统,

最终目标是,未来的牛股,都已经提前出现在我的评分前列。

其中一个子环节,就是给股价评分。

比如,股价5元得10分,10元得5分,那该如何通过收盘价(Close)计算出得分呢?

得分=Close*x+y

如何求得这个x和y

用最小二乘法就很简单。

下面是代码段。在Python 3.9 x64下调试通过

import numpy as np  # 科学计算库
import scipy as sp  # 在numpy基础上实现的部分算法库
import matplotlib.pyplot as plt  # 绘图库
from scipy.optimize import leastsq  # 引入最小二乘法算法

'''
     设置样本数据,真实数据需要在这里处理
'''
# 样本数据(Xi,Yi),需要转换成数组(列表)形式
Xi = np.array([5, 10])
Yi = np.array([10, 5])
plt.rc('font', family='MicroSoft YaHei', size=15)

plt.rcParams["font.family"] = ["MicroSoft YaHei"]
#plt.rcParams['axes.unicode_minus'] = False

'''
    设定拟合函数和偏差函数
    函数的形状确定过程:
    1.先画样本图像
    2.根据样本图像大致形状确定函数形式(直线、抛物线、正弦余弦等)
'''

##需要拟合的函数func :指定函数的形状


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


'''
    主要部分:附带部分说明
    1.leastsq函数的返回值tuple,第一个元素是求解结果,第二个是求解的代价值(个人理解)
    2.官网的原话(第二个值):Value of the cost function at the solution
    3.实例:Para=>(array([ 0.61349535,  1.79409255]), 3)
    4.返回值元组中第一个值的数量跟需要求解的参数的数量一致
'''

# k,b的初始值,可以任意设定,经过几次试验,发现p0的值会影响cost的值:Para[1]
p0 = [1, 20]

# 把error函数中除了p0以外的参数打包到args中(使用要求)
Para = leastsq(error, p0, args=(Xi, Yi))

# 读取结果
k, b = Para[0]
print("k=", k, "b=", b)
print("cost:"+str(Para[1]))
print("股价的拟合直线为:")
print("y="+str(round(k, 2))+"x+"+str(round(b, 2)))

'''
   绘图,看拟合效果.
   matplotlib默认不支持中文,label设置中文的话需要另行设置
   如果报错,改成英文就可以
'''

# 画样本点
plt.figure(figsize=(8, 6))  # 指定图像比例: 8:6
plt.scatter(Xi, Yi, color="green", label="样本数据", linewidth=2)

# 画拟合直线
x = np.linspace(0, 12, 100)  # 在0-15直接画100个连续点
y = k*x+b  # 函数式
plt.plot(x, y, color="red", label="拟合直线", linewidth=2)
plt.legend(loc='lower right')  # 绘制图例
plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值