利用python数据分析处理进行炒股实战行情
作者:不吃西红柿丶 发布时间:2022-01-30 10:28:29
作为一个新手,你需要以下3个步骤:
1、用户注册 > 2、获取token > 3、调取数据
数据内容:
包含股票、基金、期货、债券、外汇、行业大数据,
同时包括了数字货币行情等区块链数据的全数据品类的金融大数据平台,
为各类金融投资和研究人员提供适用的数据和工具。
1、数据采集
我们进行本地化计算,首先要做的,就是将所需的基础数据采集到本地数据库里
本篇的示例源码采用的数据库是MySQL5.5,数据源是xxx pro接口。
我们现在要取一批特定股票的日线行情
部分代码如下:
# 设置xxxxx pro的token并获取连接
# 公众号:信息技术智库
ts.set_token('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')
pro = ts.pro_api()
# 设定获取日线行情的初始日期和终止日期,其中终止日期设定为昨天。
start_dt = '20100101'
time_temp = datetime.datetime.now() - datetime.timedelta(days=1)
end_dt = time_temp.strftime('%Y%m%d')
# 建立数据库连接,剔除已入库的部分
db = pymysql.connect(host='127.0.0.1', user='root', passwd='admin', db='stock', charset='utf8')
cursor = db.cursor()
# 设定需要获取数据的股票池
stock_pool = ['603912.SH','300666.SZ','300618.SZ','002049.SZ','300672.SZ']
total = len(stock_pool)
# 循环获取单个股票的日线行情
for i in range(len(stock_pool)):
try:
df = pro.daily(ts_code=stock_pool[i], start_date=start_dt, end_date=end_dt)
# 打印进度
print('Seq: ' + str(i+1) + ' of ' + str(total) + ' Code: ' + str(stock_pool[i]))
上述代码的注释部分已将每行代码的功能解释清楚了,实际上数据采集的程序主要设置三个参数:获取行情的初始日期,终止日期,以及股票代码池。
当我们获取数据后,就要往本地数据库进行写入(存储)操作了,
本篇代码用的是SQL语言,需提前在数据库内建好相应的表,表配置和表结构如下:
库名:stock 表名:stock_all
其中 state_dt
和 stock_code
是主键和索引。state_dt
的格式是 ‘yyyy-mm-dd'
(例:'2018-06-11')。
这样的日期格式便于查询,且在MySQL内部能够进行大小比较。
2、数据预处理
无论是量化策略还是单纯的机器学习项目,数据预处理都是非常重要的一环。
以机器学习的视角来看,数据预处理主要包括
数据清洗
排序
缺失值或异常值处理
统计量分析
相关性分析
主成分分析(PCA)
归一化等
本篇所要介绍的数据预处理比较简单
只是将存在本地数据库的日线行情数据整合成一份训练集数据,
以用于后续的机器学习建模和训练。
在介绍具体的示例代码之前,我们需要先思考一个问题,
应用有监督学习的算法对个股进行建模
我们的输入数据有哪些,
我们期望得到的输出数据又是什么?
这个问题的答案因人而异,因策略而异。
这个问题本身是将市场问题转化为数学问题的一个过程。
依赖的是量化宽客自己的知识体系和对市场的理解。
回到正题,本篇示例我们将以最简单的数据进行分析,
我们输入端的数据是个股每日基础行情,输出端数据是股价相较前一交易日的涨跌状态。
简单点说就是,我们向模型输入今天的基础行情,让模型预测明天股价是涨还是跌。
在代码实现方式上,
采用面向对象的思想,
将整个数据预处理过程和结果,封装成一个类,每次创建一个类实例,
就得到了特定条件下的一份训练集。
示例代码如下:
class data_collect(object):
def __init__(self, in_code,start_dt,end_dt):
ans = self.collectDATA(in_code,start_dt,end_dt)
def collectDATA(self,in_code,start_dt,end_dt):
# 建立数据库连接,获取日线基础行情(开盘价,收盘价,最高价,最低价,成交量,成交额)
db = pymysql.connect(host='127.0.0.1', user='root', passwd='admin', db='stock', charset='utf8')
cursor = db.cursor()
sql_done_set = "SELECT * FROM stock_all a where stock_code = '%s' and state_dt >= '%s' and state_dt <= '%s' order by state_dt asc" % (in_code, start_dt, end_dt)
cursor.execute(sql_done_set)
done_set = cursor.fetchall()
if len(done_set) == 0:
raise Exception
self.date_seq = []
self.open_list = []
self.close_list = []
self.high_list = []
self.low_list = []
self.vol_list = []
self.amount_list = []
for i in range(len(done_set)):
self.date_seq.append(done_set[i][0])
self.open_list.append(float(done_set[i][2]))
self.close_list.append(float(done_set[i][3]))
self.high_list.append(float(done_set[i][4]))
self.low_list.append(float(done_set[i][5]))
self.vol_list.append(float(done_set[i][6]))
self.amount_list.append(float(done_set[i][7]))
cursor.close()
db.close()
# 将日线行情整合为训练集(其中self.train是输入集,self.target是输出集,self.test_case是end_dt那天的单条测试输入)
self.data_train = []
self.data_target = []
最终这个类实例化后是要整合出三个数据:
1. self.train
:训练集中的输入端数据,本例中是每日基础行情。
2. self.target
:训练集中的输出数据,本例中相较于前一天股价的涨跌,涨为1,不涨为0。并且在排序上,每条 t 交易日的self.train里的数据对应的是 t+1 天股价的涨跌状态。
3. self.test_case
:在 t 末交易日的基础行情数据,作为输入端,用于模型训练完成后,对第二天的涨跌进行预测。
3、SVM建模
机器学习中有诸多有监督学习算法
SVM是比较常见的一种,本例采用SVM算法进行建模。
关于SVM的理论原理本篇不做详述,以下仅从实践角度进行建模介绍。
先贴一段建模、训练并进行预测的代码大家感受一下:)
model = svm.SVC() # 建模
model.fit(train, target) # 训练
ans2 = model.predict(test_case) # 预测
三行代码,让人想起了把大象装冰箱分几步的冷笑话……
不过这侧面也说明Python在数据挖掘方面的强大之处:简单,方便,好用。
本例用的机器学习框架是scikit-learn
是个非常强大的算法库。
熟悉算法原理的朋友可以查阅官方API文档,可修改模型参数,进一步调优模型;
亦可尝试其他算法比如决策树,逻辑回归,朴素贝叶斯等。
来源:https://blog.csdn.net/weixin_39032019/article/details/119974784


猜你喜欢
- 介绍:细处着手,巧处用功。高手和菜鸟之间的差别就是:高手什么都知道,菜鸟知道一些。电脑小技巧收集最新奇招高招,让你轻松踏上高手之路。 摘 要
- 想必大家都很喜欢用Word打字,用Excel进行计算和规划,用PowerPoint作幻灯片进行展示…,但是这只用到了Office系列产品的很
- 这个坐标轴变名用法,我真服气了,我在网上看大家写的教程,看的头晕,也没看懂他们写xtick到底怎么用的,最后找到官方教程,看了一个例子,ov
- mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出当前程序里是否有很耗费资源的sql语句,这是一个有用的日志。它对于性能的影响不大
- 一、pyqt5中动画的继承关系图二、关于QAbstractAnimation父类的认识1、主要作用继承此类, 实现一些自定义动画所有动画共享
- 本文实例讲述了Python实现针对给定字符串寻找最长非重复子串的方法。分享给大家供大家参考,具体如下:问题:给定一个字符串,寻找其中最长的重
- 目录单例模式反射hasattergetattrsetattr总结单例模式一般情况下,类可以生成任意个实例,而单例模式只生成一个实例我们先用单
- 本文细致的为大家分享了Bootstrap轮播插件简单实例,供大家参考,具体内容如下使用Bootstrap的轮播插件可以向站点添加滑块,内容可
- 前言作为Web开发人员,在 Web浏览器中存储数据以改善用户体验和提升Web应用程序性能是非常常见的。在大多数情况下,可供我们使用就是Loc
- 引言经过函数学习之后我们会发现函数不被调用是不会直接执行的,我们在之前的函数调用之后发现运行的结果都是函数体内print()打印出来的结果,
- 机器视觉从Google的无人驾驶汽车到可以识别假钞的自动售卖机,机器视觉一直都是一个应用广泛且具有深远的影响和雄伟的愿景的领域。这里我们将重
- 本教程详细介绍在用户注册过程中如何去验证他们的email地址。工作流程上来讲,在用户注册一个新账户后会寄送一个确认信。直到用户按指示完成了邮
- 本文实例为大家分享了js实现简易计算器的具体代码,供大家参考,具体内容如下最近,博主闲来无聊,就没事用js写了个简易计算器(博主是搞后端的,
- 前段时间发表了一个删除栏目的随笔,当时实现的功能是删除一条信息,这次来实现一下批量删除栏目。我们需要达到的是这样一个效果:选中批量删除按钮后
- “表情包”是当前社交软件上不可或缺的交流方式,难以用文字表达的意思,发一个“表情包”,对方就能心领神会。下面是小派制作的一个表情包,准确地讲
- 本文实例讲述了python实现简单socket程序在两台电脑之间传输消息的方法。分享给大家供大家参考。具体分析如下:python开发简单so
- 简单的说,GUI编程就是给程序加上图形化界面.python的脚本开发简单,有时候只需几行代码就能实现丰富的功能,而且python本身是跨平台
- 最近需要做一个表格样式,需要组合表头,现在把做出来的分享给大家, 1、效果图2、html代码 <table id="
- MYSQL里的BLOB数据类型BLOB是一个二进制大对象,用来存储可变数量的数据。BLOB类型分为4种:TinyBlob、Blob、Medi
- 本文实例讲述了Python爬虫实现爬取百度百科词条功能。分享给大家供大家参考,具体如下:爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上