Skip to content

Commit

Permalink
增加获取企业 IPO 审核情况的函数、增强获取股东户数变动情况的函数
Browse files Browse the repository at this point in the history
  • Loading branch information
Micro-sheep committed Oct 10, 2021
1 parent 1ec5d62 commit 0a89fc0
Show file tree
Hide file tree
Showing 3 changed files with 145 additions and 27 deletions.
2 changes: 2 additions & 0 deletions changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
- 添加获取指数成分股的函数 `efnance.stock.get_members`
- 增强函数 `efnance.stock.get_realtime_quotes`
- 为搜索缓存添加过期时间
- 添加获取企业 IPO 审核情况的函数 `efnance.stock.get_latest_ipo_info`
- 增强获取股东户数变动情况的函数 `efnance.stock.get_latest_holder_number`

## v0.3.8(2021-09-18)

Expand Down
6 changes: 4 additions & 2 deletions efinance/stock/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@
get_all_company_performance,
get_latest_holder_number,
get_daily_billboard,
get_members)
get_members,
get_latest_ipo_info)
__all__ = ['get_history_bill',
'get_today_bill',
'get_latest_quote',
Expand All @@ -22,4 +23,5 @@
'get_all_company_performance',
'get_latest_holder_number',
'get_daily_billboard',
'get_members']
'get_members',
'get_latest_ipo_info']
164 changes: 139 additions & 25 deletions efinance/stock/getter.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import calendar
from ..utils import search_quote
import collections
from datetime import datetime, timedelta
from ..utils import process_dataframe_and_series
import rich
Expand Down Expand Up @@ -289,6 +289,7 @@ def get_realtime_quotes(fs: Union[str, List[str]] = None) -> pd.DataFrame:
- ``'深股通'`` 深股通市场行情
- ``'行业板块'`` 行业板块市场行情
- ``'概念板块'`` 概念板块市场行情
- ``'沪深系列指数'`` 沪深系列指数市场行情
- ``'上证系列指数'`` 上证系列指数市场行情
- ``'深证系列指数'`` 深证系列指数市场行情
- ``'ETF'`` ETF 基金市场行情
Expand Down Expand Up @@ -846,34 +847,72 @@ def get_all_company_performance(date: str = None) -> pd.DataFrame:


@to_numeric
def get_latest_holder_number() -> pd.DataFrame:
def get_latest_holder_number(date: str = None) -> pd.DataFrame:
"""
获取沪深A股市场最新公开的股东数目变化情况
获取沪深A股市场最新公开的股东数目变化情况 也可获取指定报告期的股东数目变化情况
Parameters
----------
date : str, optional
报告期日期 部分可选示例如下
- ``None`` 最新的报告期
- ``'2021-06-30'`` 2021年中报
- ``'2021-03-31'`` 2021年一季报
Returns
-------
DataFrame
沪深A股市场最新公开的股东数目变化情况
沪深A股市场最新公开的或指定报告期的股东数目变化情况
Examples
--------
>>> import efinance as ef
>>> ef.stock.get_latest_holder_number()
股票代码 股票名称 股东人数 股东人数增减 较上期变化百分比 股东户数统计截止日 户均持股市值 户均持股数量 总市值 总股本 公告日期
0 688981 中芯国际 347706 -3.459784 -12461.0 2021-06-30 00:00:00 3.446469e+05 5575.005896 1.198358e+11 1938463000 2021-08-28 00:00:00
1 688819 天能股份 36749 -11.319981 -4691.0 2021-06-30 00:00:00 1.176868e+06 26452.420474 4.324873e+10 972100000 2021-08-28 00:00:00
2 688575 亚辉龙 7347 -74.389989 -21341.0 2021-06-30 00:00:00 2.447530e+06 55124.540629 1.798200e+10 405000000 2021-08-28 00:00:00
3 688538 和辉光电 383993 -70.245095 -906527.0 2021-06-30 00:00:00 1.370180e+05 35962.732719 5.261396e+10 13809437625 2021-08-28 00:00:00
4 688425 铁建重工 311356 -64.684452 -570284.0 2021-06-30 00:00:00 1.010458e+05 16510.746541 3.146121e+10 5140720000 2021-08-28 00:00:00
.. ... ... ... ... ... ... ... ... ... ... ...
400 600618 氯碱化工 45372 -0.756814 -346.0 2014-06-30 00:00:00 1.227918e+05 16526.491581 5.571311e+09 749839976 2014-08-22 00:00:00
401 601880 辽港股份 89923 -3.589540 -3348.0 2014-03-31 00:00:00 9.051553e+04 37403.111551 8.139428e+09 3363400000 2014-04-30 00:00:00
402 600685 中船防务 52296 -4.807325 -2641.0 2014-03-11 00:00:00 1.315491e+05 8384.263691 6.879492e+09 438463454 2014-03-18 00:00:00
403 000017 深中华A 21358 -10.800200 -2586.0 2013-06-30 00:00:00 5.943993e+04 14186.140556 1.269518e+09 302987590 2013-08-24 00:00:00
404 601992 金隅集团 66736 -12.690355 -9700.0 2013-06-30 00:00:00 2.333339e+05 46666.785918 1.557177e+10 3114354625 2013-08-22 00:00:00
股票代码 股票名称 股东人数 股东人数增减 较上期变化百分比 股东户数统计截止日 户均持股市值 户均持股数量 总市值 总股本 公告日期
0 301029 怡合达 12021 -1.636527 -200.0 2021-09-30 00:00:00 2.790187e+06 33275.933783 3.354084e+10 400010000 2021-10-09 00:00:00
1 301006 迈拓股份 10964 -0.463005 -51.0 2021-09-30 00:00:00 3.493433e+05 12703.392922 3.830200e+09 139280000 2021-10-09 00:00:00
2 301003 江苏博云 11642 -2.658863 -318.0 2021-09-30 00:00:00 2.613041e+05 5004.867463 3.042103e+09 58266667 2021-10-09 00:00:00
3 300851 交大思诺 12858 -2.752987 -364.0 2021-09-30 00:00:00 2.177054e+05 6761.035931 2.799255e+09 86933400 2021-10-09 00:00:00
4 300830 金现代 34535 -16.670688 -6909.0 2021-09-30 00:00:00 2.001479e+05 12454.756045 6.912109e+09 430125000 2021-10-09 00:00:00
... ... ... ... ... ... ... ... ... ... ... ...
4435 600618 氯碱化工 45372 -0.756814 -346.0 2014-06-30 00:00:00 1.227918e+05 16526.491581 5.571311e+09 749839976 2014-08-22 00:00:00
4436 601880 辽港股份 89923 -3.589540 -3348.0 2014-03-31 00:00:00 9.051553e+04 37403.111551 8.139428e+09 3363400000 2014-04-30 00:00:00
4437 600685 中船防务 52296 -4.807325 -2641.0 2014-03-11 00:00:00 1.315491e+05 8384.263691 6.879492e+09 438463454 2014-03-18 00:00:00
4438 000017 深中华A 21358 -10.800200 -2586.0 2013-06-30 00:00:00 5.943993e+04 14186.140556 1.269518e+09 302987590 2013-08-24 00:00:00
4439 601992 金隅集团 66736 -12.690355 -9700.0 2013-06-30 00:00:00 2.333339e+05 46666.785918 1.557177e+10 3114354625 2013-08-22 00:00:00
>>> ef.stock.get_latest_holder_number(date='2021-06-30')
股票代码 股票名称 股东人数 股东人数增减 较上期变化百分比 股东户数统计截止日 户均持股市值 户均持股数量 总市值 总股本 公告日期
0 688768 容知日新 24 0.000000 0.0 2021-06-30 00:00:00 NaN 1.714395e+06 NaN 41145491 2021-08-31 00:00:00
1 688669 聚石化学 8355 -11.135929 -1047.0 2021-06-30 00:00:00 3.662956e+05 1.117096e+04 3.060400e+09 93333334 2021-08-31 00:00:00
2 688613 奥精医疗 8768 -71.573999 -22077.0 2021-06-30 00:00:00 1.380627e+06 1.520681e+04 1.210533e+10 133333334 2021-08-31 00:00:00
3 688586 江航装备 20436 -5.642257 -1222.0 2021-06-30 00:00:00 5.508121e+05 1.975653e+04 1.125640e+10 403744467 2021-08-31 00:00:00
4 688559 海目星 7491 -16.460355 -1476.0 2021-06-30 00:00:00 8.071019e+05 2.669871e+04 6.046000e+09 200000000 2021-08-31 00:00:00
... ... ... ... ... ... ... ... ... ... ... ...
4292 002261 拓维信息 144793 0.931290 1336.0 2021-06-30 00:00:00 7.731589e+04 7.602349e+03 1.119480e+10 1100766874 2021-07-15 00:00:00
4293 002471 中超控股 75592 1.026409 768.0 2021-06-30 00:00:00 4.864536e+04 1.677426e+04 3.677200e+09 1268000000 2021-07-12 00:00:00
4294 600093 *ST易见 52497 -2.118099 -1136.0 2021-06-30 00:00:00 1.267904e+05 2.138117e+04 6.656114e+09 1122447500 2021-07-06 00:00:00
4295 688091 上海谊众 25 0.000000 0.0 2021-06-30 00:00:00 NaN 3.174000e+06 NaN 79350000 2021-07-02 00:00:00
4296 301053 远信工业 10 0.000000 0.0 2021-06-30 00:00:00 NaN 6.131250e+06 NaN 61312500 2021-06-30 00:00:00
"""
dfs: List[pd.DataFrame] = []
if date is not None:
date: datetime = datetime.strptime(date, '%Y-%m-%d')
year = date.year
month = date.month
if month % 3 != 0:
month -= month % 3
# TODO 优化处理月份正确但日期不为月份最后一天的逻辑
if month < 3:
year -= 1
# NOTE 对应上一年最后一个月
month = 12
_, last_day = calendar.monthrange(year, month)
date: str = datetime.strptime(
f'{year}-{month}-{last_day}', '%Y-%m-%d').strftime('%Y-%m-%d')
page = 1
fields = {
'SECURITY_CODE': '股票代码',
Expand All @@ -890,22 +929,26 @@ def get_latest_holder_number() -> pd.DataFrame:
}

while 1:
params = (
params = [
('sortColumns', 'HOLD_NOTICE_DATE,SECURITY_CODE'),
('sortTypes', '-1,-1'),
('pageSize', '500'),
('pageNumber', page),
('reportName', 'RPT_HOLDERNUMLATEST'),
('columns', 'SECURITY_CODE,SECURITY_NAME_ABBR,END_DATE,INTERVAL_CHRATE,AVG_MARKET_CAP,AVG_HOLD_NUM,TOTAL_MARKET_CAP,TOTAL_A_SHARES,HOLD_NOTICE_DATE,HOLDER_NUM,PRE_HOLDER_NUM,HOLDER_NUM_CHANGE,HOLDER_NUM_RATIO,END_DATE,PRE_END_DATE'),
('quoteColumns', 'f2,f3'),
('source', 'WEB'),
('client', 'WEB'),
#! 只选沪深A股
('filter',
f'(SECURITY_TYPE_CODE in ("058001001","058001008"))'),

)
response = session.get('http://datacenter-web.eastmoney.com/api/data/v1/get',
]
if date is not None:
# NOTE 注意不能漏 \'
params.append(('filter', f'(END_DATE=\'{date}\')'))
params.append(('reportName', 'RPT_HOLDERNUM_DET'))
else:
params.append(('reportName', 'RPT_HOLDERNUMLATEST'))

params = tuple(params)
url = 'http://datacenter-web.eastmoney.com/api/data/v1/get'
response = session.get(url,
headers=EASTMONEY_REQUEST_HEADERS,
params=params)
items = jsonpath(response.json(), '$..data[:]')
Expand All @@ -918,7 +961,7 @@ def get_latest_holder_number() -> pd.DataFrame:
if len(dfs) == 0:
df = pd.DataFrame(columns=fields.values())
return df
df = pd.concat(dfs)
df = pd.concat(dfs, ignore_index=True)
return df


Expand Down Expand Up @@ -1137,3 +1180,74 @@ def get_members(index_code: str) -> pd.DataFrame:
columns=fields)[fields.values()]
return df
return df


def get_latest_ipo_info() -> pd.DataFrame:
"""
获取企业 IPO 审核状态
Returns
-------
DataFrame
企业 IPO 审核状态
Examples
--------
>>> import efinance as ef
>>> ef.stock.get_latest_ipo_info()
发行人全称 审核状态 注册地 证监会行业 保荐机构 会计师事务所 更新日期 受理日期 拟上市地点
0 郑州众智科技股份有限公司 已问询 河南 电气机械和器材制造业 民生证券股份有限公司 信永中和会计师事务所(特殊普通合伙) 2021-10-09 00:00:00 2021-06-24 00:00:00 创业板
1 成都盛帮密封件股份有限公司 已问询 四川 橡胶和塑料制品业 国金证券股份有限公司 中审众环会计师事务所(特殊普通合伙) 2021-10-09 00:00:00 2020-12-08 00:00:00 创业板
2 恒勃控股股份有限公司 已问询 浙江 汽车制造业 中信建投证券股份有限公司 中汇会计师事务所(特殊普通合伙) 2021-10-08 00:00:00 2021-09-06 00:00:00 创业板
3 深圳英集芯科技股份有限公司 已问询 广东 计算机、通信和其他电子设备制造业 华泰联合证券有限责任公司 容诚会计师事务所(特殊普通合伙) 2021-10-08 00:00:00 2021-06-10 00:00:00 科创板
4 苏州长光华芯光电技术股份有限公司 上市委会议通过 江苏 计算机、通信和其他电子设备制造业 华泰联合证券有限责任公司 天衡会计师事务所(特殊普通合伙) 2021-10-08 00:00:00 2021-06-24 00:00:00 科创板
... ... ... .. ... ... ... ... ... ...
1376 澜起科技股份有限公司 注册生效 上海 计算机、通信和其他电子设备制造业 中信证券股份有限公司 瑞华会计师事务所(特殊普通合伙) 2019-06-26 00:00:00 2019-04-01 00:00:00 科创板
1377 浙江杭可科技股份有限公司 注册生效 浙江 专用设备制造业 国信证券股份有限公司 天健会计师事务所(特殊普通合伙) 2019-06-24 00:00:00 2019-04-15 00:00:00 科创板
1378 苏州天准科技股份有限公司 注册生效 江苏 专用设备制造业 海通证券股份有限公司 瑞华会计师事务所(特殊普通合伙) 2019-06-20 00:00:00 2019-04-02 00:00:00 科创板
1379 烟台睿创微纳技术股份有限公司 注册生效 山东 计算机、通信和其他电子设备制造业 中信证券股份有限公司 信永中和会计师事务所(特殊普通合伙) 2019-06-18 00:00:00 2019-03-22 00:00:00 科创板
1380 苏州华兴源创科技股份有限公司 注册生效 江苏 专用设备制造业 华泰联合证券有限责任公司 华普天健会计师事务所(特殊普通合伙) 2019-06-18 00:00:00 2019-03-27 00:00:00 科创板
"""
fields = {
# 'ORG_CODE':'发行人代码',
'ISSUER_NAME': '发行人全称',
'CHECK_STATUS': '审核状态',
'REG_ADDRESS': '注册地',
'CSRC_INDUSTRY': '证监会行业',
'RECOMMEND_ORG': '保荐机构',
'ACCOUNT_FIRM': '会计师事务所',
'UPDATE_DATE': '更新日期',
'ACCEPT_DATE': '受理日期',
'TOLIST_MARKET': '拟上市地点'

}
df = pd.DataFrame(columns=fields.values())
dfs: List[pd.DataFrame] = []
page = 1
while 1:
params = (
('st', 'UPDATE_DATE,SECURITY_CODE'),
('sr', '-1,-1'),
('ps', '500'),
('p', page),
('type', 'RPT_REGISTERED_INFO'),
('sty', 'ORG_CODE,ISSUER_NAME,CHECK_STATUS,CHECK_STATUS_CODE,REG_ADDRESS,CSRC_INDUSTRY,RECOMMEND_ORG,LAW_FIRM,ACCOUNT_FIRM,UPDATE_DATE,ACCEPT_DATE,TOLIST_MARKET,SECURITY_CODE'),
('token', '894050c76af8597a853f5b408b759f5d'),
('client', 'WEB'),
)
url = 'http://datacenter-web.eastmoney.com/api/data/get'
json_response = requests.get(url,
headers=EASTMONEY_REQUEST_HEADERS,
params=params).json()
items = jsonpath(json_response, '$..data[:]')
if not items:
break
page += 1
df = pd.DataFrame(items).rename(
columns=fields)[fields.values()]
dfs.append(df)
if len(dfs) == 0:
return df
df = pd.concat(dfs, ignore_index=True, axis=0)
return df

0 comments on commit 0a89fc0

Please sign in to comment.