【量化交易笔记】2.数据本地化存储(CSV)
上一节介绍了数据获到的三种方式,从本节开始,选用baostock工具对后续操作。
本文继续作数据准备,具体介绍数据本地化的CSV
文件格式。
A股数据量比较大,需要进行筛选并分类保存。
基本思想
将采集下来的数据保存本地磁盘(数据库),存放的空间要足够,按分类存放,K线历史数据,本文以日为周期作说明,如果涉及到分钟,可以自行修改。第一次是执行是通创建的方式,后续每日采用追加的方式。为了方便说明,采用沪深300,300支股票数据进行讲解,日期从2020-1-1开始,在实际建模中,这些数据是不够的。
先获取当天交易的股票列表,并按列表遍历所有股票,剔除相关条件,比如ST,科创板,交易日小于200天等条件。
本地化 CSV
股票列表
获取股票列表
lg = bs.login()
# 获取上证50成分股 在实际应用中选择所有列表 bs.query_all_stock()
rs = bs.query_sz50_stocks()
stocks= rs.get_data()['code'].to_list()
bs.logout()
核心代码如下:
import gc
import time
lg = bs.login()
i=0
for code in stocks: print(code) rs = bs.query_history_k_data_plus(code,"date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,isST",start_date='2020-01-01', end_date='2023-3-1', #实际应用开始时间选2000-1-1 或更早frequency="d", adjustflag="1")df=rs.get_data();df.to_csv("./data/daily/{0}.csv".format(code), index=False) i=i+1if i%100==0 :gc.collect()time.sleep(2)
bs.logout()
上述代码,有几个坑需要注意的,由于实际应用时采集所有股票,执行时间比较久,同时电脑的内存的要求,所以清空内存,代码中的gc.collect()
是其中的一个方法,另也要让电脑休息一下,sleep(2) 暂停 2 秒。
有小伙伴,会想为什么不用多进程,其实 baostock 是不支持多进程的。
完整代码如下:
首次执行
在执行之前,需要建立一个 data\daily 的目录。
# 第一次执行
import baostock as bs
import pandas as pd
import gc
import timebs.login()stock_df = bs.query_all_stock().get_data()
# 筛选股票数据,上证和深证股票代码在sh.600000与sz.39900之间
stock_df = stock_df[(stock_df['code'] >= 'sh.600000') & (stock_df['code'] < 'sz.399000')]
bs.logout()
stocks=stock_df['code'].to_list()lg = bs.login()
i=0
for code in stocks: rs = bs.query_history_k_data_plus(code,"date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,isST",start_date='2020-01-01', end_date='2023-3-1', #实际应用开始时间选2000-1-1 或更早frequency="d", adjustflag="1")df=rs.get_data()# 剔除停盘数据if df.shape[0]:df = df[(df['volume'] != '0') & (df['volume'] != '')]# 如果数据为空,则不创建if not df.shape[0]:continue# 删除重复数据df.drop_duplicates(['date'], inplace=True)# 日线数据少于250,则不创建if df.shape[0] < 250:continue# 将数值数据转为float型,便于后续处理convert_list = ['open', 'high', 'low', 'close', 'preclose', 'volume', 'amount', 'turn', 'pctChg']df[convert_list] = df[convert_list].astype(float)df.to_csv("./data/daily/{0}.csv".format(code), index=False) i=i+1if i%100==0 :gc.collect()print('已完成',i)time.sleep(2)
bs.logout()
日常执行
平时每个交易日,在17:30之后执行一次。(baostock 一般情况在17:30 时完成当天历史的数据更新,分时周期要到22:00左右)
# 日常执行
import baostock as bs
import pandas as pd
import gc
import timetodate=datetime.date.today().strftime('%Y-%m-%d')bs.login()
stock_df = bs.query_all_stock().get_data()# 筛选股票数据,上证和深证股票代码在sh.600000与sz.39900之间
stock_df = stock_df[(stock_df['code'] >= 'sh.600000') & (stock_df['code'] < 'sz.399000')]
bs.logout()
stocks=stock_df['code'].to_list()lg = bs.login()
i=0
for code in stocks: rs = bs.query_history_k_data_plus(code,"date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,isST",start_date=todate, end_date=todate, #选择当天frequency="d", adjustflag="1")df=rs.get_data()# 剔除停盘数据if df.shape[0]:df = df[(df['volume'] != '0') & (df['volume'] != '')]# 如果数据为空,则不创建if not df.shape[0]:continue# 将数值数据转为float型,便于后续处理convert_list = ['open', 'high', 'low', 'close', 'preclose', 'volume', 'amount', 'turn', 'pctChg']df[convert_list] = df[convert_list].astype(float)df.to_csv("./data/daily/{0}.csv".format(code), mode='a', index=False, header=False) i=i+1if i%500==0 :gc.collect()print('已完成',i)time.sleep(2)
bs.logout()
不难发现 首次执行和日常执行 有大量共同的地方,大伙可以把他打包成函数,方便调用。
至此完整的流程就到这里,上述代码存在一些小问题,需要优化,日常执行时不小心多执行一次,或有一天忘记执行了,这会导致多添加了数据,或少添加数据,这里向大家提供一下思路,在执行日常操作时,执行bs.query_history_k_data_plus() 如果没有数据,则说明当天不是交易日,日期向前一天;在添加数据时,先检查数据表(csv) 的最后一次记录的日期与 采集到的数据是不是同一天,如果是同一天就不现追加。
总结
通过本地化的数据表形式保存数据,这样大大方便以后数据的操作。为了更高效的操作数据,下一节介绍数据库方式存放以上数据,基本的思路是一样的,只是存储方式不一样而已。
【量化交易笔记】2.数据本地化存储(CSV)相关推荐
- 【量化交易】如何搭建本地化量化投研软件系统
以下内容来自知乎链接: https://zhuanlan.zhihu.com/p/571485296 作者:海滨 已获得作者同意转载. 这篇文章希望能让大家了解到标准的量化交易软件有那些及各自特点, ...
- 机器学习与量化交易∙笔记(3)
数据存储方式 .csv NoSQL 存储文本 SQL 跟时间序列有关的金融数据 数据格式 交易所信息:上交所.深交所.标普 数据来源 Ticker/sumbol 价格 企业行为(stock split ...
- 量化交易之股票数据的获取——同花顺软件 1
前言 数据是进行量化交易的基础和关键,目前国内做量化产品的金融机构大部分是从券商获取高频实时行情数据的,另外很多金融网站也提供了数据接口,可以调用接口方式获取,也可以用爬虫的方式获取.文本讲述一种更经 ...
- 【Python量化交易笔记】股票数据获取 (一)
获取股票数据主要是靠网页爬虫或者现成的库. 关于股票数据获取,python的接口有非常多,教程也有很多. 最后我选择了使用tushare和baostock.由于tushare升级之后有积分限制,很多数 ...
- 4天掌握python量化交易_【量化】4天学会python机器学习与量化交易-笔记1(p6~p10)
文章目录 p6 获取板块.交易行情数据 p7 获取财务数据与定时器 p8 投资组合与交易 p9 策略的收益指标 p10 策略风险指标 视频:4天学会python机器学习与量化交易 平台:米筐 4天学会 ...
- 【量化交易笔记】1.数据来源
简介 数据是机器学习的核心,garbage in garbage out,而金融数据是量化的基础,对数据提出了更高的要求.不仅是数据准确高速(稳定),而且要求数据丰富全面. 金融数据 考虑到金融数据非 ...
- 【量化交易笔记】6.布林带的实现
上一讲介绍A股移动平均值(MA)指标,本讲我们来讲解布林布的实现. 布林线(BOLL)技术指标简介 布林线(Bollinger Bands,BOLL)又称布林带,是约翰·布林(John Bolling ...
- python量化交易笔记---13.描述性统计
统计分为描述统计和推断统计,我们在这一章里,主要讲解描述性统计.我们用到的数据如下所示: images/c13f004.png 上图中,gsyh代表工商银行收益率,pfyh代表浦发银行收益率,zglt ...
- 《零起点,python大数据与量化交易》
<零起点,python大数据与量化交易>,这应该是国内第一部,关于python量化交易的书籍. 有出版社约稿,写本量化交易与大数据的书籍,因为好几年没写书了,再加上近期"前海智库 ...
最新文章
- chrome经常崩溃解决过程
- LFS-Git命令行向Github上传大文件
- exfat分配单元大小选多少_安防监控摄像机视角大小和镜头毫米数的基础知识!...
- IE下var丢失造成的错误
- java重写的代码_java tostring方法重写代码示例
- 计算机系统结构自学试卷,全国2004年4月高等教育自学考试计算机系统结构试题...
- L2-028 秀恩爱分得快(25 分)
- Unity 用ml-agents机器学习造个游戏AI吧(1)(Windows环境配置)
- rust狗阳的师傅是谁_杨幂迪丽热巴新剧同天官宣,你更期待谁呢?
- 多屏互动之Duet Display和Air Display
- 将FTP空间通过网络映射到本地电脑上
- 【Linux 内核】Linux 内核源码根目录下的文件 ( .clang-format | COPYING | CREDITS | Kbuild | Kconfig | MAINTAINERS )
- 师傅带徒弟学:Python游戏开发引擎cocos2d-python-关东升-专题视频课程
- 旧电脑改路由器加文件服务器,如何将旧电脑改成软路由器 以winxp系统为例
- Kafka2.6版本权限认证
- hackbar小插件
- PCB正片和负片有什么区别
- Codeforces Round #834 (Div. 3) E. The Humanoid
- 【02】2022.11最新超详细Vuforia图片识别教程
- 达梦数据库冷备份与还原