python量化之路:获取历史某一时刻沪深上市公司股票代码及上市时间

  最近开始玩股票量化,由于想要做完整的股票回测,因此股票的上市和退市信息就必不可少。因为我们回测的时候必须要知道某一日期沪深股票的成分包含哪些对吧。所以我们要把沪深全部股票的上市时间、退市时间全部都爬下来(保存到本地以后检索会更快)。

0.1.确认主要工具

  要用到的工具包括:

  (1)python:基本工具

  (2)pandas:格式化数据处理

  (3)通联数据接口:http://www.datayes.com

  (4)通联接口API:https://api.wmcloud.com/docs/pages/viewpage.action?pageId=1867781

1.开始获取数据

  首先,我们先要获取全部上市公司的上市时间和退市时间(如果有)的列表,用通联数据的接口会发现我们的任务非常简单。

from pandas import DataFrame
from dataapiclient import Client
import json
client = Client()
client.init('cae5c4acc4ad4ccb93a8aaac4b8adb04363feaa9852c34d14ddd2248613b09b3')
url='/api/equity/getEqu.json?field=ticker,secShortName,listDate,delistDate&listStatusCD=L,S,DE,UN&secID=&ticker=&equTypeCD=A'
code, result = client.getData(url)
j = json.loads(result.decode())
d = DataFrame(j['data'])
d = d.set_index('ticker')
d = d[['secShortName','listDate','delistDate']]
d.to_csv('data/ticker_and _day_of_(de)list_date.csv')

  如此一来,ticker_and _day_of_(de)list_date.csv文件中就保存了所需内容。需要注意的是数据中有个特例:DY600019

  这是由于当时的重组并购导致主体变更,因此通联数据在股票代码前加上了DY前缀以示区别。

  然后为了方便的获取历史某一时刻全部可交易的A股股票代码,我们定义一个函数,默认使用本地数据:get_a_stocks(date=None, update=False),date默认日期是系统当前日期,update表示是否需要更新本地数据。文件名beefinance.py

from pandas import DataFrame
from datetime import datetime
from dataapiclient import Client
import pandas
import json
import os
import types
import datetime
import timedef get_a_stocks(date=None, update=False):if date is None:date = datetime.datetime.now()if isinstance(date,str):date = datetime.datetime.strptime(date, "%Y-%m-%d")if not isinstance(date,datetime.datetime):raise ValueError('date不接受此类型')if not isinstance(update, bool):raise ValueError('update不接受此类型')data_dir = u'data'data_filename = data_dir + u'/ticker_and _day_of_(de)list_date.csv'if not os.path.exists(data_dir):os.mkdir(data_dir)if (not os.path.exists(data_filename)) or update:client = Client()client.init('cae5c4acc4ad4ccb93a8aaac4b8adb04363feaa9852c34d14ddd2248613b09b3')url='/api/equity/getEqu.json?field=ticker,secShortName,listDate,delistDate&listStatusCD=L,S,DE,UN&secID=&ticker=&equTypeCD=A'code, result = client.getData(url)j = json.loads(result.decode())d = DataFrame(j['data'])d = d.set_index('ticker')d = d[['secShortName','listDate','delistDate']]d.to_csv(data_filename, encoding='utf-8')d['listDate'] = pandas.to_datetime(d['listDate'])d['delistDate'] = pandas.to_datetime(d['delistDate'])d = d[d['listDate']<=date]d1 = d[pandas.isnull(d['delistDate'])]d2 = d[pandas.notnull(d['delistDate'])]d2 = d2[d2['delistDate']>date]d = d1.append(d2)return delse:d = pandas.read_csv(data_filename, index_col='ticker', parse_dates=['listDate','delistDate'],encoding='utf-8')d['listDate'] = pandas.to_datetime(d['listDate'])d['delistDate'] = pandas.to_datetime(d['delistDate'])d = d[d['listDate']<=date]d1 = d[pandas.isnull(d['delistDate'])]d2 = d[pandas.notnull(d['delistDate'])]d2 = d2[d2['delistDate']>date]d = d1.append(d2)return d

  下面测试效果:

from beefinance import get_a_stocks
d = get_a_stocks('2010-05-05')
print(d)

data/ticker_and _day_of_(de)list_date.csvsecShortName   listDate delistDate
ticker
000001         平安银行 1991-04-03        NaT
000002          万科A 1991-01-29        NaT
000004         国农科技 1991-01-14        NaT
000005         世纪星源 1990-12-10        NaT
000006         深振业A 1992-04-27        NaT
000007          全新好 1992-04-13        NaT
000008         神州高铁 1992-05-07        NaT
000009         中国宝安 1991-06-25        NaT
000010         美丽生态 1995-10-27        NaT
000011         深物业A 1992-03-30        NaT
000012          南玻A 1992-02-28        NaT
000014         沙河股份 1992-06-02        NaT
000016         深康佳A 1992-03-27        NaT
000017         深中华A 1992-03-31        NaT
000018         神州长城 1992-06-16        NaT
000019         深深宝A 1992-10-12        NaT
000020         深华发A 1992-04-28        NaT
000021          深科技 1994-02-02        NaT
000022         深赤湾A 1993-05-05        NaT
000023         深天地A 1993-04-29        NaT
000025          特力A 1993-06-21        NaT
000026         飞亚达A 1993-06-03        NaT
000027         深圳能源 1993-09-03        NaT
000028         国药一致 1993-08-09        NaT
000029         深深房A 1993-09-15        NaT
000030         富奥股份 1993-09-29        NaT
000031         中粮地产 1993-10-08        NaT
000032         深桑达A 1993-10-28        NaT
000033        *ST新都 1994-01-03        NaT
000034         神州数码 1994-05-09        NaT
...             ...        ...        ...
601899         紫金矿业 2008-04-25        NaT
601918        *ST新集 2007-12-19        NaT
601919         中国远洋 2007-06-26        NaT
601939         建设银行 2007-09-25        NaT
601958         金钼股份 2008-04-17        NaT
601988         中国银行 2006-07-05        NaT
601989         中国重工 2009-12-16        NaT
601991         大唐发电 2006-12-20        NaT
601998         中信银行 2007-04-27        NaT
601999         出版传媒 2007-12-21        NaT
000024         招商地产 1993-06-07 2015-12-30
000522         白云山A 1993-11-08 2013-04-26
000527         美的电器 1993-11-12 2013-09-18
000562         宏源证券 1994-02-02 2015-01-26
000578         盐湖集团 1995-03-03 2011-03-22
000594          国恒退 1996-03-20 2015-07-13
000602         金马集团 1996-08-19 2013-08-14
000787        *ST创智 1997-06-26 2013-02-08
000805        *ST炎黄 1998-05-29 2013-03-27
600087         退市长油 1997-06-12 2014-06-05
600102         莱钢股份 1997-08-28 2012-02-28
600253         天方药业 2000-12-27 2013-07-15
600263         路桥建设 2000-07-25 2012-03-01
600553         太行水泥 2002-08-22 2011-02-18
600631         百联股份 1993-02-19 2011-08-23
600656         退市博元 1990-12-19 2016-05-13
600832         东方明珠 1994-02-24 2015-05-20
600991         广汽长丰 2004-06-14 2012-03-20
601268        *ST二重 2010-02-02 2015-05-21
601299         中国北车 2009-12-29 2015-05-20[1815 rows x 3 columns]

  还不错。

转载于:https://www.cnblogs.com/medik/p/10989794.html

python量化之路:获取历史某一时刻沪深上市公司股票代码及上市时间相关推荐

  1. python爬虫系列:获取同花顺沪深上市公司信息

    转自微信公众号-----数据观察 沪.深证券交易所自1990年成立以来,已伴随中国经济发展将近30年了.在这将近30年里,沪.深股市起起落落.跌跌撞撞顽强走出了一条支撑中国企业.中国经济发展的股市成长 ...

  2. 从菜鸟到大师——Python量化之路

    前言 量化交易是指借助现代统计学和数学的方法,利用计算机技术进行投资交易的方式. 对于从未接触过量化的人来说,想要了解量化到底是做什么的,关键掌握四部份的内容:Python基础知识.金融知识.技术指标 ...

  3. [python]数据整理,将取得的众多的沪深龙虎榜数据整一整

    将昨日取得的众多的沪深龙虎榜数据整一整 提取文件夹内所有抓取下来的沪深龙虎榜数据,整理出沪深两市(含中小创)涨幅榜股票及前5大买入卖出资金净值,保存到csv文件 再手动使用数据透视表进行统计 原始数据 ...

  4. python龙虎榜数据_[python]数据整理,将取得的众多的沪深龙虎榜数据整一整

    1 #coding=utf-8 2 3 importre4 importos5 importtime6 importdatetime7 8 defwriteFile(file,stocks,BS,da ...

  5. python量化交易第五章

    一.什么是动量策略 1.1概念: 预先对股票收益和交易量设定过滤准则,当股票收益或股票收益和交易量同时满足过滤准则就买入(做多)或卖出(做空)股票的投资策略. 核心:以股票的历史收益率作为主要的交易原 ...

  6. Python量化:获取历史行情数据并计算KDJ指标

    KDJ指标又叫随机指标,是一种相当新颖.实用的技术分析指标,它起先用于期货市场的分析,后被广泛用于股市的中短期趋势分析,是期货和股票市场上最常用的技术分析工具. 随机指标KDJ一般是用于股票分析的统计 ...

  7. python量化投资必背代码-量化投资:用Python实现金融数据的获取与整理

    小编说:数据可以说是量化投资的根本,一切投资策略都是建立在数据基础上的.本文以优矿网为例,带领大家用Python实现金融数据的获取与整理. 本文选自<Python与量化投资:从基础到实战> ...

  8. python获取时间周数_【手把手教你】Python量化策略风险指标

    如何衡量一个量化策略的好坏?一是比较稳定的收益,二是有严谨的回测,三是有清晰的逻辑.--刘富兵 引言 引言尽管过去不能代表未来,通过历史回测来评估量化策略仍然是量化投资非常重要的一环.量化回测过程中常 ...

  9. Python量化交易实战:获取股票数据并做分析处理

    量化交易(也称自动化交易)是一种应用数学模型帮助投资者进行判断,并且根据计算机程序发送的指令进行交易的投资方式,它极大地减少了投资者情绪波动的影响.量化交易的主要优势如下: 快速检测 客观.理性 自动 ...

  10. 【python】获取历史天气数据

    记录一下我的python学习之路 今天没有使用爬虫获取数据,而是根据目标网页的数据特点,选用pd.read_html()读取网页表格类数据. 目录 前期准备 完整代码 代码浅析 欢迎相互学习 前期准备 ...

最新文章

  1. 综述:光流估计从传统方法到深度学习
  2. ML算法岗从业几年还不具备提出新模型的技术能力?看这个就够了!
  3. mybatis多排序问题
  4. Android实现通用的ActivityGroup(效果类似Android微博客户端主界面),...
  5. 物联网框架ServerSuperIO在.NetCore实现跨平台的实践路线
  6. kafka吞吐量高的原因
  7. 5G 比 4G 快,不只是因为......
  8. 使用 Eclipse 建立包的时候,“name”下可选项“Create package-info.java”的作用是什么?
  9. Random()中具体实现(含种子数组的实现)
  10. C语言序列是否有序、序列中删除指定数字、序列中整数去重、有序序列合并问题
  11. AD灾难恢复情景及方案
  12. 将WinServers2019打造成家用系统
  13. 截止11月5日,30日内累计跌幅最大的200只股票
  14. win10网络共享计算机名,手把手教你win10一键共享局域网的具体解决步骤
  15. linux xps文件,Master PDF:PDF和XPS文件编辑神器
  16. 一款灵活可配置的开源监控平台
  17. 7-1 jmu-python-汇率兑换
  18. 程序员去面试的梗!面试官:“哦了,明天来上班吧”
  19. 永不过时的优雅 KOREANO ESSENTIAL 2022秋冬系列全新上市
  20. 3*3 三行三列的圈叉棋

热门文章

  1. 任小龙 mysql笔记_任小龙java基础的Excel笔记(完整版)
  2. 转 最强烈推荐-内有国内最好的java论坛
  3. 堪萨斯州立大学计算机科学,美国留学:2019计算机专业最新排名
  4. 2020Spatial-Temporal Graph Convolutional Network for Video-based Person Re-identification论文笔记(时空图卷积)
  5. java poi 水印_java解决poi导出excel文字水印,导出excel不可操作问题
  6. 【我的OpenGL学习进阶之旅】学习OpenGL ES 3.0 的实战 Awsome Demo (上)
  7. 多节点服务器定时任务重复处理的问题
  8. mysql订单表和订单详情表_订单详情表,与,订单表 怎么做?
  9. c# 多功能矢量绘图程序
  10. 南京大学计算机科学与技术系罗金宇,长春理工大学