aj-stock-analysis
npx skills add https://github.com/zuoa/aj-skills --skill aj-stock-analysis
Agent 安装分布
Skill 文档
China Stock Analysis Skill
åºäºä»·å¼æèµç论çä¸å½Aè¡åæå·¥å ·ï¼é¢åä½é¢äº¤æçæ®éæèµè ã
When to Use
å½ç¨æ·è¯·æ±ä»¥ä¸æä½æ¶è°ç¨æ¤skillï¼
- åææåªAè¡è¡ç¥¨
- çéç¬¦åæ¡ä»¶çè¡ç¥¨
- 对æ¯å¤åªè¡ç¥¨æè¡ä¸å è¡ç¥¨
- 计ç®è¡ç¥¨ä¼°å¼æå å¨ä»·å¼
- æ¥çè¡ç¥¨çè´¢å¡å¥åº·ç¶åµ
- æ£æµè´¢å¡å¼å¸¸é£é©
Prerequisites
Pythonç¯å¢è¦æ±ï¼å¿ 须使ç¨venvï¼
ææèæ¬å½ä»¤é½åºå¨é¡¹ç®èæç¯å¢ä¸è¿è¡ã
python3 -m venv .venv
source .venv/bin/activate
å®è£ ä¾èµï¼
pip install tushare pandas numpy
Environment Bootstrapï¼æ§è¡åå¿ é¡»èªå¨å®æï¼
å¨è¿è¡ä»»ä½èæ¬åï¼å å¨å½å项ç®ç®å½æ§è¡ï¼
cd <skill项ç®ç®å½>
if [ ! -d ".venv" ]; then
python3 -m venv .venv
fi
source .venv/bin/activate
python3 -m pip install -U pip
python3 -m pip install tushare pandas numpy
说æï¼
.venvå¿ é¡»ä½äº skill é¡¹ç®æ ¹ç®å½ä¸ï¼ä¸æ¯å ¨å±ç®å½ï¼- è¥
import tushare失败ï¼å¿ é¡»å æ§è¡ä¸è¿° bootstrapï¼åç»§ç»åç»åææµç¨
Tushare token 约å®ä» ~/.aj-skills/.env 读åï¼
# ~/.aj-skills/.env
TUSHARE_TOKEN=your_token
ä¾èµæ£æ¥
卿§è¡ä»»ä½åæåï¼å æ£æ¥tushareæ¯å¦å·²å®è£ ï¼
python3 -c "import tushare; print(tushare.__version__)"
Core Modules
1. Stock Screener (è¡ç¥¨çéå¨)
çéç¬¦åæ¡ä»¶çè¡ç¥¨
2. Financial Analyzer (è´¢å¡åæå¨)
ä¸ªè¡æ·±åº¦è´¢å¡åæ
3. Industry Comparator (è¡ä¸å¯¹æ¯)
åè¡ä¸æ¨ªå对æ¯åæ
4. Valuation Calculator (ä¼°å¼è®¡ç®å¨)
å å¨ä»·å¼æµç®ä¸å®å ¨è¾¹é 计ç®
5. News & Sentiment (æ°é»ä¸èæ )
æåè¿æç¤¾ä¼é¢æ°é»å¹¶çæèæ é£é©è¯ä¼°
Workflow 1: Stock Screening (è¡ç¥¨çé)
ç¨æ·è¯·æ±çéè¡ç¥¨æ¶ä½¿ç¨ã
Step 1: Collect Screening Criteria
åç¨æ·è¯¢é®ç鿡件ãæä¾ä»¥ä¸é项ä¾ç¨æ·éæ©æèªå®ä¹ï¼
估弿æ ï¼
- PE (å¸çç): ä¾å¦ PE < 15
- PB (å¸åç): ä¾å¦ PB < 2
- PS (å¸éç): ä¾å¦ PS < 3
çå©è½åï¼
- ROE (åèµäº§æ¶çç): ä¾å¦ ROE > 15%
- ROA (æ»èµäº§æ¶çç): ä¾å¦ ROA > 8%
- æ¯å©ç: ä¾å¦ > 30%
- åå©ç: ä¾å¦ > 10%
æé¿æ§ï¼
- è¥æ¶å¢é¿ç: ä¾å¦ > 10%
- å婿¶¦å¢é¿ç: ä¾å¦ > 15%
- è¿ç»å¢é¿å¹´æ°: ä¾å¦ >= 3å¹´
è¡æ¯ï¼
- è¡æ¯ç: ä¾å¦ > 3%
- è¿ç»å红年æ°: ä¾å¦ >= 5å¹´
è´¢å¡å®å ¨ï¼
- èµäº§è´åºç: ä¾å¦ < 60%
- æµå¨æ¯ç: ä¾å¦ > 1.5
- é卿¯ç: ä¾å¦ > 1
çéèå´ï¼
- å ¨Aè¡
- 沪深300æåè¡
- ä¸è¯500æåè¡
- å䏿¿/ç§åæ¿
- ç¨æ·èªå®ä¹å表
Step 2: Execute Screening
python scripts/stock_screener.py \
--scope "hs300" \
--pe-max 15 \
--roe-min 15 \
--debt-ratio-max 60 \
--dividend-min 2 \
--output screening_result.json
åæ°è¯´æï¼
--scope: çéèå´ (all/hs300/zz500/cyb/kcb/custom:600519,000858,…)--pe-max/--pe-min: PEèå´--pb-max/--pb-min: PBèå´--roe-min: æä½ROE--growth-min: æä½å¢é¿ç--debt-ratio-max: æå¤§èµäº§è´åºç--dividend-min: æä½è¡æ¯ç--token: tushare tokenï¼ä¼å äºç¯å¢åéï¼--format: è¾åºæ ¼å¼ (json/table)--quiet: é黿¨¡å¼--output: è¾åºæä»¶è·¯å¾
Step 3: Present Results
读å screening_result.json å¹¶ä»¥è¡¨æ ¼å½¢å¼åç°ç»ç¨æ·ï¼
| 代ç | åç§° | PE | PB | ROE | è¡æ¯ç | è¯å |
|---|---|---|---|---|---|---|
| 600519 | è´µå·è å° | 25.3 | 8.5 | 30.2% | 2.1% | 85 |
Workflow 2: Stock Analysis (个è¡åæ)
ç¨æ·è¯·æ±åææåªè¡ç¥¨æ¶ä½¿ç¨ã
Step 1: Collect Stock Information
询é®ç¨æ·ï¼
- è¡ç¥¨ä»£ç æåç§°
- åææ·±åº¦çº§å«ï¼
- æè¦çº§ï¼å ³é®ææ + æèµç»è®ºï¼1页ï¼
- æ å级ï¼è´¢å¡åæ + ä¼°å¼ + è¡ä¸å¯¹æ¯ + é£é©æç¤º
- 深度级ï¼å®æ´è°ç æ¥åï¼å å«å岿°æ®è¿½è¸ª
Step 1.5: Prepare Output Directory
ååªè¡ç¥¨åææ¶ï¼skill éè¦èªå¨å建è¾åºç®å½ï¼å½åè§åï¼
${è¡ç¥¨åç§°}_${è¡ç¥¨ä»£ç }
示ä¾ï¼
stock_dir="è´µå·è
å°_600519"
mkdir -p "${stock_dir}"
Step 2: Fetch Stock Data
python scripts/data_fetcher.py \
--code "600519" \
--data-type all \
--with-news \
--news-days 7 \
--news-limit 20 \
--years 5 \
--output "${stock_dir}/stock_data.json"
åæ°è¯´æï¼
--code: è¡ç¥¨ä»£ç --data-type: æ°æ®ç±»å (basic/financial/valuation/holder/news/all)--years: è·åå¤å°å¹´çå岿°æ®--token: tushare tokenï¼ä¼å äºç¯å¢åéï¼- é»è®¤è¯»åï¼
~/.aj-skills/.envä¸çTUSHARE_TOKEN --with-news: éå æ°é»ä¸èæ--news-days: æ°é»çªå£å¤©æ°--news-limit: æ°é»æå¤§æ¡æ°--news-sources: æ°é»æ¥æºè¿æ»¤ï¼éå·åéï¼--format: è¾åºæ ¼å¼ (json/table)--quiet: é黿¨¡å¼--output: è¾åºæä»¶
å¯éï¼åç¬æ§è¡æ°é»èæ æµç¨
python scripts/news_fetcher.py --code 600519 --name è´µå·è
å° --days 7 --limit 20 --output "${stock_dir}/news.json"
python scripts/sentiment_analyzer.py --input "${stock_dir}/news.json" --output "${stock_dir}/sentiment.json"
Step 3: Run Financial Analysis
python scripts/financial_analyzer.py \
--input "${stock_dir}/stock_data.json" \
--level standard \
--output "${stock_dir}/analysis_result.json"
åæ°è¯´æï¼
--input: è¾å ¥çè¡ç¥¨æ°æ®æä»¶--level: åææ·±åº¦ (summary/standard/deep)--output: è¾åºæä»¶
Step 4: Calculate Valuation
python scripts/valuation_calculator.py \
--input "${stock_dir}/stock_data.json" \
--methods dcf,ddm,relative \
--discount-rate 10 \
--growth-rate 8 \
--output "${stock_dir}/valuation_result.json"
åæ°è¯´æï¼
--input: è¡ç¥¨æ°æ®æä»¶--methods: 估弿¹æ³ (dcf/ddm/relative/all)--discount-rate: æç°ç(%)--terminal-growth: æ°¸ç»å¢é¿ç(%)--growth-rate: æ°¸ç»å¢é¿çå ¼å®¹å«å(%)--margin-of-safety: å®å ¨è¾¹é (%)--format: è¾åºæ ¼å¼ (json/table)--quiet: é黿¨¡å¼--output: è¾åºæä»¶
Step 5: Generate Report
读ååæç»æï¼åè templates/analysis_report.md 模æ¿çæä¸æåææ¥åã
æ¥åçæå¿
æ£é¡¹ï¼å¿
é¡»å
¨é¨æ»¡è¶³ï¼ï¼
0. æç»æ¥åå¿
é¡»è½ç为 Markdown æä»¶ï¼.mdï¼
- å¿ é¡»å å«âæ°é»ä¸èæ âç« è
- å¿
须使ç¨
stock_data.jsonä¸çnews_sentiment/news_itemså¡«å 对åºå段 - è¥æ°é»æå失败ï¼é卿¥åä¸æç¡®ååºå¤±è´¥åå ï¼æ¥èª
news_sentiment.errorï¼ - ä¸å
许çç¥æ¨¡æ¿ä¸
summary_titleä¸âä¸ç»©ä¸å®¡è®¡ä¿¡å·âç« è
æ¥åç»æï¼æ å级ï¼ï¼
- å ¬å¸æ¦åµï¼åºæ¬ä¿¡æ¯ã主è¥ä¸å¡
- è´¢å¡å¥åº·ï¼èµäº§è´åºè¡¨åæ
- çå©è½åï¼æé¦åæã婿¶¦çè¶å¿
- æé¿æ§åæï¼è¥æ¶/婿¶¦å¢é¿è¶å¿
- ä¼°å¼åæï¼DCF/DDM/ç¸å¯¹ä¼°å¼
- é£é©æç¤ºï¼è´¢å¡å¼å¸¸æ£æµãè¡ä¸åæ
- æèµç»è®ºï¼ç»¼åè¯åãæä½å»ºè®®
æ¥åæ é¢è§èï¼
summary_titleä½¿ç¨æ ¼å¼ï¼è¡ç¥¨åç§°(è¡ç¥¨ä»£ç )ï¼æ»ç»æ§ç»è®º- 示ä¾ï¼
è´µå·è å°(600519)ï¼è´¢å¡ç¨³å¥ï¼ä¼°å¼ä¸é£é©å¹é 度è¾å¥½
è¾åºæä»¶ï¼
${stock_dir}/final_report.md
Step 6: humanize Output
读å ${stock_dir}/final_report.mdï¼å¹¶è°ç¨ humanizer-zh skill è¿è¡æ¶¦è²åä¼åã
è¾åºæä»¶ï¼
${stock_dir}/final_report_humanized.md
Workflow 3: Industry Comparison (è¡ä¸å¯¹æ¯)
CLIæ¹å¼ï¼æ¿ååæï¼æ¨èï¼
# 1) è·åæ¿åæ°æ®
python scripts/sector_fetcher.py \
--sector-name "ç®åæ¿å" \
--sector-file config/sector_computing_default.json \
--output "${stock_dir}/sector_data.json"
# 2) çææ¿ååæç»æ + Markdownæ¥å
python scripts/sector_analyze.py \
--input "${stock_dir}/sector_data.json" \
--output "${stock_dir}/sector_analysis.json"
Step 1: Collect Comparison Targets
询é®ç¨æ·ï¼
- ç®æ è¡ç¥¨ä»£ç ï¼å¯å¤ä¸ªï¼
- æè ï¼è¡ä¸åç±» + å¯¹æ¯æ°é
Step 2: Fetch Industry Data
python scripts/data_fetcher.py \
--codes "600519,000858,002304" \
--data-type comparison \
--output industry_data.json
ææè¡ä¸è·åï¼
python scripts/data_fetcher.py \
--industry "ç½é
" \
--top 10 \
--output industry_data.json
Step 3: Generate Comparison
python scripts/financial_analyzer.py \
--input industry_data.json \
--mode comparison \
--output comparison_result.json
Step 4: Present Comparison Table
| ææ | è´µå·è å° | äºç²®æ¶² | æ´æ²³è¡ä»½ | è¡ä¸åå¼ |
|---|---|---|---|---|
| PE | 25.3 | 18.2 | 15.6 | 22.4 |
| ROE | 30.2% | 22.5% | 20.1% | 18.5% |
| æ¯å©ç | 91.5% | 75.2% | 72.3% | 65.4% |
| è¯å | 85 | 78 | 75 | – |
Workflow 4: Valuation Calculator (ä¼°å¼è®¡ç®)
Step 1: Collect Valuation Parameters
询é®ç¨æ·ä¼°å¼åæ°ï¼æä½¿ç¨é»è®¤å¼ï¼ï¼
DCF模ååæ°ï¼
- æç°ç (WACC): é»è®¤10%
- 颿µæ: é»è®¤5å¹´
- æ°¸ç»å¢é¿ç: é»è®¤3%
DDM模ååæ°ï¼
- è¦æ±åæ¥ç: é»è®¤10%
- è¡æ¯å¢é¿ç: 使ç¨å岿°æ®æ¨ç®
ç¸å¯¹ä¼°å¼åæ°ï¼
- 对æ¯åºå: è¡ä¸åå¼ / åå²åå¼
Step 2: Run Valuation
python scripts/valuation_calculator.py \
--code "600519" \
--methods all \
--discount-rate 10 \
--terminal-growth 3 \
--forecast-years 5 \
--margin-of-safety 30 \
--output valuation.json
Step 3: Present Valuation Results
| 估弿¹æ³ | å å¨ä»·å¼ | å½åä»·æ ¼ | å®å ¨è¾¹é ä»·æ ¼ | ç»è®º |
|---|---|---|---|---|
| DCF | Â¥2,150 | Â¥1,680 | Â¥1,505 | ä½ä¼° |
| DDM | Â¥1,980 | Â¥1,680 | Â¥1,386 | ä½ä¼° |
| ç¸å¯¹ä¼°å¼ | Â¥1,850 | Â¥1,680 | Â¥1,295 | åç |
Financial Anomaly Detection (è´¢å¡å¼å¸¸æ£æµ)
å¨åæè¿ç¨ä¸èªå¨æ£æµä»¥ä¸å¼å¸¸ä¿¡å·ï¼
æ£æµé¡¹ç®
-
åºæ¶è´¦æ¬¾å¼å¸¸
- åºæ¶è´¦æ¬¾å¢é > è¥æ¶å¢é à 1.5
- åºæ¶è´¦æ¬¾å¨è½¬å¤©æ°å¤§å¹ å¢å
-
ç°éæµè离
- å婿¶¦æç»å¢é¿ä½ç»è¥ç°éæµä¸é
- ç°éæ¶å ¥æ¯ < 80%
-
åè´§å¼å¸¸
- åè´§å¢é > è¥æ¶å¢é à 2
- åè´§å¨è½¬å¤©æ°å¤§å¹ å¢å
-
æ¯å©çå¼å¸¸
- æ¯å©çæ³¢å¨ > è¡ä¸å弿³¢å¨ à 2
- æ¯å©çä¸åè¡ä¸¥éå离
-
å ³è交æ
- å ³è交æå æ¯è¿é«ï¼> 30%ï¼
-
è¡ä¸åæ
- 大è¡ä¸è¿æåæå ¬å
- é«ç®¡éä¸åæ
é£é©ç级
- ð¢ ä½é£é©ï¼æ ææ¾å¼å¸¸
- ð¡ ä¸é£é©ï¼1-2项轻微å¼å¸¸
- ð´ é«é£é©ï¼å¤é¡¹å¼å¸¸æä¸¥éå¼å¸¸
A-Share Specific Analysis (Aè¡ç¹è²åæ)
æ¿çææåº¦
æ ¹æ®è¡ä¸åç±»æä¾æ¿çç¸å ³æç¤ºï¼
- æ¿å°äº§ï¼æ¿ä½ä¸çæ¿ç
- æ°è½æºï¼è¡¥è´´æ¿çåå
- å»è¯ï¼ééæ¿çå½±å
- äºèç½ï¼ååæãæ°æ®å®å ¨
è¡ä¸ç»æåæ
- æ§è¡è¡ä¸ç±»åï¼å½ä¼/æ°ä¼/å¤èµï¼
- è¡æéä¸åº¦
- è¿æå¢åææ åµ
- è´¨æ¼æ¯ä¾
Output Format
JSON/Tableè¾åºæ ¼å¼
- é»è®¤
json - å¯é
--format tableç¨äºç»ç«¯å¿«éæ¥ç - 使ç¨
--quietå¯å ³éè¿ç¨æ¥å¿
ææèæ¬è¾åºJSONæ ¼å¼ï¼ä¾¿äºåç»å¤çï¼
{
"code": "600519",
"name": "è´µå·è
å°",
"analysis_date": "2025-01-25",
"level": "standard",
"summary": {
"score": 85,
"conclusion": "ä½ä¼°",
"recommendation": "建议å
³æ³¨"
},
"financials": { ... },
"valuation": { ... },
"risks": [ ... ]
}
Markdownæ¥å
çæç»æåç䏿Markdownæ¥åï¼åè templates/analysis_report.mdã
Data Contract
æ ¸å¿æ°æ®ç»æç± scripts/data_contract.py 约æãåæèæ¬ä¼å¨è¿è¡åæ ¡éªï¼
- é¡¶å±å¿
éåæ®µï¼
code/fetch_time/data_type/basic_info - 常ç¨å¯éåæ®µï¼
financial_data/financial_indicators/valuation/price/holder/dividend - æ°é»ç¸å
³å段ï¼
news_items/news_sentiment - ä¸ç»©å®¡è®¡å段ï¼
performance_dataï¼å«forecast/express/audit/main_businessï¼ - æ¥è¡¨åæ®µè¦æ±ï¼
financial_data.balance_sheetå¿ é¡»æ¯æ°ç»financial_data.income_statementå¿ é¡»æ¯æ°ç»financial_data.cash_flowå¿ é¡»æ¯æ°ç»
åæ®µæ å°ï¼Akshare -> Tushareï¼
| å ¼å®¹è¯ä¹ | å½ååæ®µï¼æ¨èï¼ | å ¼å®¹å«å/æ¥æº |
|---|---|---|
| PE(TTM) | valuation.latest.pe_ttm |
valuation.latest.pe |
| PB | valuation.latest.pb |
– |
| å婿¶¦ | financial_data.income_statement[].å婿¶¦ |
n_income |
| ç»è¥ç°éæµåé¢ | financial_data.cash_flow[].ç»è¥æ´»å¨äº§ççç°éæµéåé¢ |
n_cashflow_act |
| èµæ¬å¼æ¯ç°é | financial_data.cash_flow[].è´å»ºåºå®èµäº§ãæ å½¢èµäº§åå
¶ä»é¿æèµäº§æ¯ä»çç°é |
c_pay_acq_const_fiolta |
| ROE | financial_indicators[].åèµäº§æ¶çç |
roe |
| èµäº§è´åºç | financial_indicators[].èµäº§è´åºç |
debt_to_assets |
Error Handling
ç½ç»é误
妿tushareæ°æ®è·åå¤±è´¥ï¼æç¤ºç¨æ·ï¼
- æ£æ¥ç½ç»è¿æ¥
- ç¨åéè¯ï¼å¯è½æ¯æ¥å£éæµï¼
- å°è¯æ´æ¢æ°æ®æº
è¡ç¥¨ä»£ç æ æ
æç¤ºç¨æ·æ£æ¥è¡ç¥¨ä»£ç æ¯å¦æ£ç¡®ï¼æä¾å¯è½çå¹é 建议ã
æ°æ®ä¸å®æ´
å¯¹äºæ°ä¸å¸è¡ç¥¨æè´¢å¡æ°æ®ä¸å®æ´çæ åµï¼è¯´ææ°æ®éå¶å¹¶åºäºå¯ç¨æ°æ®è¿è¡åæã
Best Practices
- æ°æ®æ¶ææ§ï¼è´¢å¡æ°æ®ä»¥ææ°å£æ¥/å¹´æ¥ä¸ºåï¼ä»·æ ¼æ°æ®ä¸ºå½æ¥æ¶çä»·
- æèµå»ºè®®ï¼ææåæä» ä¾åèï¼ä¸æææèµå»ºè®®
- é£é©æç¤ºï¼å§ç»å å«é£é©æç¤ºï¼ç¹å«æ¯è´¢å¡å¼å¸¸æ£æµç»æ
- 对æ¯åæï¼ååªè¡ç¥¨åææ¶ï¼èªå¨å å«è¡ä¸åå¼å¯¹æ¯
Important Notes
- ææåæåºäºå ¬å¼è´¢å¡æ°æ®ï¼ä¸æ¶åä»»ä½å å¹ä¿¡æ¯
- 估弿¨¡åçåæ°åè®¾å¯¹ç»æå½±åè¾å¤§ï¼éåç¨æ·è¯´æ
- Aè¡å¸åºåæ¿çå½±åè¾å¤§ï¼å®éåæéç»å宿§å¤æ