Оценка Google с использованием метода DCF и Python.

В этом посте мы собираемся использовать метод дисконтированного денежного потока с Python для оценки компании. Модель DCF, которую мы построим, будет динамичной. То есть мы сможем повторно использовать его для любой компании, для которой мы хотим оценить стоимость акций.

Введение в метод дисконтированных денежных потоков

Большинство методов оценки основаны на чистой прибыли. Мы уже видели некоторые из них в моих предыдущих публикациях, например, ценовая прибыль с Python и чистая текущая стоимость активов на акцию среди других. Другой метод дисконтирования денежных потоков. Основное внимание уделяется будущим способностям компании зарабатывать деньги.

Денежные средства - это то, что необходимо фирме, чтобы иметь возможность оплачивать счета, налоги, заработную плату, а также возвращать средства поставщикам капитала компании.

Компания сообщила, что отчет о движении денежных средств разделен на деятельность на три части. Инвестиционная деятельность, финансовая деятельность и операционная деятельность. При использовании метода дисконтирования денежных потоков мы в основном сосредоточимся на операционном денежном потоке. Операционный денежный поток отражает все поступления и оттоки денежных средств, связанные с производством и продажей товаров и услуг компании.

Отчет о движении денежных средств важен, потому что мы не можем узнать, сколько денежных средств генерирует компания, просто просматривая отчет о прибылях и убытках или баланс. Например, возьмите чистую прибыль. Изучая чистую прибыль, мы не можем узнать, сколько денег принесла компания. Чистая прибыль загрязнена неденежными статьями, такими как амортизация, продажа в кредит и т. Д.

Следовательно, поскольку метод дисконтирования денежных потоков основан на денежных средствах, мы начнем нашу модель с чистой прибыли и скорректируем некоторые элементы, чтобы получить операционный денежный поток фирмы:

  • Неденежные доходы и расходы, связанные с операциями.
  • Сделайте поправку на другие операционные статьи, которые привели к оттоку или притоку денежных средств, такие как взыскание дебиторской задолженности или оплата кредиторской задолженности.

Затем, когда у нас есть операционный денежный поток, мы можем просто вычесть капитальные затраты, чтобы получить свободный денежный поток (FCF) компании. Это то, что мы будем использовать для оценки стоимости компании.

Чистый доход

+ Амортизация

Увеличение дебиторской задолженности (-)

Увеличение запасов (-)

Увеличение прочих активов (-)

Увеличение кредиторской задолженности (+)

Увеличение других обязательств (+)

Операционный денежный поток

- Закупка оборудования или капитальные затраты =

Свободный денежный поток

Мы также можем добавить задолженность по выплате процентов после уплаты налогов, потому что проценты - это статья финансирования. Однако для простоты мы не будем вычитать процентные платежи из чистой прибыли в нашей модели.

Мы добавляем амортизацию обратно к чистой прибыли, потому что это не денежные расходы. Наконец, мы вычитаем изменение чистого оборотного капитала, чтобы получить операционный денежный поток.

Операционный денежный поток позволяет нам узнать, сколько компания получила от операционной деятельности.

Теперь мы можем получить свободный денежный поток компании, вычтя инвестиции (то есть капитальные затраты, произведенные компанией).

Свободный денежный поток - это то, что нам нужно в методе DCF для оценки стоимости компании. Согласно методу дисконтированного денежного потока, мы можем получить стоимость фирмы, применив формулу ниже.

Где FCFF - это денежный поток фирмы, а TV - это конечная стоимость. Мы уже видели, как получить свободный денежный поток фирмы. Ниже мы также узнаем, как рассчитать конечную стоимость.

Свободный денежный поток прогнозирующей компании

Метод DCF требует спрогнозировать свободный денежный поток на следующие несколько лет. В нашей модели мы сделаем прогноз на следующие 5 лет.

Мы будем использовать метод процента продаж для прогнозирования денежного потока компании. Мы оценим будущие продажи компании и оценим необходимый отчет о прибылях и убытках и статьи баланса на основе процента продаж.

Например, у компании А в прошлом стоимость товаров составляла 30% от продаж. Таким образом, используя метод процента от продаж, можно предположить, что в прогнозе отчета о прибылях и убытках в следующем году себестоимость составит 30% от продаж.

Подводя итог, мы выполним следующие шаги, чтобы оценить компанию с использованием метода дисконтированного денежного потока (DCF) с Python:

  1. Оцените рост дохода. Для простоты мы рассчитаем рост выручки за прошлый год и предположим, что рост выручки будет одинаковым каждый год в течение прогнозируемых лет. Лучшим подходом было бы найти компании-конкуренты, которые помогут нам понять, насколько продажи могут вырасти с течением времени и насколько зрелой является отрасль. Исходя из этого, мы можем оценить рост выручки в прогнозные периоды.
  2. Представьте балансы и отчет о прибылях и убытках компании в обычном размере в процентах от продаж.
  3. Основываясь на отчетах стандартного размера, спрогнозируйте отчет о прибылях и убытках, баланс и отчет о движении денежных средств на следующие 5 лет.
  4. Рассчитайте стоимость капитала WACC (прочтите мой предыдущий пост, чтобы узнать как рассчитать WACC с помощью Python).
  5. Используйте WACC в качестве ставки дисконтирования для расчета чистой приведенной стоимости свободного денежного потока на 5 прогнозируемых лет.
  6. Рассчитайте конечную стоимость компании. Такова стоимость компании через 5 прогнозируемых лет. Требуется конечная стоимость, поскольку мы только прогнозировали денежные потоки компании на следующие пять лет. Что будет через 5 лет? Мы оцениваем конечную стоимость фирмы.
  7. Рассчитайте целевую стоимость собственного капитала и общий долг компании. Наконец, вычислите целевую цену акций.

В следующем разделе мы перейдем к Python, чтобы начать создание нашей модели.

Дисконтированный денежный поток с Python

Пора начать самое интересное. Идея состоит в том, чтобы построить модель дисконтированного денежного потока с помощью Python. Мы передадим тикер компании, которая хотим оценить курс акций , и пусть Python сделает за нас тяжелую работу. Затем результатом кода будет расчетная цена акции и предположения, которые мы использовали для определения этой целевой цены.

Чтобы использовать метод дисконтированного денежного потока, нам нужно получить некоторые финансовые данные компании. Нам нужно будет получить самый последний баланс компании и отчет о прибылях и убытках. Мы будем использовать их для построения нашей модели.

Чтобы запросить финансовые данные, мы собираемся использовать financialmodelingprep API, финансовый API, предлагающий до 250 бесплатных запросов в месяц. Если 250 запросов недостаточно, вы можете получить годовую подписку чуть меньше 130 долларов. Financialmodelingprep предлагает 25% скидку всем читателям codingandfun по этой ссылке.

Поскольку код получился длинноватым, я разделю его по разделам. Результатом кода будет расчетная цена акций Google с использованием метода дисконтированного денежного потока.

A. Оценка будущего роста доходов

Как обсуждалось выше, оценка того, насколько выручка вырастет в следующие пять лет, является ключом к оценке DCF. Мы будем простыми и предположим, что выручка компании будет продолжать расти на тот же процент, что и в прошлом году.

(Примечание. В приведенном ниже коде не забудьте заменить значение переменной demo своим ключом api из financialmodelingprep).

Мы извлекаем отчет о прибылях и убытках Google за последние три года. Затем мы вычисляем изменение дохода за последний год и сохраняем его в переменной с именем доход_g:

import requests
import numpy as np
import pandas as pd
company = 'GOOG'
demo = 'your api key
IS = requests.get(f'https://financialmodelingprep.com/api/v3/income-statement/{company}?apikey={demo}').json()
count = 0
#get revenue growth to estimate future sales
revenue_g = []
for item in IS:
  if count < 4:
    #print(item)
    revenue_g.append(item['revenue'])
    count = count + 1
revenue_g = (revenue_g[0] - revenue_g[1]) /revenue_g[0] 
print(revenue_g)
#ouctome
0.15469210475913925

Как показано выше, выручка Google за последний год выросла на 15,46%. Это будет нашим предположением о годовом росте выручки в течение прогнозируемых 5 лет. Не стесняйтесь вручную изменять код, чтобы получить другую оценку роста.

Б. Получение отчета о прибылях и убытках и баланса

Далее получаем отчет о прибылях и убытках и бухгалтерский баланс.

Сначала мы рассчитываем полный отчет о прибылях и убытках как процент от выручки. Затем мы прогнозируем отчет о прибылях и убытках за следующие 5 лет, умножая выручку за предыдущий год на выручка_g, рассчитанная в разделе A. Сделав это, мы можем умножить каждую из статей отчета о прибылях и убытках на% от доход, чтобы получить полный отчет о прибылях и убытках.

То же самое и с балансом. Где мы также показываем это в процентах от выручки и прогнозируем на следующие 5 лет:

#Get net income
net_income = IS[0]['netIncome']
BS = requests.get(f'https://financialmodelingprep.com/api/v3/balance-sheet-statement/{company}?apikey={demo}').json()
#get income statement as % of revenue for future predictions and forecast 5 next IS years
income_statement = pd.DataFrame.from_dict(IS[0],orient='index')
#The [5:26] below get rids of not needed items coming from the API
income_statement = income_statement[5:26]
income_statement.columns = ['current_year']
income_statement['as_%_of_revenue'] = income_statement / income_statement.iloc[0]
#forecasting 5 next years income statement
income_statement['next_year'] =  (income_statement['current_year']['revenue'] * (1+revenue_g)) * income_statement['as_%_of_revenue'] 
income_statement['next_2_year'] =  (income_statement['next_year']['revenue'] * (1+revenue_g)) * income_statement['as_%_of_revenue'] 
income_statement['next_3_year'] =  (income_statement['next_2_year']['revenue'] * (1+revenue_g)) * income_statement['as_%_of_revenue'] 
income_statement['next_4_year'] =  (income_statement['next_3_year']['revenue'] * (1+revenue_g)) * income_statement['as_%_of_revenue'] 
income_statement['next_5_year'] =  (income_statement['next_4_year']['revenue'] * (1+revenue_g)) * income_statement['as_%_of_revenue']
#Get Balance sheet as a percentage of revenue
balance_sheet = pd.DataFrame.from_dict(BS[0],orient='index')
balance_sheet = balance_sheet[5:-2]
balance_sheet.columns = ['current_year']
balance_sheet['as_%_of_revenue'] = balance_sheet / income_statement['current_year'].iloc[0]
#forecasting the next 5 years Balance Sheet.
balance_sheet['next_year'] =  income_statement['next_year'] ['revenue'] * balance_sheet['as_%_of_revenue']
balance_sheet['next_2_year'] =  income_statement['next_2_year'] ['revenue'] * balance_sheet['as_%_of_revenue']
balance_sheet['next_3_year'] =  income_statement['next_3_year']['revenue'] * balance_sheet['as_%_of_revenue'] 
balance_sheet['next_4_year'] =  income_statement['next_4_year']['revenue']  * balance_sheet['as_%_of_revenue'] 
balance_sheet['next_5_year'] =  income_statement['next_5_year']['revenue'] * balance_sheet['as_%_of_revenue']

C. Прогнозирование будущих денежных потоков от операционной деятельности

Наконец, у нас есть достаточно информации, чтобы оценить денежные потоки Google в следующие пять лет.

Не пугайтесь количества строк в приведенном ниже фрагменте кода. Прогнозирование денежного потока на каждый из пяти лет просто повторяется. В нижеследующем абзаце я объясняю, что делает код.

Мы создаем пустой словарь, куда добавляем каждый из 5 лет, которые мы собираемся прогнозировать. Затем мы начинаем с получения чистой прибыли за год. Далее мы получаем увеличение амортизации, дебиторской, кредиторской и товарно-материальных ценностей.

Имея эти элементы, мы можем вычислить денежный поток от операций. Затем мы рассчитываем CAPEX за год путем расчета изменения плана собственности и оборудования (PP&E) и добавления амортизация.

Наконец, мы добавляем денежный поток от операционной деятельности и капитальные затраты, чтобы оценить свободный денежный поток за первый год, который нам нужен для модели DCF. Затем мы повторяем тот же код еще 4 раза, чтобы спрогнозировать следующие 4 года.

CF_forecast = {}
CF_forecast['next_year'] = {}
CF_forecast['next_year']['netIncome'] = income_statement['next_year']['netIncome']
CF_forecast['next_year']['inc_depreciation'] = income_statement['next_year']['depreciationAndAmortization'] - income_statement['current_year']['depreciationAndAmortization']
CF_forecast['next_year']['inc_receivables'] = balance_sheet['next_year']['netReceivables'] - balance_sheet['current_year']['netReceivables']
CF_forecast['next_year']['inc_inventory'] = balance_sheet['next_year']['inventory'] - balance_sheet['current_year']['inventory']
CF_forecast['next_year']['inc_payables'] = balance_sheet['next_year']['accountPayables'] - balance_sheet['current_year']['accountPayables']
CF_forecast['next_year']['CF_operations'] = CF_forecast['next_year']['netIncome'] + CF_forecast['next_year']['inc_depreciation'] + (CF_forecast['next_year']['inc_receivables'] * -1) + (CF_forecast['next_year']['inc_inventory'] *-1) + CF_forecast['next_year']['inc_payables']
CF_forecast['next_year']['CAPEX'] = balance_sheet['next_year']['propertyPlantEquipmentNet'] - balance_sheet['current_year']['propertyPlantEquipmentNet'] + income_statement['next_year']['depreciationAndAmortization']
CF_forecast['next_year']['FCF'] = CF_forecast['next_year']['CAPEX'] + CF_forecast['next_year']['CF_operations']
CF_forecast['next_2_year'] = {}
CF_forecast['next_2_year']['netIncome'] = income_statement['next_2_year']['netIncome']
CF_forecast['next_2_year']['inc_depreciation'] = income_statement['next_2_year']['depreciationAndAmortization'] - income_statement['next_year']['depreciationAndAmortization']
CF_forecast['next_2_year']['inc_receivables'] = balance_sheet['next_2_year']['netReceivables'] - balance_sheet['next_year']['netReceivables']
CF_forecast['next_2_year']['inc_inventory'] = balance_sheet['next_2_year']['inventory'] - balance_sheet['next_year']['inventory']
CF_forecast['next_2_year']['inc_payables'] = balance_sheet['next_2_year']['accountPayables'] - balance_sheet['next_year']['accountPayables']
CF_forecast['next_2_year']['CF_operations'] = CF_forecast['next_2_year']['netIncome'] + CF_forecast['next_2_year']['inc_depreciation'] + (CF_forecast['next_2_year']['inc_receivables'] * -1) + (CF_forecast['next_2_year']['inc_inventory'] *-1) + CF_forecast['next_2_year']['inc_payables']
CF_forecast['next_2_year']['CAPEX'] = balance_sheet['next_2_year']['propertyPlantEquipmentNet'] - balance_sheet['next_year']['propertyPlantEquipmentNet'] + income_statement['next_2_year']['depreciationAndAmortization']
CF_forecast['next_2_year']['FCF'] = CF_forecast['next_2_year']['CAPEX'] + CF_forecast['next_2_year']['CF_operations']
CF_forecast['next_3_year'] = {}
CF_forecast['next_3_year']['netIncome'] = income_statement['next_3_year']['netIncome']
CF_forecast['next_3_year']['inc_depreciation'] = income_statement['next_3_year']['depreciationAndAmortization'] - income_statement['next_2_year']['depreciationAndAmortization']
CF_forecast['next_3_year']['inc_receivables'] = balance_sheet['next_3_year']['netReceivables'] - balance_sheet['next_2_year']['netReceivables']
CF_forecast['next_3_year']['inc_inventory'] = balance_sheet['next_3_year']['inventory'] - balance_sheet['next_2_year']['inventory']
CF_forecast['next_3_year']['inc_payables'] = balance_sheet['next_3_year']['accountPayables'] - balance_sheet['next_2_year']['accountPayables']
CF_forecast['next_3_year']['CF_operations'] = CF_forecast['next_3_year']['netIncome'] + CF_forecast['next_3_year']['inc_depreciation'] + (CF_forecast['next_3_year']['inc_receivables'] * -1) + (CF_forecast['next_3_year']['inc_inventory'] *-1) + CF_forecast['next_3_year']['inc_payables']
CF_forecast['next_3_year']['CAPEX'] = balance_sheet['next_3_year']['propertyPlantEquipmentNet'] - balance_sheet['next_2_year']['propertyPlantEquipmentNet'] + income_statement['next_3_year']['depreciationAndAmortization']
CF_forecast['next_3_year']['FCF'] = CF_forecast['next_3_year']['CAPEX'] + CF_forecast['next_3_year']['CF_operations']
CF_forecast['next_4_year'] = {}
CF_forecast['next_4_year']['netIncome'] = income_statement['next_4_year']['netIncome']
CF_forecast['next_4_year']['inc_depreciation'] = income_statement['next_4_year']['depreciationAndAmortization'] - income_statement['next_3_year']['depreciationAndAmortization']
CF_forecast['next_4_year']['inc_receivables'] = balance_sheet['next_4_year']['netReceivables'] - balance_sheet['next_3_year']['netReceivables']
CF_forecast['next_4_year']['inc_inventory'] = balance_sheet['next_4_year']['inventory'] - balance_sheet['next_3_year']['inventory']
CF_forecast['next_4_year']['inc_payables'] = balance_sheet['next_4_year']['accountPayables'] - balance_sheet['next_3_year']['accountPayables']
CF_forecast['next_4_year']['CF_operations'] = CF_forecast['next_4_year']['netIncome'] + CF_forecast['next_4_year']['inc_depreciation'] + (CF_forecast['next_4_year']['inc_receivables'] * -1) + (CF_forecast['next_4_year']['inc_inventory'] *-1) + CF_forecast['next_4_year']['inc_payables']
CF_forecast['next_4_year']['CAPEX'] = balance_sheet['next_4_year']['propertyPlantEquipmentNet'] - balance_sheet['next_3_year']['propertyPlantEquipmentNet'] + income_statement['next_4_year']['depreciationAndAmortization']
CF_forecast['next_4_year']['FCF'] = CF_forecast['next_4_year']['CAPEX'] + CF_forecast['next_4_year']['CF_operations']
CF_forecast['next_5_year'] = {}
CF_forecast['next_5_year']['netIncome'] = income_statement['next_5_year']['netIncome']
CF_forecast['next_5_year']['inc_depreciation'] = income_statement['next_5_year']['depreciationAndAmortization'] - income_statement['next_4_year']['depreciationAndAmortization']
CF_forecast['next_5_year']['inc_receivables'] = balance_sheet['next_5_year']['netReceivables'] - balance_sheet['next_4_year']['netReceivables']
CF_forecast['next_5_year']['inc_inventory'] = balance_sheet['next_5_year']['inventory'] - balance_sheet['next_4_year']['inventory']
CF_forecast['next_5_year']['inc_payables'] = balance_sheet['next_5_year']['accountPayables'] - balance_sheet['next_4_year']['accountPayables']
CF_forecast['next_5_year']['CF_operations'] = CF_forecast['next_5_year']['netIncome'] + CF_forecast['next_5_year']['inc_depreciation'] + (CF_forecast['next_5_year']['inc_receivables'] * -1) + (CF_forecast['next_5_year']['inc_inventory'] *-1) + CF_forecast['next_5_year']['inc_payables']
CF_forecast['next_5_year']['CAPEX'] = balance_sheet['next_5_year']['propertyPlantEquipmentNet'] - balance_sheet['next_4_year']['propertyPlantEquipmentNet'] + income_statement['next_5_year']['depreciationAndAmortization']
CF_forecast['next_5_year']['FCF'] = CF_forecast['next_5_year']['CAPEX'] + CF_forecast['next_5_year']['CF_operations']

D. Преобразование прогнозируемых свободных денежных потоков в панд

#add the forecasted cash flows into a Pandas
CF_forec = pd.DataFrame.from_dict(CF_forecast,orient='columns')
#add below option to format the dataframe with thousand separators
pd.options.display.float_format = '{:,.0f}'.format
print(CF_forec)

E. Оценка стоимости капитала

Для дисконтирования прогнозируемых свободных денежных потоков (FCF) воспользуемся WACC компании. Следовательно, нам необходимо оценить средневзвешенную стоимость капитала (WACC) для фирмы. Это именно то, что мы делали в предыдущем посте. Поэтому я просто предоставлю код для расчета WACC для фирмы. Чтобы лучше понять, как рассчитать WACC с помощью python, обратитесь к моему предыдущему посту.

import pandas_datareader.data as web
import datetime
import requests
demo = 'your api key'
#Interest coverage ratio = EBIT / interest expenses
def interest_coveraga_and_RF(company):
  IS= requests.get(f'https://financialmodelingprep.com/api/v3/income-statement/{company}?apikey={demo}').json()
  EBIT= IS[0]['ebitda'] - IS[0]['depreciationAndAmortization'] 
  interest_expense = IS[0]['interestExpense']
  interest_coverage_ratio = EBIT / interest_expense
#RF
  start = datetime.datetime(2019, 7, 10)
        
  end= datetime.datetime.today().strftime('%Y-%m-%d')
  #end = datetime.datetime(2020, 7, 10)
Treasury = web.DataReader(['TB1YR'], 'fred', start, end)
  RF = float(Treasury.iloc[-1])
  RF = RF/100
  return [RF,interest_coverage_ratio]
  
#Cost of debt
def cost_of_debt(company, RF,interest_coverage_ratio):
  if interest_coverage_ratio > 8.5:
    #Rating is AAA
    credit_spread = 0.0063
  if (interest_coverage_ratio > 6.5) & (interest_coverage_ratio <= 8.5):
    #Rating is AA
    credit_spread = 0.0078
  if (interest_coverage_ratio > 5.5) & (interest_coverage_ratio <=  6.5):
    #Rating is A+
    credit_spread = 0.0098
  if (interest_coverage_ratio > 4.25) & (interest_coverage_ratio <=  5.49):
    #Rating is A
    credit_spread = 0.0108
  if (interest_coverage_ratio > 3) & (interest_coverage_ratio <=  4.25):
    #Rating is A-
    credit_spread = 0.0122
  if (interest_coverage_ratio > 2.5) & (interest_coverage_ratio <=  3):
    #Rating is BBB
    credit_spread = 0.0156
  if (interest_coverage_ratio > 2.25) & (interest_coverage_ratio <=  2.5):
    #Rating is BB+
    credit_spread = 0.02
  if (interest_coverage_ratio > 2) & (interest_coverage_ratio <=  2.25):
    #Rating is BB
    credit_spread = 0.0240
  if (interest_coverage_ratio > 1.75) & (interest_coverage_ratio <=  2):
    #Rating is B+
    credit_spread = 0.0351
  if (interest_coverage_ratio > 1.5) & (interest_coverage_ratio <=  1.75):
    #Rating is B
    credit_spread = 0.0421
  if (interest_coverage_ratio > 1.25) & (interest_coverage_ratio <=  1.5):
    #Rating is B-
    credit_spread = 0.0515
  if (interest_coverage_ratio > 0.8) & (interest_coverage_ratio <=  1.25):
    #Rating is CCC
    credit_spread = 0.0820
  if (interest_coverage_ratio > 0.65) & (interest_coverage_ratio <=  0.8):
    #Rating is CC
    credit_spread = 0.0864
  if (interest_coverage_ratio > 0.2) & (interest_coverage_ratio <=  0.65):
    #Rating is C
    credit_spread = 0.1134
  if interest_coverage_ratio <=  0.2:
    #Rating is D
    credit_spread = 0.1512
  
  cost_of_debt = RF + credit_spread
  return cost_of_debt
def costofequity(company):
#RF
  start = datetime.datetime(2019, 7, 10)
  end= datetime.datetime.today().strftime('%Y-%m-%d')
  #end = datetime.datetime(2020, 7, 10)
Treasury = web.DataReader(['TB1YR'], 'fred', start, end)
  RF = float(Treasury.iloc[-1])
  RF = RF/100
#Beta
beta = requests.get(f'https://financialmodelingprep.com/api/v3/company/profile/{company}?apikey={demo}')
  beta = beta.json()
  beta = float(beta['profile']['beta'])
#Market Return
  start = datetime.datetime(2019, 7, 10)
  end= datetime.datetime.today().strftime('%Y-%m-%d')
SP500 = web.DataReader(['sp500'], 'fred', start, end)
      #Drop all Not a number values using drop method.
  SP500.dropna(inplace = True)
SP500yearlyreturn = (SP500['sp500'].iloc[-1]/ SP500['sp500'].iloc[-252])-1
    
  cost_of_equity = RF+(beta*(SP500yearlyreturn - RF))
  return cost_of_equity
#effective tax rate and capital structure
def wacc(company):
  FR = requests.get(f'https://financialmodelingprep.com/api/v3/ratios/{company}?apikey={demo}').json()
ETR = FR[0]['effectiveTaxRate']
# 
  BS = requests.get(f'https://financialmodelingprep.com/api/v3/balance-sheet-statement/{company}?period=quarter&apikey={demo}').json()
Debt_to = BS[0]['totalDebt'] / (BS[0]['totalDebt'] + BS[0]['totalStockholdersEquity'])
  equity_to = BS[0]['totalStockholdersEquity'] / (BS[0]['totalDebt'] + BS[0]['totalStockholdersEquity'])
WACC = (kd*(1-ETR)*Debt_to) + (ke*equity_to)
  return WACC
RF_and_IntCov = interest_coveraga_and_RF(company)
RF = RF_and_IntCov[0]
interest_coverage_ratio = RF_and_IntCov[1]
ke = costofequity(company)
kd = cost_of_debt(company,RF,interest_coverage_ratio)
wacc_company = wacc(company)
print('wacc of ' + company + ' is ' + str((wacc_company*100))+'%')

F. Получение чистой приведенной стоимости прогнозируемых свободных денежных потоков

Теперь, когда у нас есть WACC Google и прогнозируемые свободные денежные потоки на следующие пять лет, мы можем дисконтировать их, чтобы узнать приведенную стоимость. Для этого мы можем использовать метод numpy npv:

#FCF List of CFs for each year
FCF_List = CF_forec.iloc[-1].values.tolist()
npv = np.npv(wacc_company,FCF_List)

Ж. Расчет конечной стоимости

Чистая приведенная стоимость, полученная в разделе F, охватывает только следующие 5 лет денежных потоков компании. Но что произойдет по прошествии этих прогнозируемых лет?

Нам нужно рассчитать конечную стоимость компании. Конечная стоимость отражает стоимость компании после периода прогнозирования. Конечная стоимость составит не менее 50% от прогнозной стоимости. Поэтому очень важно обращать внимание на предположения, которые мы здесь делаем. Ниже приведена формула, которую мы будем использовать:

FCFFn станет последним годом прогнозируемых свободных денежных потоков. Затем нам нужно найти постоянный темп роста g. Бессрочная ставка - это постоянная скорость, с которой компания должна расти вечно.

Мы предполагаем, что бессрочная ставка составляет 2%, поскольку это обычная практика, которая соответствует долгосрочному уровню инфляции, который обычно составляет около 2%. Затем мы дисконтируем стоимость, используя ставку WACC.

#Terminal value
LTGrowth = 0.02
Terminal_value = (CF_forecast['next_5_year']['FCF'] * (1+ LTGrowth)) /(wacc_company  - LTGrowth)
Terminal_value_Discounted = Terminal_value/(1+wacc_company)**4
Terminal_value_Discounted

H. Расчет целевой цены Google

Наконец, у нас есть все, что нужно для оценки компании с использованием метода дисконтированного денежного потока и Python. Получаем целевую стоимость капитала, долг компании и количество акций.

Затем, чтобы оценить стоимость компании, просто разделите целевую стоимость на количество акций:

target_equity_value = Terminal_value_Discounted + npv
debt = balance_sheet['current_year']['totalDebt']
target_value = target_equity_value - debt
numbre_of_shares = requests.get(f'https://financialmodelingprep.com/api/v3/enterprise-values/{company}?apikey={demo}').json()
numbre_of_shares = numbre_of_shares[0]['numberOfShares']
target_price_per_share = target_value/numbre_of_shares
target_price_per_share
print(company + ' forecasted price per stock is ' + str(target_price_per_share) )
print('the forecast is based on the following assumptions: '+ 'revenue growth: ' + str(revenue_g) + ' Cost of Capital: ' + str(wacc_company) )
print('perpetuity growth: ' + str(LTGrowth)  )
#outcome
GOOG forecasted price per stock is 4828.474984873333
the forecast is based on the following assumptions: revenue growth: 0.15469210475913925 Cost of Capital: 0.07348998226517206
perpetuity growth: 0.02

Заключение

И… .magic, наша модель оценивает, что стоимость Google, основанная на методе дисконтированного денежного потока, составляет 4828 долларов за акцию. Слишком много по сравнению с $ 1,516, которые торгуются сегодня. Неудивительно, поскольку мы предполагаем, что выручка Google будет расти на 15% в год, что может быть слишком оптимистичным.

Некоторые из проблем с моделью DCF - это количество оценок, которые нам необходимо выполнить. Нам нужно оценить, насколько компания собирается расти. Если мы ошибемся, наша модель не даст хороших результатов.

Например, вручную измените переменную выручка_g только на 5% (т. Е. Рост выручки фирмы). Затем стоимость компании снижается почти на 50% и составляет всего 2638 долларов за акцию.

Рекомендуется оценить три сценария значений роста доходов. Один с оптимистичным прогнозом (например, более высокий рост, чем в прошлом), один с вероятным прогнозом (например, такой же рост, чем в прошлом) и пессимистическим прогнозом (например, более низкий рост, чем в прошлом). Затем получите среднее значение из трех сценариев, чтобы получить расчетное значение.

Также на конечную стоимость приходится более 50% оценочной стоимости. Если мы предположим неправильную ставку бессрочного дохода, наша модель будет отключена.

Не стесняйтесь оспаривать любые предположения, использованные в модели, в комментариях ниже. Спасибо за прочтение!

См. Ссылку ниже для видеоруководства по этой публикации:

Https://www.youtube.com/watch?v=XCMsdi3CLGA

Первоначально опубликовано на https://codingandfun.com 18 июля 2020 г.