使用EDGAR数据库将另一家公司的财政年度同步到另一家公司



我正在做一个由前一个小组创建的学校项目,我的任务之一是根据重点公司的开始日期同步会计年度的开始日期。这是用于使用EDGAR的API从EDGAR获取json的代码。

d = requests.get(f"https://data.sec.gov/api/xbrl/companyconcept/CIK{cik}/us-gaap/{kpi}.json",
headers=self.HEADER).json()

然后使用panda将其转换为数据帧,然后打印出

df = pd.DataFrame.from_dict(d)
print(df.to_string())

我使用某个KPI的CKI获取公司的财政年度数据,在本例中为其AccountsPayableCurrent,但当我打印数据时,我看不到与开始日期相关的列,只看到结束日期和其他列。样本输出如下:

cik分类标记标签描述实体名称866787美元美国gaap账户应付账款,截至资产负债表日的已发生负债(通常已收到发票)的当前账面价值,并应支付给实体业务中使用的已收到商品和服务的供应商。用于反映负债的当前部分(在一年内到期,如果更长,则在正常运营周期内到期)。AUTOZONE INC[{'end':"2009-08-29","val':2118746000,"accn":"0000950123-09-071593","fy':2010,"fp":"Q1","form":"10-Q","filed":"2009-12-17"},{'end':"2009.08--29",{'end':'2009-08-29','val':2118746000,'accn':'0000950123-10-058650','fy':2010,'fp':'Q3','form':'10-Q','filed':'2010-06-16'},{'end':'2009.08-29','val':21187.46000,'accn':'0000950123-10-095687','fy':2010,'fp':'fy','form':'10-K','fild':'2010-10-25','frame':'CY2009Q3I'},{'end':"2009-11-21",'val':2187347000,'accn':"0000950123-09-071593",'fy':2010,'fp':"Q1",'form':"10-Q",'filed':"2009.-12-17",'frame':"CY2009Q4I"},{'end':"2010-02-13",'val':2144995000,'accn":"0000950 123-10-025907",'ff':2010,{'end':'2010-05-08','val':2235766000,'accn':'0000950123-10-058650','fy':2010,'fp':'Q3','form':'10-Q','filed':'2010.06.16','frame':'CY2010Q1I'},{'end':'2010-2011年08月28日,'val':22433050000,'accn':'00000950123-10-095687','fy':2010,'fp':'fy','form':'10-K','file':'2010年10月25日'}

有什么方法可以使用提供的数据同步财政年度吗?我唯一能想到的同步方法是抓住开始日期,让它根据另一家公司的开始日期打印出来,但我看不到开始日期。

您可以尝试以下操作。我根据向后搜索得到的名称选择了cik。我随机选择了kpi

import requests
import pandas as pd
cik = "0000866787"
kpi = "AccountsPayableCurrent"
url = f"https://data.sec.gov/api/xbrl/companyconcept/CIK{cik}/us-gaap/{kpi}.json"
response = requests.get(url, headers={"User-Agent":"Java-http-client/"})
response = requests.get(url, headers=headers)
json = response.json()
df = pd.DataFrame(json['units']['USD'])

输出:

end val accn    fy  fp  form    filed   frame
0   2009-08-29  2118746000  0000950123-09-071593    2010    Q1  10-Q    2009-12-17  NaN
1   2009-08-29  2118746000  0000950123-10-025907    2010    Q2  10-Q    2010-03-18  NaN
2   2009-08-29  2118746000  0000950123-10-058650    2010    Q3  10-Q    2010-06-16  NaN
3   2009-08-29  2118746000  0000950123-10-095687    2010    FY  10-K    2010-10-25  CY2009Q3I
4   2009-11-21  2187347000  0000950123-09-071593    2010    Q1  10-Q    2009-12-17  CY2009Q4I

然后可以使用df[['fy', 'fp','val']]选择相关列。您还可以从fyfp列创建日期时间索引。

我没有编程解决方案,但我确实对此有所了解,这可能会帮助您找到解决方案。

你需要知道公司在一年中的哪个月结束其财政年度。向美国证券交易委员会报告的大多数公司使用日历结束日期(12月31日)作为其财政年度结束日期,但也有相当多的公司使用其他月份结束日期。Autozone(AZO)在每年的8/31结束其财政年度。Target(TGT)于每年的1/31结束其财政年度。如果你放任不管,这会让你发疯。记住,你所需要做的就是确定财政年度结束的月份,确切的财政年度结束日期将是该月的最后一天。由此可以计算季度结束日期。

公司被要求在其财政期结束后XX天内提交其报告,具体取决于其提交的";状态";。状态时间框架在这里。。。https://www.sec.gov/corpfin/cf-manual/topic-1#:~:text=90%20天%20之后%20财政,汇总%20加速%20文件%20规则向下滚动至相关表格的第1330.1节。

如果你再往下读一点,你会发现有关于周末和假期、延期等的规定。这意味着";归档";日期在识别实际财政年度结束日期方面几乎是无用的;"状态";公司的,是否有延期,延期时间、次数等。我认为事实文件中没有任何这些信息。不过,并没有失去一切。

当公司申请成为上市公司时,必须确定其财政年度的截止月份。如果他们想更改财年结束日期,还必须提交8K。我不知道EDGAR中是否有这段数据(财政年度末月),但如果有,则需要同步日期。我从第三方供应商(Zack’s Research)免费获得财政年度末的工资。我认为Zack是从美国证券交易委员会或财政部得到的。很抱歉回复太冗长。我希望它能有所帮助!

以下是扎克的屏幕截图链接。https://www.zacks.com/screening/stock-screener转到Company Descriptors类别,您将看到";财政年度结束月份";

我不得不解决类似的问题。这是我的解决方案。

您正在寻找年度公司文件(即10-K文件)中报告的period of report属性。即使该属性指的是";周期";,实际上,它定义了财政年度的结束,并表示一个日期而不是一个时期。

该属性也包括在其他SEC表格类型中,如10-Q(=季度报告)、4(内幕交易活动)、13F(机构所有权)等。对于您的用例,重要的是只考虑年度报告(10-K文件),否则您最终会得到";财政年度";不是一年,而是几个月。

我们的第一个目标是找到您感兴趣的公司提交的所有10-K文件。为了简单起见,我们在这里考虑所有10-K申请。您可以稍后在搜索查询中添加一个简单的CIK过滤器。Python dictquery定义了搜索查询参数。我们只对10-K提交(formType:"10-K")感兴趣,而忽略修改后的10-K(AND NOT formType:"10-K/A")以及10-K的延迟提交通知(AND NOT formType:"NT 10-K")。

from sec_api import QueryApi
queryApi = QueryApi(api_key="YOUR_API_KEY")

query = {
"query": { "query_string": { 
"query": "formType:"10-K" " + 
"AND NOT formType:"NT 10-K" " + 
"AND NOT formType:"10-K/A" " +
"AND filedAt:[2021-01-01 TO 2021-12-31]",
"time_zone": "America/New_York"
} },
"from": "0",
"size": "10",
"sort": [{ "filedAt": { "order": "desc" } }]
}
response = queryApi.get_filings(query)

responsedict包含我们在response["filings"]中查找的10-K文件,并包括每个文件的periodOfReportcik属性。打印响应会产生以下结果:

list(map(lambda x: {"formType": x["formType"], "periodOfReport": x["periodOfReport"]}, response["filings"]))
[{'formType': '10-K', 'periodOfReport': '2021-11-30'},
{'formType': '10-K', 'periodOfReport': '2021-10-31'},
{'formType': '10-K', 'periodOfReport': '2021-10-31'},
{'formType': '10-K', 'periodOfReport': '2021-09-30'},
{'formType': '10-K', 'periodOfReport': '2021-09-30'},
{'formType': '10-K', 'periodOfReport': '2021-09-30'},
{'formType': '10-K', 'periodOfReport': '2021-09-30'},
{'formType': '10-K', 'periodOfReport': '2021-09-30'},
{'formType': '10-K', 'periodOfReport': '2021-09-30'},
{'formType': '10-K', 'periodOfReport': '2021-09-30'}]

使用以下代码生成公司CIK和相应财政年度的列表:


period_by_cik = {}
period_by_ticker = {}
for filing in response["filings"]:
cik, ticker, periodOfReport = filing["cik"], filing["ticker"], filing["periodOfReport"]
if not cik in period_by_cik:
period_by_cik[cik] = []
if not periodOfReport in period_by_cik[cik]:
period_by_cik[cik].append(periodOfReport)
if len(ticker) > 0:
if not ticker in period_by_ticker:
period_by_ticker[ticker] = []
if not periodOfReport in period_by_ticker[ticker]:
period_by_ticker[ticker].append(periodOfReport)

period_by_cik将CIK映射到其最近报告的财政年度。

{'1206942': ['2021-10-31'],
'1341726': ['2021-09-30'],
'1377167': ['2021-09-30'],
'1435181': ['2021-09-30'],
'1502966': ['2021-09-30'],
'1592782': ['2021-09-30'],
'1725516': ['2021-11-30'],
'1844817': ['2021-09-30'],
'1853314': ['2021-09-30'],
'72633': ['2021-10-31']}

period_by_ticker将股票代码映射到其最近报告的财政年度。

{'AACI': ['2021-09-30'],
'DIGP': ['2021-09-30'],
'FGCO': ['2021-09-30'],
'GIAC': ['2021-09-30'],
'GSPE': ['2021-09-30'],
'NBLD': ['2021-11-30'],
'NRT': ['2021-10-31'],
'NUKK': ['2021-09-30'],
'PHBI': ['2021-09-30']}

相关内容

  • 没有找到相关文章

最新更新