Dcf Model
Строит институциональные DCF-модели оценки в Excel — проекции выручки, расчёт FCF, WACC, терминальная стоимость, сценарии Bear/Base/Bull, таблицы чувствительности 5×5. Работает в связке с excel-author. Используйте для анализа внутренней стоимости акций.
Метаданные навыка
| Источник | Опциональный (устанавливается по запросу) — установить: hermes skills install official/finance/dcf-model |
| Путь | optional-skills/finance/dcf-model |
| Версия | 1.0.0 |
| Автор | Anthropic (adapted by Nous Research) |
| Лицензия | Apache-2.0 |
| Платформы | linux, macos, windows |
| Теги | finance, valuation, dcf, excel, openpyxl, modeling, investment-banking |
| Связанные навыки | excel-author, pptx-author, comps-analysis, lbo-model, 3-statement-model |
Справочник: полный SKILL.md
Ниже приведено полное определение навыка, которое Hermes Agent загружает при его активации. Именно этот текст агент получает в качестве инструкций во время работы навыка.
Environment
This skill assumes headless openpyxl — you are producing an .xlsx file on disk.
Follow the excel-author skill’s conventions for cell coloring, formulas, named ranges, and sensitivity tables.
Recalculate before delivery: python /path/to/excel-author/scripts/recalc.py ./out/model.xlsx.
DCF Model Builder
Overview
Навык строит институциональные DCF-модели для оценки акций по стандартам инвестиционного банкинга. Каждый анализ даёт детальную Excel-модель с таблицами чувствительности в нижней части листа DCF.
Tools
- По умолчанию используются все данные, предоставленные пользователем, и доступные MCP-серверы.
Critical Constraints - Read These First
Эти ограничения действуют на протяжении всего построения модели. Прочитайте перед началом работы.
Формулы вместо хардкода (НЕ ОБСУЖДАЕТСЯ):
- Каждая проекция, маржа, коэффициент дисконтирования, PV и ячейка чувствительности ОБЯЗАНЫ быть живыми Excel-формулами — никаких значений, вычисленных в Python и записанных числом
- В openpyxl:
ws["D20"] = "=D19*(1+$B$8)"— верно;ws["D20"] = calculated_revenue— НЕВЕРНО - Хардкодить допустимо только: (1) исторические входные данные; (2) параметры допущений (темпы роста, вводные WACC, терминальный g); (3) текущие рыночные данные (цена акции, долг)
- Если поймали себя на том, что вычисляете что-то в Python и записываете результат — СТОП. Модель должна пересчитываться при изменении любого допущения
Пошаговая проверка с пользователем (НЕ стройте сразу до конца):
- После получения данных → покажите блок исходных вводных (выручка, маржи, акции, чистый долг) и подтвердите перед построением проекций
- После проекций выручки → покажите топ-лайн и темпы роста, подтвердите перед построением маржевой модели
- После расчёта FCF → покажите полный FCF-план, подтвердите логику перед расчётом WACC
- После WACC → покажите расчёт и вводные, подтвердите перед дисконтированием
- После терминальной стоимости и PV → покажите мостик EV → стоимость акционерного капитала → цена акции, подтвердите перед таблицами чувствительности
- Ошибки лучше ловить на каждом шаге — неверное допущение по марже, обнаруженное после построения таблиц чувствительности, потребует перестройки всего нижестоящего
Таблицы чувствительности:
- Используйте НЕЧЁТНОЕ число строк и столбцов (стандарт: 5×5, иногда 7×7) — это гарантирует наличие настоящей центральной ячейки
- Центральная ячейка = базовый сценарий. Строить оси нужно так, чтобы заголовок средней строки и заголовок среднего столбца в точности совпадали с фактическими допущениями модели (например, если базовый WACC = 9,0%, средняя строка — 9,0%; если терминальный g = 3,0%, средний столбец — 3,0%). Значение в центральной ячейке должно совпадать с фактической расчётной ценой акции из модели — это проверка корректности таблицы.
- Выделите центральную ячейку заливкой средне-голубого цвета (
#BDD7EE) + жирным шрифтом, чтобы базовый сценарий был сразу заметен - Заполните ВСЕ ячейки (обычно 3 таблицы × 25 ячеек = 75) полными формулами пересчёта DCF
- Используйте циклы openpyxl для программной записи формул
- НИКАКИХ текстов-заглушек, НИКАКИХ линейных приближений, НИКАКИХ ручных шагов
- Каждая ячейка должна полностью пересчитывать DCF для соответствующей комбинации допущений
Комментарии к ячейкам:
- Добавляйте комментарии СРАЗУ при создании каждого хардкодированного значения
- Формат: “Source: [System/Document], [Date], [Reference], [URL if applicable]”
- Каждый синий вводный должен иметь комментарий до перехода к следующей секции
- Не откладывайте до конца и не пишите “TODO: add source”
Планирование раскладки модели:
- Определите ВСЕ позиции строк по секциям ДО записи формул
- Сначала запишите ВСЕ заголовки и подписи
- Затем ВСЕ разделители секций и пустые строки
- И только ПОТОМ пишите формулы, используя зафиксированные позиции строк
- Немедленно тестируйте формулы после создания
Пересчёт формул:
- Запустите
python recalc.py model.xlsx 30перед передачей модели - Устраняйте ВСЕ ошибки до статуса “success”
- Допустимо ноль ошибок формул (#REF!, #DIV/0!, #VALUE! и т. д.)
Блоки сценариев:
- Создавайте отдельные блоки для сценариев Bear/Base/Bull
- Показывайте допущения горизонтально по годам проекции внутри каждого блока
- Используйте IF-формулы:
=IF($B$6=1,[Bear cell],IF($B$6=2,[Base cell],[Bull cell])) - Проверяйте, что формулы ссылаются на правильные ячейки блоков сценариев
DCF Process Workflow
Step 1: Data Retrieval and Validation
Получайте данные с MCP-серверов, от пользователя и из веба.
Приоритет источников данных:
- MCP-серверы (если настроены) — структурированные финансовые данные от провайдеров, например Daloopa
- Данные от пользователя — исторические финансовые показатели из его исследований
- Поиск/парсинг веба — текущие цены, бета, долг и кэш при необходимости
Чеклист валидации:
- Проверьте чистый долг vs чистые денежные средства (критично для оценки)
- Подтвердите разводнённое количество акций (проверьте на наличие недавних buyback/допэмиссий)
- Убедитесь, что исторические маржи соответствуют бизнес-модели
- Сопоставьте темпы роста выручки с отраслевыми бенчмарками
- Проверьте налоговую ставку на разумность (обычно 21–28%)
Step 2: Historical Analysis (3-5 years)
Проанализируйте и задокументируйте:
- Динамику роста выручки: рассчитайте CAGR, определите драйверы
- Прогрессию маржей: отслеживайте валовую маржу, маржу EBIT, маржу FCF
- Капиталоёмкость: D&A и CapEx в % от выручки
- Эффективность оборотного капитала: изменения NWC в % от прироста выручки
- Метрики доходности: тенденции ROIC, ROE
Создайте сводные таблицы:
Historical Metrics (LTM):
Revenue: $X million
Revenue growth: X% CAGR
Gross margin: X%
EBIT margin: X%
D&A % of revenue: X%
CapEx % of revenue: X%
FCF margin: X%
Step 3: Build Revenue Projections
Методология:
- Начните с последней фактической выручки (LTM или последний завершённый финансовый год)
- Примените темпы роста для каждого года проекции
- Показывайте как суммы в долларах, так и рассчитанные % роста
Структура темпов роста:
- Год 1–2: более высокий рост — видимость на ближайший период лучше
- Год 3–4: постепенное замедление до отраслевого среднего
- Год 5+: приближение к терминальному темпу роста
Структура формул:
- Revenue(Year N) = Revenue(Year N-1) × (1 + Growth Rate)
- Growth %(Year N) = Revenue(Year N) / Revenue(Year N-1) - 1
Трёхсценарный подход:
Bear Case: Conservative growth (e.g., 8-12%)
Base Case: Most likely scenario (e.g., 12-16%)
Bull Case: Optimistic growth (e.g., 16-20%)
Step 4: Operating Expense Modeling
Анализ постоянных и переменных затрат:
Операционные расходы должны моделировать реалистичный операционный леверидж:
- Sales & Marketing: обычно 15–40% от выручки в зависимости от бизнес-модели
- Research & Development: обычно 10–30% для технологических компаний
- General & Administrative: обычно 8–15% от выручки, снижается при масштабировании
Ключевые принципы:
- ВСЕ процентные показатели рассчитываются от ВЫРУЧКИ, а не от валовой прибыли
- Моделируйте операционный леверидж: % должен снижаться по мере роста выручки
- Ведите отдельные строки для S&M, R&D, G&A
- Рассчитывайте EBIT = Gross Profit - Total OpEx
Ориентиры по расширению маржи:
Current State → Target State (Year 5)
Gross Margin: X% → Y% (justify based on scale, efficiency)
EBIT Margin: X% → Y% (result of revenue growth + opex leverage)
Step 5: Free Cash Flow Calculation
Рассчитывайте FCF в правильной последовательности:
EBIT
(-) Taxes (EBIT × Tax Rate)
= NOPAT (Net Operating Profit After Tax)
(+) D&A (non-cash expense, % of revenue)
(-) CapEx (% of revenue, typically 4-8%)
(-) Δ NWC (change in working capital)
= Unlevered Free Cash Flow
Моделирование оборотного капитала:
- Рассчитывайте как % от прироста выручки (delta revenue)
- Типичный диапазон: от -2% до +2% от прироста выручки
- Отрицательное значение = источник денежных средств (высвобождение оборотного капитала)
- Положительное значение = использование денежных средств (наращивание оборотного капитала)
Поддерживающий и инвестиционный CapEx:
- Поддерживающий CapEx: обеспечивает текущие операции (~2–3% выручки)
- Инвестиционный CapEx: поддерживает расширение (дополнительно 2–5% выручки)
- Суммарный CapEx должен соответствовать стратегии роста компании
Step 6: Cost of Capital (WACC) Research
Методология CAPM для стоимости собственного капитала:
Cost of Equity = Risk-Free Rate + Beta × Equity Risk Premium
Where:
- Risk-Free Rate = Current 10-Year Treasury Yield
- Beta = 5-year monthly stock beta vs market index
- Equity Risk Premium = 5.0-6.0% (market standard)
Расчёт стоимости долга:
After-Tax Cost of Debt = Pre-Tax Cost of Debt × (1 - Tax Rate)
Determine Pre-Tax Cost of Debt from:
- Credit rating (if available)
- Current yield on company bonds
- Interest expense / Total Debt from financials
Веса структуры капитала:
Market Value Equity = Current Stock Price × Shares Outstanding
Net Debt = Total Debt - Cash & Equivalents
Enterprise Value = Market Cap + Net Debt
Equity Weight = Market Cap / Enterprise Value
Debt Weight = Net Debt / Enterprise Value
WACC = (Cost of Equity × Equity Weight) + (After-Tax Cost of Debt × Debt Weight)
Особые случаи:
- Чистые денежные средства: если Cash > Debt, Net Debt ОТРИЦАТЕЛЕН
- Debt Weight может быть отрицательным
- Расчёт WACC корректируется соответственно
- Нет долга: WACC = Cost of Equity
Типичные диапазоны WACC:
- Large Cap, Stable: 7–9%
- Growth Companies: 9–12%
- High Growth/Risk: 12–15%
Step 7: Discount Rate Application (5-10 Year Forecast)
Mid-Year Convention:
- Предполагается, что денежные потоки поступают в середине года
- Период дисконтирования: 0,5; 1,5; 2,5; 3,5; 4,5 и т. д.
- Discount Factor = 1 / (1 + WACC)^Period
Расчёт приведённой стоимости:
For each projection year:
PV of FCF = Unlevered FCF × Discount Factor
Example (Year 1):
FCF = $1,000
WACC = 10%
Period = 0.5
Discount Factor = 1 / (1.10)^0.5 = 0.9535
PV = $1,000 × 0.9535 = $954
Выбор периода проекции:
- 5 лет: стандарт для большинства анализов
- 7–10 лет: быстрорастущие компании с длинным горизонтом роста
- 3 года: зрелые, стабильные компании
Step 8: Terminal Value Calculation
Метод бессрочного роста (предпочтительный):
Terminal FCF = Final Year FCF × (1 + Terminal Growth Rate)
Terminal Value = Terminal FCF / (WACC - Terminal Growth Rate)
Critical Constraint: Terminal Growth < WACC (otherwise infinite value)
Выбор терминального темпа роста:
- Консервативный: 2,0–2,5% (темп роста ВВП)
- Умеренный: 2,5–3,5%
- Агрессивный: 3,5–5,0% (только для лидеров рынка)
Не превышайте безрисковую ставку или долгосрочный темп роста ВВП.
Метод выхода по мультипликатору (альтернатива):
Terminal Value = Final Year EBITDA × Exit Multiple
Where Exit Multiple comes from:
- Industry comparable trading multiples
- Precedent transaction multiples
- Typical range: 8-15x EBITDA
Приведённая стоимость терминальной стоимости:
PV of Terminal Value = Terminal Value / (1 + WACC)^Final Period
Where Final Period accounts for timing:
5-year model with mid-year convention: Period = 4.5
Проверка терминальной стоимости на адекватность:
- Должна составлять 50–70% стоимости предприятия (EV)
- Если >75%, модель слишком зависит от терминальных допущений
- Если <40%, проверьте, не слишком ли консервативны терминальные допущения
Step 9: Enterprise to Equity Value Bridge
Структура итогов оценки:
(+) Sum of PV of Projected FCFs = $X million
(+) PV of Terminal Value = $Y million
= Enterprise Value = $Z million
(-) Net Debt [or + Net Cash if negative] = $A million
= Equity Value = $B million
÷ Diluted Shares Outstanding = C million shares
= Implied Price per Share = $XX.XX
Current Stock Price = $YY.YY
Implied Return = (Implied Price / Current Price) - 1 = XX%
Ключевые корректировки:
- Net Debt = Total Debt - Cash & Equivalents
- Если положительный: вычитаем из EV (снижает стоимость акционерного капитала)
- Если отрицательный (Net Cash): добавляем к EV (увеличивает стоимость)
- Используйте разводнённые акции: включают опционы, RSU, конвертируемые бумаги
- Прочие корректировки (при наличии):
- Доли меньшинства
- Пенсионные обязательства
- Обязательства по операционной аренде
Формат итогов оценки:
Valuation Component,Amount ($M)
PV Explicit FCFs,X.X
PV Terminal Value,Y.Y
Enterprise Value,Z.Z
(-) Net Debt,A.A
Equity Value,B.B
,,
Shares Outstanding (M),C.C
Implied Price per Share,$XX.XX
Current Share Price,$YY.YY
Implied Upside/(Downside),+XX%
Step 10: Sensitivity Analysis
Постройте три таблицы чувствительности в нижней части листа DCF — они показывают, как оценка меняется при различных допущениях:
- WACC vs Terminal Growth — чувствительность EV к ставке дисконтирования и темпу бессрочного роста
- Revenue Growth vs EBIT Margin — влияние топ-лайн роста и операционного левериджа
- Beta vs Risk-Free Rate — чувствительность к компонентам стоимости собственного капитала
Реализация: это простые двумерные сетки (НЕ функция Excel «Таблица данных») с формулами в каждой ячейке. Каждая ячейка содержит полный пересчёт DCF для конкретной комбинации допущений. Подробные требования по программному заполнению всех 75 ячеек через openpyxl — в разделе Critical Constraints.
<correct_patterns>
В этом разделе — ПРАВИЛЬНЫЕ подходы при построении DCF-моделей.
Scenario Block Selection Pattern - Follow This Approach
Допущения организованы в отдельных блоках для каждого сценария:
КРИТИЧЕСКАЯ СТРУКТУРА — три строки на заголовок секции:
BEAR CASE ASSUMPTIONS (section header, merge cells across)
Assumption,FY1,FY2,FY3,FY4,FY5
Revenue Growth (%),12%,10%,9%,8%,7%
EBIT Margin (%),45%,44%,43%,42%,41%
BASE CASE ASSUMPTIONS (section header, merge cells across)
Assumption,FY1,FY2,FY3,FY4,FY5
Revenue Growth (%),16%,14%,12%,10%,9%
EBIT Margin (%),48%,49%,50%,51%,52%
BULL CASE ASSUMPTIONS (section header, merge cells across)
Assumption,FY1,FY2,FY3,FY4,FY5
Revenue Growth (%),20%,18%,15%,13%,11%
EBIT Margin (%),50%,51%,52%,53%,54%
Каждый блок сценария ОБЯЗАТЕЛЬНО должен содержать строку заголовков столбцов с годами проекции (FY2025E, FY2026E и т. д.) сразу под названием блока. Без неё пользователь не поймёт, какое значение допущения к какому году относится.
Как ссылаться на допущения — создайте консолидирующий столбец:
- Ячейка-переключатель сценариев (например, B6) содержит 1=Bear, 2=Base или 3=Bull
- Создайте консолидирующий столбец с формулами INDEX или OFFSET, извлекающими данные из нужного блока
- Формулы проекций ссылаются на консолидирующий столбец (чистые ссылки на ячейки)
- Каждый блок содержит полный набор DCF-допущений по всем годам проекции
Рекомендуемый паттерн для консолидирующего столбца (INDEX):
=INDEX(B10:D10, 1, $B$6)
НЕ это — разрозненные IF-формулы повсюду:
=IF($B$6=1,[Bear block cell],IF($B$6=2,[Base block cell],[Bull block cell]))
Подход с консолидирующим столбцом централизует логику и упрощает аудит модели.
Correct Revenue Projection Pattern
Создайте консолидирующий столбец с INDEX-формулами, затем ссылайтесь на него в проекциях:
Шаг 1 — консолидирующий столбец для роста FY1:
=INDEX([Bear FY1 growth]:[Bull FY1 growth], 1, $B$6)
Шаг 2 — проекция выручки ссылается на консолидирующий столбец:
Revenue Year 1: =D29*(1+$E$10)
Где:
- D29 = выручка предыдущего года
- $E$10 = ячейка консолидирующего столбца для роста FY1 (содержит INDEX-формулу)
- $B$6 = ячейка-переключатель сценариев (1=Bear, 2=Base, 3=Bull)
Этот подход чище, чем встраивание IF-формул в каждую строку проекции, и намного удобнее для аудита используемых допущений.
Correct FCF Formula Pattern
Используйте консолидирующие столбцы с INDEX-формулами, затем ссылайтесь на них в расчётах FCF:
Подход с консолидирующим столбцом:
Item,Formula,Reference
D&A,=E29*$E$21,$E$21 = consolidation column for D&A %
CapEx,=E29*$E$22,$E$22 = consolidation column for CapEx %
Δ NWC,=(E29-D29)*$E$23,$E$23 = consolidation column for NWC %
Unlevered FCF,=E57+E58-E60-E62,E57=NOPAT E58=D&A E60=CapEx E62=Δ NWC
Каждая ячейка консолидирующего столбца содержит INDEX-формулу, извлекающую данные из соответствующего блока сценария по переключателю. Формулы проекций остаются чистыми и легко проверяемыми.
Перед записью формул подтвердите позиции строк блоков сценариев и настройте консолидирующие столбцы.
Correct Cell Comment Format
Каждое хардкодированное значение должно иметь комментарий в этом формате:
“Source: [System/Document], [Date], [Reference], [URL if applicable]”
Примеры:
Item,Source Comment
Stock price,Source: Market data script 2025-10-12 Close price
Shares outstanding,Source: 10-K FY2024 Page 45 Note 12
Historical revenue,Source: 10-K FY2024 Page 32 Consolidated Statements
Beta,Source: Market data script 2025-10-12 5-year monthly beta
Consensus estimates,Source: Management guidance Q3 2024 earnings call
Correct Assumption Table Structure
КРИТИЧНО: каждый блок сценария требует ТРЁХ структурных элементов:
- Строка заголовка секции (объединённые ячейки): например, “BEAR CASE ASSUMPTIONS”
- Строка заголовков столбцов с годами — ЭТО ОБЯЗАТЕЛЬНО, НЕ ПРОПУСКАЙТЕ
- Строки данных со значениями допущений
Структура:
BEAR CASE ASSUMPTIONS (section header - merge across columns A:G)
Assumption,FY1,FY2,FY3,FY4,FY5
Revenue Growth (%),X%,X%,X%,X%,X%
EBIT Margin (%),X%,X%,X%,X%,X%
Terminal Growth,X%,,,,
WACC,X%,,,,
BASE CASE ASSUMPTIONS (section header - merge across columns A:G)
Assumption,FY1,FY2,FY3,FY4,FY5
Revenue Growth (%),X%,X%,X%,X%,X%
EBIT Margin (%),X%,X%,X%,X%,X%
Terminal Growth,X%,,,,
WACC,X%,,,,
BULL CASE ASSUMPTIONS (section header - merge across columns A:G)
Assumption,FY1,FY2,FY3,FY4,FY5
Revenue Growth (%),X%,X%,X%,X%,X%
EBIT Margin (%),X%,X%,X%,X%,X%
Terminal Growth,X%,,,,
WACC,X%,,,,
БЕЗ строки заголовков столбцов с годами проекции (FY2025E, FY2026E и т. д.) пользователь не поймёт, к какому году относится то или иное значение. Эта строка ОБЯЗАТЕЛЬНА.
Затем создайте консолидирующий столбец (обычно следующий вправо) с INDEX-формулами, которые извлекают данные из выбранного блока сценария по переключателю. Именно на этот столбец ссылаются формулы проекций.
Correct Row Planning Process
1. Сначала запишите ВСЕ заголовки и подписи:
Row,Content
1,[Company Name] DCF Model
2,Ticker | Date | Year End
4,Case Selector
7,KEY ASSUMPTIONS
26,Assumption headers
27-31,Growth assumptions
...,...
2. Запишите ВСЕ разделители секций и пустые строки
3. ЗАТЕМ запишите формулы, используя зафиксированные позиции строк
4. Немедленно тестируйте формулы после создания
Аналогия со строительством:
- Правильно: залить фундамент, потом строить стены (устойчивая конструкция)
- Неправильно: строить стены, потом заливать фундамент (стены рухнут)
В Excel это выглядит так:
- Правильно: сначала заголовки, потом формулы (формулы стабильны)
- Неправильно: сначала формулы, потом заголовки (формулы ломаются)
Correct Sensitivity Table Implementation
ВАЖНО: Это НЕ функция Excel «Таблица данных». Это простые сетки, в каждую ячейку которых вы записываете обычные формулы через openpyxl. Да, итого ~75 формул (3 таблицы × 25 ячеек), но это стандартное требование.
Программное заполнение формулами:
Каждая таблица чувствительности должна быть полностью заполнена формулами, пересчитывающими подразумеваемую цену акции для каждой комбинации допущений. Не используйте функцию «Таблица данных» в Excel — она требует ручного вмешательства и не поддаётся автоматизации через openpyxl.
Подход к реализации — КОНКРЕТНЫЙ ПРИМЕР:
Структура таблицы — сетка 5×5 (нечётные размеры, базовый сценарий по центру):
Если базовый WACC модели = 9,0%, а терминальный темп роста = 3,0%, строим оси симметрично вокруг этих значений:
WACC vs Terminal Growth, 2.0%, 2.5%, 3.0%, 3.5%, 4.0%
8.0%, [fml], [fml], [fml], [fml], [fml]
8.5%, [fml], [fml], [fml], [fml], [fml]
9.0%, [fml], [fml], [★ ], [fml], [fml] ← средняя строка = базовый WACC
9.5%, [fml], [fml], [fml], [fml], [fml]
10.0%, [fml], [fml], [fml], [fml], [fml]
↑
средний столбец = базовый терминальный g
★ = центральная ячейка. Её значение ДОЛЖНО совпадать с фактической подразумеваемой ценой акции из итогов оценки. Примените заливку средне-голубым (#BDD7EE) и жирный шрифт, чтобы визуально зафиксировать базовый сценарий.
Правило для значений осей: axis_values = [base - 2*step, base - step, base, base + step, base + 2*step] — симметрично вокруг базы, нечётное количество гарантирует центральную ячейку.
Паттерн формулы — ячейка B88 (WACC=8,0%, Terminal Growth=2,0%):
Формула в B88 должна пересчитывать подразумеваемую цену, используя:
- WACC из заголовка строки:
$A88(8,0%) - Terminal Growth из заголовка столбца:
B$87(2,0%)
Рекомендуемый подход: ссылайтесь на основной расчёт DCF, подставляя эти значения.
Пример структуры формулы:
=([SUM of PV FCFs using $A88 as discount rate] + [Terminal Value using B$87 as growth rate and $A88 as WACC] - [Net Debt]) / [Shares]
КРИТИЧНО — запишите формулу в КАЖДУЮ ячейку сетки 5×5 (25 ячеек на таблицу, 75 суммарно). Используйте openpyxl для программной записи формул в цикле. НЕ пропускайте этот шаг и не оставляйте текст-заглушку.
Паттерн реализации на Python:
# Pseudocode for populating sensitivity table
for row_idx, wacc_value in enumerate(wacc_range):
for col_idx, term_growth_value in enumerate(term_growth_range):
# Build formula that uses wacc_value and term_growth_value
formula = f"=<DCF recalc using {wacc_value} and {term_growth_value}>"
ws.cell(row=start_row+row_idx, column=start_col+col_idx).value = formula
Таблицы чувствительности должны работать сразу при открытии файла — без каких-либо ручных действий со стороны пользователя.
</correct_patterns>
<common_mistakes>
В этом разделе — НЕПРАВИЛЬНЫЕ подходы при построении DCF-моделей.
WRONG: Simplified Sensitivity Table Approximations or Placeholder Text
Не используйте линейные приближения:
// WRONG - Linear approximation
B97: =B88*(1+(0.096-0.116)) // Assumes linear relationship
// WRONG - Division shortcut
B105: =B88/(1+(E48-0.07)) // Doesn't recalculate full DCF
Не оставляйте текст-заглушку:
// WRONG - Placeholder note
"Note: Use Excel Data Table feature (Data → What-If Analysis → Data Table) to populate sensitivity tables."
// WRONG - Empty cells
[leaving cells blank because "this is complex"]
Не путайте терминологию:
- ❌ “Sensitivity tables need Excel’s Data Table feature” (НЕТ — это специальный инструмент Excel, мы его не используем)
- ✅ “Sensitivity tables are simple grids with formulas in each cell” (ДА — именно это мы строим)
Почему такие сокращения недопустимы:
- Формулы с линейным приближением не пересчитывают DCF — они просто применяют простую математику
- Зависимости нелинейны, поэтому результаты будут неточными
- Текст-заглушка требует ручного вмешательства пользователя
- Модель не готова к использованию при передаче
- Непрофессионально и не готово для клиента
- Пустые ячейки = незавершённый результат
Типичное оправдание, которое нужно ОТВЕРГНУТЬ: “Писать 75+ формул сложно, поэтому оставлю заметку для пользователя.”
На самом деле: написать 75 формул в цикле Python с openpyxl — стандартная задача. Каждая формула следует одному паттерну — подставляйте значения строки/столбца. Это обязательная часть результата.
Правильно: заполните каждую ячейку чувствительности формулами, полностью пересчитывающими DCF для конкретной комбинации допущений.
WRONG: Missing Cell Comments
Не делайте так:
- Создавать все хардкодированные вводные без комментариев
- Думать «добавлю позже»
- Писать “TODO: add source”
- Оставлять синие вводные без документирования
Почему это ошибка:
- Невозможно проверить источник данных
- Нарушает требования навыка xlsx
- Не готово к аудиту
- Потеря времени при исправлении позже
Правильно: добавляйте комментарий к ячейке СРАЗУ при её создании.
WRONG: Formula Row References Off
Симптом:
FCF-секция ссылается на неправильные строки допущений:
D&A: =E29*$E$34 // Should be $E$21, but referencing wrong row
CapEx: =E29*$E$41 // Should be $E$22, but row shifted
Почему это происходит:
- Сначала написаны формулы
- Затем вставлены заголовки
- Все ссылки на строки сдвинулись
- Формулы ссылаются на неправильные ячейки → ошибки #REF!
Правильно: зафиксируйте раскладку строк СНАЧАЛА, затем пишите формулы.
WRONG: Single Row for Each Assumption Across Scenarios
Не структурируйте допущения так:
Assumption,Bear,Base,Bull
Revenue Growth FY1,10%,13%,16%
Revenue Growth FY2,9%,12%,15%
Такая вертикальная раскладка мешает видеть динамику допущений по годам внутри каждого сценария.
Почему это ошибка:
- Сложно отследить, как допущения меняются по годам внутри сценария
- Труднее сравнивать допущения сценариев по всему периоду проекции
- Менее наглядно для проверки логики сценариев
Правильно:
- Создайте отдельные блоки для каждого сценария (Bear, Base, Bull)
- Внутри каждого блока показывайте допущения горизонтально по годам
- Так каждый сценарий читается как единый набор допущений
WRONG: No Borders
Не сдавайте модель без границ:
- Нет разделения секций
- Все ячейки сливаются
- Сложно читать, непрофессионально
Почему это ошибка:
- Не готово для клиента
- Неудобная навигация
- Выглядит любительски
Правильно: добавьте границы вокруг всех основных секций.
WRONG: Wrong Font Colors or No Font Color Distinction
Не делайте так:
- Весь текст чёрный
- Только заливка ячеек без изменения цвета шрифта
- Путаница, какие ячейки синие, а какие чёрные
Почему это ошибка:
- Невозможно отличить вводные от формул
- Аудит становится невозможным
- Нарушает требования навыка xlsx
Правильно: синий текст для ВСЕХ хардкодированных вводных, чёрный — для ВСЕХ формул, зелёный — для ссылок на другие листы.
WRONG: Operating Expenses Based on Gross Profit
Не делайте так:
S&M: =E33*0.15 // E33 = Gross Profit (WRONG)
Почему это ошибка:
- Операционные расходы масштабируются от выручки, а не от валовой прибыли
- Даёт нереалистичную динамику маржей
- Не соответствует реальной экономике бизнеса
Правильно:
S&M: =E29*0.15 // E29 = Revenue (CORRECT)
TOP 5 ERRORS SUMMARY
- Неправильные ссылки на строки в формулах → определите ВСЕ позиции строк ДО написания формул
- Отсутствующие комментарии к ячейкам → добавляйте при создании, не в конце
- Упрощённые таблицы чувствительности → заполняйте все ячейки полными формулами пересчёта DCF, а не приближениями
- Неверные ссылки на блоки сценариев → убедитесь, что IF-формулы тянут данные из правильных блоков Bear/Base/Bull
- Нет границ → добавьте профессиональные границы секций для готовности к клиенту
Дополнительно следите за этими ошибками:
WACC Calculation Errors
- Смешение балансовых и рыночных значений в структуре капитала
- Неверное применение levered vs unlevered beta
- Неправильное применение налоговой ставки к стоимости долга
- Некорректная безрисковая ставка (необходимо использовать текущую доходность 10-летних US Treasuries)
- Игнорирование чистого долга vs чистых денежных средств
Growth Assumption Flaws
- Терминальный темп роста > WACC (создаёт бесконечную стоимость)
- Темпы роста в проекции несовместимы с исторической динамикой
- Игнорирование отраслевых ограничений роста
- Несоответствие роста выручки юнит-экономике
- Расширение маржей без операционного обоснования
Terminal Value Mistakes
- Неверный метод (бессрочный рост vs выходной мультипликатор)
- Терминальная стоимость >80% EV (чрезмерная зависимость от терминальных допущений)
- Несоответствие терминальных маржей стационарным допущениям
- Неверный период дисконтирования для терминальной стоимости
Cash Flow Projection Errors
- Операционные расходы от валовой прибыли вместо выручки
- Несоответствие % D&A/CapEx бизнес-модели
- Неверный расчёт изменений оборотного капитала
- Непоследовательная налоговая ставка по годам
- Ошибки в расчёте NOPAT
Это самые распространённые ошибки. Перечитайте этот раздел перед началом построения любой DCF-модели.
</common_mistakes>
Excel File Creation
Навык использует навык xlsx для всех операций с таблицами. Навык xlsx предоставляет:
- Стандартизированные правила построения формул
- Соглашения по форматированию чисел
- Автоматизированный пересчёт формул через скрипт
recalc.py - Комплексную проверку ошибок и валидацию
Все Excel-файлы, созданные этим навыком, должны соответствовать требованиям навыка xlsx: нулевое количество ошибок формул и корректный пересчёт.
Quality Rubric
Каждая DCF-модель должна по максимуму соответствовать следующим критериям:
- Реалистичные допущения по выручке и маржам на основе исторических данных
- Корректный расчёт стоимости капитала по методологии CAPM
- Полный анализ чувствительности с диапазонами оценки
- Прозрачный расчёт терминальной стоимости с обоснованием
- Профессиональная структура модели для сценарного анализа
- Документирование всех ключевых допущений
Input Requirements
Minimum Required Inputs
- Идентификатор компании: тикер или название
- Допущения по росту: темпы роста выручки на период проекции (или “use consensus”)
- Опциональные параметры:
- Период проекции (по умолчанию: 5 лет)
- Сценарии (Bear/Base/Bull — допущения по росту и маржам)
- Терминальный темп роста (по умолчанию: 2,5–3,0%)
- Конкретные вводные WACC, если не использовать CAPM
Excel Model Structure
Sheet Architecture
Создайте два листа:
- DCF — основная модель оценки с таблицами чувствительности внизу
- WACC — расчёт стоимости капитала
КРИТИЧНО: таблицы чувствительности размещаются В НИЖНЕЙ ЧАСТИ листа DCF (не на отдельном листе). Так все итоги оценки остаются вместе.
Formula Recalculation (MANDATORY)
После создания или изменения Excel-модели пересчитайте все формулы скриптом recalc.py из навыка excel-author:
python recalc.py [path_to_excel_file] [timeout_seconds]
Пример:
python recalc.py AAPL_DCF_Model_2025-10-12.xlsx 30
Скрипт:
- Пересчитает все формулы на всех листах через LibreOffice
- Сканирует ВСЕ ячейки на наличие Excel-ошибок (#REF!, #DIV/0!, #VALUE!, #NAME?, #NULL!, #NUM!, #N/A)
- Возвращает детализированный JSON с местоположением ошибок и их количеством
Ожидаемый формат вывода:
{
"status": "success", // or "errors_found"
"total_errors": 0, // Total error count
"total_formulas": 42, // Number of formulas in file
"error_summary": {} // Only present if errors found
}
При наличии ошибок вывод содержит детали:
{
"status": "errors_found",
"total_errors": 2,
"total_formulas": 42,
"error_summary": {
"#REF!": {
"count": 2,
"locations": ["DCF!B25", "DCF!C25"]
}
}
}
Исправляйте все ошибки и повторно запускайте recalc.py до статуса “success” перед сдачей модели.
Formatting Standards
ВАЖНО: Следуйте навыку xlsx в части правил построения формул и форматирования чисел. Навык DCF добавляет конкретные стандарты визуального оформления.
Цветовая схема — два слоя:
Слой 1: Цвет шрифта (ОБЯЗАТЕЛЬНО, из навыка xlsx)
- Синий текст (RGB: 0,0,255): ВСЕ хардкодированные вводные (цена акции, акции, исторические данные, допущения)
- Чёрный текст (RGB: 0,0,0): ВСЕ формулы и расчёты
- Зелёный текст (RGB: 0,128,0): ссылки на другие листы (ссылки на лист WACC)
Слой 2: Заливка — профессиональная сине-серая палитра (по умолчанию, если пользователь не указал иное)
- Минимализм прежде всего — только синий и серый. Зелёный, жёлтый, оранжевый и другие акцентные цвета не добавляем. Слишком пёстрая модель выглядит любительски.
- Стандартная палитра заливки:
- Заголовки секций: тёмно-синий фон (RGB: 31,78,121 /
#1F4E79) с белым жирным текстом - Подзаголовки/заголовки столбцов: светло-голубой фон (RGB: 217,225,242 /
#D9E1F2) с чёрным жирным текстом - Ячейки вводных: светло-серый фон (RGB: 242,242,242 /
#F2F2F2) с синим шрифтом — или просто белый с синим шрифтом для максимального минимализма - Расчётные ячейки: белый фон с чёрным шрифтом
- Строки итогов (цена акции, EV и т. д.): средне-голубой фон (RGB: 189,215,238 /
#BDD7EE) с чёрным жирным шрифтом
- Заголовки секций: тёмно-синий фон (RGB: 31,78,121 /
- Всё — 3 оттенка синего + 1 серый + белый. Не добавляйте лишнего.
- Шаблоны от пользователя и его цветовые предпочтения всегда имеют приоритет над этими умолчаниями.
Как работают оба слоя вместе:
- Ячейка вводных: синий шрифт + светло-серая заливка = «хардкодированный вводный»
- Ячейка с формулой: чёрный шрифт + белый фон = «расчётное значение»
- Ссылка на другой лист: зелёный шрифт + белый фон = «ссылка с другого листа»
- Ключевой итог: чёрный жирный шрифт + средне-голубая заливка = «вот ответ»
Цвет шрифта говорит, ЧТО это (вводный/формула/ссылка). Заливка говорит, ГДЕ вы (заголовок/данные/итог).
Border Standards (REQUIRED for Professional Appearance)
Толстые границы (1,5pt) вокруг основных секций:
- Секция KEY INPUTS
- Секция PROJECTION ASSUMPTIONS
- Секция 5-YEAR CASH FLOW PROJECTION
- Секция TERMINAL VALUE
- Секция VALUATION SUMMARY
- Каждая таблица SENSITIVITY ANALYSIS
Средние границы (1pt) между подсекциями:
- Company Details vs Historical Performance
- Growth Assumptions vs EBIT Margin vs FCF Parameters
Тонкие границы (0,5pt) вокруг таблиц данных:
- Таблицы допущений по сценариям (Bear | Base | Bull | Selected)
- Матрица исторических и прогнозных финансовых показателей
Без границ: отдельные ячейки внутри таблиц (для чистоты и читабельности)
Границы обязательны — модели без профессиональных границ не готовы к клиенту.
Форматы чисел (по стандартам навыка xlsx):
- Годы: форматировать как текстовые строки (например, “2024”, а не “2,024”)
- Проценты:
0.0%(один знак после запятой) - Валюта:
$#,##0для миллионов;$#,##0.00для цены акции — ВСЕГДА указывайте единицы в заголовках (“Revenue ($mm)”) - Нули: использовать форматирование числа, чтобы все нули отображались как ”-” (например,
$#,##0;($#,##0);-) - Большие числа:
#,##0с разделителем тысяч - Отрицательные числа:
(#,##0)в скобках (НЕ знак минус)
Комментарии к ячейкам (ОБЯЗАТЕЛЬНЫ для всех хардкодированных вводных):
Согласно навыку xlsx, ВСЕ хардкодированные значения должны иметь комментарии с указанием источника. Формат: “Source: [System/Document], [Date], [Reference], [URL if applicable]”
КРИТИЧНО: добавляйте комментарии ПРИ СОЗДАНИИ ЯЧЕЕК. Не откладывайте.
DCF Sheet Detailed Structure
Section 1: Header
Row,Content
1,[Company Name] DCF Model
2,Ticker: [XXX] | Date: [Date] | Year End: [FYE]
3,Blank
4,Case Selector Cell (1=Bear 2=Base 3=Bull)
5,Case Name Display (formula: =IF([Selector]=1"Bear"IF([Selector]=2"Base""Bull")))
Section 2: Market Data (NOT case dependent)
Item,Value
Current Stock Price,$XX.XX
Shares Outstanding (M),XX.X
Market Cap ($M),[Formula]
Net Debt ($M),XXX [or Net Cash if negative]
Section 3: DCF Scenario Assumptions
Создайте отдельные блоки допущений для каждого сценария (Bear, Base, Bull) с DCF-допущениями (Revenue Growth %, EBIT Margin %, Tax Rate %, D&A % of Revenue, CapEx % of Revenue, NWC Change % of ΔRev, Terminal Growth Rate, WACC), разложенными горизонтально по годам проекции. Каждый блок должен включать заголовок секции, строку заголовков столбцов с годами (FY1, FY2 и т. д.) и строки данных. Точная раскладка — в разделе <correct_patterns> «Correct Assumption Table Structure».
Section 4: Historical & Projected Financials
Ссылайтесь на консолидирующий столбец (например, “Selected Case”), который тянет данные из блоков сценариев, а не разбрасывайте IF-формулы по всем строкам проекции.
Income Statement ($M),2020A,2021A,2022A,2023A,2024E,2025E,2026E
Revenue,XXX,XXX,XXX,XXX,[=E29*(1+$E$10)],[=F29*(1+$E$11)],[=G29*(1+$E$12)]
% growth,XX%,XX%,XX%,XX%,[=E29/D29-1],[=F29/E29-1],[=G29/F29-1]
,,,,,,
Gross Profit,XXX,XXX,XXX,XXX,[=E29*E33],[=F29*F33],[=G29*G33]
% margin,XX%,XX%,XX%,XX%,[=E33/E29],[=F33/F29],[=G33/G29]
,,,,,,
Operating Expenses:,,,,,,,
S&M,XXX,XXX,XXX,XXX,[=E29*0.15],[=F29*0.14],[=G29*0.13]
R&D,XXX,XXX,XXX,XXX,[=E29*0.12],[=F29*0.11],[=G29*0.10]
G&A,XXX,XXX,XXX,XXX,[=E29*0.08],[=F29*0.07],[=G29*0.07]
Total OpEx,XXX,XXX,XXX,XXX,[=E36+E37+E38],[=F36+F37+F38],[=G36+G37+G38]
,,,,,,
EBIT,XXX,XXX,XXX,XXX,[=E33-E39],[=F33-F39],[=G33-G39]
% margin,XX%,XX%,XX%,XX%,[=E41/E29],[=F41/F29],[=G41/G29]
,,,,,,
Taxes,(XX),(XX),(XX),(XX),[=E41*$E$24],[=F41*$E$24],[=G41*$E$24]
Tax rate,XX%,XX%,XX%,XX%,[=E43/E41],[=F43/F41],[=G43/G41]
,,,,,,
NOPAT,XXX,XXX,XXX,XXX,[=E41-E43],[=F41-F43],[=G41-G43]
Ключевой паттерн формул:
- Рост выручки:
=E29*(1+$E$10), где $E$10 — консолидирующий столбец для роста в году 1 - НЕ:
=E29*(1+IF($B$6=1,$B$10,IF($B$6=2,$C$10,$D$10)))
Этот подход чище, удобнее для аудита и предотвращает ошибки за счёт централизации логики сценариев.
Section 5: Free Cash Flow Build
КРИТИЧНО: проверьте, что ссылки на строки указывают на ПРАВИЛЬНЫЕ строки допущений. Немедленно тестируйте формулы после создания.
Cash Flow ($M),2020A,2021A,2022A,2023A,2024E,2025E,2026E
NOPAT,XXX,XXX,XXX,XXX,[=E45],[=F45],[=G45]
(+) D&A,XXX,XXX,XXX,XXX,[=E29*$E$21],[=F29*$E$21],[=G29*$E$21]
% of Rev,XX%,XX%,XX%,XX%,[=E58/E29],[=F58/F29],[=G58/G29]
(-) CapEx,(XX),(XX),(XX),(XX),[=E29*$E$22],[=F29*$E$22],[=G29*$E$22]
% of Rev,XX%,XX%,XX%,XX%,[=E60/E29],[=F60/F29],[=G60/G29]
(-) Δ NWC,(XX),(XX),(XX),(XX),[=(E29-D29)*$E$23],[=(F29-E29)*$E$23],[=(G29-F29)*$E$23]
% of Δ Rev,XX%,XX%,XX%,XX%,[=E62/(E29-D29)],[=F62/(F29-E29)],[=G62/(G29-F29)]
,,,,,,
Unlevered FCF,XXX,XXX,XXX,XXX,[=E57+E58-E60-E62],[=F57+F58-F60-F62],[=G57+G58-G60-G62]
Примеры ссылок на строки (на основе раскладки):
- $E$21 = % допущения D&A (консолидирующий столбец, строка 21)
- $E$22 = % допущения CapEx (консолидирующий столбец, строка 22)
- $E$23 = % допущения NWC (консолидирующий столбец, строка 23)
- E29 = Выручка за год (строка 29)
- E45 = NOPAT за год (строка 45)
Перед написанием формул: убедитесь, что эти номера строк соответствуют реальной раскладке. Проверьте один столбец, затем скопируйте по горизонтали.
Section 6: Discounting & Valuation
DCF Valuation,2024E,2025E,2026E,2027E,2028E,Terminal
Unlevered FCF ($M),XXX,XXX,XXX,XXX,XXX,
Period,0.5,1.5,2.5,3.5,4.5,
Discount Factor,0.XX,0.XX,0.XX,0.XX,0.XX,
PV of FCF ($M),XXX,XXX,XXX,XXX,XXX,
,,,,,,
Terminal FCF ($M),,,,,,,XXX
Terminal Value ($M),,,,,,,XXX
PV Terminal Value ($M),,,,,,,XXX
,,,,,,
Valuation Summary ($M),,,,,,
Sum of PV FCFs,XXX,,,,,
PV Terminal Value,XXX,,,,,
Enterprise Value,XXX,,,,,
(-) Net Debt,(XX),,,,,
Equity Value,XXX,,,,,
,,,,,,
Shares Outstanding (M),XX.X,,,,,
IMPLIED PRICE PER SHARE,$XX.XX,,,,,
Current Stock Price,$XX.XX,,,,,
Implied Upside/(Downside),XX%,,,,,
WACC Sheet Structure
COST OF EQUITY CALCULATION,,
Risk-Free Rate (10Y Treasury),X.XX%,[Yellow input]
Beta (5Y monthly),X.XX,[Yellow input]
Equity Risk Premium,X.XX%,[Yellow input]
Cost of Equity,X.XX%,[Calculated blue]
,,
COST OF DEBT CALCULATION,,
Credit Rating,AA-,[Yellow input]
Pre-Tax Cost of Debt,X.XX%,[Yellow input]
Tax Rate,XX.X%,[Link to DCF sheet]
After-Tax Cost of Debt,X.XX%,[Calculated blue]
,,
CAPITAL STRUCTURE,,
Current Stock Price,$XX.XX,[Link to DCF]
Shares Outstanding (M),XX.X,[Link to DCF]
Market Capitalization ($M),"X,XXX",[Calculated]
,,
Total Debt ($M),XXX,[Yellow input]
Cash & Equivalents ($M),XXX,[Yellow input]
Net Debt ($M),XXX,[Calculated]
,,
Enterprise Value ($M),"X,XXX",[Calculated]
,,
WACC CALCULATION,Weight,Cost,Contribution
Equity,XX.X%,X.X%,X.XX%
Debt,XX.X%,X.X%,X.XX%
,,
WEIGHTED AVERAGE COST OF CAPITAL,X.XX%,[Green output]
Ключевые формулы WACC:
Market Cap = Price × Shares
Net Debt = Total Debt - Cash
Enterprise Value = Market Cap + Net Debt
Equity Weight = Market Cap / EV
Debt Weight = Net Debt / EV
WACC = (Cost of Equity × Equity Weight) + (After-tax Cost of Debt × Debt Weight)
Sensitivity Analysis (Bottom of DCF Sheet)
НАПОМИНАНИЕ ПО ТЕРМИНОЛОГИИ: «таблицы чувствительности» = простые двумерные сетки с заголовками строк, заголовками столбцов и формулами в каждой ячейке данных. НЕ функция Excel «Таблица данных» (Данные → Анализ «что если» → Таблица данных). Для записи обычных Excel-формул в каждую ячейку используется openpyxl.
Расположение: строки 87+ на листе DCF (НЕ отдельный лист)
Три таблицы чувствительности, расположенные вертикально:
- WACC vs Terminal Growth (строки 87–100) — сетка 5×5 = 25 ячеек с формулами
- Revenue Growth vs EBIT Margin (строки 102–115) — сетка 5×5 = 25 ячеек с формулами
- Beta vs Risk-Free Rate (строки 117–130) — сетка 5×5 = 25 ячеек с формулами
Итого формул: 75 (это требование, не опция)
КРИТИЧНО: все ячейки таблиц чувствительности должны быть заполнены программно через openpyxl. НЕ используйте линейные приближения. НЕ оставляйте текст-заглушки или инструкции по ручным шагам. НЕ оправдывайте пустые ячейки «сложностью» — используйте Python-цикл для генерации формул.
Настройка таблицы:
- Создайте структуру с заголовками строк/столбцов (значения допущений для проверки)
- Заполните КАЖДУЮ ячейку данных формулой, которая:
- Использует значение заголовка строки (например, WACC = 9,0%)
- Использует значение заголовка столбца (например, Terminal Growth = 3,0%)
- Полностью пересчитывает DCF с этими конкретными допущениями
- Возвращает подразумеваемую цену акции для данного сценария
- Все ячейки должны содержать рабочие формулы при сдаче
- Форматируйте ячейки условным форматированием: зелёная шкала для высоких значений, красная — для низких
- Выделите жирным ячейку базового сценария
- Оставляйте 1–2 пустые строки между таблицами
Никакого ручного вмешательства — таблицы чувствительности должны полностью работать при открытии файла пользователем.
Case Selector Implementation
Трёхсценарная структура:
Bear Case
- Консервативный рост выручки (нижняя граница исторического диапазона)
- Сжатие маржей или их отсутствие
- Более высокий WACC (рост премии за риск)
- Более низкий терминальный темп роста
- Более высокие допущения по CapEx
Base Case
- Рост выручки по консенсусу или согласно прогнозам менеджмента
- Умеренное расширение маржей на основе операционного левериджа
- WACC, подразумеваемый текущим рынком
- Терминальный рост в соответствии с ВВП (2,5–3,0%)
- Стандартные допущения по CapEx
Bull Case
- Оптимистичный рост выручки (верхняя граница прогнозов)
- Значительное расширение маржей
- Более низкий WACC (снижение премии за риск)
- Более высокий терминальный рост (3,5–5,0%)
- Снижение капиталоёмкости
Реализация формул:
НЕ используйте вложенные IF-формулы по всей модели. Вместо этого создайте консолидирующий столбец с INDEX или OFFSET для извлечения данных из нужного блока сценария.
Рекомендуемый паттерн (INDEX):
=INDEX(B10:D10, 1, $B$6), где B10:D10 = значения Bear/Base/Bull, 1 = смещение строки, $B$6 = ячейка-переключатель сценариев (1, 2 или 3)
Затем ссылайтесь на консолидирующий столбец во всех проекциях:
Revenue Year 1: =D29*(1+$E$10), где $E$10 — значение консолидирующего столбца для роста в году 1.
Подход централизует логику сценариев, упрощает аудит и сопровождение модели.
Deliverables Structure
Именование файла: [Ticker]_DCF_Model_[Date].xlsx
Два листа:
- DCF — полная модель с вариантами Bear/Base/Bull + три таблицы чувствительности внизу (WACC vs Terminal Growth, Revenue Growth vs EBIT Margin, Beta vs Risk-Free Rate)
- WACC — расчёт стоимости капитала
Ключевые функции: переключатель сценариев (1/2/3), консолидирующий столбец с формулами INDEX/OFFSET, цветовая маркировка ячеек, комментарии на всех вводных, профессиональные границы.
Best Practices
Model Construction
- Стройте последовательно: завершайте каждую секцию перед переходом к следующей
- Тестируйте по ходу: вводите пробные числа для проверки формул
- Соблюдайте единую структуру: похожие расчёты — по одним паттернам
- Комментируйте сложные формулы: добавляйте пояснения к нестандартным расчётам
- Встраивайте проверки: контрольные суммы там, где применимо
Documentation
- Документируйте все допущения: обосновывайте ключевые вводные
- Указывайте источники данных: фиксируйте, откуда взята каждая точка данных
- Описывайте методологию: поясняйте нестандартные подходы
- Отмечайте неопределённости: выделяйте области с ограниченной видимостью
Quality Control
- Перекрёстная проверка расчётов: верифицируйте математику несколькими способами
- Стресс-тестирование допущений: запускайте анализ чувствительности для проверки устойчивости модели
- Проверка коллегой: попросите кого-то проверить формулы
- Контроль версий: сохраняйте версии по ходу работы
Common Variations
High-Growth Technology Companies
- Более длинный период проекции (7–10 лет)
- Высокие начальные темпы роста (20–30%)
- Значительное расширение маржей со временем
- Более высокий WACC (12–15%)
- Моделирование юнит-экономики (пользователи, ARPU и т. д.)
Mature/Stable Companies
- Более короткий период проекции (3–5 лет)
- Умеренные темпы роста (ВВП +1–3%)
- Стабильные маржи
- Более низкий WACC (7–9%)
- Фокус на генерации кэша и распределении капитала
Cyclical Companies
- Моделирование через экономический цикл
- Нормализация маржей на уровне середины цикла
- Сценарии спада и пика
- Корректировка беты на цикличность
Multi-Segment Companies
- Отдельные DCF для каждого бизнес-сегмента
- Разные темпы роста и маржи по сегментам
- Оценка методом суммы частей
- Учёт синергий
Troubleshooting
При возникновении ошибок или нереалистичных результатов читайте TROUBLESHOOTING.md с детальным руководством по отладке.
Workflow Integration
At Start of DCF Build
-
Сбор рыночных данных:
- Проверьте наличие MCP-серверов для текущих рыночных данных
- Используйте веб-поиск/парсинг для цен акций, беты и других рыночных метрик
- Запросите у пользователя, если нужны конкретные данные
-
Сбор исторических финансовых данных:
- Проверьте наличие MCP-серверов (Daloopa и др.)
- Запросите у пользователя, если данные недоступны через MCP
- Ручное извлечение из отчётов 10-K как запасной вариант
-
Начало построения модели по DCF-методологии, описанной в навыке
During Model Construction
- Стройте Excel-модель через openpyxl с формулами (не хардкодированными значениями)
- Следуйте соглашениям навыка xlsx по построению формул и форматированию
- Применяйте заливку только по запросу пользователя или при наличии конкретных брендинговых требований
Before Delivering Model (MANDATORY)
-
Проверьте структуру:
- Блоки сценариев Bear/Base/Bull с допущениями по годам
- Переключатель сценариев работает, формулы ссылаются на правильные блоки
- Таблицы чувствительности внизу листа DCF (не на отдельном листе)
- Цвета шрифтов: синий — вводные, чёрный — формулы, зелёный — ссылки на другой лист
- Комментарии на ВСЕХ хардкодированных вводных
- Профессиональные границы вокруг основных секций
-
Пересчитайте формулы:
python recalc.py model.xlsx 30 -
Проверьте результат:
- Если
statusравен"success"→ переходите к шагу 4 - Если
statusравен"errors_found"→ изучитеerror_summaryи читайте TROUBLESHOOTING.md
- Если
-
Исправьте ошибки и повторно запустите recalc.py до статуса “success”
-
Точечная проверка формул:
- Проверьте одну FCF-формулу — ссылается ли она на правильные строки допущений?
- Измените переключатель сценариев — обновляется ли консолидирующий столбец?
- Убедитесь, что формулы выручки ссылаются на консолидирующий столбец (а не на вложенные IF)
-
Передайте модель
Available Data Sources
- MCP-серверы: если настроены (Daloopa для исторических финансовых данных)
- Веб-поиск/парсинг: для текущих цен акций, беты и рыночных данных
- Данные от пользователя: исторические финансовые показатели, консенсус-прогнозы
- Ручное извлечение: отчёты SEC EDGAR как запасной вариант
Final Output Checklist
Перед сдачей DCF-модели:
Обязательно:
- Запустить
python recalc.py model.xlsx 30до статуса “success” (нулевое количество ошибок формул) - Два листа: DCF (с таблицами чувствительности внизу), WACC
- Цвета шрифтов: синий = вводные, чёрный = формулы, зелёный = ссылки на другой лист
- Комментарии на ВСЕХ хардкодированных вводных
- Таблицы чувствительности полностью заполнены формулами
- Профессиональные границы вокруг основных секций
Валидация:
- OpEx от выручки (не от валовой прибыли)
- Терминальная стоимость 50–70% от EV
- Терминальный рост < WACC
- Налоговая ставка 21–28%
- Именование файла:
[Ticker]_DCF_Model_[Date].xlsx
Data sources — MCP first, web fallback
Многие фрагменты ниже упоминают «S&P Kensho MCP / Daloopa MCP / FactSet MCP». Это коммерческие MCP-серверы финансовых данных из исходного контекста плагина Cowork. В Hermes Agent:
- Если есть структурированный MCP-сервер финансовых данных (Hermes Agent поддерживает MCP — см. навык
native-mcp), предпочитайте его для point-in-time сопоставимых, прецедентных сделок и отчётности. - В противном случае используйте:
web_search/web_extractпо SEC EDGAR (https://www.sec.gov/cgi-bin/browse-edgar) для US-отчётности- IR-страницы компаний для пресс-релизов и презентаций к результатам
browser_navigateдля интерактивных порталов данных- Данные от пользователя (явно запрашивайте, если в контексте нет)
- Никогда не выдумывайте. Если мультипликатор, прецедент или данные из отчётности нельзя верифицировать, пометьте ячейку как
[UNSOURCED]и сообщите об этом пользователю.
Attribution
Навык адаптирован из пакета плагинов Anthropic’s Claude for Financial Services (Apache-2.0). Пути Office-JS / Cowork live-Excel убраны; эта версия работает с headless openpyxl через соглашения навыка excel-author. Оригинал: https://github.com/anthropics/financial-services