본문 바로가기
파이썬으로 종목 스크리너 만들기

뇌동매매 금지 - 10. Bug fix와 이것저것 추가하기 - 1

by 유티끌 2022. 9. 12.

이 시리즈를 작성할 때에는 2022년 1분기 사업보고서가 발행되고 나서였습니다. 이후에 조금씩 수정을 하다가, 2분기 사업보고서가 새로 발행되고 나서 제대로 동작하지 않는다는 것을 알게 되어서 수정도 하고, 또 이것저것 추가도 하였습니다.

마침 몇 번인가 잘 안돌아가는 것 같다는 문의메일을 받았기에, 이 참에 수정내용을 좀 더 기재해볼까합니다.

다만 기존의 포스트를 수정하지 않는 것은, 이러한 흐름으로 제작되었다~ 라는 것을 기록으로 남기기 위함입니다.


개별 종목 재무데이터 조회하기

이전 포스트까지 기록했던 것은 시가총액이 일정분위 이하의 데이터만 조회하는 것이었습니다. 따라서 재무제표 데이터 계산을 검증을 위해 하나의 종목만 조회해본다거나, 제가 가진 종목만 조회해보고자할때 이것을 할 수 없는 불편함이있었죠.

이번에 2분기 사업보고서를 조회할때는 제가 가진 종목이 감사하게도 매매가격이 올라서 (=시가총액의 상승) 필터에는 걸리지 않는 것을 확인하게 되었습니다.

제가 가진 종목의 사업이 어떻게 변화하고 있는지, 팔아야할지 계속 가져가야할지 판단을 하기 위해서 개별 종목만 따로 조회할 수 있게 해야했습니다.

1. filter_by_condition.py

재무데이터를 가지고 일정한 필터링을 할 수 있게, 조건을 기재해놓은 filter_by_condition.py 에 추가 필터링 조건을 기재하였습니다.

def filtering_data_that_specific_data(code_list: array, data: pd.DataFrame):
    """
    특정 기업만을 추출함.
    :param code_list:
    :param data:
    :return:
    """

    return data[data['종목코드'].isin(code_list)]

기업의 코드를 배열형태로 받고, 전체 종목안에서 입력받은 기업의 코드를 이용해 해당 기업만 추려냅니다.
왜 기업의 코드를 배열형태로 넘기냐하면, 제가 가진 종목의 갯수가 1개 이상이기 때문입니다 ㅋㅋ;

2. export_to_excel.py

다음으로는 엑셀파일로 내보내는 역할을 하는 코드에, 메소드를 하나 추가합니다. 아마도 원래 있었...던 기억이라, 기존의 메소드에서 수정을 합니다.

    def export_to_excel(self, file_path, sheet_name, file):
        print("Exporting result to excel file.....")
        writer = self.pandas.ExcelWriter(file_path, engine='openpyxl')
        file.to_excel(writer, sheet_name=sheet_name)

        writer.save()

시트 하나만 생성하는 메소드입니다. 파라미터로는 파일이 저장될 위치와, 시트네임, 엑셀파일을 생성할 데이터를 전달받습니다.

3. specific_data.py

main.py 이외에, 전체 코드를 실행시켜줄 입구역할을 하는 파일을 하나 더 추가로 생성해줍니다. 파일의 위치는 프로젝트 폴더 최상위에 생성해주면 됩니다. (main.py 와 같은 레벨)

import datetime
import time
import filter_data
from extract_data.extract import Extract
from export_data import ExportToData

start = time.time()

extractor = Extract()
exporter = ExportToData()

# calling kospi and kosdaq data using pykrx and OpenFinanceReader
kospi_kosdaq_data = extractor.get_data()

print("--------------")

# extract and calculating finance data recent 3 years data
extracted_data = extractor.extract_finance_data(
    [2020, 2021, 2022],
    filter_data.filtering_data_that_specific_data(
        ['005930','035420'],
        kospi_kosdaq_data
    ))

exporter.export_to_excel(
    f"/YOUR/DIRECTORY/PATH/{datetime.datetime.today().strftime('%Y%m%d')}_specific_data.xlsx",
    "specific_data",
    extracted_data
)

end = time.time()
sec = (end - start)

result_list = str(datetime.timedelta(seconds=sec)).split(".")
print(f"Total extracting time : {result_list[0]} ---------------------")

기존의 main 파일에서의 동작과 큰 차이점은 없고, 재무데이터를 기반으로 각종 필터링된 데이터를 만드는 내용만 생략되어있습니다.

extractor.extract_finance_data() 를 실행할 때에, 조회하고 싶은 연도의 배열과, 아까 filter_by_condition.py 에 추가한 메소드의 결과를 같이 넘겨주도록 합니다.

filtering_data_that_specific_data() 메소드에는 다시 조회하고싶은 종목을 배열형태로 넘기고, 코스피 코스닥 전체 종목이 들어있는 kospi_kosdaq_data 변수도 같이 지정합니다.

이렇게 하고 파이참에서 실행을 할 때 main 대신 이 파일을 실행하면 됩니다.


이렇게 하면, 코스피 코스닥을 전부 조회한 데이터에서, 내가 알고싶은 종목만을 종목번호로 찾아서 다시 해당 종목만 재무데이터를 조회한 결과를 하나의 엑셀데이터로 확인할 수 있습니다.

이렇게하면 매번 300여개 이상의 데이터를 조회할 필요도 없고, 주가가 올라서 필터링조건에 걸려 조회되지 않는 내 보유주식에 대해, 분기별 재무데이터 현황을 알 수 있습니다.

다음 포스트에서는 재무데이터를 이용한 팩터데이터 생성에 대해 버그 수정과 함께 몇가지 데이터 추가 및 리팩토링을 진행합니다.

반응형

댓글