stockaskill について
stockaskillは、投資家やアナリスト向けのローカル優先の銘柄調査スキルです。A株、香港株、米国株、ETFを対象に、キャッシュデータを使った分析、スキャン、ポートフォリオ構築、バックテスト、調査記録を行います。
主な機能
- 01銘柄分析と売買・保有診断
- 02複数市場のスキャンとモメンタム順位付け
- 03ポートフォリオ構築とバックテスト
- 04ETFスクリーニングとデータ同期
- 05投資テーゼの記録とスコアカード
- 06増分更新型のローカルキャッシュ
活用シーン
- 01コードや市場を指定した銘柄評価
- 02市場別またはモメンタムによる銘柄順位付け
- 03ポートフォリオの構築や検証
- 04投資テーゼの記録と振り返り
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ axjing/ stockaskill --skill stockaskillインストール後、Claude Code で/stockaskillを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlreferences/akshare_api.mdakshare_official_docs.mddeep-diagnosis.mdenhanced-momentum.mdfactors.mdmarket-source-playbook.mdoutput-style-and-language.mdpython-api.mdresearch-sources.mdrisk-and-compliance.mdscorecards.mdsentiment.mdserenity-dialogue-protocol.mdstrategies.mdtheme-research.mdthesis-memory.mdworkflows.mdscripts/backtest_enhanced.pycache.pycli.pyscripts/advisor/__init__.pydiagnosis.pyscanner.pyscripts/commands/__init__.py_common.pyanalyze.pybacktest.pymarket_regime.pyportfolio.py詳細
スマート株式セレクター
AKShare と SQLite キャッシュを活用した複数市場の銘柄選定です。A 株、香港株、米国株に対応し、ファンドのワークフローでは ETF を優先します。
主な特長
銘柄コード、市場、または投資テーマを指定すると、スコア付きの実用的なシグナルを返します。 まずローカルキャッシュを使用します。不足または古くなった銘柄プール、履歴、ファンダメンタルズ、指数データのみを取得します。 無差別に市場全体の全期間データを更新するのではなく、タスクの対象範囲に応じてデータをウォームアップします。 このスキルをデータウェアハウスや市場全体の同期プラットフォームとして扱わないでください。
対象範囲
- このスキルはローカル優先の分析・意思決定エンジンとして扱います。
- 銘柄、ウォッチリスト、ポートフォリオ、スキャン対象ユニバース、ETF の範囲に絞った同期を優先します。
- 現時点では、
FUNDは ETF 優先の動作として扱います。 - このスキルが、広範な投資信託の調査や市場全体の日次同期のオーケストレーションを提供するかのように扱わないでください。
起動条件
次のいずれかの意図が示された場合に起動します。
| キーワード/パターン | 想定される意図 |
|---|---|
| 600519、AAPL、0700.HK、510300 のようなコード | 個別銘柄の分析または診断 |
| 贵州茅台 のような中国語の銘柄名 | 銘柄プールから特定して分析 |
| [市場] の上位銘柄を探す | 市場スキャン |
| ランキング、アルファ、モメンタム | アルファ・モメンタムスキャン |
| ポートフォリオ、组合、アロケーション | ポートフォリオ構築 |
| バックテスト、回测、検証 | 過去データのバックテスト |
| ETF、场内基金、510300、159915 | ETF のスクリーニング/ETF データ同期 |
| ワークフロー、ルート、ルーチン、路线图? | ワークフローの推奨/マニフェストのルーチン |
| 投資仮説、事後分析、复盘、投資仮説メモリー | 投資仮説の記録/レビュー/事後分析 |
| テーマ、主题、産業チェーン? | テーマ調査 |
| スコアカード、アトリビューション、评分卡? | 構造化評価/アトリビューション |
| センチメント、sentiment、情绪 | 市場センチメントの確認 |
| 更新、刷新、キャッシュ | データ操作 |
開始する前に
まず Python 環境を確認します。
python --version
uv pip list >/dev/null
python が >=3.10 でない場合、または環境がないために uv pip list が失敗する場合は、uv を使ってローカル環境を構築します。
uv venv --python 3.10 "$SKILL/.venv"
# Linux/macOS の場合:
source "$SKILL/.venv/bin/activate"
# Windows の場合:
# "$SKILL\.venv\Scripts\activate.ps1"
uv pip install akshare efinance baostock pandas numpy scipy
スキルのスクリプトは、スキルのインストールディレクトリ内にあります。ほとんどのシステムでは、~/.agents/skills/stockaskill/(Linux/macOS)または %USERPROFILE%\.agents\skills\stockaskill\(Windows)です。run.py には絶対パスを使用します。
# すべてのコマンドでスキル専用の Python 環境を使用します:
# Linux/macOS の場合:
"$SKILL/.venv/bin/python" "$SKILL/scripts/run.py" fetch pool
# Windows の場合:
"$SKILL\.venv\Scripts\python.exe" "$SKILL\scripts\run.py" fetch pool
以下のコマンドでは、簡潔にするため、$SKILL はスキルのインストールディレクトリを表します。
キャッシュが空の場合、analyze、diagnose、scan、alpha、portfolio、backtest は、スコアリングの前に必要なデータだけをウォームアップします。
パラメーターの推定
ユーザーの意図を CLI パラメーターに対応付けます。
| ユーザー入力 | 推定されるコマンド |
|---|---|
| 「分析 600519」 | analyze 600519 --market A |
| 「テスラを分析」または「TSLA を分析」 | analyze TSLA --market US |
| 「テンセントを分析」または「0700 を分析」 | analyze 0700 --market HK |
| 「贵州茅台を分析」 | 銘柄プールから名前→コードを特定してから、analyze <code> --market A |
| 「香港株の上位10銘柄をスキャン」 | scan HK --top 10 |
| 「米国株のモメンタムランキング」 | alpha US --top <N> |
| 「600519,000858 のポートフォリオ、資金50万」 | portfolio --codes 600519,000858 --capital 500000 --market A |
| 「バックテスト」(市場の指定なし) | backtest --market A(デフォルト) |
| 「米国株をバックテスト」 | backtest --market US |
| 「ETF スクリーニング」 | scan FUND --top <N> |
ユーザーが値を指定しない場合は、CLI のデフォルト値を使用します。
スキャンは --top 20、アルファは --top 10、ポートフォリオは --capital 1000000、個別銘柄コマンドは --market A です。
ローカルキャッシュとデータ戦略
すべての市場データは、/.cache/quant_cache.db にあるローカルキャッシュデータベースに保存されます(デフォルトは SQLite)。設定で db_engine: "duckdb" を指定すると、列指向ストアの DuckDB ファイル quant_cache.duckdb に切り替わります。テーブルは同じで、インターフェースもそのまま置き換え可能です。切り替える前に、一度 cache migrate を実行してください。キャッシュは、キャッシュ優先+増分同期の戦略に従います。
- まずキャッシュから読み込み — データをリクエストするたびに、API を呼び出す前に SQLite を確認します。
- 不足している期間のみ取得 — キャッシュに日付 X までのデータがあれば、X から今日までのデータのみを取得します(修正に備えて3日間の重複期間を設けます)。履歴全体を再ダウンロードすることはありません。
- 初回起動時に全履歴を取得 — 銘柄の初回実行時は、安全な基準日(A:2000-01-01、HK:1995-01-01、US:1990-01-01)から取得します。以降の読み込みは増分になります。
- 複数のデータソースにフォールバック — K 線:baostock → AKShare/EastMoney → efinance(A 株)|AKShare → yfinance(HK/US)。ファンダメンタルズ:THS(A 株)/Analysis indicator(HK)→ Sina → yfinance。繰り返し失敗するデータソースは自動的にバックオフされます。
- UPSERT 書き込み — 常に最新のデータが優先され、重複データは上書きされます。
キャッシュには次の内容が含まれます。
| テーブル | 内容 |
|---|---|
| stock_pool | A/HK/US/FUND の銘柄リストとメタデータ |
| daily_price | K 線の履歴(OHLCV)、コードと日付をキーに管理 |
factor_snapshot | ファンダメンタルズのスナップショット(PE/PB/ROE など) |
| computed_factors | 事前計算済みのファクタースコア |
fund_info | ETF プールのメタデータ |
fund_nav | ETF の NAV 履歴 |
| market_index | 指数 K 線の履歴 |
api_usage | 日次 API 呼び出しの追跡情報 |
| sync_state | 銘柄ごとの同期ステータスと対象日付 |
financial_report | 決算期ごとの財務データ |
factor_daily_snapshot | 事前計算済みの日次ファクタースナップショット(K 線の同期後に作成) |
data_quality_log | データ品質チェック/修復の監査履歴 |
data_quality_backoff | 修復失敗時のバックオフ(銘柄ごと+データ種別ごと) |
キャッシュは、初回のデータ取得または同期時に自動作成されます。安全に削除でき、fetch pool または sync symbol で再度ウォームアップできます。
ワークフロー
1. 個別銘柄の分析
規則に従ってコードを正規化します。6xxxxx/0xxxxx/3xxxxx = A、xxxx.HK = HK、プレーンなティッカー = US。
uv run python "$SKILL/scripts/run.py" analyze <code> --market <A|HK|US>
出力:PE/PB/ROE/配当、総合ファクタースコア、戦略シグナル。
2. 詳細な診断
リスク評価を含む包括的な BUY/SELL/HOLD の診断です。
uv run python "$SKILL/scripts/run.py" diagnose <code> --market <A|HK|US>
JSON 構造:final_decision.signal、adjusted_score、factors、strategy、
technical、sentiment、fundamentals、risks。
結果の提示方法:
- BUY -> 損切りと利益確定の目安を含めます
- SELL -> リスク要因を説明します
- HOLD -> どのような変化が必要かを説明します
詳細なレポートを作成する場合:
uv run python "$SKILL/scripts/run.py" deep-diagnose <code> --market <A|HK|US> --format <json|md|both>
意思決定の要約、根拠、リスク、判断の無効化条件、追加の質問を含むメモ形式の詳細な診断をユーザーが求めている場合は、deep-diagnose を使用してください。
3. ワークフローのルーティングとマニフェスト
ユーザーの目的に合った、範囲を限定したワークフローを提案します。
uv run python "$SKILL/scripts/run.py" route "<user goal description>"
組み込みのワークフローマニフェストを確認します。
uv run python "$SKILL/scripts/run.py" workflow list
uv run python "$SKILL/scripts/run.py" workflow run <workflow-name> --market <A|HK|US>
重要:workflow run はマニフェストを具体的なルーチンに解決するだけです。シェルコマンドやバックグラウンドジョブは実行しません。
4. 市場スキャン
uv run python "$SKILL/scripts/run.py" scan <market> --top <N>
# デフォルトの mode=auto:新しいスナップショットを優先し、なければ範囲を限定したリアルタイムデータにフォールバックします
# そのほか:scan HK --top 10、scan US --top 15、scan FUND --top 20
明示的にモードを指定する場合:
uv run python "$SKILL/scripts/run.py" scan <market> --mode snapshot --top <N>
uv run python "$SKILL/scripts/run.py" scan <market> --mode realtime --top <N>
スキャン結果がすべてゼロの場合は、alpha モードに切り替えます:
uv run python "$SKILL/scripts/run.py" alpha <market> --top <N> --candidates <M>
注:Python のワンライナーをその場で実行したり、スキルのモジュールをインポートしたりする場合は、
依存関係が正しく解決されるよう、スキル専用の Python 環境($SKILL/.venv/bin/python または
$SKILL\.venv\Scripts\python.exe)を使用してください。
5. アルファ・モメンタムスキャン
スレッド並列スコアリングによる、多因子の総合ランキングです:
uv run python "$SKILL/scripts/run.py" alpha <market> --top <N> --candidates <M>
結果には、スコア、シグナル、F-Score、BUY のサマリーを含むランキングが表示されます。
上位銘柄のランキングを押し上げた要因(モメンタム+低ボラティリティ+クオリティで約73%)を説明してください。
6. ポートフォリオ構築
portfolio と portfolio-enhanced はどちらも、現在「同期してからキャッシュのみを使用する」方式に従います。
まず対象銘柄の不足している履歴データとファンダメンタルデータを同期し、その後はローカルキャッシュのみを使ってスコアリングします。
これにより、分析中の API データ取得の重複を防ぎます。
標準ポートフォリオ:
uv run python "$SKILL/scripts/run.py" portfolio --codes <code1,code2,...> --capital <amount> --market <A|HK|US>
拡張型コア・サテライト:
uv run python "$SKILL/scripts/run.py" portfolio-enhanced --capital <amount>
ポートフォリオデータを事前に準備する場合(任意):
uv run python "$SKILL/scripts/run.py" sync portfolio --codes <code1,code2,...> --market <A|HK|US>
7. バックテスト
標準バックテスト(Alpha Momentum、2018-2026):
uv run python "$SKILL/scripts/run.py" backtest
拡張バックテスト(コア・サテライト):
uv run python "$SKILL/scripts/run.py" backtest-enhanced
バックテストでは、不足している銘柄の一部と市場指数データをまとめて取得し、データを準備します。
実行のたびに市場全体の過去データを強制的に同期することはありません。
8. ファンド/ETF のスクリーニング
uv run python "$SKILL/scripts/run.py" scan FUND --top <N>
プログラムからより詳細にアクセスする場合:
# まず scripts ディレクトリを sys.path の先頭に追加する必要があります
import sys, os; sys.path.insert(0, os.path.join(os.environ.get("SKILL", "."), "scripts"))
from data_engine import get_etf_pool, get_etf_nav
funds = get_etf_pool()
nav = get_etf_nav("510300", days=365)
現在の FUND の動作は ETF を優先します。幅広い投資信託の NAV 取り込みは、まだ主要な対応ワークフローではありません。
9. リサーチメモリーとテーマ別ワークフロー
投資仮説のメモリー:
uv run python "$SKILL/scripts/run.py" thesis capture <code> --market <A|HK|US>
uv run python "$SKILL/scripts/run.py" thesis list --market <A|HK|US>
uv run python "$SKILL/scripts/run.py" thesis review --code <code> --market <A|HK|US>
uv run python "$SKILL/scripts/run.py" thesis postmortem --code <code> --market <A|HK|US> --outcome <win|loss|neutral>
テーマリサーチ:
uv run python "$SKILL/scripts/run.py" theme-scan <keywords...> --market <A|HK|US> --top <N>
スコアカード:
uv run python "$SKILL/scripts/run.py" scorecard diagnose <code> --market <A|HK|US>
uv run python "$SKILL/scripts/run.py" scorecard thesis --code <code> --market <A|HK|US>
uv run python "$SKILL/scripts/run.py" scorecard theme <keywords...> --market <A|HK|US> --top <N>
ユーザーが一度限りの診断ではなく、保存されたリサーチ記録、レビューの反復プロセス、または体系化されたスコアカードを求めている場合に、これらを使用してください。
10. データ操作
uv run python "$SKILL/scripts/run.py" fetch pool # プール全体を更新
uv run python "$SKILL/scripts/run.py" fetch kline <code> # 単一銘柄のK線
uv run python "$SKILL/scripts/run.py" fetch fundamentals <code> # 単一銘柄のファンダメンタルズ
範囲を限定した同期と診断:
uv run python "$SKILL/scripts/run.py" sync symbol <code> --market <A|HK|US>
uv run python "$SKILL/scripts/run.py" sync watchlist --market <A|HK|US>
uv run python "$SKILL/scripts/run.py" sync portfolio --codes <code1,...> --market <A|HK|US>
uv run python "$SKILL/scripts/run.py" sync etf --codes <etf1,etf2,...>
uv run python "$SKILL/scripts/run.py" sync scan-universe --market <A|HK|US> --limit <N>
uv run python "$SKILL/scripts/run.py" sync check --market <A|HK|US> [--codes <c1,...>]
uv run python "$SKILL/scripts/run.py" sync repair --market <A|HK|US> [--codes <c1,...>] [--data-kinds history,fundamentals]
uv run python "$SKILL/scripts/run.py" sync snapshot --market <A|HK|US> [--codes <c1,...>] [--limit <N>]
uv run python "$SKILL/scripts/run.py" status data symbol <code> --market <A|HK|US>
uv run python "$SKILL/scripts/run.py" status data watchlist --market <A|HK|US>
uv run python "$SKILL/scripts/run.py" status data etf --codes <etf1,etf2,...>
uv run python "$SKILL/scripts/run.py" status data pool --market <A|HK|US>
uv run python "$SKILL/scripts/run.py" market-regime --market <A|HK|US>
全市場スナップショットスキャン(全銘柄のローカルスナップショットを新規作成します):
uv run python "$SKILL/scripts/run.py" refresh-scan <market> --top <N>
運用コマンド:
uv run python "$SKILL/scripts/run.py" scheduler --run-now # ウォッチリスト全体を分析
uv run python "$SKILL/scripts/run.py" cache stats # キャッシュの統計情報
uv run python "$SKILL/scripts/run.py" cache cleanup --days 30 # 古いエントリーを削除
uv run python "$SKILL/scripts/run.py" cache engine # アクティブなエンジンを表示
uv run python "$SKILL/scripts/run.py" cache migrate # SQLite -> DuckDB(一度のみ)
出力ガイドライン
ターミナル出力(自動検出):
スキャンしやすいように指標を使用します:
600519 贵州茅台
スコア 82.3/100 | シグナル: BUY (F=8)
主な要因: 品質(88.7) + モメンタム(76.5)
リスク: 低
参考損切り/利確価格: 1480.50 / 1980.00
詳細診断レポートの形式:
- 判断シグナルとスコア
- 主な要因トップ3
- シグナルを発生させた戦略
- 影響が5%を超える場合のセンチメント調整
- リスクレベルと主なリスク
- 参考損切り価格と利確価格
JSON出力(--format json):
すべてのスクリプトは --format json,md,both,none を受け付けます。プログラムでの利用にはJSON、読みやすいレポートにはMDを使用します。
言語:
ユーザーが英語で書いていない限り、A株の内容には中国語を使用します。米国株/香港株には英語を使用します。
注意事項
症状 原因 対処方法 ModuleNotFoundError: No module named config 作業ディレクトリが正しくありません プロジェクトのルートから実行し、uv run python "$SKILL/scripts/run.py" ... を呼び出します スキャン結果が0件 キャッシュが空か、候補銘柄の履歴がありません uv run python "$SKILL/scripts/run.py" fetch pool を一度実行してから、再試行します1日のAPI制限に達しました ローカルのAPI利用枠に達したか、上流でスロットリングされています 待機するか、キャッシュ済みデータを使用します BUYシグナルがありません 市場が低迷しているか、キャッシュが冷えています 個別銘柄で diagnose を実行します import akshare が失敗する インストールされていません uv pip install akshare efinance baostock 銘柄コードが見つかりません その市場のプールが取得されていません uv run python "$SKILL/scripts/run.py" fetch poolバックテストが失敗する キャッシュが空の状態で欠損している過去データが多すぎます 範囲を限定したウォームアップの完了後に再実行するか、先にプールを事前取得します 香港株/米国株の候補が不安定に見える 市場間のメタデータが不完全です ランキングを信頼する前に status data のメタデータ概要を確認します 銘柄履歴が古い/データに欠落がある データ品質の欠落が検出されました sync check --codes <code> の後に sync repair --codes <code> を実行します。重大な問題がある場合は自動的に間隔を空けて再試行します
主な原則
- ローカル優先、キャッシュミス時に取得 — AKShare API を呼び出す前に、quant_cache.db(または有効化されている場合は DuckDB キャッシュ)を確認します。不足している日付範囲のみを段階的に補完します。キャッシュが温まっている場合、全履歴をダウンロードしてはいけません。十分に新しいデータがキャッシュにある場合は、常に再利用します。
- マルチファクター、マルチ戦略 — 7 つのファクター次元からなる 6 つの戦略を重み付けして投票します。
- タスク単位のウォームアップ —
analyze/scan/backtest では、不足している最小限の銘柄群、履歴、ファンダメンタルズ、または指数データのみを取得します。
- 市場に応じたキャッシュ — A/HK/US/FUND の銘柄群と TTL メタデータを個別に追跡します。
- ETF 優先のファンドの扱い — 現在の
FUND は、広範な投資信託のカバレッジではなく、上場 ETF のワークフローを意味します。
- メタデータを考慮したクロスマーケット対応 — HK/US の銘柄群には、ソース、ステータス、完全性のシグナルが付与されます。品質の低いメタデータは、ランキングで軽く減点される場合があります。
- スクリプト駆動 —
uv run python "$SKILL/scripts/run.py" を実行し、ロジックを再実装してはいけません。
- 並列スコアリング — アルファスキャンにはスレッドプール(8 ワーカー)を使用します。
- リサーチメモリーを考慮 — ユーザーがフォローアップ、レビュー、またはアトリビューションを求めている場合は、テーゼ/テーマ/スコアカードのワークフローを優先します。
- グレースフルデグラデーション — API の制限時はキャッシュのみのモードに切り替えます。失敗するよりも部分的な結果を優先します。
参考ファイル
現在のタスクに必要な参考資料のみを読み込んでください。
- 単一銘柄の分析、診断、またはファクターの説明:
references/factors.md、references/strategies.md
- CLI/Python の使用方法、プログラムによる統合、またはコードレベルの質問:
references/python-api.md
- ETF/コア・サテライトのワークフロー:
references/enhanced-momentum.md
- データソースのカバレッジ、市場の制限、またはキャッシュ/同期の動作:
references/market-source-playbook.md、
references/akshare_official_docs.md
- ワークフローの振り分け、またはマニフェストの処理:
references/workflows.md
- 詳細な診断の長文レポート出力:
references/deep-diagnosis.md
- テーゼメモリー/事後検証:
references/thesis-memory.md
- テーマリサーチ:
references/theme-research.md
- スコアカード/アトリビューション:
references/scorecards.md
- 出力の文言と応答スタイル:
references/output-style-and-language.md
- センチメントに関する作業:
references/sentiment.md
- リサーチの背景情報:
references/research-sources.md
- リスク、免責事項、またはポリシー上慎重な対応が必要な出力:
references/risk-and-compliance.md
- このスキル固有の対話上の制約:
references/serenity-dialogue-protocol.md
スキルのバージョン:1.5
出力ファイルの仕様
- パス:./reports/
- 命名規則:YYYY-MM-DD-HHMM_短いタイトル.json または .md
- 形式:階層構造の標準 Markdown
リスクに関する免責事項
投資の参考情報であり、投資助言ではありません。データソースは第三者の公開プラットフォームであり、10~15 分の遅延があります。過去の運用実績は将来のリターンを保証するものではありません。