股票上市代碼及上市時間

最近開始玩股票量化,因爲想要作完整的股票回測,所以股票的上市和退市信息就必不可少。由於咱們回測的時候必需要知道某一日期滬深股票的成分包含哪些對吧。因此咱們要把滬深所有股票的上市時間、退市時間所有都爬下來(保存到本地之後檢索會更快)。html

0.1.確認主要工具

  要用到的工具包括:python

  (1)python:基本工具json

  (2)pandas:格式化數據處理api

  (3)通聯數據接口:http://www.datayes.comapp

  (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前綴以示區別。ui

  而後爲了方便的獲取歷史某一時刻所有可交易的A股股票代碼,咱們定義一個函數,默認使用本地數據:get_a_stocks(date=None, update=False),date默認日期是系統當前日期,update表示是否須要更新本地數據。文件名beefinance.pyurl

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 = 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 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

相關文章
相關標籤/搜索