financial-analysis
2
总安装量
2
周安装量
#64585
全站排名
安装命令
npx skills add https://github.com/qyqsdtc/financial_analysis_agent_skill --skill financial-analysis
Agent 安装分布
opencode
2
gemini-cli
2
claude-code
2
github-copilot
2
codex
2
kimi-cli
2
Skill 文档
è´¢å¡æ¥è¡¨åææè½
ä¸ä¸çä¸å¸å ¬å¸è´¢å¡æ¥è¡¨åæå·¥å ·ï¼æ¯æï¼
- 读åPDFè´¢å¡æ¥åå¹¶æåä¸å¤§æ¥è¡¨æ°æ®
- 计ç®30+æ ¸å¿è´¢å¡ææ ï¼çå©ãå¿åºãè¿è¥ãç°éæµãæé¿æ§ãä¼°å¼ï¼
- æé¦åæ: ROEä¸å ç´ åè§£å驱å¨å ç´ åæ
- æé¿æ§è¯å: æ¶å ¥ã婿¶¦ãèµäº§å¢é¿çè¯ä¼°
- è¶å¿åæ: å¤ææ°æ®è¶å¿ã转æç¹æ£æµãé¢è¦çæ
- å¢å¼ºä¼°å¼: PEãPBãPSãEV/EBITDAçææ
- çæç»¼åè¯ååæèµè¯çº§
- è¾åºMarkdownåExcelæ ¼å¼åææ¥å
åææµç¨
å½ç¨æ·æä¾è´¢æ¥PDFæ¶ï¼æä»¥ä¸æµç¨æ§è¡ï¼
- 读åPDF – ä½¿ç¨ PDF å·¥å ·è¯»åPDFæä»¶å 容
- æåæ°æ® – 仿æ¬ä¸è¯å«èµäº§è´åºè¡¨ã婿¶¦è¡¨ãç°éæµéè¡¨æ°æ®
- è®¡ç®ææ – 使ç¨
scripts/calculator.py计ç®è´¢å¡ææ - æé¦åæ – 使ç¨
scripts/dupont_analyzer.pyåè§£ROE驱å¨å ç´ - è¶å¿åæ – 使ç¨
scripts/trend_analyzer.pyåæå¤ææ°æ®è¶å¿ - æ·±åº¦åæ – 使ç¨
scripts/financial_analyzer.pyè¿è¡ä¸ä¸åæ - çææ¥å – 使ç¨
scripts/report_generator.pyçææ¥å
æ ¸å¿èæ¬
ææ è®¡ç®å¨ (scripts/calculator.py)
from scripts.calculator import FinancialIndicatorCalculator
calculator = FinancialIndicatorCalculator()
# åºç¡ç¨æ³
indicators = calculator.calculate_all_indicators(
balance_sheet=balance_sheet_data,
income_statement=income_statement_data,
cashflow_statement=cashflow_statement_data,
metadata={'company_name': 'å
¬å¸åç§°', 'total_shares': 1000000000, 'stock_price': 25.5}
)
# 带æé¿æ§åæï¼éè¦ä¸ææ°æ®ï¼
indicators = calculator.calculate_all_indicators(
balance_sheet=current_balance_sheet,
income_statement=current_income_statement,
cashflow_statement=current_cashflow_statement,
metadata=metadata,
previous_balance_sheet=prev_balance_sheet,
previous_income_statement=prev_income_statement,
previous_cashflow_statement=prev_cashflow_statement
)
# è·åè¯åæè¦ï¼å
å«æé¿æ§è¯åï¼
summary = calculator.get_summary()
# è¿å: {'综åè¯å': 85.5, 'çå©è½åè¯å': 90, 'å¿åºè½åè¯å': 80, 'æé¿æ§è¯å': 75, ...}
æé¦åæå¨ (scripts/dupont_analyzer.py)
from scripts.dupont_analyzer import DuPontAnalyzer
dupont = DuPontAnalyzer()
# ROEåè§£
decomposition = dupont.calculate_dupont_decomposition(balance_sheet, income_statement)
# è¿å: net_profit_margin, asset_turnover, equity_multiplier, roe
# ROEè´¨éè¯ä¼°
quality = dupont.evaluate_roe_quality()
# è¿å: driver_type, quality, risk_level, sustainability, details
# ROEåå¨é©±å¨å ç´ åæï¼å¯¹æ¯ä¸æï¼
driver_analysis = dupont.analyze_roe_drivers(
current_balance_sheet, current_income_statement,
previous_balance_sheet, previous_income_statement
)
# è¿å: changes, contributions, main_driver, interpretation
è¶å¿åæå¨ (scripts/trend_analyzer.py)
from scripts.trend_analyzer import MultiPeriodTrendAnalyzer
trend = MultiPeriodTrendAnalyzer()
# æ·»å å¤ææ°æ®
for period_data in historical_data:
trend.add_period_data(
period=period_data['period'],
balance_sheet=period_data['balance_sheet'],
income_statement=period_data['income_statement'],
cashflow_statement=period_data['cashflow_statement'],
indicators=period_data.get('indicators')
)
# åæææ è¶å¿
roe_trend = trend.analyze_metric_trend('profitability.roe')
# è¿å: direction, values, turning_points, statistics
# 计ç®CAGR
revenue_cagr = trend.calculate_cagr('income_statement.operating_revenue')
# çæé¢è¦
alerts = trend.generate_alerts()
# è·åè¶å¿æè¦
summary = trend.get_trend_summary()
è´¢å¡åæå¨ (scripts/financial_analyzer.py)
from scripts.financial_analyzer import FinancialAnalyzer
analyzer = FinancialAnalyzer()
# åºç¡è´¢å¡å¥åº·åæ
analysis = analyzer.analyze_financial_health(
company_name="å
¬å¸åç§°",
indicators=indicators,
report_type="å¹´æ¥",
report_period="2023-12-31"
)
# è¿å: overall_rating, strengths, weaknesses, risks, opportunities, detailed_analysis
# å¢å¼ºçåæï¼å«æé¦åè¶å¿åæï¼
analysis = analyzer.analyze_financial_health_enhanced(
company_name="å
¬å¸åç§°",
indicators=indicators,
report_type="å¹´æ¥",
report_period="2023-12-31",
balance_sheet=balance_sheet,
income_statement=income_statement,
previous_balance_sheet=prev_balance_sheet,
previous_income_statement=prev_income_statement,
period_data_list=historical_periods # å¤ææ°æ®ç¨äºè¶å¿åæ
)
# è¿å: åºç¡åæ + dupont_analysis + trend_analysis
# åç¬æ§è¡æé¦åæ
dupont_result = analyzer.perform_dupont_analysis(
balance_sheet, income_statement,
prev_balance_sheet, prev_income_statement
)
# åç¬æ§è¡è¶å¿åæ
trend_result = analyzer.perform_trend_analysis(period_data_list)
# çææèµå»ºè®®
recommendation = analyzer.generate_investment_recommendation(
analysis=analysis,
indicators=indicators,
stock_price=25.8, # å¯é
target_investor_type="稳å¥å"
)
# è¿å: rating, action, target_price, entry_price, stop_loss, reasons
æ¥åçæå¨ (scripts/report_generator.py)
from scripts.report_generator import AnalysisReportGenerator
generator = AnalysisReportGenerator()
# Markdownæ¥åï¼å«æé¦åè¶å¿åæï¼
generator.generate_markdown_report(
company_name="å
¬å¸åç§°",
report_period="2023-12-31",
report_type="å¹´æ¥",
statement_data=data,
indicators=indicators,
analysis=analysis,
recommendation=recommendation,
output_path="åææ¥å.md",
dupont_analysis=dupont_result, # å¯é
trend_analysis=trend_result # å¯é
)
# Excelæ¥å
generator.generate_excel_report(
company_name="å
¬å¸åç§°",
report_period="2023-12-31",
statement_data=data,
indicators=indicators,
output_path="è´¢å¡æ°æ®.xlsx"
)
æ°æ®ç»æ
èµäº§è´åºè¡¨ (balance_sheet)
{
'total_assets': 100000000, # æ»èµäº§
'current_assets': 50000000, # æµå¨èµäº§
'cash_and_equivalents': 20000000, # è´§å¸èµé
'accounts_receivable': 15000000, # åºæ¶è´¦æ¬¾
'inventory': 10000000, # åè´§
'total_liabilities': 40000000, # æ»è´åº
'current_liabilities': 25000000, # æµå¨è´åº
'accounts_payable': 8000000, # åºä»è´¦æ¬¾
'shareholders_equity': 60000000, # è¡ä¸æç
}
婿¶¦è¡¨ (income_statement)
{
'operating_revenue': 80000000, # è¥ä¸æ¶å
¥
'operating_cost': 50000000, # è¥ä¸ææ¬
'operating_profit': 25000000, # è¥ä¸å©æ¶¦
'total_profit': 24000000, # 婿¶¦æ»é¢
'net_profit': 20000000, # å婿¶¦
'financial_expenses': 1000000, # è´¢å¡è´¹ç¨
'depreciation_amortization': 2000000, # ææ§æéï¼ç¨äºEBITDAï¼
'basic_eps': 0.5, # åºæ¬æ¯è¡æ¶çï¼å¯éï¼
}
ç°éæµé表 (cashflow_statement)
{
'operating_cashflow': 22000000, # ç»è¥æ´»å¨ç°éæµ
'investing_cashflow': -5000000, # æèµæ´»å¨ç°éæµ
'financing_cashflow': -3000000, # ç¹èµæ´»å¨ç°éæµ
'net_cashflow': 14000000, # ç°éåå¢å é¢
}
å æ°æ® (metadata)
{
'company_name': 'å
¬å¸åç§°',
'total_shares': 1000000000, # æ»è¡æ¬
'stock_price': 25.5, # å½åè¡ä»·ï¼ç¨äºPEãPBãEV计ç®ï¼
}
æ°å¢åè½è¯´æ
æé¦åæ
ROEä¸å ç´ åè§£ï¼å¸®å©çè§£çå©é©±å¨æ¥æºï¼
- åå©ç: åæ çå©è½åï¼å®ä»·æãææ¬æ§å¶ï¼
- èµäº§å¨è½¬ç: åæ è¿è¥æçï¼èµäº§ä½¿ç¨æçï¼
- æç乿°: åæ è´¢å¡æ æï¼è´åºæ°´å¹³ï¼
ROEè´¨éè¯ä»·ï¼
- é«åå©ç驱å¨ï¼ä¼è´¨ï¼å¯æç»æ§é«
- é«å¨è½¬é©±å¨ï¼è¯å¥½ï¼éåèå©å¤é模å¼
- 髿 æé©±å¨ï¼é£é©è¾é«ï¼éå ³æ³¨è´¢å¡é£é©
æé¿æ§è¯å
æ°å¢20%æéçæé¿æ§ç»´åº¦è¯åï¼
- è¥ä¸æ¶å ¥å¢é¿ç (35å)
- å婿¶¦å¢é¿ç (35å)
- æ»èµäº§å¢é¿ç (15å)
- è¡ä¸æçå¢é¿ç (15å)
å¢å¼ºä¼°å¼ææ
- PE (å¸çç): è¡ä»·/EPS
- PB (å¸åç): è¡ä»·/BVPS
- PS (å¸éç): å¸å¼/è¥ä¸æ¶å ¥
- EV/EBITDA: ä¼ä¸ä»·å¼/æ¯ç¨ææ§æéå婿¶¦
- EBITDA: è¥ä¸å©æ¶¦ + è´¢å¡è´¹ç¨ + ææ§æé
è¶å¿åæä¸é¢è¦
- å¤ææ°æ®è¶å¿æ¹åè¯å«
- 转æç¹æ£æµ
- CAGRï¼å¤åå¹´å¢é¿çï¼è®¡ç®
- èªå¨é¢è¦çæï¼
- 严éï¼æµå¨æ¯ç<0.8ãèµäº§è´åºç>80%
- è¦åï¼ROEè¿ç»ä¸æ»ãç»è¥ç°éæµä¸ºè´
- 注æï¼ç°éå婿¯åä½
åèææ¡£
- 详ç»ä»£ç 示ä¾: è§ references/code-examples.md
- è¯åæ å: è§ references/scoring-standards.md
ä¾èµ
pip install pandas numpy openpyxl matplotlib seaborn openai
注æäºé¡¹
- æ°æ®åç¡®æ§: è§£æç»æä¾èµPDFè´¨éï¼å»ºè®®äººå·¥å¤æ ¸å ³é®æ°æ®
- è¡ä¸å·®å¼: ä¸åè¡ä¸çè´¢å¡ææ æ åå·®å¼è¾å¤§ï¼åææ¶éèèè¡ä¸ç¹ç¹
- æèµé£é©: æ¬å·¥å ·ä» ä¾åèï¼ä¸æææèµå»ºè®®