首页 > 代码库 > 股票上市代码及上市时间

股票上市代码及上市时间

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

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 time

def 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 = udata
    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 d
    else:
        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.csv
       secShortName   listDate delistDate
ticker                                   
        平安银行 1991-04-03        NaT
         万科A 1991-01-29        NaT
        国农科技 1991-01-14        NaT
        世纪星源 1990-12-10        NaT
        深振业A 1992-04-27        NaT
         全新好 1992-04-13        NaT
        神州高铁 1992-05-07        NaT
        中国宝安 1991-06-25        NaT
        美丽生态 1995-10-27        NaT
        深物业A 1992-03-30        NaT
         南玻A 1992-02-28        NaT
        沙河股份 1992-06-02        NaT
        深康佳A 1992-03-27        NaT
        深中华A 1992-03-31        NaT
        神州长城 1992-06-16        NaT
        深深宝A 1992-10-12        NaT
        深华发A 1992-04-28        NaT
         深科技 1994-02-02        NaT
        深赤湾A 1993-05-05        NaT
        深天地A 1993-04-29        NaT
         特力A 1993-06-21        NaT
        飞亚达A 1993-06-03        NaT
        深圳能源 1993-09-03        NaT
        国药一致 1993-08-09        NaT
        深深房A 1993-09-15        NaT
        富奥股份 1993-09-29        NaT
        中粮地产 1993-10-08        NaT
        深桑达A 1993-10-28        NaT
       *ST新都 1994-01-03        NaT
        神州数码 1994-05-09        NaT
...             ...        ...        ...
        紫金矿业 2008-04-25        NaT
       *ST新集 2007-12-19        NaT
        中国远洋 2007-06-26        NaT
        建设银行 2007-09-25        NaT
        金钼股份 2008-04-17        NaT
        中国银行 2006-07-05        NaT
        中国重工 2009-12-16        NaT
        大唐发电 2006-12-20        NaT
        中信银行 2007-04-27        NaT
        出版传媒 2007-12-21        NaT
        招商地产 1993-06-07 2015-12-30
        白云山A 1993-11-08 2013-04-26
        美的电器 1993-11-12 2013-09-18
        宏源证券 1994-02-02 2015-01-26
        盐湖集团 1995-03-03 2011-03-22
         国恒退 1996-03-20 2015-07-13
        金马集团 1996-08-19 2013-08-14
       *ST创智 1997-06-26 2013-02-08
       *ST炎黄 1998-05-29 2013-03-27
        退市长油 1997-06-12 2014-06-05
        莱钢股份 1997-08-28 2012-02-28
        天方药业 2000-12-27 2013-07-15
        路桥建设 2000-07-25 2012-03-01
        太行水泥 2002-08-22 2011-02-18
        百联股份 1993-02-19 2011-08-23
        退市博元 1990-12-19 2016-05-13
        东方明珠 1994-02-24 2015-05-20
        广汽长丰 2004-06-14 2012-03-20
       *ST二重 2010-02-02 2015-05-21
        中国北车 2009-12-29 2015-05-20

[1815 rows x 3 columns]

 http://www.cnblogs.com/prpl/p/5561327.html

股票上市代码及上市时间