mcpField
A
aj-stock-analysis

aj-stock-analysis

github.com/zuoaデータ・データベース2380 回インストール2 週間前に更新
リポジトリ

aj-stock-analysis について

売買頻度の低い個人投資家向けに、中国A株を価値投資の観点から分析するスキルです。銘柄選定、企業・業界分析、評価額の算出、財務リスク確認とレポート作成に対応します。

主な機能

  1. 01評価額や財務指標による銘柄選定
  2. 02財務健全性・収益性・成長性の分析
  3. 03同業銘柄と業界平均の比較
  4. 04DCF・DDM・相対評価の適用
  5. 05異常値・ニュース・株主売却の確認
  6. 06JSON・表・Markdownレポートの出力

活用シーン

  1. 01PEやROEなどの条件でA株を選定
  2. 02個別銘柄の財務と評価額を確認
  3. 03業界内の銘柄を比較
  4. 04財務異常やニュースリスクを点検

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/zuoa/aj-skills --skill aj-stock-analysis

インストール後、Claude Code で/aj-stock-analysisを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

.env.example
config/
sector_computing_default.json
references/
a-stock-features.md
financial-ratios.md
value-investing-principles.md
scripts/
assemble_data.py
data_contract.py
data_fetcher.py
env_loader.py
event_window.py
fetch_basic.py
fetch_event_window.py
fetch_financial.py
fetch_holder.py
fetch_news_data.py
fetch_price.py
fetch_realtime.py
fetch_valuation.py
financial_analyzer.py
news_fetcher.py
realtime_metrics.py
sector_analyze.py
sector_fetcher.py
sentiment_analyzer.py
stock_screener.py
valuation_calculator.py
templates/
analysis_report.md
tests/
test_assemble_data.py
test_data_contract.py
tests/fixtures/
sample_stock_data.json

詳細

中国株式分析スキル

バリュー投資理論に基づく中国A株分析ツールです。低頻度取引を行う一般投資家を対象としています。

使用するタイミング

ユーザーが以下の操作をリクエストしたときに、このスキルを呼び出します:

  • A株銘柄を分析する
  • 条件に合う銘柄を絞り込む
  • 複数の銘柄や同じ業界の銘柄を比較する
  • 株式の評価額や本質的価値を計算する
  • 株式の財務健全性を確認する
  • 財務上の異常リスクを検出する

前提条件

Python環境要件(venvの使用必須)

すべてのスクリプトコマンドは、プロジェクトの仮想環境内で実行してください。

python3 -m venv .venv
source .venv/bin/activate

依存関係をインストールします:

pip install tushare pandas numpy
環境のセットアップ(実行前に必ず自動で完了)

スクリプトを実行する前に、現在のプロジェクトディレクトリで次を実行してください:

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 はスキルのプロジェクトルートに配置する必要があります(グローバルディレクトリではありません)
  • import tushare に失敗した場合は、以降の分析処理を続ける前に、必ず上記のセットアップを実行してください

TUSHARE_TOKEN/BRAVE_API_KEY は ~/.aj-skills/.env に保存し、実行前に現在のシェルに読み込むことを推奨します:

set -a
source ~/.aj-skills/.env
set +a

説明:

  • スクリプトは ~/.aj-skills/.env を自動で読み込みません
  • CLI引数で明示的に渡す必要があります:--token "${TUSHARE_TOKEN}"、--brave-api-key "${BRAVE_API_KEY}"

実行前の引数チェック(test コマンドを使用):

test -n "${TUSHARE_TOKEN}" || { echo "缺少 TUSHARE_TOKEN"; exit 1; }
# 仅当使用 Brave 新闻源时检查
test -n "${BRAVE_API_KEY}" || { echo "缺少 BRAVE_API_KEY(news-provider=brave 时必填)"; exit 1; }
依存関係の確認

分析を実行する前に、tushareがインストールされているか確認してください:

python3 -c "import tushare; print(tushare.__version__)"

主なモジュール

1. 株式スクリーナー

条件に合う銘柄を絞り込みます

2. 財務アナライザー

個別銘柄の詳細な財務分析を行います

3. 業界比較

同じ業界の銘柄を横断的に比較・分析します

4. バリュエーション計算機

本質的価値と安全余裕を計算します

5. ニュースとセンチメント

最近の社会情勢に関するニュースを取得し、センチメントリスク評価を作成します


ワークフロー 1:株式スクリーニング

ユーザーが銘柄の絞り込みをリクエストしたときに使用します。

ステップ 1:スクリーニング条件の収集

ユーザーにスクリーニング条件を尋ねます。以下の選択肢から選ぶか、独自に設定できることを案内してください:

バリュエーション指標:

  • 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株
  • CSI 300構成銘柄
  • CSI 500構成銘柄
  • ChiNext/STAR Market
  • ユーザー指定のリスト
ステップ 2:スクリーニングの実行
python scripts/stock_screener.py \
    --scope "hs300" \
    --token "${TUSHARE_TOKEN}" \
    --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:出力ファイルのパス
ステップ 3:結果の提示

screening_result.json を読み込み、次のような表形式でユーザーに提示します:

コード銘柄名PEPBROE配当利回りスコア
600519貴州茅台25.38.530.2%2.1%85

ワークフロー 2:株式分析

ユーザーが特定の銘柄の分析をリクエストしたときに使用します。

ステップ 1:銘柄情報の収集

ユーザーに以下を尋ねます:

  1. 株式コードまたは銘柄名
  2. 分析の深度:
    • 要約レベル:主要指標と投資判断(1ページ)
    • 標準レベル:財務分析、バリュエーション、業界比較、リスクに関する注意点
    • 詳細レベル:過去データの追跡を含む、完全な調査レポート
ステップ 1.5:出力ディレクトリの準備

単一銘柄の分析では、スキルが出力ディレクトリを自動作成します。命名規則:

  • ${股票名称}_${股票代码}

例:

stock_dir="贵州茅台_600519"
mkdir -p "${stock_dir}"
ステップ 2:銘柄データの取得

「モジュールごとの取得+集約」の手順(CLIの分離)を推奨します:

mkdir -p "${stock_dir}/data"

# 1) 基础信息
python scripts/fetch_basic.py \
  --code "600519" \
  --token "${TUSHARE_TOKEN}" \
  --output "${stock_dir}/data/basic.json"

# 2) 财务数据
python scripts/fetch_financial.py \
  --code "600519" \
  --token "${TUSHARE_TOKEN}" \
  --years 5 \
  --output "${stock_dir}/data/financial.json"

# 3) 估值与行情
python scripts/fetch_valuation.py \
  --code "600519" \
  --token "${TUSHARE_TOKEN}" \
  --output "${stock_dir}/data/valuation.json"
python scripts/fetch_price.py \
  --code "600519" \
  --token "${TUSHARE_TOKEN}" \
  --days 180 \
  --output "${stock_dir}/data/price.json"

# 4) 新闻舆情
python scripts/fetch_news_data.py \
  --code "600519" \
  --name "贵州茅台" \
  --days 7 \
  --limit 20 \
  --provider brave \
  --brave-api-key "${BRAVE_API_KEY}" \
  --output "${stock_dir}/data/news.json"

# 5) 实时与事件窗口
python scripts/fetch_realtime.py \
  --code "600519" \
  --token "${TUSHARE_TOKEN}" \
  --benchmark hs300 \
  --window 60 \
  --output "${stock_dir}/data/realtime.json"
python scripts/fetch_event_window.py \
  --code "600519" \
  --token "${TUSHARE_TOKEN}" \
  --name "贵州茅台" \
  --benchmark hs300 \
  --pre-days 1 \
  --post-days 1,3,5 \
  --provider brave \
  --brave-api-key "${BRAVE_API_KEY}" \
  --output "${stock_dir}/data/event_window.json"

# 6) 聚合为分析输入
python scripts/assemble_data.py \
  --input-dir "${stock_dir}/data" \
  --output "${stock_dir}/stock_data.json"

互換モード(単一コマンドでの取得)も引き続き利用できます:

python scripts/data_fetcher.py \
    --code "600519" \
    --token "${TUSHARE_TOKEN}" \
    --data-type all \
    --with-news \
    --news-provider brave \
    --brave-api-key "${BRAVE_API_KEY}" \
    --with-realtime \
    --with-event-window \
    --benchmark hs300 \
    --realtime-window 60 \
    --event-window-pre 1 \
    --event-window-post 1,3,5 \
    --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(必須)
  • --with-news:ニュースとセンチメントを追加
  • --news-days:ニュースの対象期間(日数)
  • --news-limit:ニュースの最大件数
  • --news-sources:ニュースソースのフィルター(カンマ区切り)
  • --news-provider:ニュースソース(auto/brave/tushare/rss)
  • --brave-api-key:Brave Search API Key(news-provider=brave の場合は必須)
  • --with-realtime:リアルタイム指標(トレンド/確認/リスク/需給)を追加
  • --with-event-window:イベントウィンドウ分析(イベント後1/3/5日の反応)を追加
  • --benchmark:相対強度のベンチマーク指数(hs300/zz500/zz1000/cyb/kcb)
  • --realtime-window:リアルタイム指標の計算期間(日)
  • --event-window-pre:イベントウィンドウの前日数
  • --event-window-post:イベントウィンドウの後日数(カンマ区切り)
  • --cache-ttl-min:キャッシュの有効期間(分)
  • --format:出力形式(json/table)
  • --quiet:サイレントモード
  • --output:出力ファイル
オプション:ニュースとセンチメントの処理を単独で実行
python scripts/news_fetcher.py --code 600519 --name 贵州茅台 --token "${TUSHARE_TOKEN}" --days 7 --limit 20 --provider brave --brave-api-key "${BRAVE_API_KEY}" --output "${stock_dir}/news.json"
python scripts/sentiment_analyzer.py --input "${stock_dir}/news.json" --output "${stock_dir}/sentiment.json"
ステップ 3:財務分析の実行
python scripts/financial_analyzer.py \
    --input "${stock_dir}/stock_data.json" \
    --level standard \
    --output "${stock_dir}/analysis_result.json"

または、モジュール別ディレクトリを直接読み込みます(自動集約):

python scripts/financial_analyzer.py \
    --input-dir "${stock_dir}/data" \
    --level standard \
    --output "${stock_dir}/analysis_result.json"

パラメーターの説明:

  • --input:入力する株式データファイル
  • --input-dir:モジュール別ディレクトリ(自動で読み込み、分析用入力に集約)
  • --level:分析の深度(summary/standard/deep)
  • --output:出力ファイル
ステップ 4:バリュエーションの計算
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)

  1. 必须包含“新闻与舆情”章节
  2. 必须使用 stock_data.json 中的 news_sentiment/news_items 填充对应字段
  3. 若新闻抓取失败,需在报告中明确写出失败原因(来自 news_sentiment.error)
  4. 不允许省略模板中 summary_title 与“业绩与审计信号”章节
  5. 若 stock_data.json 包含 realtime_metrics,报告必须包含“实时指标看板”章节(趋势/确认/风险/筹码)
  6. 若 stock_data.json 包含 event_window,报告必须包含“事件窗口反应”内容(事件数、后1/3/5日收益、后1/3/5日超额收益)
  7. 若 realtime_metrics 存在,综合评分必须采用 财务40% + 实时60%(实时优先)

报告结构(标准级):

  1. 公司概况:基本信息、主营业务
  2. 财务健康:资产负债表分析
  3. 盈利能力:杜邦分析、利润率趋势
  4. 成长性分析:营收/利润增长趋势
  5. 实时指标看板:趋势/确认/风险/筹码
  6. 事件窗口分析:事件后收益与超额收益
  7. 估值分析:DCF/DDM/相对估值
  8. 风险提示:财务异常检测、股东减持
  9. 投资结论:综合评分、操作建议(实时优先)

报告标题规范:

  • 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 "算力板块" \
  --token "${TUSHARE_TOKEN}" \
  --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

询问用户:

  1. 目标股票代码(可多个)
  2. 或者:行业分类 + 对比数量
Step 2: Fetch Industry Data
python scripts/data_fetcher.py \
    --codes "600519,000858,002304" \
    --token "${TUSHARE_TOKEN}" \
    --data-type comparison \
    --output industry_data.json

或按行业获取:

python scripts/data_fetcher.py \
    --industry "白酒" \
    --token "${TUSHARE_TOKEN}" \
    --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
指标贵州茅台五粮液洋河股份行业均值
PE25.318.215.622.4
ROE30.2%22.5%20.1%18.5%
毛利率91.5%75.2%72.3%65.4%
评分857875-

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. 应收账款异常

    • 应收账款增速 > 营收增速 × 1.5
    • 应收账款周转天数大幅增加
  2. 现金流背离

    • 净利润持续增长但经营现金流下降
    • 现金收入比 < 80%
  3. 存货异常

    • 存货增速 > 营收增速 × 2
    • 存货周转天数大幅增加
  4. 毛利率异常

    • 毛利率波动 > 行业均值波动 × 2
    • 毛利率与同行严重偏离
  5. 关联交易

    • 关联交易占比过高(> 30%)
  6. 股东减持

    • 大股东近期减持公告
    • 高管集中减持
风险等级
  • 🟢 低风险:无明显异常
  • 🟡 中风险:1-2项轻微异常
  • 🔴 高风险:多项异常或严重异常

A-Share Specific Analysis (A股特色分析)

政策敏感度

根据行业分类提供政策相关提示:

  • 房地产:房住不炒政策
  • 新能源:补贴政策变化
  • 医药:集采政策影响
  • 互联网:反垄断、数据安全
股东结构分析
  1. 控股股东类型(国企/民企/外资)
  2. 股权集中度
  3. 近期增减持情况
  4. 质押比例

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_ttmvaluation.latest.pe
PBvaluation.latest.pb-
净利润financial_data.income_statement[].净利润n_income
经营现金流净额financial_data.cash_flow[].经营活动产生的现金流量净额n_cashflow_act
资本开支现金financial_data.cash_flow[].购建固定资产、无形资产和其他长期资产支付的现金c_pay_acq_const_fiolta
ROEfinancial_indicators[].净资产收益率roe
资产负债率financial_indicators[].资产负债率debt_to_assets

Error Handling

网络错误

如果tushare数据获取失败,提示用户:

  1. 检查网络连接
  2. 稍后重试(可能是接口限流)
  3. 尝试更换数据源
股票代码无效

提示用户检查股票代码是否正确,提供可能的匹配建议。

数据不完整

对于新上市股票或财务数据不完整的情况,说明数据限制并基于可用数据进行分析。


Best Practices

  1. 数据时效性:财务数据以最新季报/年报为准,价格数据为当日收盘价;开启 --with-realtime / --with-event-window 时补充趋势与事件冲击的动态指标
  2. 投资建议:所有分析仅供参考,不构成投资建议
  3. 风险提示:始终包含风险提示,特别是财务异常检测结果
  4. 对比分析:单只股票分析时,自动包含行业均值对比
  5. 评分权重:实时数据存在时使用 财务40% + 实时60%;实时缺失时退化为财务分

Important Notes

  • 所有分析基于公开财务数据,不涉及任何内幕信息
  • 估值模型的参数假设对结果影响较大,需向用户说明
  • A股市场受政策影响较大,定量分析需结合定性判断

コメント