그동안 만들었던 것들을 조합하여 스크리닝해보겠습니다.
main.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()
kospi_kosdaq_data = extractor.get_data()
print("--------------")
extracted_data = extractor.extract_finance_data(
[2020, 2021, 2022],
filter_data.filtering_data_that_market_cap_under_thirty_percent(
kospi_kosdaq_data
))
extract_finance_data
에 최근 3개년의 정수를 배열로 넘겨주고, pykrx를 이용하여 불러온 코스피 코스닥 종목들에서 다시 시가총액 하위 30%의 소형주만으로 필터링하여 재무제표를 뽑아봅니다.
엑셀파일로 저장
exporter.export_to_excel_with_many_sheets(
"/YOUR/DIRECTORY/PATH/{file_name}.xlsx",
[
filter_data.filtering_low_per("ALL_DATA_저PER", kospi_kosdaq_data.copy()),
filter_data.filtering_low_per("소형주_저PER", extracted_data.copy()),
filter_data.filtering_low_pbr_and_per("ALL_DATA_저PBR_저PER", 1.0, 10, kospi_kosdaq_data.copy(), True),
filter_data.filtering_low_pbr_and_per("소형주_저PBR_저PER", 1.0, 10, extracted_data.copy()),
filter_data.filtering_high_div("고배당률_리스트", kospi_kosdaq_data.copy()),
filter_data.filtering_high_propensity_to_dividend("소형주 고배당성향", extracted_data.copy()),
filter_data.filtering_low_pfcr("소형주_저PFCR_시총잉여현금흐름", extracted_data.copy()),
filter_data.filtering_low_pbr_and_high_gpa("소형주_저PBR_고GPA", 0.8, extracted_data.copy()),
filter_data.filtering_high_ncav_cap_and_gpa("소형주_고NCAV_GPA_저부채비율", extracted_data.copy()),
filter_data.filtering_profit_momentum("소형주_모멘텀_전분기대비_영업이익순이익_전략", extracted_data.copy()),
filter_data.filtering_value_and_profit_momentum("소형주_밸류모멘텀_전략", extracted_data.copy()),
filter_data.filtering_value_factor("소형주_HIGH_SCORE_Four_value", extracted_data.copy()),
filter_data.filtering_value_factor_upgrade("소형주_강환국_슈퍼가치전략_업글", extracted_data.copy()),
filter_data.filtering_new_F_score_and_low_pbr("소형주_NEW F Score and Low PBR", extracted_data.copy()),
("Extracted_RAW_Data", extracted_data),
("RAW_Data", kospi_kosdaq_data)
]
)
엑셀파일로 만들어서 내보내기를 실행할 exporter 변수의 export_to_excel_with_many_sheet
를 실행해줍니다.
필터 조건에 따라, 일부는 전체종목과 소형주를 각각 실행시켜 필터링합니다.
이때 튜플의 형태로 입력을 하고 있는데,
- 0번째 인덱스에는 파일의 데이터가 담길 sheet의 이름,
- 1번째에는 해당 파일 데이터의 copy를 넘깁니다.
copy를 넘기지 않으면 원본파일이 변할 수 있습니다.
엑셀파일의 맨 마지막에는 추출한 RAW 정보들을 첨부해줍니다.
최종 처리시간 기재
마지막에는 시간계산을 해주고 정보 추출 및 계산, 엑셀파일 생성까지 걸린 최종 시간을 프린트문으로 출력합니다.
end = time.time()
sec = (end - start)
result_list = str(datetime.timedelta(seconds=sec)).split(".")
print(f"Total extracting time : {result_list[0]} ---------------------")
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()
kospi_kosdaq_data = extractor.get_data()
print("--------------")
extracted_data = extractor.extract_finance_data(
[2020, 2021, 2022],
filter_data.filtering_data_that_market_cap_under_thirty_percent(
kospi_kosdaq_data
))
exporter.export_to_excel_with_many_sheets(
"/YOUR/DIRECTORY/PATH/{file_name}.xlsx",
[
filter_data.filtering_low_per("ALL_DATA_저PER", kospi_kosdaq_data.copy()),
filter_data.filtering_low_per("소형주_저PER", extracted_data.copy()),
filter_data.filtering_low_pbr_and_per("ALL_DATA_저PBR_저PER", 1.0, 10, kospi_kosdaq_data.copy(), True),
filter_data.filtering_low_pbr_and_per("소형주_저PBR_저PER", 1.0, 10, extracted_data.copy()),
filter_data.filtering_high_div("고배당률_리스트", kospi_kosdaq_data.copy()),
filter_data.filtering_high_propensity_to_dividend("소형주 고배당성향", extracted_data.copy()),
filter_data.filtering_low_pfcr("소형주_저PFCR_시총잉여현금흐름", extracted_data.copy()),
filter_data.filtering_low_pbr_and_high_gpa("소형주_저PBR_고GPA", 0.8, extracted_data.copy()),
filter_data.filtering_high_ncav_cap_and_gpa("소형주_고NCAV_GPA_저부채비율", extracted_data.copy()),
filter_data.filtering_profit_momentum("소형주_모멘텀_전분기대비_영업이익순이익_전략", extracted_data.copy()),
filter_data.filtering_value_and_profit_momentum("소형주_밸류모멘텀_전략", extracted_data.copy()),
filter_data.filtering_value_factor("소형주_HIGH_SCORE_Four_value", extracted_data.copy()),
filter_data.filtering_value_factor_upgrade("소형주_강환국_슈퍼가치전략_업글", extracted_data.copy()),
filter_data.filtering_new_F_score_and_low_pbr("소형주_NEW F Score and Low PBR", extracted_data.copy()),
("Extracted_RAW_Data", extracted_data),
("RAW_Data", kospi_kosdaq_data)
]
)
end = time.time()
sec = (end - start)
result_list = str(datetime.timedelta(seconds=sec)).split(".")
print(f"Total extracting time : {result_list[0]} ---------------------")
추출 결과
약 45분정도가 걸려 570여개의 종목을 추출하고, 스크리닝하였습니다.
엑셀 파일을 보니 각각의 필터대로 스크리닝 된 데이터들을 확인할 수 있습니다.
약간의 이슈
필터에서 약간의 Warning log를 확인하고 있습니다. 원본 이미지가 변형될 수 있으니 다른 방법으로 조건을 걸으라는 내용인 것 같은데, 데이터를 확인해보니 손상이 오거나 데이터 결손이 생긴 것 같지는 않아서 이것은 시간을 가지고 천천히 대응해보고자 합니다.
다음 포스트에서는 이 시리즈의 후기를 기재해봅니다.
'파이썬으로 종목 스크리너 만들기' 카테고리의 다른 글
뇌동매매 금지 - 10. Bug fix와 이것저것 추가하기 - 1 (0) | 2022.09.12 |
---|---|
뇌동매매 금지 - 9. 스크리너 제작 후기 (0) | 2022.09.12 |
뇌동매매 금지 - 7. 종목 스크리닝을 위한 필터 만들기 (0) | 2022.09.12 |
뇌동매매 금지 - 6. 스크리닝 결과를 엑셀로 저장할 메소드 만들기 (0) | 2022.09.12 |
뇌동매매 금지 - 5. 추출하고 계산한 분기별 데이터 검증해보기 (0) | 2022.09.12 |
댓글