自学量化投资之旅 - 建立股票数据库 (拓展)
今天在学习策略开发的时候发现一个问题,下面这张是获取的股票数据
可以看出日期是按照降序进行排列的,这对后期策略的开发不是很友好。当然如果在读取数据后再进行升序的处理也是可以的哈,不过我个人是比较倾向于,在保存数据的时候就将这一步解决。另外这次顺便提升一下股票更新的性能。
那么先来解决第一步,其实很简单对获取的数据进行升序排列就行,pandas的sort_values可以完美实现这一功能。
df = pd.read_csv(r'G:\PycharmProjects\DeltaTrader\data\data_tushare\600515.SH.csv',index_col=0)
df.sort_values(['trade_date'], inplace=True)
print(df)
这里我是直接读取文件进行降序,那么接下来结合multiprocessing模块实现多线程下载股票,并按日期将进行降序排列。
另外在实际操作的过程中发现,线程池创建的任务不能是内嵌函数,所有得单独定义获取并保存股票数据的函数。
def update_single_stock(code, init_db=False):'''更新单只股票的数据:param code: :param init_db: :return: '''# 是否初始化股票数据if init_db:df = ts.pro_bar(ts_code=code, asset='E', start_date='20050101')# 按时间降序排列df.sort_values(['trade_date'], inplace=True)df.to_csv(r'G:\PycharmProjects\DeltaTrader\data\data_tushare\{}.csv'.format(code), index=False)else:df = ts.pro_bar(ts_code=code, asset='E', start_date=start_date)df.sort_values(['trade_date'], inplace=True) # 按时间进行降序排列df.to_csv(r'G:\PycharmProjects\DeltaTrader\data\data_tushare\{}.csv'.format(code), index=False,header=False,mode='a')
然后将之前用于股票下载的函数中创建线程池即可
def update_all_stock():'''按照配置文件最后更新日期最近更新,如果不存在就初始化所有股票:return:'''# 获取本地股票列表update_stock_list()stock_list = pd.read_csv(r'G:\PycharmProjects\DeltaTrader\data\finance\{}_tss.csv'.format(datetime.date.today()),index_col=0, usecols=['ts_code'])# 创建线程池 并生成股票代码迭代器pool = Pool(4)code_list = (code for code in stock_list.index)try:# 读取配置文件with open(r'G:\PycharmProjects\DeltaTrader\data\data_tushare\更新日期.txt', 'rb') as file:# 获取更新记录data = file.read()record = pickle.loads(data)date = record['更新日期']# 如果配置文件不存在初始化股票数据except Exception as e:print(e)# 生成配置文件file = open(r'G:\PycharmProjects\DeltaTrader\data\data_tushare\更新日期.txt', 'wb+')date = {'更新日期': str(datetime.date.today())}record = pickle.dumps(date)file.write(record)file.close()# 初始化股票列表print('----start----')t_start = time.time()for code in code_list:pool.apply_async(update_single_stock, (code, True))# 关闭进程池pool.close()pool.join()return print('----end----')# 判断是否不是最新日期end_date = datetime.datetime.strptime(date, '%Y-%m-%d')if not(end_date.date() == datetime.datetime.today().date()):print('开始更新股票数据至最新日期')# 更新至最新日期start_date = end_date + datetime.timedelta(1)start_date = str(start_date.date())print('----start----')t_start = time.time()for code in code_list:pool.apply_async(update_single_stock, (code, True, start_date))# 关闭进程池pool.close()pool.join()print('----end----')# 记录更新日期with open(r'G:\PycharmProjects\DeltaTrader\data\data_tushare\更新日期.txt', 'wb') as file:date = {'更新日期': start_date}record = pickle.dumps(date)file.write(record)print('完成股票数据更新')
这里我创建了4个进程,相比之前效率提升了100%以上。
另外需要提醒的是,tushare的每日行情好像是收盘后一个小时更新,建议更新本地数据时,在当日晚些时候进行更新。
自学量化投资之旅 - 建立股票数据库 (拓展)相关推荐
- 自学量化投资之旅 - 建立股票数据库 (下)
路过的大兄弟好,我是阿尔法电波脑.昨天我已经把要获取的股票代码,以及上市退市日期的数据整理到本地了.今天我将根据这份列表,批量获取股票数据,建立自己的本地股票数据库.那正式开始吧! 功能:根据股票列表 ...
- 自学量化投资之旅-计算股票的复权价
在学习策略的开发之前,有一个必须要做的事,那就是对股票价格进行复权.tushare有提供复权数据的,不过鉴于很多软件对于复权处理都存在一些问题,(不知道tushare是否和其他的软件不一样,欢迎指正) ...
- 宅家自学量化投资 - 建立股票数据库 (上)
路过的大兄弟好,我是阿尔法电波脑,现在是宅家学习量化投资的73天. 最近这一个月有点松懈了哈,这个月开始想改变一下之前闭门造车式的学习,用通俗易懂的话在B站.CSDN上分享自己的所学所思所想,并用采用 ...
- 量化投资学习-5:股票与美女5-美女的容貌:K线图
股票的K线图,就是股票的价格走势图. 股票的价格走势图,就像美女的容貌,有漂亮的,也有平常的,也有丑的. 漂亮的容貌,有些是天生丽质,有些是靠化妆化出来的. 股票漂亮的K线图也一样, 1. 有些是优质 ...
- 量化投资学习-1:股票与美女1-生命周期
股票的生命周期与人的生命周期惊人的相似 看懂这幅图,掌握股市内在规律和特征 一切尽在图中 儿童期=>青春少女期=>恋爱期=>少妇期=>熟女期=>更年期=>老妇期=& ...
- 量化投资学习-4:股票与美女4-美女自身赚钱的能力
美女分几种. 一种是花瓶式的美女,完全靠的是美貌,靠美貌而吸引了众人的注意力,完全把选择权交个了众人,靠众人的喜欢才有价值,当美貌褪去,众人也就跟着退去. 另一种集才华与美貌于一身的美女,不光鲜外在的 ...
- 量化投资学习-3:股票与美女3-美女的股东婆家和娘家
股票的价值,除了股票自身的走势和价格,还需要关注股票的股东, 股东决定了股票长期向好的程度能走多远,能涨多高,能走多长时间. 它们就像美女的婆家和娘家以及他们的亲戚, 有实例雄厚的婆家和娘家与亲戚,与 ...
- 量化投资只能通过股票行情数据接口获得实时数据吗?
我们在做量化交易的时候,都需要用到大量的行情数据,但是问题来了,这些数据要怎样获得呢? 通常来讲获取实时数据的方法有两种,一个是通过股票行情数据接口获得,另一个是通过网络上的一些开放平台获取. 我们先 ...
- 量化投资学习-7:图解股市的基本面、技术面、市场环境面的关系
导读: 用图解的方式,展现股市的基本面.技术面.市场环境面的关系. 一.股市的三面:基本面.技术面.市场环境面 基本面:是参与对象的"里子",是内在的质地.内涵.后台等,根据其内在 ...
最新文章
- 在(CListView)列表视图中添加右键菜单的方法
- 智能车竞赛技术报告 | 智能车视觉 - 青岛科技大学 - 飞猪
- Redis 哨兵Sentinel 文档
- 五十一、创建第一个Maven项目和pom.xml 详解
- 使用python matplotlib画图
- python高阶函数、map reduce 自己如何去定义_小猿圈python之高阶函数lambda、map和reduce用法...
- 删除链表的中间节点 Java实现_【链表问题】删除单链表的中间节点
- 设计模式之组合模式(Composite Pattern)
- pandas—总结(2) 数据读写 (更新中)
- 基于 AVPlayer 自定义播放器
- 简易php access文章管理系统,PHP+ACCESS 文章管理程序代码
- UVa10006 Carmichael Numbers【素数判定+快速模幂】
- 北斗三号频点_定位精度超越GPS!紫光展锐推出支持北斗三代的四合一芯片
- java json接口加密解密
- 离散数学及其应用 算法
- 漂白android软件,原本图片漂白软件
- 入门机器学习(西瓜书+南瓜书)神经网络总结(python代码实现)
- 瑞利商(Rayleigh quotient)与广义瑞利商(genralized Rayleigh quotient)
- Flutter中的ISOlate
- 读论文Beyond Part Models Person Retrieval with Refined Part Pooling