# Stock Portfolio

> ポートフォリオ管理。保有銘柄の一覧表示・売買記録・構造分析。ストレステストの入力データ基盤。

- Skill: `okikusan-public/stock-portfolio` (Agent Skill, multi-file: 16 files)
- Install (CLI): `npx skillmds@latest add okikusan-public/stock-portfolio`
- Raw SKILL.md: https://api.skillmd.com/api/skills/okikusan-public/stock-portfolio/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: okikusan-public (https://skillmd.com/u/okikusan-public)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/okikusan-public/stock-portfolio

---


# ポートフォリオ管理スキル

$ARGUMENTS を解析してコマンドを判定し、以下のコマンドを実行してください。

## 実行コマンド

```bash
python3 /Users/kikuchihiroyuki/stock-skills/.claude/skills/stock-portfolio/scripts/run_portfolio.py <command> [args]
```

## コマンド一覧

### snapshot -- PFスナップショット

現在価格・損益・通貨換算を含むポートフォリオのスナップショットを生成する。

```bash
python3 .../run_portfolio.py snapshot
```

### buy -- 購入記録追加

```bash
python3 .../run_portfolio.py buy --symbol <sym> --shares <n> --price <p> [--currency JPY] [--date YYYY-MM-DD] [--memo テキスト] [--yes]
```

`--yes` (`-y`) を省略すると購入内容の確認プレビューを表示して終了する。`--yes` を指定すると確認をスキップして直接記録する（KIK-444）。

### sell -- 売却記録

```bash
python3 .../run_portfolio.py sell --symbol <sym> --shares <n> [--price <売却単価>] [--date YYYY-MM-DD] [--yes]
```

`--yes` (`-y`) を省略すると売却内容の確認プレビュー（取得単価・推定実現損益）を表示して終了する。`--yes` を指定すると確認をスキップして直接記録する（KIK-444）。

`--price` を指定すると実現損益・損益率・税引後概算を計算して表示し、`data/history/trade/*.json` に保存する（KIK-441）。

### review -- 売買パフォーマンスレビュー (KIK-441)

過去の売却記録（`--price` 付きで記録したもの）から損益統計を集計して表示する。

```bash
python3 .../run_portfolio.py review [--year 2026] [--symbol NVDA]
```

**出力内容:**
- 取引履歴テーブル（銘柄・売却日・株数・取得単価・売却単価・保有日数・実現損益・損益率）
- 統計（取引件数・勝率・平均リターン・平均保有期間・合計実現損益）

### analyze -- 構造分析

地域/セクター/通貨/規模のHHI（ハーフィンダール指数）を算出し、ポートフォリオの偏りを分析する。規模別構成（大型/中型/小型/ETF/不明）テーブルを含む4軸分析（KIK-438, KIK-469 P2: ETF分類）。ETFはセクター「ETF」、規模「ETF」として独立分類される。

```bash
python3 .../run_portfolio.py analyze
```

### health -- ヘルスチェック

保有銘柄の投資仮説がまだ有効かをチェックする。テクニカル（SMA50/200, RSI, **ゴールデンクロス/デッドクロス検出**）とファンダメンタル（変化スコア、**株主還元安定度**）の多軸で3段階アラートを出力。**小型株は自動的に感度を引き上げ**（KIK-438）。

```bash
python3 .../run_portfolio.py health
```

**テクニカル分析（KIK-356/374/438）:**
- SMA50/200 のトレンド判定（上昇/横ばい/下降）
- **ゴールデンクロス/デッドクロス検出**: 60日 lookback でクロスイベントを検出し、発生日と経過日数を表示
- **小型株クロスルックバック短縮（KIK-438）**: 小型株は lookback=30日で直近の変動を早期検出

**株主還元安定度（KIK-403）:**
- 配当+自社株買いの総還元率から安定度を評価（✅安定高還元/📈増加傾向/⚠️一時的高還元/📉減少傾向）
- 一時的高還元（temporary）→ 早期警告に昇格
- 減少傾向（decreasing）→ アラート詳細に理由追加
- 長期適性判定に総還元率（配当+自社株買い）を使用

**小型株アロケーション（KIK-438）:**
- 銘柄ごとに時価総額から規模分類（大型/中型/小型/不明）し `[小型]` バッジを表示
- 小型株は EARLY_WARNING → CAUTION に自動エスカレーション
- PF全体の小型株比率を算出し、>25% で警告、>35% で危険を表示

**ETFヘルスチェック（KIK-469 Phase 2）:**
- 個別株とETFのテーブルを分離表示
- ETFテーブル: 銘柄/損益/トレンド/経費率/AUM/ETFスコア/アラート
- 個別株テーブル: 従来通り（変化の質/長期適性/還元安定度）

**アラートレベル:**
- **早期警告**: SMA50割れ / RSI急低下 / 変化スコア1指標悪化 / **一時的高還元**
- **注意**: SMA50がSMA200に接近 + 指標悪化 / 変化スコア複数悪化 / **小型株のEARLY_WARNING昇格**
- **撤退**: **デッドクロス検出** / トレンド崩壊 + 変化スコア悪化

### adjust -- ポートフォリオ調整アドバイザー (KIK-496)

ヘルスチェック結果 + マーケットレジーム判定から、17ルール（P1-P10: ポジション別、F1-F7: PF全体）で具体的な調整アクション（SELL/SWAP/ADD/TRIM_CLASS/FLAG）を生成する。

```bash
python3 .../run_portfolio.py adjust [--full]
```

CLIオプション:
- `--full` : フル分析モード（集中度・相関分析も含む。API負荷が高い）

**出力:**
- マーケットレジーム（bull/bear/crash/neutral）— SMA50/200、RSI、ドローダウンから判定
- HIGH/MEDIUM/LOW 優先度別のアクションテーブル（アクション種別/対象/理由/ルールID）
- サマリー（アクション件数）

**レジーム補正:** crash 時は urgency を1段階引き上げ。bear 時は小型株・下降トレンド系ルールを引き上げ。

### rebalance -- リバランス提案

現在のポートフォリオ構造を分析し、集中リスクの低減と目標配分への調整案を提示する。

```bash
python3 .../run_portfolio.py rebalance [options]
```

CLIオプション:
- `--strategy defensive|balanced|aggressive` (デフォルト: balanced)
- `--reduce-sector SECTOR` (例: Technology)
- `--reduce-currency CURRENCY` (例: USD)
- `--max-single-ratio RATIO` (例: 0.15)
- `--max-sector-hhi HHI` (例: 0.25)
- `--max-region-hhi HHI` (例: 0.30)
- `--additional-cash AMOUNT` (円, 例: 1000000)
- `--min-dividend-yield YIELD` (例: 0.03)

### forecast -- 推定利回り

保有銘柄ごとにアナリスト目標価格 or 過去リターン分布から12ヶ月の期待リターンを3シナリオ（楽観/ベース/悲観）で推定する。バリュートラップ警告・TOP/BOTTOM ランキング付き。

```bash
python3 .../run_portfolio.py forecast
```

**推定手法:**
- **アナリスト法**: アナリスト目標株価 + 配当利回り + 自社株買い利回り（株主還元込み）
- **過去リターン法**: ETF等アナリストカバレッジなし銘柄は過去CAGR + 標準偏差で推定（KIK-469 P2: ETFは年率ボラティリティ表示 + `[ETF]` バッジ付き）
- **業界カタリスト調整**（KIK-433, Neo4j 接続時）: 同セクターの直近 `growth_driver` カタリスト数 × 1.7% を楽観シナリオに加算、`risk` カタリスト数 × 1.7% を悲観シナリオから減算（上限各 10%）

**出力構成（KIK-390）:**
1. ポートフォリオ全体の3シナリオ利回り・損益額テーブル
2. 注意銘柄セクション（バリュートラップ警告のある銘柄を集約）
3. 期待リターン TOP 3 / BOTTOM 3 ランキング
4. 銘柄別詳細（アナリスト目標/Forward PER/ニュース件数/Xセンチメント/3シナリオ）

### what-if -- What-Ifシミュレーション (KIK-376 / KIK-451)

銘柄の追加・売却・スワップをシミュレーションし、ポートフォリオへの影響をBefore/After比較で表示する。

```bash
# 追加のみ（従来）
python3 .../run_portfolio.py what-if --add "SYMBOL:SHARES:PRICE[,...]"

# スワップ（売却して購入）(KIK-451)
python3 .../run_portfolio.py what-if --remove "SYMBOL:SHARES[,...]" --add "SYMBOL:SHARES:PRICE[,...]"

# 売却のみシミュレーション (KIK-451)
python3 .../run_portfolio.py what-if --remove "SYMBOL:SHARES[,...]"
```

CLIオプション:
- `--add` : 追加銘柄リスト（任意）。形式: `SYMBOL:SHARES:PRICE` をカンマ区切り
- `--remove` : 売却銘柄リスト（任意）。形式: `SYMBOL:SHARES` をカンマ区切り（価格不要・時価で試算）
- `--add` と `--remove` のどちらか一方は必須

**出力:**
- **[売却時] 売却候補のコンテキスト（KIK-470）**: `--remove` 指定時、シミュレーション前にスクリーニング出現回数・投資メモ・リサーチ履歴を自動表示（Neo4j接続時）
- Before/After のセクターHHI・地域HHI・通貨HHI比較
- 追加銘柄の基本情報（PER/PBR/配当利回り/ROE）
- **[スワップ時] 売却銘柄テーブル**（銘柄・株数・売却代金試算）
- **[スワップ時] 資金収支**（購入必要資金 / 売却代金試算 / 差額）
- **[スワップ時] 売却銘柄ヘルスチェック**（売却対象のアラート状況）
- 判定ラベル: 推奨 / 注意して検討 / 非推奨（スワップ時は「このスワップは推奨」等）
- **ETF品質評価（KIK-469 P2）**: ETF追加時にETFスコアを判定に反映（品質良好≥75、品質低<40で警告）

### backtest -- バックテスト

蓄積されたスクリーニング結果からリターンを検証し、ベンチマーク（日経225/S&P500）と比較する。

```bash
python3 .../run_portfolio.py backtest [options]
```

CLIオプション:
- `--preset PRESET` : 検証対象のスクリーニングプリセット（例: alpha, value）
- `--region REGION` : 検証対象の地域（例: jp, us）
- `--days N` : 取得後N日間のリターンを検証（デフォルト: 90）

**出力:**
- スクリーニング日別の平均リターン
- ベンチマーク比較（超過リターン）
- 勝率・平均リターン・最大リターン/最大損失

### simulate -- 複利シミュレーション

現在のポートフォリオを基に、複利計算で将来の資産推移をシミュレーションする。forecast の期待リターン + 配当再投資 + 毎月積立を複利で計算し、楽観/ベース/悲観の3シナリオで表示。

```bash
python3 .../run_portfolio.py simulate [options]
```

CLIオプション:
- `--years N` (シミュレーション年数, デフォルト: 10)
- `--monthly-add AMOUNT` (月額積立額, 円, デフォルト: 0)
- `--target AMOUNT` (目標額, 円, 例: 15000000)
- `--reinvest-dividends` (配当再投資する, デフォルト: ON)
- `--no-reinvest-dividends` (配当再投資しない)

### list -- 保有銘柄一覧

portfolio.csv の内容をそのまま表示する。

```bash
python3 .../run_portfolio.py list
```

## 自然言語ルーティング

自然言語→スキル判定は [.claude/rules/intent-routing.md](../../rules/intent-routing.md) を参照。

## 制約事項

- 日本株: 100株単位（単元株）
- ASEAN株: 100株単位（最低手数料 3,300円）
- 楽天証券対応（手数料体系）
- portfolio.csv のパス: `.claude/skills/stock-portfolio/data/portfolio.csv`

## 出力

結果はMarkdown形式で表示してください。

### snapshot の出力項目
- 銘柄 / 名称 / 保有数 / 取得単価 / 現在価格 / 評価額 / 損益 / 損益率 / 通貨

### analyze の出力項目
- セクターHHI / 地域HHI / 通貨HHI / **規模HHI（KIK-438）**
- 各軸の構成比率（**規模別構成テーブル: 大型/中型/小型/ETF/不明**）
- ETF注釈（ルックスルー未対応の注記）
- リスクレベル判定

### health の出力項目
- **個別株テーブル**: 銘柄（**小型株は `[小型]` バッジ付き**） / 損益率 / トレンド / **クロスイベント** / 変化の質 / アラート / **長期適性** / **還元安定度**
- **ETFテーブル（KIK-469 P2）**: 銘柄 / 損益 / トレンド / 経費率 / AUM / ETFスコア / アラート
- アラートがある銘柄の詳細（理由、SMA/RSI値、クロス発生日・経過日数、変化スコア、株主還元安定度、推奨アクション）
- **小型株アロケーション**: PF全体の小型株比率サマリー（✅正常/⚠️警告/🔴危険）

### forecast の出力項目
- ポートフォリオ全体: 3シナリオ利回り（楽観/ベース/悲観）+ 損益額 + 総評価額
- 注意銘柄セクション: バリュートラップ警告のある銘柄一覧
- TOP 3 / BOTTOM 3: 期待リターンランキング（アナリスト数付き）
- 銘柄別: アナリスト目標価格 / Forward PER / ニュース件数 / Xセンチメント / 3シナリオ / **ETFは年率ボラティリティ + `[ETF]` バッジ**

### what-if の出力項目
- **[売却時] 売却候補のコンテキスト（KIK-470）**: スクリーニング出現回数・投資メモ・リサーチ履歴
- Before/After のHHI比較（セクター/地域/通貨）
- 追加銘柄のファンダメンタルズ
- 集中度変化の判定
- **[スワップ時]** 売却銘柄テーブル（売却代金試算）
- **[スワップ時]** 資金収支（購入必要資金 / 売却代金 / 差額）
- **[スワップ時]** 売却銘柄ヘルスチェック
- **[スワップ時]** 「このスワップは推奨 / 注意して検討 / 非推奨」

### backtest の出力項目
- スクリーニング日別リターン
- ベンチマーク比較（超過リターン）
- 勝率・統計値

### adjust の出力項目
- マーケットレジーム（レジーム名/SMA50 vs SMA200/RSI/ドローダウン）
- HIGH Priority テーブル: SELL/SWAP/TRIM_CLASS アクション
- MEDIUM Priority テーブル: FLAG/SELL アクション
- LOW Priority テーブル: FLAG アクション
- サマリー（HIGH/MEDIUM/LOW 件数、レジーム）

### rebalance の出力項目
- 現状のHHI（セクター/地域/通貨）と目標HHI
- 売却候補（銘柄・株数・理由）
- 購入候補（銘柄・株数・理由・配当利回り）
- リバランス後のHHI予測値

### simulate の出力項目
- 年次推移テーブル（年/評価額/累計投入/運用益/配当累計）
- 3シナリオ比較（楽観/ベース/悲観の最終年）
- 目標達成分析（到達年/必要積立額）
- 配当再投資の複利効果

## 実行例

```bash
# スナップショット
python3 .../run_portfolio.py snapshot

# 購入記録
python3 .../run_portfolio.py buy --symbol 7203.T --shares 100 --price 2850 --currency JPY --date 2025-06-15 --memo トヨタ

# 売却記録
python3 .../run_portfolio.py sell --symbol AAPL --shares 5

# 構造分析
python3 .../run_portfolio.py analyze

# 一覧表示
python3 .../run_portfolio.py list

# ヘルスチェック
python3 .../run_portfolio.py health

# 推定利回り
python3 .../run_portfolio.py forecast

# リバランス提案
python3 .../run_portfolio.py rebalance
python3 .../run_portfolio.py rebalance --strategy defensive
python3 .../run_portfolio.py rebalance --reduce-sector Technology --additional-cash 1000000

# What-Ifシミュレーション（追加のみ）
python3 .../run_portfolio.py what-if --add "7203.T:100:2850,AAPL:10:250"

# What-Ifシミュレーション（スワップ: 7203.T売却 → 9984.T購入）(KIK-451)
python3 .../run_portfolio.py what-if --remove "7203.T:100" --add "9984.T:50:7500"

# What-Ifシミュレーション（純売却）(KIK-451)
python3 .../run_portfolio.py what-if --remove "7203.T:50"

# 調整アドバイザー (KIK-496)
python3 .../run_portfolio.py adjust
python3 .../run_portfolio.py adjust --full

# バックテスト
python3 .../run_portfolio.py backtest --preset alpha --region jp --days 90
```

## 前提知識統合ルール (KIK-466)

### health コマンド

get_context.py の出力に以下がある場合、ヘルスチェック結果と統合して回答する:

- **売買履歴（BOUGHT/SOLD）**: 購入価格・日付を参照し、含み損益の文脈を付加。売却済み銘柄が警告に出た場合は「売却済みのため問題なし」と明記
- **投資メモ（Note）**: テーゼ・懸念メモがあれば、ヘルスチェック結果と照合。「バリュートラップ懸念メモあり → 今回もBTスコア高 → 本当に要注意」等
- **前回ヘルスチェック（HealthCheck）**: 前回との差分を示す。「前回HOLD → 今回EXIT: 状況悪化」「前回EXIT → 今回HOLD: 改善」
- **スクリーニング履歴（SURFACED）**: 警告銘柄が過去にスクリーニング上位だった場合、「注目度は高い（3回上位）が現在は要注意」等
- **テーゼ経過**: テーゼメモが90日以上前なら「テーゼ見直し時期」と促す

### snapshot / forecast

- 前回スナップショット・フォーキャストがあれば差分コメントを付加
- 「前回比: 評価額+5.2%、利回り改善」等

### 分析結論の記録促し

EXIT/警告に対して具体的な判断（「売却推奨」「継続保有」等）を含む回答をした場合:
> 💡 この判断を投資メモとして記録しますか？

