본문 바로가기

API

[전자공시 Dart API] 회사분할결정 공시후 주가 확인

반응형

전자공시 Dart API의 회사분할결정 공시의 데이터를 가져와서 공시접수일 이후

주가 변동을 확인하는 방법을 알아보겠습니다.

본인의  인증키(API Key)가 필요하니 필요하신분은 아래를 참고 부탁드립니다.

 

1. 가입 및 인증키 확인(Skip 가능)

2. 회사합병결정 공시 리스트 가져오기

3. 회사분할결정 상세데이터

4. 주가 확인

 

1. 가입 및 인증키 확인(Skip 가능)

https://yenpa.tistory.com/23

 

[전자공시 Dart API] 가입 및 인증키(API Key) 확인하기

1. 사이트 가입 2. 인증키(API Key) 확인하기 1. 사이트 가입 사이트에 접속합니다. https://opendart.fss.or.kr/ 전자공시 OPENDART 시스템 --> 시스템 점검으로 모든 서비스 이용이 일시적으로 중단되어니 양

yenpa.tistory.com

 

2. 회사분할결정 공시 리스트 가져오기

공시 검색에서 전체 공시 리스트 중 수집하고 그 리스트 중에서 "주요사항보고서(회사분할결정)"만 

따로 저장하겠습니다.

crtfc_key는 본인의 데이터가 필요합니다.

# 회사별 회사분할결정 상세확인
detail = pd.DataFrame()
exec_check = [] #회사별 중복실행 방지
for i, r in df.iterrows():
    #주요사항보고서 회사분할결정 상세 요청인자
    #corp_code이외에는 위에서 사용한 parameter를 그대로 사용.
    crtfc_key=crtfc_key
    corp_code=r['corp_code']
    bgn_de=bgn_de
    end_de=end_de
    
    if corp_code in exec_check:
        continue
    
    exec_check.append(corp_code)
    
    url = 'https://opendart.fss.or.kr/api/cmpDvDecsn.json'
    params = {
        'crtfc_key': crtfc_key,
        'corp_code' : corp_code,
        'bgn_de' : bgn_de,
        'end_de' : end_de,
    }
    
    #결과를 json형태로 저장
    results = requests.get(url, params=params).json()
    #결과중 실제 공시정보가 있는부분만 DataFrame으로 저장
    results_df_detail = pd.DataFrame(results['list'])
    #하나의 DataFrame으로 만듬
    detail = pd.concat([detail,results_df_detail])
    
# 필요한 column만 따로 저장
detail=detail[['rcept_no','dv_mth']]
#report no를 index로
detail=detail.set_index('rcept_no')

입력 요청인자 설정부분입니다.

bgn_de(시작날짜), end_de(종료날짜) 를 2022/01/01 ~ 2022/03/31로 했고,

pblntf_detail_ty(공시유형)에서 B001(주요사항보고서)만 검색하도록 설정했습니다.

crtfc_key=crtfc_key
corp_code=r['corp_code']
bgn_de=bgn_de
end_de=end_de

요청인자중 crtfc_key는 필수 인자이고 나머지는 옵션입니다. 이외에도 다른 인자들이 더 있으니 자세한 사항은

Opendart Homepage를 참조 부탁드립니다.

pblntf_detail_ty의 상세유형입니다. 사업보고서 및 반기보고서 들만 따로 검색이 되는데,

이번에는 회사분할결정이 들어가 있는 주요사항 보고서를 설정했습니다.

 

결과를 확인해보겠습니다. 17개의 공시가 확인이 됩니다.

3. 회사분할결정 상세데이터

2번에서 구한 회사분할결정의 공시리스트에 대한 상세 정보를 확인하겠습니다.

아래는 해당 코드가 되겠습니다.

# 회사별 회사분할결정 상세확인
detail = pd.DataFrame()
exec_check = [] #회사별 중복실행 방지
for i, r in df.iterrows():
    #주요사항보고서 회사분할결정 상세 요청인자
    #corp_code이외에는 위에서 사용한 parameter를 그대로 사용.
    crtfc_key=crtfc_key
    corp_code=r['corp_code']
    bgn_de=bgn_de
    end_de=end_de
    
    if corp_code in exec_check:
        continue
    
    exec_check.append(corp_code)
    
    url = 'https://opendart.fss.or.kr/api/cmpDvDecsn.json'
    params = {
        'crtfc_key': crtfc_key,
        'corp_code' : corp_code,
        'bgn_de' : bgn_de,
        'end_de' : end_de,
    }
    
    #결과를 json형태로 저장
    results = requests.get(url, params=params).json()
    #결과중 실제 공시정보가 있는부분만 DataFrame으로 저장
    results_df_detail = pd.DataFrame(results['list'])
    #하나의 DataFrame으로 만듬
    detail = pd.concat([detail,results_df_detail])
    
# 필요한 column만 따로 저장
detail=detail[['rcept_no','dv_mth']]
#report no를 index로
detail=detail.set_index('rcept_no')

detail이라는 DataFrame에 회사분할결정 상세의 전체 결과를 저장합니다.

# 회사별 회사분할결정 상세확인
detail = pd.DataFrame()

회사분할결정 상세는 요청인자를 corp_code를 받게 됩니다.

3개월내 한개의 회사에서 여러건의 자기주식취득(정정포함) 공시가 있는 경우가 있어

회사마다 1번만 실행하고 중복 실행 방지를 위한 exec_check 리스트를 만들었습니다.

exec_check = [] #회사별 중복실행 방지
for i, r in df.iterrows():    
    if corp_code in exec_check:
        continue
    
    exec_check.append(corp_code)

회사분할결정 상세를 가져와서 결과를 detail에 저장했습니다.

url = 'https://opendart.fss.or.kr/api/cmpDvDecsn.json'
params = {
    'crtfc_key': crtfc_key,
    'corp_code' : corp_code,
    'bgn_de' : bgn_de,
    'end_de' : end_de,
}

#결과를 json형태로 저장
results = requests.get(url, params=params).json()
#결과중 실제 공시정보가 있는부분만 DataFrame으로 저장
results_df_detail = pd.DataFrame(results['list'])
#하나의 DataFrame으로 만듬
detail = pd.concat([detail,results_df_detail])

필요한 column만 따로 저장하고 공시 접수일자를 index로 만듭니다.

# 필요한 column만 따로 저장
detail=detail[['rcept_no','dv_mth']]
#report no를 index로
detail=detail.set_index('rcept_no')

detail의 결과를 보겠습니다. dv_mth는 분할 방법입니다. 

분할 방법에서 물적분할, 인적분할을 나누어서 데이터를 확인하고 싶었는데

해당 기간에는 물적분할만 있었습니다.

3년 정도 데이터를 봐도 인적분할의 경우가 몇건이 안되어 물적분할, 인적분할을 분류하지는 않았습니다.

for mth in detail['dv_mth']:
    if '물적분할' in mth:
        print('물적분할')
    elif '인적분할' in mth:
        print('인적분할')
    else:
        print('기타')

 

4. 주가확인

두개의 데이터를 병합해서 df_all이라는 DataFrame에 저장합니다.

#inner join으로 두개 병합
df_all = pd.concat([df,detail], axis=1, join='inner')    
df_all['rcept_date'] = pd.to_datetime(df_all['rcept_dt'], format='%Y%m%d')

financedatareader를 이용해서 회사별 2022-01-01 ~ 2022-09-30의 주가를 가져왔습니다.

import matplotlib.pyplot as plt
import FinanceDataReader as fdr
plt.rc('font', family='NanumGothic') 

cols=['corp_name','stock_code','rcept_dt','rcept_date']
for i, r in df_all[cols].iterrows():
    corp_name = r['corp_name']
    stock_code = r['stock_code']
    rcept_date = r['rcept_date'] #공시 접수일자
    
    print('corp_name : ' + corp_name)
    print('접수일자 : ' + rcept_date.strftime('%Y-%m-%d'))
    
    #주가정보
    code=stock_code
    startdate='2022-01-01'
    enddate='2022-09-30'
    df_stock=fdr.DataReader(code,startdate,enddate)[['Close']]
    
    plt.figure(figsize=(6,2))
    plt.plot(df_stock.index, df_stock['Close'])
    plt.title(corp_name)
    plt.xticks(rotation=90)
    
    plt.axvline(x = rcept_date, color = 'red') #공시 접수일자
    plt.show()

설치 및 사용법은 아래 정보를 참고하셔도 좋습니다.

https://yenpa.tistory.com/19

 

[FinanceDataReader] 설치 및 주식 주가 정보 가져오기(코스피, 코스닥)

국내 주식 정보를 가져와 보겠습니다. 1. FinanceDataReader 설치 2. 종목 정보 가져오기 3. 주가 정보 가져오기 1. FinanceDataReader 설치 명령프롬프트에서 아래의 명령어로 설치 가능합니다. anaconda의 경

yenpa.tistory.com

 

마지막으로 결과를 보겠습니다.

 

 

4개 이외에도 몇 개의 그래프가 더있으니 직접확인해 보셔도 좋을 것 같습니다.

이상으로 회사분할결정 공시접수일 이후 주가 변동을 확인하는 방법을 알아봤습니다.

반응형