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

뇌동매매 금지 - 11. S-RIM을 이용한 목표주가 계산해보기 - 4. S-RIM 적정주가를 이용한 스크리닝 필터 만들기

by 유티끌 2022. 11. 27.

저번 포스팅에서는 1차 스크리닝된 기업목록을 대상으로 S-RIM을 이용한 적정주가를 계산해보았습니다.

이번 포스팅에서는 적정주가를 이용한 필터를 만들어봅니다.


11. S-RIM을 이용한 목표주가 계산해보기 - 4. S-RIM 적정주가를 이용한 스크리닝 필터 만들기

저번 포스팅에서 얻은 결과를 대상으로, 다시 시가총액을 기준으로 하위 3~40%의 소형주들만 추려내어 재무제표를 조회하여 여러 데이터들을 가져옵니다. (저의 이전 포스팅들을 참고해주세요.)

그 이후에 재무제표를 조회하여 얻어오는 데이터들을 기반으로 각종 필터링을 진행하는 데요, S-RIM 을 이용한 적정주가를 도출해낸만큼, 이것을 이용해서 필터를 만들어봅니다.

전체종목을 대상으로 괴리율 계산하기.

괴리율 계산방식에 대해서는, 기존에 참고했던 위키독스 페이지를 참고했습니다. 종가에서 적정가격을 뺀 금액으로 계산하시면 더 알기 쉬울 것 같기도 하네요.

https://wikidocs.net/94805

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을 이용한 기업가치 와 적정주가, 그리고 이것들을 이용한 필터조건식을 만들어보았습니다.

전체적인 코드들에 대해서는 저의 기존 포스팅들을 꼭 참고해주시면 되겠습니다..!

끝!

반응형

댓글