生成摩根士丹利风格的DCF/SOTP投资级财务模型Excel。当用户需要创建财务模型、DCF估值、SOTP分部估值、敏感性分析、PE Band分析、可比公司分析时使用。适用于CGMA/ACCA/CPA/CFA持证人及全球200万专业会员。
场景说明典型输出首次覆盖 (Initiation)卖方研究团队首次覆盖标的,需完整 DCF + SOTP + Comps全套 12+ Sheet 投资级模型季度业绩更新 (Earnings Update)财报季后更新预测假设与估值结论更新 Forecast + Sensitivity并购估值 (M&A Valuation)收购方/财务顾问对目标公司进行独立估值Bear/Base/Bull 三情景 DCF + SOTPIPO 定价 (IPO Pricing)承销商对拟上市公司进行估值锚定DCF + PE Band + Comps 多维交叉验证内部审议 (Internal Review)投资委员会/风控委员会审议项目敏感性矩阵 + 情景对比摘要压力测试 (Stress Test)风险管理团队进行极端情景模拟WACC/TGR 双维敏感性矩阵
矩阵X 轴Y 轴输出WACC x TGR → Implied EVTerminal Growth Rate (2.0%~4.0%)WACC (8%14%)Enterprise ValueWACC x Exit Multiple → Implied EVExit Multiple (6x18x)WACC (8%~14%)Enterprise ValueWACC x TGR → Implied PPSTerminal Growth RateWACCPrice Per ShareScenario ComparisonBear / Base / BullKey Metrics三情景对比摘要
图表类型数据源说明Revenue & EBITDA 双柱图DCF Sheet收入与 EBITDA 并列柱状对比EBITDA Margin 折线图DCF Sheet利润率趋势折线SOTP 饼图SOTP Sheet各分部 EV 占比PE Band 面积图PE Band Sheet历史估值区间面积
python
from ms_financial_model import make_financial_model, sample_data
# 使用内置示例数据快速生成
data = sample_data()
output = make_financial_model(data, "output/my_model.xlsx", theme="classic", language="zh")
print(f"模型已生成: {output}")
# 使用自定义数据
my_data = {
"company_name": "My Corp",
"ticker": "MYCO",
"report_date": "2026-06-13",
"analyst": "Research Team",
"currency": "USD",
"shares_outstanding": 500,
"historical": {
"years": ["FY22A", "FY23A", "FY24A", "FY25A"],
"revenue": [3000, 4000, 5500, 7000],
"ebitda": [450, 640, 935, 1260],
},
"forecast_years": ["FY26E", "FY27E", "FY28E", "FY29E", "FY30E"],
"scenarios": {
"base": {
"label_zh": "基准情景",
"label_en": "Base Case",
"core_assumptions": "Steady growth",
"ebitda_margin": [0.20, 0.21, 0.22, 0.23, 0.24],
"da_pct_revenue": 0.035,
"capex_pct_revenue": 0.055,
"nwc_pct_rev_change": 0.08,
"tax_rate": 0.21,
"wacc": {
"rf": 0.044, "erp": 0.055, "beta": 1.5,
"size_premium": 0.003, "country_risk": 0.0,
"kd": 0.055, "tax_rate": 0.21,
"e_weight": 0.92, "d_weight": 0.08,
},
"terminal_growth_rate": 0.03,
"exit_multiple_ebitda": 12.0,
"net_debt": 2000,
},
"bear": { ... },
"bull": { ... },
},
}
output = make_financial_model(my_data, "output/custom_model.xlsx")
bash
# 使用示例数据生成中文模型
python scripts/run.py output/model_zh.xlsx
# 生成英文模型
python scripts/run.py output/model_en.xlsx --lang en
# 指定主题
python scripts/run.py output/model.xlsx --theme classic
生成的 .xlsx 文件包含以下 Sheet(按顺序):
#Sheet 名称内容1Cover封面:公司概览、业务分部摘要、情景估值对比、投资要点2DCF - Bear Case熊市情景 DCF:收入预测 → UFCF → Terminal Value → Equity Value3DCF - Base Case基准情景 DCF(同上结构)4DCF - Bull Case牛市情景 DCF(同上结构)5WACC加权平均资本成本拆解(公式驱动)6Sensitivity4 组敏感性分析矩阵7SOTP分部估值(Sum-of-the-Parts)8KPIs运营关键指标仪表板9PE Band历史市盈率区间分析10Comps可比公司分析(多市场分组)
字段类型说明company_name``str公司名称ticker``str股票代码report_date``str报告日期 (YYYY-MM-DD)currency``str货币代码 (USD/CNY/HKD/EUR)shares_outstanding``float流通股数(百万)historical``dict历史财务数据(见下)forecast_years``list[str]预测年份标签,如 ["FY26E", "FY27E", ...]``scenarios``dict三情景数据 (bear/base/bull)
python
"historical": {
"years": ["FY21A", "FY22A", "FY23A", "FY24A", "FY25A"], # 历史年份标签
"revenue": [5300, 7800, 11200, 15600, 20000], # 收入 (百万)
"ebitda": [530, 1014, 1680, 2500, 3600], # EBITDA (百万)
}
python
"scenarios": {
"bear": {
"label_zh": "熊市情景", # 中文标签
"label_en": "Bear Case", # 英文标签
"core_assumptions": "...", # 核心假设描述
"ebitda_margin": [0.18, 0.19, 0.19, 0.20, 0.20], # 5年 EBITDA 利润率
"da_pct_revenue": 0.045, # D&A 占收入比
"capex_pct_revenue": 0.07, # CapEx 占收入比
"nwc_pct_rev_change": 0.12, # ΔNWC 占收入变动比
"tax_rate": 0.21, # 企业所得税率
"wacc": { # WACC 参数
"rf": 0.044, # 无风险利率
"erp": 0.055, # 股权风险溢价
"beta": 1.80, # Beta 系数
"size_premium": 0.005, # 规模溢价
"country_risk": 0.0, # 国家风险溢价
"kd": 0.065, # 债务成本
"tax_rate": 0.21, # 债务税盾税率
"e_weight": 0.90, # 权重占比
"d_weight": 0.10, # 债务占比
},
"terminal_growth_rate": 0.020, # 永续增长率
"exit_multiple_ebitda": 8.0, # 退出 EBITDA 倍数
"net_debt": 5000, # 净债务 (百万)
},
"base": { ... },
"bull": { ... },
}
字段类型说明触发模块analyst``str分析师/机构名称Coverbusiness_overview``list[dict]业务分部概览 [{name, description, revenue_estimate}]Coverhistorical.segments``dict分部历史收入 {segment_name: {revenue: [...]}}DCFscenarios.*.segments``dict分部预测 {segment_name: {fy25_base, growth_rates}}DCFcomparable_companies``list[dict]可比公司列表(见下)Compssotp``dictSOTP 分部估值数据(见下)SOTPoperational_kpis``dict运营 KPI 数据(见下)KPIspe_band``dictPE Band 数据(见下)PE Bandcover_subtitle``str封面副标题Coverkey_takeaways``list[str]关键要点列表Coverinvestment_thesis``str投资逻辑摘要Coverrisk_factors``list[str]风险因素列表Cover
python
"comparable_companies": [
{
"name": "Tesla", "ticker": "TSLA", "market": "US",
"mcap": 800000, "ev": 750000,
"ev_rev_ltm": 5.2, "ev_rev_ntm": 4.8,
"ev_ebitda_ltm": 25.0, "ev_ebitda_ntm": 20.0,
"cagr_3y": 0.35, "note": "Closest comp",
},
# market 字段: "US" / "HK" / "A" 用于分组
]
python
"sotp": {
"segments": [
{
"name": "Tesla Auto",
"revenue_ltm": 77000, "ebitda_ltm": 15400,
"ev_multiple": 8.0, "ev": 123200,
"method": "EV/EBITDA", "note": "Comparable median",
},
],
"net_debt": -28000,
"minority_interest": 0,
"shares_outstanding": 3200,
}
python
"operational_kpis": {
"metrics": [
{
"name": "Tesla Deliveries",
"unit": "K units",
"historical": [1310, 1390, 1810, 1636, 1790],
"forecast": [2000, 2200, 2400, 2600, 2800],
},
],
}
python
"pe_band": {
"current_pe": 35.0,
"forward_pe": 28.0,
"median_pe": 55.0,
"pe_history": [
{"period": "FY2021", "high": 120, "low": 45, "close": 95, "eps": 2.5},
],
}
主题说明classic摩根士丹利经典深蓝 (Deep Navy #1F3864) + 金色点缀
当前版本默认使用
classic主题。更多主题(如dark,light,
语言代码说明影响范围zh简体中文(默认)所有 Sheet 标题、标签、注释en英文所有 Sheet 标题、标签、注释
通过 t(key, lang) 函数实现 i18n,覆盖 100+ 标签键值对。
make_financial_model(data, output_path, theme="classic", language="zh")#生成摩根士丹利风格 DCF 财务模型 Excel 文件。
参数:
参数类型默认值说明data``dict—模型数据字典(参见 sample_data() 返回结构)output_path``str—输出 .xlsx 文件路径theme``str``"classic"颜色主题language``str``"zh"语言: "zh" 或 "en"
返回值: str — 生成文件的绝对路径
sample_data() -> dict#返回完整的示例数据字典(Musk Empire Holdings 演示数据),包含全部可选字段。可直接传入 make_financial_model() 用于快速测试。
依赖最低版本说明Python>= 3.9类型注解支持openpyxl>= 3.1Excel 读写、图表、样式
安装依赖:
bash
pip install openpyxl>=3.1
模型遵循华尔街标准配色规范,便于快速识别单元格性质:
颜色色值含义使用场景蓝色 (Blue)#2F75B6输入假设 (Input)可手动修改的假设单元格黑色 (Black)#000000公式计算 (Formula)自动计算的公式单元格绿色 (Green)#006100实际数据 (Actual)已公告的历史实际值红色 (Red)#C00000警示/负值 (Alert)负数或需关注的数据灰色 (Gray)#595959注释说明 (Note)说明性文字
填充色色值含义浅黄#FFF2CC输入假设区域浅绿#E2EFDA关键计算行 (UFCF)浅蓝紫#D9E1F2汇总行浅橙#FCE4D6CapEx / ΔNWC 行纯黄#FFFF00敏感性矩阵基准交叉点
Author: WANG DONG JIE ( @yjkj999999 | Clawhub)
Version: 1.1.0 | License: MIT | Category: Financial Modeling
适用于 CGMA/ACCA/CPA/CFA 持证人及全球 200 万专业会员。生成符合投行标准的 DCF/SOTP 投资级财务模型。