Community研究&データ分析github.com

山西証券 Tushare 総合分析スキル

山西証券Tushareデータスキルと連携し、複数指標を統合した構造化分析レポートを生成するAIエージェントスキルです。

山西証券 Tushare 総合分析スキル とは?

このスキルは、山西証券のTushareデータスキル(`shanxi-securities-tushare`)の上位層として動作し、複数のデータ次元を統合・分析する「多次元クロス分析層」を提供します。ユーザーが「○○を分析して」と依頼すると、エージェントは自動的に「対象認識 → 次元ロード → データ取得 → 計算 → 解釈 → レポート出力」という一連のワークフローを実行します。株式、ETF/場外公募基金、指数、先物の4資産クラスをサポートし、各クラスに特化した分析ランナー(`analysis_runner.py` など)が用意されています。これにより、複雑なTushare API呼び出しやデータ処理を意識することなく、一貫したフォーマットのHTMLレポート(EChartsグラフ付き)を生成できます。分析次元はデフォルトで全セット(株式11次元、指数8次元、基金9次元、先物7次元)が用意されており、ユーザーは必要に応じて次元を絞り込むことも可能です。このスキルは、個人投資家やアナリストがTushareの豊富なデータを活用し、効率的かつ深い市場分析を行うための強力なツールです。

対応✓Claude Code~Codex CLI~Cursor
npx skills add TrueHOOHA/shanxi-securities-tushare-skill

Installed? Explore more 研究&データ分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

山西証券 Tushare 総合分析スキル は何をしますか?

本スキルは shanxi-securities-tushare データスキルと連携し、そのデータインターフェース上に多次元クロス分析層を追加し、バラバラの指標を構造化された分析レポートに統合します。

動作原理

「○○を分析して」というリクエストを、実行可能な対象識別 → 次元ロード → データ取得 → 計算 → 解釈 → レポートのフローに変換します。

重要:本スキルはデータ取得ロジックをカプセル化しません。データ取得時は shanxi-securities-tushare/SKILL.md のフロー規範を参照します。

  1. 最初に python shanxi-securities-tushare/scripts/check_env.py を実行して環境を検証し、トークンがない場合は停止し、ユーザーに設定を促します。
  2. API呼び出しの前に必ず shanxi-securities-tushare/references/API接口对应表.md を確認し、記憶だけでAPIを書かないでください。
  3. データ取得は shanxi-securities-tushare/scripts/ 以下のデモテンプレートを参考に、環境検証結果に基づいてSDK方式かHTTP方式かを選択します。

クイックエントリ(デフォルト呼び出し)

本スキルは統合ランナーをカプセル化しており、エージェントは対象の種類を認識した後、対応するエントリを直接呼び出すことができ、元のAPIから一つずつデータを取得する必要はありません。

対象種別モジュールデフォルトエントリ例
株式analysis_runner.pystock_report(ts_code, end_date=None, dimensions=None)stock_report("600519.SH")
ファンド(場外 .OF / 场内 ETF .SH/.SZ)fund_analysis_runner.pyfund_report(ts_code, end_date=None, dimensions=None)fund_report("110011.OF")
指数index_analysis_runner.pyindex_report(ts_code, end_date=None, dimensions=None)index_report("000300.SH")
先物(主力連続限月)fut_analysis_runner.pyfut_report(ts_code, end_date=None, dimensions=None)fut_report("SR.ZCE")
  • dimensions はオプションの次元ホワイトリストで、デフォルトではランナー内蔵の次元が使用されます。ユーザーが「評価額/テクニカル面だけ見たい」と明示した場合にのみ、次元を絞り込みます。
  • *_report() は HTML文字列(EChartsグラフを各次元セクションにインラインで含む)を返すので、エージェントはそれを <ts_code>_report.html として書き出します。ブラウザで直接開けます。
  • 旧エントリ stock_analyzer.py は互換性のために残されていますが、新しいコードでは analysis_runner.stock_report を優先的に使用してください。
  • 各ランナーは内部で次元レベルの並列データ取得を実装しているため、エージェントが手動で並列化する必要はありません。

コアワークフロー

分析は毎回以下の順序で実行します。

  1. 環境検証 — python shanxi-securities-tushare/scripts/check_env.py を実行し、トークンが利用可能であることを確認し、モード(sdk/http)を決定します。
  2. 対象識別 — ユーザーの発言を解析し、対象の種類と ts_code を特定します。コード形式または名称検索で決定します。
  3. 次元ロード — その対象種別のデフォルトのサマリー次元をロードします。ユーザーが明示的に指定した場合(「テクニカル面だけ」「評価額だけ」)、指定された次元のみをロードし、権限/クォータ不足や出力の長大化を防ぎます。「全セット固定」がデフォルトの上限で、必要に応じて絞り込めます。
  4. ランナーを呼び出して分析 — 対応するランナーの *_report() / *_analyze() エントリを直接呼び出します。ランナー内部でデフォルト次元に従って並列データ取得、計算、構造化結果を生成します。カスタム次元が必要な場合は dimensions パラメータで絞り込みます。
  5. 総合レポート — 構造化テンプレートに従ってHTMLレポートを出力します(時系列グラフは各次元セクションにインライン表示)。

レポートは必ずファイルに保存(強制):分析レポートは必ずHTMLファイルとしてカレントプロジェクトディレクトリに保存し、ファイル名は <ts_code>_report.html(例:600519.SH_report.html)とします。CLIはデフォルトでカレント作業ディレクトリに自動保存し、保存パスを出力します。Pythonインターフェース経由で *_report() を呼び出してHTML文字列を取得した場合は、エージェントがその文字列をプロジェクトディレクトリ下の <ts_code>_report.html ファイルに書き込む必要があります。ターミナルに出力するだけでファイルに保存しないことは禁止です。レポートは独立したHTML(ECharts CDNレンダリング、ネット接続が必要)で、時系列次元は自動的にグラフを生成し、対応する次元セクションにインライン表示されます(例:ローソク足は「相場トレンド」、PE/PBは「バリュエーション分析」)。その他の次元は表形式です。

対象識別ルール

ユーザー発言対象種別説明
600519.SH / 000001.SZ / 920575.BJ株式標準形式で、そのまま識別。.BJは北京証券取引所
600519 / 000001株式.SH/.SZ/.BJを補完(上海市場:600/601/603/605/688、深圳市場:000/001/002/003/300/301、北京市場:8始まり)
"茅台"/"贵州茅台"/"平安"株式stock_basic を呼び出し名称で曖昧マッチング、上場状態Lの株式を取得
000300.SH / 399001.SZ指数標準指数コード、サフィックス .SH/.SZ/.SI
"沪深300"/"上证50"指数index_basic を呼び出し名称でマッチング
000001.OF / 110011.OFファンド標準ファンドコード、サフィックス .OF 場外/.SZ 场内
"易方达蓝筹"/"招商白酒"ファンドfund_basic を呼び出し名称でマッチング
RB2501.SHF / CU2403.SHF先物標準先物限月コード
"螺纹钢"/"沪铜"/"原油"先物fut_basic を呼び出し名称でマッチング、主力限月を取得

多義性の曖昧さ解消:名称マッチングで複数の結果が返った場合(例:「平安」= 平安銀行 000001.SZ / 中国平安 601318.SH)、時価総額順にソートして最大の対象を優先しますが、レポートには「N個の結果にマッチしました。デフォルトで時価総額最大のXXを分析します。他のコードを指定したい場合はお知らせください。」と明記する必要があります。

ファンド名マッチングのワイドマッチングの落とし穴(fund_basic は部分一致の曖昧マッチング):名称はその単語を含むすべてのファンドにヒットします。単一対象を分析する際には口径を絞り込まないと、同種のファンドを大量に引っ張ってしまうことになります。

ユーザー発言落とし穴正しい処理
"创业板ETF""创业板" は87のテーマETF/混合ファンドにヒット正確なコードまたは名称に"创业板ETF"を含むものでフィルタリングし、かつ场内ETFのみ取得(LOF/連結ファンドを除外)
"科创50"Tushare正式名称は"上证科创板50成份ETF"、名称に"科创50"を含むものは他の商品の可能性あり名称に"科创板50"を含むもの、またはコードで直接識別
"黄金ETF""黄金产业股票ETF"などのテーマ商品を誤ってマッチする可能性あり名称が正確に"黄金ETF"を含むもの
"沪深300"この単語を名称に含むファンドは数十本(场内ETF + 場外連結 + 複数のトラッキングファンド)先に目標タイプ(场内/場外/連結)を決め、ファンドタイプフィールドで絞り込む

名称マッチング結果が1より大きい場合:まずファンドタイプ(场内/場外/連結)と上場状態で絞り込み、それでも一意にならない場合は上記「多義性の曖昧さ解消」ルールに従い、レポートにマッチング数と最終的な口径を明記します。

分析次元(デフォルト全セット、必要に応じて絞り込み)

一、株式(デフォルト11次元)

各次元は以下の形式で出力:説明文 → データテーブル → 分析評価

#次元データAPI主要分析指標
1概要stock_basic、stock_company会社正式名称、業種(申万)、上場日、登録地、従業員数、主事業概要
2相場トレンドdaily、weekly、monthly、daily_basic、adj_factor、index_daily(CSI300+業種指数)直近20/60/250日騰落率(調整済み価格ベース)、MA5/MA20/MA60、MACD/RSI/KDJ/ボリンジャーバンド、回転率、振幅、変動率、期間最高/最安値;ベンチマーク比較:CSI300および所属業種指数に対して同じ口径の騰落率、年率変動率、最大ドローダウン、シャープレシオを計算し、対象と並べて比較(超過収益と相対リスクを判断)
3バリュエーション分析daily_basic、index_dailybasic(業種)、index_member(業種構成銘柄)PE(TTM)、PB、PS(TTM)、配当利回り、時価総額、流通時価総額;業種平均との比較(index_classify で業種指数コード取得 → index_member で構成銘柄取得 → 各銘柄の daily_basic PE/PBを取得、最初に winsorize_cross_section で断面の極値を除去してから平均/中央値を算出、1銘柄の異常値で偏らないようにする);PE/PB 二口径パーセンタイル(valuation_percentiles:過去5年のヒストリカルパーセンタイル + 当日同業種断面パーセンタイル、二口径が乖離する場合は原因を調査)
4財務品質fina_indicator、income、balancesheet、cashflow、forecastROE、粗利率、純利益率、売上高/利益成長率(前年同期比)、負債比率、営業CF;業績予想のタイプと変動幅度;Piotroski F-Score(9項目定量スコアリング、≥7 強い/≤2 弱い)
5資金フローmoneyflow、moneyflow_hsgt、block_trade直近5-20日の大口純流入(注意:net_mf_amount は全口径純流入、buy_elg_amount - sell_elg_amount は超大物口径で、両者の方向が逆になる場合がある。分析目的に応じて口径を選択する)、香港経由の株式保有変化、大口取引のプレミアム/ディスカウントや機関の売買方向
6株主/チップtop10_holders、top10_floatholders、stk_holdernumber、stk_holdertrade上位10大株主/流通株主の集中度、株主数の時系列分析(チップ集中度指標)、大株主の増減持方向と割合

チップ集中度分析(株主数の時系列)

株主数の時系列変化は、チップの集中/分散を判断する中核的な指標であり、単一の数値よりも重要です。

  • 株主数減少(チップ集中方向と一致):一人当たり保有株数が増加。通常はチップが集中するシグナルですが、戸数の変化は相関でしかなく、直接的に主力の買い集めと断言できません。出来高、株価動向、株主構造と組み合わせてクロス検証する必要があります。
  • 株主数増加(チップ分散方向と一致):一人当たり保有株数が減少。通常はチップが分散する傾向と一致しますが、これも直接的に主力の売り抜けと断言できません。出来高と価格で検証する必要があります。
  • 分析のポイント:
    • 直近4四半期の株主数変化率を比較し、トレンドの方向性を判断する
    • 株価動向と組み合わせてクロス検証する(すべて相関関係の観察であり、因果関係の結論ではない):株主数減少継続 + 株価上昇 = チップがロックされている可能性(健全な上昇の特徴の一つ);株主数減少継続 + 株価下落 = 主力が塩漬けにされている可能性(底入れシグナルの一つ);株主数増加継続 + 株価上昇 = 個人投資家が買い集めている可能性(天井に注意)
    • stk_holdernumber APIで過去データを取得し、end_date でソート後、前期比変化率を計算する | 7 | 信用取引/レバレッジセンチメント | margin_detail | 信用買い残高および変化率、信用売り残高、直近5日の信用買い残高変化 | | 8 | 市場の異変 | limit_list_d、top_list、top_inst | 直近のストップ高/ストップ安記録、龍虎榜への登場回数、機関の純売買 | | 9 | ロックアップ解除圧力 | share_float | 今後3ヶ月間にロックアップが解除される株式数とその割合 | | 10 | マクロ/市場環境 | index_daily(CSI300)、cn_cpi、cn_ppi、shibor_lpr、cn_gdp | 大盘の直近の動き、CPI/PPIの動向と方向性、LPR金利水準、GDP前年同期比 | | 11 | リスク警告 | 上記次元を集約 | 総合リスクレベル:高/中/低、具体的なリスクシグナルを列挙 |

二、指数(デフォルト8次元)

#次元データAPI主要分析指標
1概要index_basic発表元、基準日、基準値、カテゴリー、上場日
2相場トレンドindex_daily直近20/60/250日騰落率、MA配列、年率変動率、最大ドローダウン、シャープレシオ;ベンチマーク比較:CSI300に対して同じ口径の指標を計算して並べて比較
3バリュエーションindex_dailybasicPE(TTM)、PBのヒストリカルパーセンタイル。注意:index_dailybasic は科創板指数(科創50 000688.SHなど)をカバーしていません。このような指数のバリュエーションは構成銘柄の daily_basic で集計して推定します(断面中央値 + ヒストリカルパーセンタイル)。データソースを明記します
4構成ウェイトindex_weight上位10ウェイト銘柄とそのウェイト割合、銘柄名を補足(stock_basic で一括照会)
5業種分布index_weight で構成銘柄を取得 + stock_basic で業種を照会構成銘柄を申万業種で分類し、各業種の銘柄数と割合(上位3業種の合計割合)を統計
6信用取引/市場レバレッジmargin(全市場の信用取引合計)両市場の信用買い残高合計、直近1年(250取引日)の変化方向、レバレッジセンチメントの判断
7比較index_global同種指数/国際指数の直近パフォーマンスとの比較。index_global の ts_code はドット接頭辞がありません(例:DJI/SPX/IXIC/N225/HSI、.DJI ではない)。コード形式は references/国际指数.md を参照してください。注意:index_global が返すデータは降順(最新が先頭)です。計算前に必ず .sort_values('trade_date') を行わないと、iloc インデックスで取得する日付の方向が逆になり、騰落率の方向が間違います
8リスク警告上記次元を集約変動率が高い/ドローダウンが深い/バリュエーションが高いなどのリスクシグナル

三、公募ファンド(デフォルト9次元)

#次元データAPI主要分析指標
1概要fund_basicファンドタイプ、設定日、上場日、ファンド略称
2純資産価格推移fund_nav、fund_adj、fund_daily(场内ETF)直近1/3/6ヶ月、直近1/3年リターン(調整済み純資産価格ベース);场内ETFは必ず fund_daily + apply_etf_adj で調整(daily APIはETFに対して空を返し、調整なしの価格は分割時に大きく歪む)
3パフォーマンス指標fund_nav/fund_daily に基づいて計算年率変動率、シャープレシオ、最大ドローダウン
4同種比較fund_basic(同タイプを抽出)、fund_daily/fund_nav(1本ずつ)同種内順位(直近20/60/120/250日パーセンタイル);ETFは同じサフィックスの场内ファンドを優先して比較、設定日の早いものを優先
5ファンドマネージャーfund_manager就任開始日、在任年数
6保有銘柄分析fund_portfolio上位10保有銘柄とその割合(stk_mkv_ratio)、銘柄名を補足;フィールドは symbol/mkv/stk_mkv_ratio(name/ratio/market_valではない)
7規模変化fund_share四半期ごとにサンプリング(groupby 四半期末)、直近4四半期の持分変化トレンド
8配当fund_div累計配当回数、配当金額;フィールドは ex_date/div_cash(div_dateではない)
9リスク警告上記次元を集約ドローダウンが深い/変動率が高い/持分が減少しているなどのリスクシグナル

持分口径の声明(規模変化/同種比較次元の評価文に必ず記述):fund_share.fd_share は単一ファンドの持分です。同じ指数には场内ETF + 場外連結 + 複数のトラッキングファンドが存在することがよくあります(例:名称に「沪深300」を含むファンドは数十本)。持分/規模データはすべて単一ファンド口径であり、「その指数の全ファンド合計」と表現してはいけません。評価文には必ず「XXファンド単独の持分」または「场内外合計」と明記し、ユーザーが指数全体の規模と誤解しないようにします。

四、先物(デフォルト7次元)

#次元データAPI主要分析指標
1概要fut_basic限月の原資産、取引所、限月乗数、最小値動き、取引単位、証拠金率
2相場トレンドfut_daily(主力連続限月例 JM.DCE/RB.SHF、特定限月ではない)直近20/60日騰落率、清算価格推移、日中振幅、変動率
3建玉分析fut_holding建玉数量の変化、出来高/建玉比率、上位20会員の建玉の買い/売り比率
4主力限月fut_mapping主力限月コード、限月交代日、ベーシス(現物 vs 先物)
5倉荷在庫fut_wsr登録倉荷量の変化、在庫/消費比率
6決済パラメータfut_settle当日清算価格、受渡清算価格、証拠金調整
7リスク警告上記次元を集約変動率が高い/限月交代のギャップ/建玉異常などのリスクシグナル

レポート構成

各分析レポートは独立したHTMLファイルとして出力されます(ブラウザで直接開けます。時系列グラフは各次元セクションにインライン表示されます)。内容構成は以下の通りで、各次元は 説明文 → データテーブル → 分析評価 の形式で出力され、最後に全体の分析評価が付記されます。

# 対象名称 全景調査レポート

> データ日付:YYYY-MM-DD(TushareデータはT-1日)

## 1. 概要
説明文(例:銀行ETF、華宝基金管理、中証銀行指数に連動、規模は同種内で上位)
- 主要指標サマリーテーブル

## 2. 相場トレンド
説明文(直近20日騰落率、変動率、ドローダウン等の主要指標概要)
- 騰落率比較テーブル(対象 vs CSI300を並列)
- リスク管理指標比較テーブル(変動率/ドローダウン/シャープ vs ベンチマーク)
- テクニカル指標テーブル(MACD/RSI/KDJ/ボリンジャーバンドを1つのテーブルにまとめる)
- 高度定量指標(Beta/Alpha/Sortino/ローリングBeta/RS/VaR等)
- **分析評価**:本次元データの解釈を含み、明確な投資判断の参考となる意味を含める

## 3. バリュエーション分析
説明文(PE/PB/ヒストリカルパーセンタイル等の概要)
- バリュエーション指標テーブル
- 業種断面バリュエーション比較テーブル(該当する場合)
- **分析評価**:(例:「PEヒストリカルパーセンタイル23.7%で低め、PBは業種中央値より低い。バリュエーションは業績成長率と合わせて判断する必要がある」)

## N. リスク警告
- リスクシグナル1
- リスクシグナル2
- データ欠落の説明(次元が失敗した場合)

## N+1. 全体分析評価
**総合判断**:1行で対象の特性ラベルを特定(例:「低バリュエーション、ディフェンシブ、高配当」)
- 次元別ポイントリスト(トレンド/バリュエーション/財務/資金/チップ/レバレッジ/マクロを各1行)
**スタイル定位**:対象がどのようなスタイルの資産に属するか
**結論**:全次元を総合して、投資判断の参考となる意味と適用シーンを示す

---
*本レポートはAIが山西証券Tushareプラットフォームのデータに基づいて自動生成したもので、T-1日の過去データに基づきます。技術的な情報交換と学習の参考のみを目的としており、いかなる投資アドバイスや財務上の指導を構成するものではありません。*

各次元の分析評価は、投資家に対する明確な参考となる意味(例:「バリュエーションは歴史的低水準にあるが、業種の景況感と合わせて判断する必要がある」)を含める必要があり、単にデータを並べるだけではいけません。

本レポートはAIが山西証券Tushareプラットフォームのデータに基づいて自動生成したもので、T-1日の過去データに基づきます。技術的な情報交換と学習の参考のみを目的としており、いかなる投資アドバイスや財務上の指導を構成するものではありません。


複数列データの例(列数は揃える必要があります。例:持分の列を2列に分割):

| 対象 | 最新持分 | 持分変化 |
|------|---------|---------|
| 沪深300ETF | 248億口 | -0.1% |

各次元の分析評価は、投資家に対する明確な参考となる意味(例:「バリュエーションは歴史的低水準にあるが、業種の景況感と合わせて判断する必要がある」)を含める必要があり、単にデータを並べるだけではいけません。

**レポートテーブルの制約**:各マークダウンテーブルのヘッダ行とデータ行の列数は一致している必要があります。1列に複数のデータがある場合(例:「持分 + 変化率」)、2列に分割してそれぞれ記入するか、1列にまとめてヘッダを調整し、空の列ができないようにします。
**テーブル統合の推奨**:同じ次元内のデータは優先的に1つのテーブルに統合します(例:騰落率 + リスク管理指標 + テクニカル指標を統合)。複数の独立したテーブルに分割して視覚的に分断されるのを避けます。列数が多すぎて横に長くなりすぎる場合は、グループ化して隣接して配置します。

## 主要デフォルト値

| 曖昧な日本語 | デフォルト口径 |
|---------|---------|
| "最近"/"直近" | 直近20取引日 |
| "最近3ヶ月" | 直近60取引日 |
| "今年" | 当年1月1日から今日まで |
| "歴史"(株式/指数) | 直近3年 |
| "歴史"(ファンド) | 設定以来 |
| 証券コード | 標準 `600519.SH` 形式 |
| ファンドコード | 場外 `.OF`、场内 `.SZ`/`.SH` |
| 先物コード | 標準 `RB2501.SHF` 形式 |
| 業種分類 | 申万2021版 |
| 比較ベンチマーク(株式) | 所属する申万1級業種の平均 |
| 比較ベンチマーク(ファンド) | 同種ファンド(同じタイプ+同じ投資方向) |
| 比較ベンチマーク(指数) | CSI 300(000300.SH) |

> **データの十分性**:データ取得時は最大周期(例:「直近250日」)よりさらに30取引日多く取得し、十分なデータが計算できるようにします。寒武紀を20250801から20260812まで取得すると249取引日しかなく、直近250日騰落率の計算には不十分です。その場合は開始日を前倒し(例:`start_date = '20250601'`)してデータを増やすか、「直近120日」に格下げして「データ不足」と注釈します。
> **データ不足時のレポート処理**:対象の上場がリクエスト周期に満たない場合(例:特定先物限月がわずか197日で250日に満たない)、以下のように処理します。
> 1. **優先的に主力連続限月に変更**(先物の場合)または start_date を前倒し(株式の場合)してデータを補う
> 2. それでも不足する場合、上場以来の全期間リターンを計算し、「データ不足(わずかN日、上場以来X%)」と注釈する
> 3. N/Aを直接表示してはいけません。ユーザーはデータの問題なのか計算結果の問題なのか判断できません。

## 定量分析方法

### 縦断比較(単一対象の時系列)

単一対象のヒストリカルトレンド分析では、株式分割・配当・増資による価格ジャンプを除去する必要があります。そうしないと、区間リターンとテクニカル指標が歪みます。

- **株式調整**:`daily` は**調整前**データ(権利落ち・権利落としのジャンプを含む)を返します。トレンド/リターン/テクニカル指標の計算前には**必ず調整**する必要があります。そうしないと権利落ち日に虚偽のギャップが発生します。`adj_factor` を取得して自分で計算します。
  - 後調整価格 = 原価格 × 当日調整係数(`apply_adj_factor` で open/high/low/close/pre_close をまとめて調整。`*_post` 列は同じスケールで、KDJ/ボリンジャーバンドなどのOHLC指標に安全に使用できます)
  - 前調整価格 = 原価格 × 当日調整係数 / 最新調整係数
  - 長期リターン、積立投資リターン、ドローダウン、テクニカル指標はすべて調整済み価格に基づく必要があります。⚠️ `close_post` を調整前の `high/low` と組み合わせて使用しないでください。スケールが一致せず、KDJなどの指標が歪みます。
- **ファンド調整**:`fund_nav` は単位純資産価格と累計純資産価格を返します。区間リターンを計算する際は `fund_adj` 調整係数を使用して調整済み純資産価格系列を構築し、配当による権利落ちの影響を除去します。
  - 調整済み純資産価格 = 単位純資産価格 × 当日調整係数 / 最新調整係数
  - シャープ、最大ドローダウン、Calmarなどの指標はすべて調整済み純資産価格系列に基づいて計算します。
- **ETF調整**:`fund_daily` は調整前価格を返します。`apply_etf_adj`(`fund_adj` 係数)は `close_post` を生成します。**ETFの `fund_adj` 係数の口径は株式の `adj_factor` とは異なります(実測では方向/規模が統一されておらず、510500 では ~0.34、512100 では ~0.373、510300 では ~1.27)。`close_post` の絶対値は後調整価格ではなく、リターン/シャープ/ドローダウンなどのスケール不変計算のためのものです(全列で pct_change を実行する場合、係数の絶対値は無関係)。価格表示には調整前の `close` を使用します。** 株式の `adj_factor` は標準的な後調整係数(単調増加、`後調整価格 = 原価格 × adj_factor`、表示可能)。`apply_*_adj` は trade_date/nav_date でインデックスされた df を返すため、`rebase_series`/`compare_returns` に直接渡せます(両関数は日付インデックスを検証するため、整数インデックスを渡すと TypeError が発生します)。
  - **関数の選択**:`apply_etf_adj` は **close のみを調整**します(close_post を生成し、リターン/シャープ/ドローダウンに使用)。KDJ/ボリンジャーバンドなどの high/low/close を同じスケールで必要とするOHLC指標には、**`apply_adj_factor` を使用します**(open/high/low/close/pre_close すべてを調整し、`*_post` 列は同じスケール、fund_daily にも適用可能)。`apply_etf_adj` を KDJ に誤って使用すると、high_post/low_post が存在せず KeyError になります。
- **ファンド規模データ取得**:`fund_nav.total_netasset` は四半期報告ベース(疎で、NaNが多い)。四半期規模のスナップショットとしてのみ使用します。連続する日次規模が必要な場合は、`fund_share.fd_share`(万口)× `fund_nav.unit_nav` で計算します:`規模億元 = fd_share × unit_nav / 1e4`(最初に trade_date でアラインメント)。`fund_nav` は同じ nav_date に重複行がある可能性があるため、使用前に nav_date で重複を削除します。
- **先物連続限月**:先物には限月交代のギャップが存在します。縦断分析では `fut_mapping` を使用して主力限月の区間を識別し、主力限月をまたがる連続トレンドは結合するか、`fut_daily` を使用して限月ごとに分析します。単純に結合してはいけません。

### 横断比較(複数対象の正規化)

複数対象の横断比較では、異なる対象の価格次元が異なります(例:茅台 1500元 vs 農業銀行 4元)。価格系列を直接比較しても意味がなく、正規化が必要です。

- **系列正規化(リベース)**:各対象の調整済み価格系列を統一して基準日 = 100 にスケーリングします。式:`正規化純資産価格 = 当日調整価格 / 基準日調整価格 × 100`。基準日は比較区間の開始日とし、すべての対象が同じスタートラインからスタートするようにします。
- **リターン比較**:各対象の同期間リターン(直近1ヶ月/3ヶ月/6ヶ月/1年/YTD)を計算し、同じテーブルに横に並べて順位付けします。
- **バリュエーションパーセンタイル比較**:異なる対象のPE/PBは絶対値を直接比較できません(業種特性が異なります)。それぞれの過去5年のヒストリカルパーセンタイルに変換してから、横に並べて比較します。複数対象の断面平均/パーセンタイル計算の前に、断面値に対して `winsorize_cross_section` で極値を除去(MAD 3σ)するか、断面中央値を直接取得し、1銘柄の異常値で偏らないようにします。バリュエーションは「ヒストリカルパーセンタイル + 同業種断面パーセンタイル」の二口径(`valuation_percentiles`)を優先します。
- **財務指標比較**:ROE、粗利率などはすでに比率指標であるため、直接横に並べられます。売上高/利益などの絶対値指標は、成長率(前年同期比/前期比)または一人当たり値に変換してから比較します。
- **変動率/ドローダウン比較**:年率変動率、最大ドローダウンはそれ自体が統一された次元であるため、直接横に並べられます。ただし、シャープレシオなどは無リスク金利の口径が一致していることを確認する必要があります。

### 高度定量指標

基本指標に加えて、以下の方法は分析の深さと科学性を向上させるために使用されます。

- **テクニカル指標**:MACD(トレンドモメンタム/ゴールデンクロス/デッドクロス)、RSI(買われすぎ>70/売られすぎ<30)、KDJ(確率的指標)、ボリンジャーバンド(変動レンジ/上限下限タッチ)。MAだけでは売買タイミングを判断するには不十分で、テクニカル指標の組み合わせがより豊富なシグナルを提供します。
- **ヒストリカルパーセンタイル**:現在のPE/PBなどのバリュエーション指標が過去5年のヒストリカル系列の中でどのパーセンタイルに位置するか(`percentile_rank`)。85パーセンタイル = 現在のバリュエーションが過去85%の期間よりも高い → 高い。
- **Sortinoレシオ**:シャープレシオの改良版。分母に下方変動のみ(損失が出た日の変動率のみ)を使用し、非対称なリターン分布に対してより合理的です。ファンドの下方リスク管理能力の評価に適しています。
- **情報比(IR)**:超過リターン年率 / トラッキングエラー年率。ファンドマネージャーのアクティブ銘柄選択能力を測定します。IR > 0.5 は優秀とされます。
- **Piotroski F-Score**:9項目の財務健全性定量スコアリング——収益性(ROA>0、営業CF>0、ΔROA>0、営業CF>純利益)、レバレッジ/流動性/資金調達(Δ負債比率≤0、Δ流動比率>0、新株発行なし)、運営効率(Δ粗利率>0、Δ総資産回転率>0)。合計点0-9、≥7 強い、≤2 弱い。年次報告(end_date 1231)で重複を除去し、直近2期の前年同期比を取得。データは `fina_indicator`/`income`/`cashflow`/`balancesheet`(任意)から取得します。
- **量価分析**:OBV(エネルギーバランス、価格上昇+出来高増加=トレンド健全)、出来高比率(当日出来高/直近5日平均出来高、>2 出来高増加/<0.5 出来高減少)、量価乖離(価格上昇+出来高減少=天井シグナル/価格下落+出来高減少=底値シグナル)。
- **ベータ/アルファ帰属**:CAPM回帰分解。ベータ = 個別銘柄の市場感応度(>1.2 高弾性/<0.8 ディフェンシブ)、アルファ = 市場リターンを差し引いた超過リターン年率。個別銘柄とCSI300の同期間日次リターンを取得し、アラインメントして回帰する必要があります。

### リスクモデリングと分布分析

- **VaR/CVaR(バリューアットリスク)**:ヒストリカル法で95%/99%信頼水準の最大日次損失を計算。VaR = 損失パーセンタイル、CVaR = VaRを超える損失の平均(より保守的)。リスク管理の国際標準指標です。
- **テールリスク(歪度/尖度)**:歪度 < 0 = 左に歪んでいる(損失側のテールが長く、暴落リスクが大きい)。尖度 > 0(超過)= テールが厚い(極端な事象の確率が正規分布の仮定よりも高い)。両者を組み合わせることで、リターン分布が正規分布から逸脱しているかどうかを判断できます。
- **ドローダウン深度分析**:最大ドローダウンに加えて、ドローダウン継続期間(水面下の日数)、ペインインデックス(平均ドローダウン深度)を補足し、「塩漬け」の実際の感覚を測定します。
- **Amihud非流動性**:|日次リターン| / 日次出来高。単位資金が引き起こす価格変動を測定します。値が大きい = 流動性が低く、大口資金の出入りコストが高い。

### ローリング分析と動的モニタリング

- **ローリングベータ**:60日ローリングウィンドウでベータの変化トレンドを計算し、市場感応度の時間的変化を示します(上昇 = 変動拡大またはディフェンシブ性低下)。
- **ローリングシャープ**:60日ローリングウィンドウのリスク調整後リターントレンド。単一ポイントのシャープよりも安定性を反映します。
- **相対強度(RS)**:対象累計リターン / ベンチマーク累計リターン。RS > 1 アウトパフォーム、< 1 アンダーパフォーム。トレンドの強まり = 相対的な優位性の拡大。

### 統計的検定方法

- **Z-Score標準化**:指標をグループ平均との標準偏差倍数に変換します。|Z| > 1.96 = 5%有意水準で有意に乖離。複数対象のバリュエーション/財務指標の比較に使用します。
- **イベントスタディ法**:推定ウィンドウ(イベント前30日)で市場モデル回帰を使用して正常リターンを推定し、イベントウィンドウ(後10日)で異常リターンARと累積異常リターンCARを計算します。CAR > 2% = イベントが正の方向に有意。決算発表、ロックアップ解除、増減持などのイベントインパクト分析に適しています。
- **CAGR(複利年間成長率)**:保有日数に基づいて正確に年率化。単純な区間リターンよりも期間をまたぐ比較に適しています。

## 分析原則

1. **結論ファースト**:各次元は最初に結論文を書き、その後にデータを提示します。ユーザーにデータだけを提示して自分で判断させることはしません。
2. **クロス検証**:単一次元のシグナルだけでは不十分な場合、複数の次元を組み合わせてクロス判断します(例:「資金フローは流入だがバリュエーションはすでに高い」)。
3. **データの鮮度**:TushareデータはT-1日であり、レポート上部にデータ日付を記載します。

## 環境設定と前提条件

- `shanxi-securities-tushare` スキルがインストールされ、設定されていること。
- Tushare Pro トークンが環境変数 `TUSHARE_TOKEN` または設定ファイルに設定されていること。
- Python 3.8+ および必要なパッケージ(`tushare`, `pandas`, `numpy`, `scipy` など)がインストールされていること。

## 使用例

```python
# レポートの生成(エージェントが呼び出すことを想定)
from analysis_runner import stock_report

html_report = stock_report("600519.SH")
# エージェントが HTML をファイルに書き込む
with open("600519.SH_report.html", "w", encoding="utf-8") as f:
    f.write(html_report)

注意事項と制限

  • データソース:すべての分析データは Tushare から取得されます。Tushare のデータカバレッジと品質に依存します。
  • 計算時間:複数対象の分析(特に同種比較)には時間がかかる場合があります。
  • クォータ:Tushare の API 呼び出し回数クォータに注意してください。高頻度の分析はクォータを消費する可能性があります。

本スキルは情報提供と技術的な学習を目的としており、投資アドバイスを構成するものではありません。投資判断はご自身の責任で行ってください。

関連スキル