今天在学习策略开发的时候发现一个问题,下面这张是获取的股票数据

可以看出日期是按照降序进行排列的,这对后期策略的开发不是很友好。当然如果在读取数据后再进行升序的处理也是可以的哈,不过我个人是比较倾向于,在保存数据的时候就将这一步解决。另外这次顺便提升一下股票更新的性能。

那么先来解决第一步,其实很简单对获取的数据进行升序排列就行,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的每日行情好像是收盘后一个小时更新,建议更新本地数据时,在当日晚些时候进行更新。

自学量化投资之旅 - 建立股票数据库 (拓展)相关推荐

  1. 自学量化投资之旅 - 建立股票数据库 (下)

    路过的大兄弟好,我是阿尔法电波脑.昨天我已经把要获取的股票代码,以及上市退市日期的数据整理到本地了.今天我将根据这份列表,批量获取股票数据,建立自己的本地股票数据库.那正式开始吧! 功能:根据股票列表 ...

  2. 自学量化投资之旅-计算股票的复权价

    在学习策略的开发之前,有一个必须要做的事,那就是对股票价格进行复权.tushare有提供复权数据的,不过鉴于很多软件对于复权处理都存在一些问题,(不知道tushare是否和其他的软件不一样,欢迎指正) ...

  3. 宅家自学量化投资 - 建立股票数据库 (上)

    路过的大兄弟好,我是阿尔法电波脑,现在是宅家学习量化投资的73天. 最近这一个月有点松懈了哈,这个月开始想改变一下之前闭门造车式的学习,用通俗易懂的话在B站.CSDN上分享自己的所学所思所想,并用采用 ...

  4. 量化投资学习-5:股票与美女5-美女的容貌:K线图

    股票的K线图,就是股票的价格走势图. 股票的价格走势图,就像美女的容貌,有漂亮的,也有平常的,也有丑的. 漂亮的容貌,有些是天生丽质,有些是靠化妆化出来的. 股票漂亮的K线图也一样, 1. 有些是优质 ...

  5. 量化投资学习-1:股票与美女1-生命周期

    股票的生命周期与人的生命周期惊人的相似 看懂这幅图,掌握股市内在规律和特征 一切尽在图中 儿童期=>青春少女期=>恋爱期=>少妇期=>熟女期=>更年期=>老妇期=& ...

  6. 量化投资学习-4:股票与美女4-美女自身赚钱的能力

    美女分几种. 一种是花瓶式的美女,完全靠的是美貌,靠美貌而吸引了众人的注意力,完全把选择权交个了众人,靠众人的喜欢才有价值,当美貌褪去,众人也就跟着退去. 另一种集才华与美貌于一身的美女,不光鲜外在的 ...

  7. 量化投资学习-3:股票与美女3-美女的股东婆家和娘家

    股票的价值,除了股票自身的走势和价格,还需要关注股票的股东, 股东决定了股票长期向好的程度能走多远,能涨多高,能走多长时间. 它们就像美女的婆家和娘家以及他们的亲戚, 有实例雄厚的婆家和娘家与亲戚,与 ...

  8. 量化投资只能通过股票行情数据接口获得实时数据吗?

    我们在做量化交易的时候,都需要用到大量的行情数据,但是问题来了,这些数据要怎样获得呢? 通常来讲获取实时数据的方法有两种,一个是通过股票行情数据接口获得,另一个是通过网络上的一些开放平台获取. 我们先 ...

  9. 量化投资学习-7:图解股市的基本面、技术面、市场环境面的关系

    导读: 用图解的方式,展现股市的基本面.技术面.市场环境面的关系. 一.股市的三面:基本面.技术面.市场环境面 基本面:是参与对象的"里子",是内在的质地.内涵.后台等,根据其内在 ...

最新文章

  1. 在(CListView)列表视图中添加右键菜单的方法
  2. 智能车竞赛技术报告 | 智能车视觉 - 青岛科技大学 - 飞猪
  3. Redis 哨兵Sentinel 文档
  4. 五十一、创建第一个Maven项目和pom.xml 详解
  5. 使用python matplotlib画图
  6. python高阶函数、map reduce 自己如何去定义_小猿圈python之高阶函数lambda、map和reduce用法...
  7. 删除链表的中间节点 Java实现_【链表问题】删除单链表的中间节点
  8. 设计模式之组合模式(Composite Pattern)
  9. pandas—总结(2) 数据读写 (更新中)
  10. 基于 AVPlayer 自定义播放器
  11. 简易php access文章管理系统,PHP+ACCESS 文章管理程序代码
  12. UVa10006 Carmichael Numbers【素数判定+快速模幂】
  13. 北斗三号频点_定位精度超越GPS!紫光展锐推出支持北斗三代的四合一芯片
  14. java json接口加密解密
  15. 离散数学及其应用 算法
  16. 漂白android软件,原本图片漂白软件
  17. 入门机器学习(西瓜书+南瓜书)神经网络总结(python代码实现)
  18. 瑞利商(Rayleigh quotient)与广义瑞利商(genralized Rayleigh quotient)
  19. Flutter中的ISOlate
  20. 读论文Beyond Part Models Person Retrieval with Refined Part Pooling

热门文章

  1. NetCore 框架下ABP多数据库切换搭建
  2. 微信小程序swiper轮播图抖动问题解决
  3. 哇塞!抽象工厂模式还能这样玩
  4. Scrapy框架的基本使用
  5. 5s邮箱怎么总是连不上服务器,outlook 经常连不到exchange 服务器
  6. 北航计算机王良,王良君的摩机故事.doc
  7. 利用谷歌语法进行漏洞搜索
  8. 大型企业为什么需要IT外包,甲方的工作职责是什么
  9. 在matlab中的循环语句,matlab中循环语句
  10. 联邦学习看了论文之后的小展望(11.21)