Skip to content

Commit 23147ee

Browse files
committed
feat: Capital cycle analysis (资本周期方法论)
Adds capital_cycle_stage() to risk/financial_health.py — detects capacity cycle stage from Capex/Depreciation ratio trend. Stages: 投资扩张期 → 产能投产期 → 稳态期 → 产能消化期 → 出清期 → 再投资期 Inspired by the 资本周期方法论 from financial-report-analysis (2734 research reports distilled into 13 methodologies). 1205 passed (all existing)
1 parent ce077d0 commit 23147ee

1 file changed

Lines changed: 74 additions & 0 deletions

File tree

risk/financial_health.py

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,80 @@ def moat_score(
477477

478478
return {"score": round(score, 1), "label": label, "max_score": 10}
479479

480+
481+
# ---------------------------------------------------------------------------
482+
# Capital cycle analysis (inspired by 资本周期方法论)
483+
# ---------------------------------------------------------------------------
484+
485+
486+
def capital_cycle_stage(
487+
capex: list[float],
488+
depreciation: list[float],
489+
revenue: list[float] | None = None,
490+
) -> dict:
491+
"""Analyze capital cycle stage from Capex/Depreciation ratio.
492+
493+
The capital cycle framework (资本周期方法论) tracks whether a company
494+
is in the investment or harvesting phase of its capacity cycle.
495+
496+
Stages:
497+
Expansion (投资扩张期): Capex/D&A > 1.5, rising
498+
Peak (产能高峰): Capex/D&A peaks, revenue growth decelerates
499+
Harvest (产能消化期): Capex/D&A < 1.0, falling
500+
Trough (产能出清期): Capex/D&A at low, competitors exiting
501+
Re-invest (再投资期): Capex/D&A rising from trough
502+
503+
Args:
504+
capex: List of annual capital expenditure values (recent first).
505+
depreciation: List of annual depreciation values (recent first).
506+
revenue: Optional list of annual revenue for growth context.
507+
508+
Returns:
509+
Dict with stage, ratio, trend, and description.
510+
"""
511+
if len(capex) < 3 or len(depreciation) < 3:
512+
return {"stage": "数据不足", "ratio": None, "trend": ""}
513+
514+
ratios = [c / max(d, 1) for c, d in zip(capex, depreciation)]
515+
current = ratios[0]
516+
prev = ratios[1]
517+
trend = "rising" if current > prev else "falling"
518+
519+
# Revenue growth context
520+
rev_growth = None
521+
if revenue and len(revenue) >= 2:
522+
rev_growth = (revenue[0] - revenue[1]) / abs(revenue[1]) if revenue[1] != 0 else 0
523+
524+
if current > 1.5 and trend == "rising":
525+
stage = "投资扩张期"
526+
desc = f"Capex/折旧比 {current:.1f} 且上升中,公司正处于大规模资本投入阶段。"
527+
if rev_growth and rev_growth > 0.15:
528+
desc += "营收高速增长,投入有回报支撑。"
529+
else:
530+
desc += "⚠️ 营收增速未匹配,警惕过度投资。"
531+
elif current > 1.5 and trend == "falling":
532+
stage = "产能投产期"
533+
desc = f"Capex/折旧比 {current:.1f} 但已从高位回落,前期投入开始转固。关注产能利用率爬坡。"
534+
elif 1.0 <= current <= 1.5:
535+
stage = "稳态期"
536+
desc = f"Capex/折旧比 {current:.1f},维持性资本开支为主,产能与需求基本匹配。"
537+
elif current < 1.0 and trend == "falling" and (current < ratios[-1] * 0.8 if len(ratios) > 2 else False):
538+
stage = "产能出清期"
539+
desc = f"Capex/折旧比 {current:.1f} 且持续下降,行业产能出清中,竞争者可能退出。"
540+
elif current < 1.0 and trend == "rising" and prev < 1.0:
541+
stage = "再投资早期"
542+
desc = f"Capex/折旧比 {current:.1f} 从低点回升,可能是行业见底信号。关注需求是否实质性复苏。"
543+
else:
544+
stage = "产能消化期"
545+
desc = f"Capex/折旧比 {current:.1f},投资低于折旧,公司在消化前期产能。"
546+
547+
return {
548+
"stage": stage,
549+
"ratio": round(current, 2),
550+
"trend": trend,
551+
"description": desc,
552+
"ratios_history": [round(r, 2) for r in ratios],
553+
}
480554
# ---------------------------------------------------------------------------
481555
# Module 3: Original lightweight health checks
482556
# ---------------------------------------------------------------------------

0 commit comments

Comments
 (0)