인공지능과 경제

퀀트가치투자전략 Quantitative value investing 총정리

2에코랩 2023. 3. 8.

오늘은 퀀트가치투자전략 Quantitative value investing에 대해서 살펴보도록 하겠습니다.


퀀트가치투자전략(Quantitative value investing)이란 기업의 재무정보나 가치관련 지표를 분석하여 주식투자를 하는 방법론입니다. 퀀트가치투자에서는 통계적인 방법을 사용하여 기업의 가치를 측정하고, 고평가되어 있는 기업 주식을 저평가되어 있는 기업 주식과 교환하는 방식으로 수익을 추구합니다.


Quantitative value investing 출처 : alphaarchitect.com

 

퀀트가치투자에서는 대부분 기업의 재무제표에서 추출한 여러 가치 지표를 사용합니다. 이러한 지표들은 주로 주가 대비 기업의 가치나 수익성을 평가하는 지표들입니다. 대표적인 지표로는 주가순자산비율(PBR), 주가현금흐름비율(PCF), 주가매출비율(PSR), 주가이익비율(PER) 등이 있습니다.

 

이러한 지표들을 통해 기업의 가치를 평가하고, 저평가된 기업의 주식을 매수하여 가치를 추구하는 것이 퀀트가치투자의 기본적인 전략입니다. 이를 위해 컴퓨터 프로그램과 수학적 모델을 사용하여 분석을 진행하며, 대규모 투자를 할 때 보다 높은 효율성을 가지고 투자를 수행할 수 있습니다.

 

퀀트가치투자전략(Quantitative value investing)에 대해서 조금 더 자세히 살펴보도록 하겠습니다.

 

퀀트가치투자전략(Quantitative value investing)이 중요한 이유는 다음과 같습니다.


퀀트가치투자전략은 전통적인 가치투자와 현대적인 퀀트투자의 결합으로 인해 많은 투자자들이 주목하는 전략 중 하나입니다. 이전에는 가치투자자들이 주로 재무제표를 분석하고 기업의 재산 가치 등을 고려하여 주식을 선택하는 전통적인 방식을 사용했습니다. 그러나 이제는 컴퓨터와 데이터 분석 기술이 발전하면서, 보다 정확하고 체계적인 방식으로 가치투자를 할 수 있는 퀀트가치투자가 더욱 중요해졌습니다.

This example is provided for illustration purposes only 출처 : alphaarchitect.com

 

퀀트가치투자는 주식 선택에 있어서 객관적이고 체계적인 방법론을 제공하므로, 투자자들이 감정적으로 투자하는 것을 방지할 수 있습니다. 또한, 이전에는 재무제표 분석을 할 때 수작업으로 수행하였지만, 퀀트가치투자는 컴퓨터 프로그램을 사용하여 보다 정확하고 빠르게 분석할 수 있습니다. 이를 통해 투자자들은 시간과 비용을 절약하고, 투자 결정에 대한 신뢰도를 높일 수 있습니다.

 

또한, 퀀트가치투자는 장기적인 관점에서 투자를 수행하기 때문에, 주가의 일시적인 변동에 크게 영향을 받지 않습니다. 따라서, 장기적인 관점에서 회사의 가치가 상승할 것으로 판단되는 경우에는 적극적으로 주식을 매수할 수 있습니다. 이를 통해, 장기적인 관점에서 안정적인 수익을 추구할 수 있습니다.

 

마지막으로, 퀀트가치투자는 과거 데이터를 기반으로 투자를 수행하기 때문에, 주식 시장의 변동성이 높은 상황에서도 상대적으로 안정적인 수익을 추구할 수 있습니다. 따라서, 주식시장이 불안정할 때에도 안정적인 수익을 추구하고자 하는 투자자들에게 매우 적합한 전략입니다.

 

퀀트가치투자전략(Quantitative value investing)를 모멘텀 전략과 비교하면 다음과 같습니다.


 

Strategy 개념 중요한 이유 방법 및 절차 알고리즘
Momentum
Trading
상승/하락 추세를 따라 매매하는 전략 최근 시장 흐름을 이용하여 수익을 창출 절대 모멘텀, 상대 모멘텀, 이동평균선 모멘텀, 모멘텀 리밸런싱 등 상대강도지수, 스토캐스틱 오늘 값, 이동평균선
Quantitative
Value
Investing
재무제표, 자산가치 등의 지표를 분석하여 주식가치를 판단하는 전략 시장의 과소평가 주식을 발굴하여 투자 수익을 높임 재무지표 분석, 가치평가 모델, 주가 대비 PBR, PER 등 평가지표 F-Score, Piotroski Score, Earnings Yield, Dividend Yield, Price-to-Book Ratio, Price-to-Earnings Ratio 등

 

퀀트가치투자전략(Quantitative value investing)의 방법과 절차는 다음과 같습니다.


 

단계 방법 설명
1 재무제표 분석 기업의 재무제표 분석을 통해 매출액, 영업이익, 순이익, 자산, 부채, 자본 등을 파악
2 재무비율 분석 재무제표 분석을 통해 다양한 재무비율을 계산하여 기업의 재무건전성 파악
3 가치평가 모형 적용 P/E, P/B, DCF 등 다양한 가치평가 모형을 적용하여 기업의 내재가치 계산
4 시장가와 비교 기업의 내재가치와 현재 시장가를 비교하여 저평가 여부를 파악
5 매수 결정 기업이 저평가된 경우 매수 결정
6 종목 선정 매수 결정된 기업을 포함하여 포트폴리오 구성
7 리밸런싱 주기적으로 포트폴리오를 재조정하여 위험관리 및 수익률 극대화

 

퀀트가치투자전략(Quantitative value investing)의 주요 알고리즘은 다음과 같습니다.


Best Valuation Metric 출처 : alphaarchitect.com

알고리즘 설명
Piotroski F-Score 회사의 재무 상태를 9가지 측면에서 분석하여 스코어를 계산하여 예측에 활용
Magic Formula ROC(운영 자본 수익률)과 P/E 비율을 기반으로하는 가치 투자 전략
Value Composite 다양한 가치 투자 지표를 조합하여 기업의 가치를 측정하는 데 사용됨
Dividend Yield 배당금의 비율을 계산하여 저평가된 회사를 찾는 데 사용됨
Earnings Yield 기업의 순이익을 주가로 나눈 비율을 계산하여 저평가된 기업을 찾는 데 사용됨
Price-to-Book Ratio 주가와 순자산가치 비율을 비교하여, 기업의 가치를 측정하는 데 사용됨
Price-to-Earnings Ratio 주가와 주당순이익 비율을 비교하여, 기업의 가치를 측정하는 데 사용됨
Discounted Cash Flow Analysis 기업의 미래 현금 흐름을 예측하여, 기업의 가치를 측정하는 데 사용됨

 

Piotroski F-Score 파이썬 코드 예시는 다음과 같습니다.

import yfinance as yf

# Define a function to calculate Piotroski F-Score
def piotroski_f_score(ticker):
    # Load financial data using Yahoo Finance API
    data = yf.Ticker(ticker).financials

    # Calculate Piotroski F-Score
    f_score = 0
    # 1. Return on Assets (ROA) is positive in the current year
    if data['Total Assets'][0] > 0 and data['Net Income'][0] > 0:
        f_score += 1
    # 2. Operating Cash Flow (CFO) is positive in the current year
    if data['Total Cash From Operating Activities'][0] > 0:
        f_score += 1
    # 3. Change in ROA is positive in the current year
    if data['Total Assets'][0] > data['Total Assets'][3] and data['Net Income'][0] > 0:
        f_score += 1
    # 4. CFO exceeds Net Income in the current year
    if data['Total Cash From Operating Activities'][0] > data['Net Income'][0]:
        f_score += 1
    # 5. Long-term Debt to Assets ratio is decreasing in the current year
    if data['Long Term Debt'][0] < data['Total Assets'][0] and data['Long Term Debt'][3] > data['Total Assets'][3]:
        f_score += 1
    # 6. Current Ratio is increasing in the current year
    if data['Total Current Assets'][0] > data['Total Current Liabilities'][0] and data['Total Current Assets'][3] < data['Total Current Liabilities'][3]:
        f_score += 1
    # 7. Number of Shares Outstanding is stable or decreasing in the current year
    if data['Net Income'][0] > 0 and data['Shares Outstanding'][0] <= data['Shares Outstanding'][3]:
        f_score += 1
    # 8. Gross Margin is increasing in the current year
    if data['Gross Profit'][0] > data['Gross Profit'][3]:
        f_score += 1
    # 9. Asset Turnover is increasing in the current year
    if (data['Total Assets'][0]/2) > data['Total Revenue'][0] and (data['Total Assets'][3]/2) < data['Total Revenue'][3]:
        f_score += 1

    return f_score

# Example usage
score = piotroski_f_score('AAPL')
print(score)

Magic Formula 파이썬 코드 예시는 다음과 같습니다.

import pandas as pd
import requests

# Define the function to get financial data from Yahoo Finance API
def get_financial_data(ticker):
    # Define the URL for the API request
    url = f"https://query1.finance.yahoo.com/v10/finance/quoteSummary/{ticker}"
    # Define the parameters for the API request
    params = {"modules":"financialData"}
    # Send the API request and get the response in JSON format
    res = requests.get(url, params=params).json()
    # Extract the relevant financial data
    data = res["quoteSummary"]["result"][0]["financialData"]
    # Convert the data into a pandas DataFrame and return it
    return pd.DataFrame(data, index=[0])

# Define the function to calculate the Magic Formula score
def calculate_magic_formula_score(ticker):
    # Get the financial data for the given ticker
    data = get_financial_data(ticker)
    # Calculate the ROC and P/E ratio
    roc = data["operatingIncome"]/data["totalAssets"]
    pe_ratio = data["currentPrice"]/data["earningsPerShare"]
    # Calculate the Magic Formula score
    score = (roc.rank(ascending=False) + pe_ratio.rank())/2
    return score[0]

# Define the function to screen stocks based on Magic Formula score
def screen_stocks_by_magic_formula():
    # Define the list of stocks to screen
    stocks = ["AAPL", "GOOG", "TSLA", "MSFT"]
    # Calculate the Magic Formula score for each stock
    scores = {ticker: calculate_magic_formula_score(ticker) for ticker in stocks}
    # Sort the stocks by Magic Formula score
    sorted_stocks = sorted(scores.items(), key=lambda x: x[1])
    # Print the sorted list of stocks
    for ticker, score in sorted_stocks:
        print(f"{ticker}: {score:.2f}")

# Run the function to screen stocks by Magic Formula
screen_stocks_by_magic_formula()

Value Composite 파이썬 코드 예시는 다음과 같습니다.

import requests

def get_value_composite(ticker):
    # Define value metrics
    metrics = {
        'EVToEBIT': 'EnterpriseValue/EBIT',
        'PriceToBook': 'BookValuePerShare',
        'PriceToSales': 'PriceToSalesTrailing12Months',
        'EVToFCF': 'EnterpriseValue/FreeCashFlow',
        'PriceToEarnings': 'TrailingPE',
    }
    
    # Define weights for each metric
    weights = {
        'EVToEBIT': 1,
        'PriceToBook': 1,
        'PriceToSales': 1,
        'EVToFCF': 1,
        'PriceToEarnings': 1,
    }
    
    # Build API request URL
    url = 'https://finance.yahoo.com/quote/{}/key-statistics'.format(ticker)
    
    # Send API request and parse HTML response
    response = requests.get(url)
    html = response.text
    
    # Initialize Value Composite score
    value_composite = 0
    
    # Loop through each metric and calculate its score
    for metric, xpath in metrics.items():
        try:
            # Find metric value in HTML response
            start = html.index(xpath)
            end = html.index('</td>', start)
            value = html[start:end]
            value = value.split('data-reactid="')[1]
            value = value.split('"')[0]
            value = float(value.replace(',', ''))
            
            # Calculate metric score
            score = (value - min_value[metric]) / (max_value[metric] - min_value[metric])
            score = max(min(score, 1), 0)
            
            # Add metric score to Value Composite score
            value_composite += score * weights[metric]
        except:
            pass
    
    return value_composite

 

오늘은 퀀트가치투자전략 Quantitative value investing 총정리하였습니다.

 

미흡하지만 오늘 포스팅이 퀀트가치투자전략 Quantitative value investing을 이해하는데 약간이나마 도움이 되길 바랍니다. 감사합니다.

반응형

댓글

💲 추천 글