저번 포스팅에서는 1차 스크리닝된 기업목록을 대상으로 S-RIM을 이용한 적정주가를 계산해보았습니다.
이번 포스팅에서는 적정주가를 이용한 필터를 만들어봅니다.
11. S-RIM을 이용한 목표주가 계산해보기 - 4. S-RIM 적정주가를 이용한 스크리닝 필터 만들기
저번 포스팅에서 얻은 결과를 대상으로, 다시 시가총액을 기준으로 하위 3~40%의 소형주들만 추려내어 재무제표를 조회하여 여러 데이터들을 가져옵니다. (저의 이전 포스팅들을 참고해주세요.)
그 이후에 재무제표를 조회하여 얻어오는 데이터들을 기반으로 각종 필터링을 진행하는 데요, S-RIM 을 이용한 적정주가를 도출해낸만큼, 이것을 이용해서 필터를 만들어봅니다.
전체종목을 대상으로 괴리율 계산하기.
괴리율 계산방식에 대해서는, 기존에 참고했던 위키독스 페이지를 참고했습니다. 종가에서 적정가격을 뺀 금액으로 계산하시면 더 알기 쉬울 것 같기도 하네요.
filter_by_condition.py
def filtering_s_rim_disparity_all_data(sheet_name, df: pd.DataFrame):
df["S-RIM 괴리율"] = df["종가"] / df["S-RIM -20%"] * 100
return (sheet_name,
df.sort_values(by=["S-RIM 괴리율"], ascending=True).reset_index(drop=True)
)
위 식으로는 괴리율이 낮으면 낮을수록, 현재주가와 적정주가의 차이가 큰 것입니다. 예상ROE가 -20%보다 낮은 경우에는 구매해도된다고 판단하고 있으므로, 계산 기준을 -20% 일때의 가격으로 선정했습니다.
소형주 대상으로 S-RIM주가 괴리율과 NCAV 순위를 생성한 후 점수를 매겨보기
def filtering_s_rim_disparity_and_high_nav(sheet_name ,df: pd.DataFrame):
df.drop(
df[df["NCAV/MC"] <= 0.0].index,
inplace=True
)
df["연도"] = pd.to_datetime(df["연도"])
latest_date = df["연도"].max()
df = df[df["연도"]==latest_date]
df["S-RIM 괴리율"] = df["종가"] / df["S-RIM -20%"] * 100
df["NCAV/MC rank"] = df["NCAV/MC"].rank(ascending=False)
df["S-RIM 괴리율 rank"] = df["S-RIM 괴리율"].rank(ascending=True)
df["Total score"] = df["NCAV/MC rank"] + df["S-RIM 괴리율 rank"]
return (sheet_name,
df.sort_values(by=["Total score"], ascending=True).reset_index(drop=True)
)
그 다음, 소형주들을 대상으로, 괴리율계산과 함께 NCAV값에 대해 점수를 매기고 랭크를 계산하는 필터를 만들었습니다. NCAV
는 순유동자산으로, 유동자산에서 부채총계를 뺀 값입니다. 이것을 상장주식 총수로 나누어준다면, 회사가 망해도 주당 얼마정도는 돌려받을 수 있다~ (회사가 망해도 1주당 얼마의 가치는 있는거다) 라고 판단할 수 있겠습니다.
이 때, 연도
컬럼을 문자에서 날짜로 변환한 다음, 최신날짜만을 구해서 계산합니다. (현재 계산하고 있는 S-RIM 기업가치 데이터는 최신의 자본총계와 ROE만을 반영하고 있기 때문에 과거데이터는 불필요하므로)
엑셀파일로 내보내기
기존에 main.py
에 추가해줍니다.
기존에 만들어지던 엑셀파일에, 시트로 추가되게됩니다.
exporter.export_to_excel_with_many_sheets(
f"/Users/yoodahun/Documents/Dahun Document/Investment information/{datetime.datetime.today().strftime('%Y%m%d')}_screeningData.xlsx",
[
.
.
.
filter_data.filtering_s_rim_disparity_all_data("S-RIM ALL_DATA", kospi_kosdaq_data.copy()),
filter_data.filtering_s_rim_disparity_and_high_nav("소형주_S-RIM_괴리율_고NAV", extracted_data.copy()),
.
.
.
("Extracted_RAW_Data", extracted_data),
("RAW_Data", kospi_kosdaq_data)
]
)
이렇게 S-RIM을 이용한 기업가치 와 적정주가, 그리고 이것들을 이용한 필터조건식을 만들어보았습니다.
전체적인 코드들에 대해서는 저의 기존 포스팅들을 꼭 참고해주시면 되겠습니다..!
끝!
'파이썬으로 종목 스크리너 만들기' 카테고리의 다른 글
뇌동매매 금지 - 11. S-RIM을 이용한 목표주가 계산해보기 - 3. S-RIM 기업가치로 스크리닝한 기업들에 대해 목표주가 계산하기 (0) | 2022.11.27 |
---|---|
뇌동매매 금지 - 11. S-RIM을 이용한 목표주가 계산해보기 - 2. S-RIM 데이터 크롤링하기 (0) | 2022.11.26 |
뇌동매매 금지 - 11. S-RIM을 이용한 목표주가 계산해보기 - 1. S-RIM 개념 알아보기 (0) | 2022.11.26 |
뇌동매매 금지 - 10. Bug fix와 이것저것 추가하기 - 3 (1) | 2022.09.12 |
뇌동매매 금지 - 10. Bug fix와 이것저것 추가하기 - 2 (0) | 2022.09.12 |
댓글