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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362415.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《网页设计创意书》读后感

刚刚收到《网页设计创意书》&#xff0c;确实有点惊喜&#xff0c;开始以为是像之前审读的书一样是一叠叠的打印纸&#xff0c;没想到是一本成品书&#xff0c;拿到手上沉甸甸的&#xff0c;随便翻看了一下&#xff0c;没想到里面竟然还是全彩页印刷的&#xff0c;本书的第一感…

游戏AI –行为树简介

游戏AI是一个非常广泛的主题&#xff0c;尽管有很多资料&#xff0c;但我找不到能以较慢&#xff0c;更容易理解的速度缓慢介绍这些概念的东西。 本文将尝试解释如何基于行为树的概念来设计一个非常简单但可扩展的AI系统。 什么是AI&#xff1f; 人工智能是参与游戏的实体表现…

liteos错误处理(十一)

1. 概述 1.1 基本概念 错误处理指用户代码发生错误时&#xff0c;系统调用错误处理模块的接口函数&#xff0c;完成上报错误信息&#xff0c;并调用用户自己的钩子函数&#xff0c;进行特定的处理。 错误处理模块实现OS内部错误码记录功能。OS内部错误码无法通过接口返回&#…

js 变量提升与函数提升

规则&#xff1a; 函数的提升优先于变量提升。同名的函数会覆盖同名的函数与变量。同名的变量不会覆盖同名的函数。 示例代码1&#xff1a; <!DOCTYPE html><html lang"zh"><head><meta charset"UTF-8" /><meta name"vi…

mockJs文档(一)

Mock.js 官网 目录 1. 开始安装 1.1 Node&#xff08;CommonJS&#xff09; 1.2 CMD方式 2. 语法规范 2.1 数据模板定义规范 DTD 2.1.1. 属性值是字符串 String 2.1.2. 属性值是数字 Number 2.1.3. 属性值是布尔型 Boolean 2.1.4. 属性值是对象 Object 2.1.5. 属性值…

小程序 获取手机号

【参考小程序开发文档&#xff1a;开发-指南-开放能力-用户信息-获取手机号】 地理位置 wx.getLocation(Object object) | 微信开放文档 手机号 获取手机号 | 微信开放文档 微信信息 小程序与小游戏获取用户信息接口调整&#xff0c;请开发者注意升级。 | 微信开放社区 目录…

CSS布局之脱离文档流详解——浮动、绝对定位脱离文档流的区别

1、代码 &#xff08;1&#xff09;示例代码1 <!DOCTYPE html><html lang"zh"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><meta http-e…

小程序 获取当前城市位置-高德地图

微信小程序 wx.getLocation 只能获取到经纬度&#xff0c;想要获取具体城市信息&#xff0c;需要使用地图插件。公司要求使用 高德地图&#xff0c;在使用上&#xff0c;几个地图的代码步骤都差不多。 目录 1. 查看官方文档 1.1 申请高德地图Key&#xff0c;点击查看申请key…

网页端调用企业微信扫一扫 详细过程

效果展示&#xff08;需要使用微信内置浏览器打开&#xff09;&#xff1a; 目录 1. 快速集成H5开发应用 1.1 开始 1.2 创建应用 1.2.1 登录管理后台 1.2.2 添加自建应用 1.2.3 配置应用 1.2.4 获取应用的 AgentID 与 Secret 1.3 配置应用 1.3.1 配置应用主页 1.3.2 配置…

获取ip地址

代码 ///<summary>///取得客户端真实IP。如果有代理则取第一个非内网地址 ///</summary>publicstringIPAddress { get{ stringresult String.Empty; result HttpContext.Current.Request.ServerVariables["HTTP_X_FORWAR…

微信小程序 监听位置信息

wx.onLocationChange(function callback) | 微信开放文档微信开发者平台文档https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.onLocationChange.html 小程序 获取当前城市位置-高德地图_Start2019-CSDN博客小程序获取位置信息&#xff0c;包括省市区、用户…

通过构建Cocoapods私有库进行组件化开发探索

专题一 一、创建私有索引库 选Github或者码云都可以&#xff0c;本例以Github为例。创建私有索引库用来作为自己组件库的索引&#xff1a; 二、本地添加私有索引库 添加&#xff1a;pod repo add 索引库名称 索引库地址 例&#xff1a;pod repo add ZYHModule https://github.c…

layui 父页面弹框中获取子页面的内容

layer弹层组件开发文档 - Layuihttps://www.layui.site/doc/modules/layer.html#layer.getChildFrame 需求及代码分析 如上图&#xff0c;原来是点击一个按钮跳转到子页面&#xff0c;现在想改为&#xff1a;点击按钮&#xff0c;在当前页打开。因为不想要重写子页面的样式及内…

在JBoss Fuse / Fabric8 / Karaf中使用Byteman

您是否曾经尝试过了解一些非常简单的方法不起作用的过程&#xff1f; 您正在任何众所周知的上下文中编写代码&#xff0c;无论出于何种原因它都无法正常工作。 而且您信任您的平台&#xff0c;因此您认真阅读了所有日志。 而且&#xff0c;您仍然不知道为什么某些行为不符合预…

个人作业——Alpha项目测试

一、 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/ 这个作业要求在哪里 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/3338 团队名称 西柚皇家编程团队&#xff1a;https://www.cnblogs.com/TakeRa…

Windows7下Docker的安装

转自 https://blog.csdn.net/xiangxiezhuren/article/details/79698913 无法打开图3&#xff0c;打开属性。给其添加git路径 无法使用图2下载 https://www.cnblogs.com/huang-yc/p/10350408.html 转载于:https://www.cnblogs.com/shufeiyang/p/11016177.html

简而言之,JUnit:单元测试断言

简而言之&#xff0c;本章涵盖了各种单元测试断言技术。 它详细说明了内置机制&#xff0c; Hamcrest匹配器和AssertJ断言的优缺点 。 正在进行的示例扩大了该主题&#xff0c;并说明了如何创建和使用自定义匹配器/断言。 单元测试断言 信任但要验证 罗纳德里根&#xff08;R…

vue 安装使用mockjs

使用 mockjs 的案例过程&#xff1a; 1. 安装 npm install axios -S npm install mockjs --save-dev npm install --save 、--save-dev 、-D、-S 的区别与NODE_ENV的配置_jwl_willon的博客-CSDN博客_npm save备注&#xff1a;<> 意为等价于&#xff1b;1、npm install …

大数据学习——SparkStreaming整合Kafka完成网站点击流实时统计

1.安装并配置zk 2.安装并配置Kafka 3.启动zk 4.启动Kafka 5.创建topic [rootmini3 kafka]# bin/kafka-console-producer.sh --broker-list mini1:9092 --topic cyf-test 程序代码 package org.apache.sparkimport java.net.InetSocketAddressimport org.apache.spark.HashParti…

日期/时间格式/解析,Java 8样式

自Java 几乎 开始以来&#xff0c;Java开发人员就通过java.util.Date类&#xff08;自JDK 1.0起&#xff09;和java.util.Calendar类&#xff08;自JDK 1.1起 &#xff09;来处理日期和时间。 在这段时间内&#xff0c;成千上万&#xff08;甚至可能数百万&#xff09;的Java开…