stock-evaluator-v3 について
stock-evaluator-v3は、購入を検討する銘柄を評価するスキルです。出典に基づくテクニカル・ファンダメンタル分析、バリュエーション、リスク指標、投資家の投資哲学による採点、推奨ダッシュボードを組み合わせます。
主な機能
- 01テクニカル・ファンダメンタル分析
- 02安全余裕を含むバリュエーション
- 03高度な財務リスク指標
- 048種類の投資家哲学による採点
- 05強気・弱気の両面評価
- 06推奨と代替候補の提示
活用シーン
- 01購入前の銘柄評価
- 02ウォッチリスト候補の比較
- 03エントリー・退出水準の検討
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ sundial-org/ awesome-openclaw-skills --skill stock-evaluator-v3インストール後、Claude Code で/stock-evaluator-v3を入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
ADVANCED-METRICS-GUIDE.mdDASHBOARD-GUIDE.mdEVALUATION-WORKFLOWS.mdVALUATION-GUIDE.md詳細
株式評価(拡張版)
⚠️ 重大:必須提出物チェックリスト
すべての分析に、以下をすべて含める必要があります。
- ☐ テクニカル分析(値動き、指標、重要な価格水準、一目均衡表)
- ☐ ファンダメンタル分析(事業、財務、競争上の地位)
- ☐ 高度な財務指標(Fスコア、Zスコア、Mスコア、最大ドローダウン、バリュートラップスコア)
- ☐ 投資家ペルソナスコア(伝説的な投資家8人の投資フレームワーク)
- ☐ バリュエーション評価(安全余裕を含む複数の手法)
- ☐ 強気ケースと弱気ケース(両方の見解とバランス評価)
- ☐ 明確な推奨(BUY/HOLD/SELLと確信度評価)
- ☐ 代替候補(SELLの場合:より有望な代替候補を3~5銘柄提示)
- ☐ 拡張版クオンツスタイルダッシュボード(60以上の指標、一目均衡表、投資家ペルソナ、TOP NEWS、重要な注記を含むReactダッシュボード)
いずれかの項目を完了できない場合は、作業を中断し、確認を求めてください。
⚠️ 重大:データの整合性に関するルール
捏造ゼロの方針
数値データをいかなる場合も捏造、推定、幻覚で補ってはなりません。 ダッシュボード内のすべての指標は、以下のいずれかに基づく必要があります。
- 出典を明記したウェブ検索結果
- 企業の提出書類(10-K、10-Q、決算報告書)
- 公式の金融データプロバイダー
データが見つからない場合は、「N/A」または「--」を使用してください。
必須のウェブ検索(分析ごとに最低限実施)
ダッシュボードにデータを入力する前に、以下の検索を必ず実行してください。
| 検索番号 | クエリのテンプレート | 取得するデータ |
|---|---|---|
| 1 | "[TICKER] stock price market cap P/E ratio" | 株価、時価総額、P/E |
| 2 | "[TICKER] ROE ROA profit margin 2024 annual report" | 財務比率 |
| 3 | "[TICKER] revenue growth earnings growth FY2024" | 成長率(報告値) |
| 4 | "[TICKER] Piotroski F-Score" | Fスコア(または算出) |
| 5 | "[TICKER] insider trading SEC Form 4 2025" | インサイダーの買い/売り |
| 6 | "[TICKER] short interest percentage float" | 空売り比率 |
| 7 | "[TICKER] RSI MACD 50-day 200-day moving average beta volatility" | テクニカル指標 |
| 8 | "[TICKER] analyst price target consensus" | アナリストの目標株価 |
データソースの優先順位
以下の優先順位で情報源を使用してください。
- 企業の公式提出書類(SEC EDGAR、企業のIR)
- 取引所データ(NYSE、NASDAQ、LSEの公式データ)
- 検証済み金融データ(Yahoo Finance、Google Finance、MarketWatch)
- SEC Form 4(インサイダー取引のみ)
- FINRA/取引所(空売り比率のみ)
禁止事項
- 特定の最新数値に、学習済みの知識を使用すること
- アナリストレポート(ユーザーの希望に基づく)
- 出典のない推定値
- 「一般常識」に基づく推測
入手できないデータの扱い
| 状況 | 対応 | 表示 |
|---|---|---|
| 検索しても指標が見つからない | 「N/A」と表示 | value: "N/A" |
| データが古い(1年以上前) | 日付を記載 | value: "15.2% (2023)" |
| 情報源が相反する | 最も権威ある情報源を使用 | 分析内に注記 |
| 算出した指標(Fスコア) | 算出過程を示す | テキストで説明 |
| インサイダーデータが入手できない | 「N/A」と表示 | insBuys: "N/A" |
重要:ゼロは「実際にゼロだった」ことを意味します。欠損データの代わりにゼロを使用してはなりません。
標準化された指標ラベル
ダッシュボードでは、以下のラベルをそのまま使用してください(参照スクリーンショットと一致)。
行1:価格とバリュエーション | 財務パフォーマンス
| ラベル | 注記 |
|---|---|
| 価格: | $XX.XXまたは€XX.XX |
| 時価総額: | $XXBまたは€XXB |
| 過去実績P/E: | XX.XX |
| 予想P/E: | XX.XX |
| サブセクターP/E: | XX.XXまたはN/A |
| PEG(1年): | X.XX、基準値(<1)を併記 |
| ROE: | XX.XX%、基準値(>20%)を併記 |
| ROA: | XX.XX%、基準値(>10%)を併記 |
| 利益率: | XX.XX%、基準値(>20%)を併記 |
| 営業利益率: | XX.XX%、基準値(>20%)を併記 - 注:「Operating」ではなく「Operative」を使用 |
| 売上総利益率: | XX.XX%、基準値(>40%)を併記 |
| ROIC: | XX.X%、基準値(>15%)を併記 |
行 2:成長指標 | リスク指標
| ラベル | 備考 |
|---|---|
| 売上高(前年比): | XX.XX%(ベンチマーク:>10%)— 報告値のみ |
| 利益(前年比): | XX.XX%(ベンチマーク:>0%)— 報告値のみ |
| EPS(TTM): | $X.XX |
| 予想 EPS: | $X.XX |
| 成長率: | 上限あり:X.X% / 上限なし:X.X% |
| アナリスト目標価格: | $XX.XX |
| CRS(0-1): | X.XX(ベンチマーク:中) |
| 負債/自己資本比率(mrq): | X.XX(ベンチマーク:0.5-1) |
| Piotroski F: | X(ベンチマーク:≥7) |
| Altman Z: | X.XX(ベンチマーク:>3) |
| Beneish M: | X.XX(ベンチマーク:<-1.78) |
| バリュートラップ: | XX(ラベル) |
行 3:流動性とフリーキャッシュフロー | インサイダー・センチメント・分類
| ラベル | 備考 |
|---|---|
| 流動比率: | X.XX(ベンチマーク:1-2) |
| 現金: | $X.XB |
| 負債: | $X.XB または N/A |
| FCF 成長率(5年): | XX.X%(ベンチマーク:>5%) |
| FCF 利回り: | X.XX%(ベンチマーク:>4%) |
| FCF マージン: | XX.XX%(ベンチマーク:>15%) |
| 配当性向: | XX.XX%(ベンチマーク:<50%) |
| 買い(12か月): | X — SEC Form 4 に基づく、または N/A |
| 売り(12か月): | X — SEC Form 4 に基づく、または N/A |
| 純株式数(12か月): | +/-XXK — SEC Form 4 に基づく、または N/A |
| 空売り比率(%): | X.X% |
| センチメント/記事数: | +X.XXX / XX(ポジティブ/ネガティブ) |
| 株式:[タイプ] + 配当利回り: | 組み合わせ:「株式:成長株」+「配当利回り:X.XX%」 |
| セクター/業種: | 組み合わせ:「セクター/業種」 |
行 4:品質スコア | 競争優位性とその他
| ラベル | 備考 |
|---|---|
| CQVS: | XX.XX(ベンチマーク範囲) |
| ラベル: | 強/中程度/弱 |
| バリュエーション: | XX.XX |
| 品質: | XX.XX |
| 強さ: | XX.XX |
| 誠実性: | XX.XX |
| Buffett の競争優位性: | X(ベンチマーク:4-7) |
| Greenblatt(MF): | EY:X.X% / ROC:X.X% または N/A |
| ベータ + ボラティリティ(1年): | 組み合わせ:「ベータ:X.XX」+「ボラティリティ(1年):XX.X%」 |
| 利益予測可能性: | XX.X%(ベンチマーク:>80%) |
| ドローダウン(5年): | -XX.X%(ラベル:低/中/高) |
| 完全性 + データ品質: | 組み合わせ:「XX.X%」+「高/中/低」 |
標準化されたベンチマーク(唯一の信頼できる情報源)
色分けには、以下のしきい値を正確に使用してください。
| 指標 | 緑(良好) | 黄(中立) | 赤(警告) |
|---|---|---|---|
| ROE | >20% | 10-20% | <10% |
| ROA | >10% | 5-10% | <5% |
| 利益率 | >20% | 10-20% | <10% |
| 営業利益率 | >20% | 10-20% | <10% |
| 売上総利益率 | >40% | 25-40% | <25% |
| ROIC | >15% | 8-15% | <8% |
| 負債/自己資本比率 | <1 | 1-2 | >2 |
| 流動比率 | 1-2 | 0.5-1 または 2-3 | <0.5 または >3 |
| Piotroski F | ≥7 | 4-6 | ≤3 |
| Altman Z | >2.99 | 1.81-2.99 | <1.81 |
| Beneish M | <-2.22 | -2.22 から -1.78 | >-1.78 |
| PEG(1年) | <1 | 1-2 | >2 |
| RSI(14) | 30-50 | 50-70 | >70 または <30 |
| 空売り比率 | <5% | 5-10% | >10% |
| FCF 利回り | >5% | 2-5% | <2% |
| FCF マージン | >15% | 10-15% | <10% |
| 配当利回り | >2% | 1-2% | <1% または >8% |
| バリュートラップ | 0-39 | 40-59 | 60-100 |
| 最大ドローダウン | >-30% | -30% から -50% | <-50% |
| 売上高成長率 | >10% | 0-10% | <0% |
| 利益成長率 | >0% | -10% から 0% | <-10% |
概要
このスキルは、株式投資候補を機関投資家水準で評価します。既存の保有銘柄を確認するポートフォリオ分析とは異なり、このスキルでは、購入を検討している、または購入するかどうかを判断している銘柄を評価します。
この評価では、以下の問いに答えます。
- この株を買うべきでしょうか?
- いくらでエントリーすべきでしょうか?
- どれくらいの金額を配分すべきでしょうか?
- 上値余地と下値リスクはどれくらいでしょうか?
- いつ売るべきでしょうか?
デフォルト通貨:€(ユーロ)
ダッシュボードに表示するすべての金額は、デフォルト通貨として**ユーロ(€)**で表示してください。
- 価格:€42.13
- 時価総額:€78.3B
- アナリスト目標価格:€56.45
- エントリー/ストップ/目標価格:€38、€35、€56
- EPS 値:€1.39、€1.91
重要:報告ベースの成長率を使用してください
ダッシュボードの指標 「Rev Growth」 と 「Earn Growth」 について:
- 報告ベースの成長率を使用してください。基礎成長率、調整後の数値、またはオーガニック成長率ではありません。
- 報告値には為替変動、買収、事業売却を含む実際の GAAP/IFRS 数値が反映されています。
- これにより、投資家が実際に得たものをより正確に把握できます。
- 例:基礎成長率が 7% でも、報告成長率が 2.2% の場合は、2.2% を使用してください。
- 利益についても同様です。調整後 EPS の成長率ではなく、報告ベースの EPS 成長率を使用してください。
主な目的
Stock Evaluator は次の用途に使用します。
- ✅ 購入前の投資候補の評価
- ✅ ウォッチリスト候補の分析
- ✅ 具体的な価格を示した買い/保有/売りの推奨の取得
- ✅ 複数の投資機会の比較
- ✅ 現在検討している銘柄より優れた代替候補の発見
次の用途には使用しません。
- ❌ 保有中のポートフォリオ銘柄の確認(Portfolio Analyst スキルを使用してください)
- ❌ 株式市場に関する一般的な質問
- ❌ 一からの株式スクリーニングや銘柄発見
- ❌ オプション、デリバティブ、暗号資産の分析
評価フレームワーク
株式評価の5つの柱
1. バリュエーション評価
- 株価は割安、公正な価格、または割高ですか?
- 複数の評価手法(DCF、相対評価、Peter Lynch、資産ベース)
- 安全域の要件(15~30%)
- 信頼度の範囲を示した公正価値の推定
2. クオリティ分析
- ビジネスモデルの強さと競争上の堀
- 財務健全性と推移(5~10年の視点)
- 経営陣の質と資本配分
- 業界での位置づけと競争優位性
3. タイミング評価
- テクニカル面の状況とエントリーポイント
- 直近のカタリストやイベント
- 市場センチメントとポジショニング
- 最適なエントリー価格の範囲
4. ポジションサイズ
- 推奨配分(ポートフォリオに占める割合)
- 確信度、リスク、分散に基づく配分
- 最大配分の上限
- リスク調整後のポジションサイズ
5. 確信度評価
- 強い買い:確信度が高く、明確な割安感があり、リスクが低い
- 買い:良好な投資機会で、バリュエーションは妥当、リスクは中程度
- 保有:公正な価格で、今すぐ購入すべき決め手がない
- 回避:割高、重大なリスクがある、またはより優れた代替候補がある
バリュートラップ指標
概要
バリュートラップとは、株価が割安(低い P/E、低い P/B)に見えても、実際には妥当なファンダメンタルズ上の理由から安値になっている状態です。「割安」に見えるにもかかわらず、株価は下落し続けます。
バリュートラップスコアの計算(0~100。低いほど本物の割安、高いほどトラップの可能性が高い)
評価する要素(トラップを示す場合は点数を加算):
1. 株価モメンタム(最大25点)
- 6か月間の市場対比株価変動:20%を超えてアンダーパフォームしている場合、15~25点を加算
- 12か月間の株価変動:下落が続いている場合、10~20点を加算
- 株価モメンタムがプラスの場合:0点を加算
2. 利益の質(最大25点)
- EPS の推移(3年間):減少している場合、10~25点を加算
- 売上高の推移:減少している場合、5~15点を加算
- 利益率の推移:縮小している場合、5~10点を加算
- 利益の質が強固な場合:0点を加算
3. バランスシートの健全性(最大25点)
- 負債水準が増加していますか? 5~15点を加算
- キャッシュフローがマイナス、または減少していますか? 10~20点を加算
- 運転資本が悪化していますか? 5~10点を加算
- バランスシートが健全な場合:0点を加算
4. バリュエーションの背景(最大25点)
- ファンダメンタルズの悪化が低い倍率の理由になっていますか? 10~25点を加算
- 現在のファンダメンタルズを、倍率がより高かった時期と比較してください。
- ファンダメンタルズがバリュエーションを正当化する場合:0点を加算
スコア計算式
Value Trap Score = Momentum Penalty + Quality Penalty + Balance Sheet Penalty + Valuation Penalty
(スコアは0~100の範囲で、0は間違いなく本物の割安、100は確実なバリュートラップを示します)
スコアの解釈
- 0~19:本物の割安(割安の可能性が高く、ファンダメンタルズは健全)- 緑
- 20~39:おそらく本物の割安(軽微な懸念あり、要監視)- 薄緑
- 40~59:注意ゾーン(判断材料が混在、慎重に進める)- 黄
- 60~79:トラップの可能性が高い(複数の警告サインあり)- オレンジ
- 80~100:強いトラップの兆候(回避)- 赤
表示形式
Value Trap: 21 (Genuine)
色分け:40未満は緑、40~60は黄、60超は赤
投資家ペルソナスコア
有名投資家8人の投資哲学に照らして、各銘柄を評価します(0〜10点)。これにより、ユーザーはその銘柄がどのようなタイプの投資家に適しているかを把握できます。
1. ウォーレン・バフェットスコア
「The Warren Buffett Way」に基づく評価です。持続的な競争優位性を重視します。
加重する主な指標:
- ROE(>20%):2点
- 利益率(>15%):2点
- フリーキャッシュフローがプラスで成長している:2点
- 経済的な堀の強さ(ブランド、価格決定力):2点
- 予測可能な利益:2点
バフェットが好むもの: 予測可能な事業、価格決定力、設備投資の必要性が低いこと、安定した収益性
2. チャーリー・マンガースコア
「Poor Charlie's Almanack」に基づく評価です。メンタル・ラティスワークと逆転思考を重視します。
重視する点: 何がうまくいかない可能性があるか(逆転の原則)
スコアリング: 10点から開始し、ペナルティを差し引きます。
- 高い負債(D/E > 2):-3点
- 利益の変動が大きい:-2点
- 経営陣の実績が芳しくない:-2点
- 競争上の堀がない:-2点
- 会計上の危険信号:-3点
3. レイ・ダリオスコア
「Principles」に基づく評価です。オールウェザー・ポートフォリオと経済の仕組みへの理解を重視します。
主な指標:
- D/E比率 < 1:2点
- ベータ < 1:2点
- 景気循環を通じて安定した利益率:2点
- 利益の変動が小さい:2点
- 景気後退への耐性の実績:2点
ダリオが好むもの: デレバレッジの機会、業務効率、景気循環への耐性
4. ピーター・リンチスコア
「One Up on Wall Street」に基づく評価です。GARP(妥当な価格での成長)を重視します。
主な指標:PEG比率(P/E ÷ 成長率)
- PEG < 0.5:10点
- PEG 0.5〜1.0:8点
- PEG 1.0〜1.5:6点
- PEG 1.5〜2.0:4点
- PEG > 2.0:2点
調整要因:
- 利益が継続的に成長している場合:+1点
- 事業が理解しやすい場合:+1点
- 衰退産業の場合:-1点
5. ベンジャミン・グレアムスコア
「The Intelligent Investor」に基づく評価です。安全域を重視します。
グレアムの基準(各2点、最大10点):
- P/E < 15
- P/B < 1.5
- 流動比率 > 2
- 10年間にわたり利益がプラス
- 20年以上にわたり配当を実施
6. ジョエル・グリーンブラットスコア
「The Little Book That Beats the Market」に基づく評価です。マジック・フォーミュラを用います。
2つのランキングを組み合わせます:
- 利益利回り(EBIT/EV):高いほど良い
- 投下資本利益率(EBIT/純固定資産 + 運転資本):高いほど良い
スコアリング: 総合順位が上位10%なら10点とし、順位に応じて点数を調整します。
7. ジョン・テンプルトンスコア
逆張り投資とグローバルなバリュー投資に基づく評価です。
主な要因:
- 数年来の安値で取引されている:+3点
- アナリストから不人気である:+2点
- 弱気な見方にもかかわらずファンダメンタルズが強い:+3点
- グローバルな視点(米国外の投資機会):+2点
8. ジョージ・ソロススコア
「The Alchemy of Finance」に基づく評価です。再帰性を重視します。
主な要因:
- モメンタムとトレンドの強さ:3点
- マクロ経済の追い風:3点
- 市場の見方が変化している:2点
- 転換点となるカタリスト:2点
ソロスが好むもの: マクロ投資、再帰性のある状況、トレンドへの追随
表示形式
レーダーチャートの周囲に、スコアと色分けを示す8つのバッジを表示します。
- 緑(7〜10):高い適合度
- 黄(4〜6.9):中程度の適合度
- 赤(0〜3.9):適合度が低い
強化されたテクニカル分析
一目均衡表の分析
算出する構成要素:
- 転換線:(9期間の高値 + 9期間の安値)/ 2
- 基準線:(26期間の高値 + 26期間の安値)/ 2
- 先行スパンA:(転換線 + 基準線)/ 2。26期間先に表示
- 先行スパンB:(52期間の高値 + 52期間の安値)/ 2。26期間先に表示
- 遅行スパン: 現在の終値を26期間前に表示
雲(Kumo): 先行スパンAとBの間の領域
識別して表示するシグナル:
- 転換線・基準線の強気クロス: 転換線が基準線を上抜ける(強気)— ◆で表示
- 転換線・基準線の弱気クロス: 転換線が基準線を下抜ける(弱気)— ◆で表示
- 雲の強気ねじれ: 雲が赤から緑に変化 — ◆で表示
- 雲の弱気ねじれ: 雲が緑から赤に変化 — ◆で表示
- 価格と雲の関係: 雲の上(強気)、雲の下(弱気)、雲の中(中立)
2種類のPEGレシオ
- PEG(1年): P/E ÷ 1年間の予想成長率
- PEG(5年): P/E ÷ 過去5年間の成長率
- どちらも、成長性を考慮したバリュエーションを異なる視点から示します
FCFマージン
- 計算式: フリーキャッシュフロー / 売上高 × 100
- 基準: 15%超は優秀、10%超は良好
- 売上高に対するキャッシュ創出効率を示します
ニュースセンチメントと空売り比率
- ニュースセンチメント: 最近の記事のセンチメントに基づく、-1から+1までのスケール
- 空売り比率: 空売りされている浮動株の割合(10%超は高い、5%未満は低い)
- どちらも、市場のセンチメントや踏み上げ・反転の可能性を示します
ファンダメンタル分析のプロセス
1. 事業の理解(常に最初に行う)
分析する内容:
- その企業は何をしているのか?(製品、サービス、ビジネスモデル)
- 収益源と内訳
- 対象顧客と市場
- 競争優位性(参入障壁の源泉)
- 市場での位置付けとシェア
- 業界の動向とトレンド
経営陣の評価:
- CEOの経歴、在任期間、実績
- CFOと主要幹部
- 資本配分の判断(配当、自社株買い、買収、R&D)
- 経営陣の報酬体系と株主利益との整合性
- インサイダー取引の傾向(買いは強気のシグナル)
- 決算説明会や書簡から見たリーダーシップの質
競争上の位置付け:
- 市場シェアとその推移
- 主要な競合他社(直接的な競合企業を3~5社特定)
- この企業の差別化要因は何か?
- 持続可能な競争優位性はあるか?
2. 財務分析(5~10年の視点)
調査の順序:
- 最新の10-Kから確認 - 現在の事業と最近の業績を理解します
- 過去5~10年分の10-Kにさかのぼる - 事業の変遷を理解します
- 直近2~3年分の10-Qを確認 - 現在の推移を把握します
- 委任状説明書を確認 - ガバナンスと報酬を確認します
分析する主な指標:
品質の基準:
- ROE > 15%(自己資本利益率)
- 利益率 > 15%
- 粗利益率 > 30%
- 負債 < 年間売上高
- フリーキャッシュフローがプラスで、増加している
- 過去5年間の売上高成長率(インフレ調整後)
評価するトレンド:
- 売上高の成長推移(加速/安定/減速しているか?)
- マージンの拡大または縮小(その理由は?)
- キャッシュフローの一貫性と質
- バランスシートの健全性(負債水準、流動性)
- 投下資本利益率(ROIC)
- 運転資本の管理
危険信号:
- 売上高が伸びているにもかかわらず、マージンが低下している
- フリーキャッシュフローがマイナス、または一貫性がない
- キャッシュ創出を上回るペースで負債が増加している
- 市場シェアを失っている
- 業績見通しを慢性的に達成できない
- 会計上の不正や異常
3. 競争優位性の評価
競争優位性の強さ:広い/狭い/なし
源泉を評価する:
- ネットワーク効果:ユーザーが増えるほど製品の価値が高まるか?
- ブランドロイヤルティ:ブランドの強さによる価格決定力があるか?
- スイッチングコスト:乗り換えが難しい、または高コストか?
- 規制上の障壁:ライセンス、特許、規制があるか?
- コスト優位性:規模、技術、立地による優位性があるか?
- 無形資産:特許、商標、独自データがあるか?
競争優位性の持続性:
- 優位性をどれくらいの期間維持できるか?
- 何が競争優位性を損なう可能性があるか?
- 競争優位性は強まっているか、弱まっているか?
同業他社との比較: この企業の競争優位性を、直接的な競合企業3~5社と比較します:
- 市場シェアの推移
- 収益性指標(マージン、ROE)
- 成長率
- 財務の健全性
4. 高度な財務健全性指標
基本的な品質指標に加えて、より深い洞察を得るために以下の高度なスコアを算出します。
ピオトロスキーFスコア(財務健全性)
目的:収益性、レバレッジ、経営効率の観点から財務健全性を測る9点満点のスコアです。
採点(0~9点、スコアが高いほど良好):
収益性(4点):
- ROA > 0:+1
- 営業キャッシュフロー > 0:+1
- ROAが前年比で改善:+1
- 営業キャッシュフロー > 純利益(利益の質):+1
レバレッジ/流動性(3点):
- 長期負債が前年比で減少:+1
- 流動比率が前年比で改善:+1
- 過去1年間に新株を発行していない:+1
経営効率(2点):
- 売上総利益率が前年比で改善:+1
- 総資産回転率が前年比で改善:+1
解釈:
- 8~9:財務健全性が非常に良好
- 6~7:財務健全性が良好
- 4~5:財務健全性は標準的
- 0~3:財務健全性が弱い
アルトマンZスコア(倒産リスク)
目的:2年以内に倒産する確率を予測します。
計算式(上場製造業向け): Z = 1.2(A) + 1.4(B) + 3.3(C) + 0.6(D) + 1.0(E)
ここで:
- A = 運転資本 / 総資産
- B = 利益剰余金 / 総資産
- C = EBIT / 総資産
- D = 時価総額 / 総負債
- E = 売上高 / 総資産
解釈:
- Z > 2.99:安全圏(倒産リスクが低い)
- Z 1.81-2.99:グレーゾーン(リスクは中程度)
- Z < 1.81:危機ゾーン(倒産リスクが高い)
注:製造業以外の企業については、係数を調整してください。
ベニッシュMスコア(利益操作の検出)
目的:利益操作の可能性を特定します。
主な指標(簡易的な手法):
- 売上債権回転日数指数(上昇=警告)
- 売上総利益率指数(低下=警告)
- 資産品質指数(上昇=警告)
- 売上成長指数(過度な成長=警告)
- 減価償却指数(低下=警告)
- 販売費及び一般管理費指数(不釣り合いな変化=警告)
- レバレッジ指数(上昇=警告)
- 総発生高 / 総資産(高い=警告)
解釈:
- Mスコア > -1.78:利益操作を行っている可能性が高い(危険信号)
- Mスコア < -1.78:利益操作を行っている可能性が低い(問題なし)
実用的な確認項目(Mスコアを完全に算出できない場合):
- キャッシュフローに対して発生高が一貫して高くなっていますか?
- DSOは売上高より速いペースで上昇していますか?
- 売上高が伸びる一方で利益率は低下していますか?
- 会計修正や監査人の変更はありますか?
最大ドローダウン(5年間)
目的:価格がピークから底値まで下落した最大幅を測定します。
計算方法:
- 過去5年間の最高価格を特定します
- 回復するまでの間に続いて記録した最安価格を見つけます
- 最大ドローダウン率 = (安値 - 高値) / 高値 × 100
解釈:
- 0~20%:ボラティリティが低い(ディフェンシブ株)
- 20~40%:ボラティリティが中程度(一般的な銘柄)
- 40~60%:ボラティリティが高い(景気循環株/グロース株)
- >60%:ボラティリティが極めて高い(投機的)
総合スコア
強さスコア(0~100): 以下を組み合わせたスコアです。
- 財務指標(Fスコアの寄与)
- 収益性(ROE、利益率)
- 成長率
- 市場での地位
健全性スコア(0~100): 以下を組み合わせたスコアです。
- Mスコア(利益の質)
- キャッシュフローと利益の整合性
- 会計慣行
- 経営陣の透明性
予測可能性スコア(0~100): 以下を組み合わせたスコアです。
- 売上高の安定性(ボラティリティが低い)
- 利益の安定性
- ビジネスモデルの安定性
- 景気循環性の評価
データ品質スコア(0~100):
- 財務データの完全性
- 開示情報の新しさ
- 監査人の品質
- 開示の透明性
5. リスク分析
企業固有のリスク:
- 実行リスク(経営陣は実行できるか?)
- 競争リスク(シェアの低下、新規参入者)
- 製品集中リスク(単一製品への依存)
- 顧客集中リスク(少数の大口顧客への依存)
- キーパーソンリスク(CEOへの依存)
- 財務困窮リスク(Zスコアによる評価)
- 利益の質に関するリスク(Mスコアによる評価)
業界リスク:
- 破壊的変化(技術またはビジネスモデル)
- 景気循環性(経済への感応度)
- 規制(政策の変更)
- コモディティ化(価格決定力の低下)
- 構造的な衰退(長期的な逆風)
マクロリスク:
- 経済(景気後退、インフレ、金利)
- 地政学(貿易戦争、紛争)
- 為替(為替エクスポージャー)
- 市場(バリュエーション水準、センチメント)
総合リスク水準:低 / 中程度 / 高
統合リスクスコア:(0~1の尺度。低いほど良好)
- 反映する要素:Zスコア、ボラティリティ、レバレッジ、利益の質
- <0.30:低リスク
- 0.30-0.60:中程度のリスク
-
0.60:高リスク
バリュエーション評価
複数のバリュエーション手法を用い、公正価値の推定に統合します。
必須のバリュエーション手法
1. DCF分析(割引キャッシュフロー)
- フリーキャッシュフローを予測します(5~10年)
- 適切な割引率(WACC)を適用します
- ターミナルバリューを算出します
- 安全余裕を含めます:15~30%
- 異なる前提条件による感度分析を行います
2. 相対バリュエーション
- 直接の同業他社3~5社と比較します
- 主要な倍率:P/E、EV/EBITDA、株価売上高倍率、株価純資産倍率
- 成長率の差を調整します
- 業界固有の倍率を考慮します
- 現在および過去の同業他社平均の両方を使用します
3. ピーター・リンチの公正価値
- 適正価格での成長を重視する枠組みを用います
- P/Eを成長率と比較します(PEGレシオ)
- P/E ≈ 成長率の場合を公正価値とします
- 質的要因に応じて調整します
4. 資産ベース(該当する場合)
- REIT、金融機関、資産集約型企業に適用します
- 簿価または再調達原価を用います
- 純資産価値を算出します
バリュエーションの統合
公正価値の推定:€X.XX
各手法に適切な比重を割り当てます:
- DCF:40%(キャッシュフローの信頼性が高い場合)
- 相対バリュエーション:30%(同業他社との比較)
- ピーター・リンチ:30%(成長率で調整)
安全余裕:
- 現在価格と公正価値の比較:X%の割安/割高
- 必要水準:安全余裕は最低15%
- 十分な水準:安全余裕は15~30%
- 優れた水準:安全余裕は>30%
バリュエーションの結論:
- 割安:公正価値を15%超下回る(買いの機会)
- 適正価格:公正価値の±15%以内(保有)
- 割高:公正価値を15%超上回る(回避/売却)
テクニカル分析(エントリーのタイミング)
テクニカル分析全般ではなく、最適なエントリーポイントの特定に焦点を当てます。
主なテクニカル要素
1. 値動き(過去30~60日)
- 現在のトレンド:上昇トレンド / 下降トレンド / レンジ相場
- 最近の値動きのパターン
- 出来高の傾向(上昇時に増加しているか?)
- モメンタムの評価
2. 主要な価格水準
- サポート水準:買いの需要が生じる価格帯
- 主要サポート:€X.XX
- 二次サポート:€X.XX
- レジスタンス水準:売り圧力が強まる価格帯
- 主要レジスタンス:€X.XX
- 二次レジスタンス:€X.XX
3. テクニカル指標
- RSI(相対力指数):
-
70 = 買われ過ぎ(反落する可能性があります)
- <30 = 売られ過ぎ(反発の可能性があります)
- 40-60 = 中立
-
- MACD(移動平均収束拡散法):
- 強気のクロスオーバー / 弱気のクロスオーバー / 中立
- モメンタムは加速しているか、減速しているか?
- 移動平均線:
- 50日移動平均線:€X.XX(株価は上か下か?)
- 200日移動平均線:€X.XX(トレンド指標)
4. エントリー評価
- テクニカル状況:強気 / 中立 / 弱気
- 最適なエントリー:サポートまでの下落を待つ / 成行で買う / ブレイクアウトを待つ
- エントリー価格帯:€X.XX - €X.XX
- これより上は回避:€X.XX(リスク対リターンが不利)
強気・弱気シナリオの分析
必須:すべての分析で、両方の見方を公平に提示してください。
強気シナリオ(楽観的シナリオ)
上昇余地:+X%~€X.XX
- [具体的な根拠を伴う強気材料1]
- [具体的な根拠を伴う強気材料2]
- [具体的な根拠を伴う強気材料3]
このシナリオが実現する条件:
- [必要条件1]
- [必要条件2]
弱気シナリオ(悲観的シナリオ)
下落余地:-X%~€X.XX
- [具体的な根拠を伴う弱気材料1]
- [具体的な根拠を伴う弱気材料2]
- [具体的な根拠を伴う弱気材料3]
以下の場合に発生します:
- [リスク要因1]
- [リスク要因2]
バランス評価
どちらのシナリオがより起こりやすいか:[強気/弱気/均衡]
[どちらのシナリオがより可能性が高いかについて、以下の点を考慮した説明:
- 各シナリオを裏付ける根拠の質
- 過去の事例
- 経営陣の実績
- 業界の動向
- 現在のバリュエーション]
投資推奨の基準
BUY(買い)の推奨基準
- 公正価値が現在価格を15%超上回る(十分な安全余裕がある)
- ファンダメンタルズが強固、または改善傾向にある
- テクニカル環境が妥当、または強気である
- 特定可能なカタリストがある
- リスク水準が許容範囲内である
- 確信度:強い買い、または買い
HOLD(保有)の推奨基準
- 公正価値が現在価格の±15%以内にある
- ファンダメンタルズが安定しており、強いカタリストがない
- 他により有望な投資機会がある可能性がある
- より有利なエントリー価格を待つ
- 確信度:保有
SELL/AVOID(売り/回避)の推奨基準
- 公正価値が現在価格を15%超下回る(割高である)
- ファンダメンタルズが悪化している
- 重大なリスクがある
- より有望な代替銘柄がある
- 代替候補を3~5銘柄提示する必要がある
- 確信度:回避
ポジションサイズの枠組み
以下に基づく配分の推奨:
確信度+リスク=ポジションサイズ
強い買い(確信度が高く、リスクが低い):
- ポジションサイズ:ポートフォリオの5~8%
- 上限:10%
買い(確信度が中程度、リスクが中程度):
- ポジションサイズ:ポートフォリオの3~5%
- 上限:7%
投機的/高リスク:
- ポジションサイズ:ポートフォリオの1~3%
- 上限:5%
考慮事項:
- 分散投資の必要性(セクターへの集中を避ける)
- 既存保有銘柄との相関関係
- ポートフォリオ全体のリスク
- 流動性の要件
- ユーザーのリスク許容度(プロジェクトのコンテキストに基づく)
エントリー戦略とエグジット戦略
エントリー戦略
段階的な買い増し戦略は不可 — 一括でのエントリーを推奨します:
BUY(買い)の場合:
- 理想的なエントリー価格:€X.XX~€X.XX(最適な価格帯)
- 買いの上限価格:€X.XX(これを超えるとリスク対リターンが不利)
- アプローチ:
- 「現在の市場価格で買う」(現在の価格が適正な場合)
- 「€X.XXのサポートまでの押し目を待つ」(上昇が行き過ぎている場合)
- 「€X.XXを上抜けたら買う」(ブレイクアウトの形が整っている場合)
- 「€X.XXを超えては買わない」(割高な場合)
エグジット戦略
目標価格(12か月): €X.XX(上昇余地+X%)
- 保守的:€X.XX
- 基本シナリオ:€X.XX
- 楽観的:€X.XX
損切り価格: €X.XX(最大損失-X%)
- テクニカルな損切り:重要なサポートを下回った場合
- ファンダメンタルズに基づく損切り:投資仮説が崩れた場合
以下の場合は売却(投資仮説を覆す条件):
- [具体的なファンダメンタルズの悪化]
- [具体的な競争上の脅威]
- [具体的なバリュエーションの基準値]
保有期間:
- 想定期間:[6~12か月/1~3年/3~5年以上]
- 投資の種類(スイングトレードか長期保有か)に基づく
カタリストの特定
株価の動向を左右し得る具体的なイベントを特定します。
短期(0~6か月):
- 今後の決算発表:[日付]
- 製品の発売:[イベント]
- 規制当局の判断:[予想時期]
- 業界イベント:[カンファレンス、データ発表]
中期(6~18か月):
- 市場拡大計画
- 新製品サイクル
- 利益率拡大に向けた取り組み
- 戦略的パートナーシップ
長期(18か月以上):
- 業界の構造的なトレンド
- 市場シェアの拡大
- 技術面でのリーダーシップ
- ビジネスモデルの進化
重要な分析上の制約
重要な原則:
-
ファンダメンタル分析に報道記事やニュースを使用しない
- 企業の提出書類のみを使用します(10-K、10-Q、8-K、委任状説明書)
- 決算説明会のトランスクリプトを使用します
- ニュース記事やプレスリリースに依存してはいけません
- 例外:最近の動向を把握する目的でニュースを使用する場合も、提出書類で確認します
-
精度より規模を重視する
- 安全余裕率が十分に高い(>15%)銘柄に注目します
- 完璧な予測は必要ありません
- 精密に間違うより、おおよそ正しいほうが優れています
- 楽観的な前提より保守的な前提を優先します
-
長期的な視点
- 直近の四半期だけでなく、5~10年のトレンドを分析します
- 一時的な不調と構造的な問題を見分けます
- 持続可能な競争優位性を最も重視します
- 短期的なノイズと長期的なシグナルを区別します
-
同じ条件で比較する
- 直接の競合他社3~5社をベンチマークにします
- 広範な市場指数だけを基準にしません
- 業界固有の指標や基準を使用します
- 企業の規模や成熟度に応じて調整します
-
知的誠実さ
- 制約や不明点を認めます
- 強気と弱気の両方の見方を公平に示します
- 適切な場合は「わかりません」と伝えます
- 証拠が変わったら見解を更新します
出力テンプレート
# [SYMBOL] - [Company Name] Evaluation
## ⚠️ DELIVERABLES CHECKLIST ✓
☑ Technical Analysis Complete
☑ Fundamental Analysis Complete
☑ Valuation Assessment Complete
☑ Bull vs. Bear Case Complete
☑ Clear Recommendation: **[BUY / HOLD / SELL]**
☑ Alternative Candidates: [If SELL, list 3-5 alternatives below]
---
## 📊 Executive Summary
[2-3 sentence bottom-line assessment with key reasoning]
**Recommendation: [BUY / HOLD / SELL]**
**Conviction: [Strong Buy / Buy / Hold / Avoid]**
---
## 💰 Valuation Assessment
**Fair Value Estimate: €X.XX** (Current: €X.XX)
- **Margin of Safety: X%** [Adequate >15% / Insufficient <15%]
- **Valuation: [UNDERVALUED / FAIRLY VALUED / OVERVALUED]**
| Valuation Method | Fair Value | vs. Current | Weight |
|-----------------|-----------|-------------|--------|
| DCF Analysis | €X.XX | +X% | 40% |
| Peer Relative | €X.XX | +X% | 30% |
| Peter Lynch | €X.XX | +X% | 30% |
| **Weighted Average** | **€X.XX** | **+X%** | **100%** |
**Assumptions:**
- DCF: [Key assumptions - growth rate, margins, discount rate]
- Margin of safety applied: X%
---
## 🏢 Business & Competitive Analysis
### What They Do
[2-3 paragraph business model summary:
- Core products/services
- Revenue breakdown
- Target markets
- Business model]
### Competitive Advantages
**Moat Strength: [Wide / Narrow / None]**
1. **[Advantage 1]**: [Detailed explanation with evidence]
2. **[Advantage 2]**: [Detailed explanation with evidence]
3. **[Advantage 3]**: [Detailed explanation with evidence]
**Moat Durability:** [How sustainable are these advantages? 3-5 years? 10+ years?]
### Management Quality Assessment
**Overall Rating: [Excellent / Good / Adequate / Concerning]**
- **CEO**: [Name] - [Background, tenure]
- Track record: [Achievements/concerns]
- Capital allocation: [Shareholder-friendly? Smart acquisitions?]
- **CFO**: [Name] - [Financial stewardship]
- **Insider Trading**: [Recent buying/selling activity]
- **Key Insight**: [Overall management assessment]
### Competitive Position
**Market Position:**
- Market share: X% (#X in industry)
- Share trend: [Gaining / Stable / Losing]
**Key Competitors:** [List 3-5 direct peers]
**Peer Comparison:**
| Company | Mkt Cap | Revenue Growth | Profit Margin | ROE | P/E | Moat |
|---------|---------|---------------|---------------|-----|-----|------|
| [Target] | €XB | X% | X% | X% | X.X | [Rating] |
| [Peer 1] | €XB | X% | X% | X% | X.X | [Rating] |
| [Peer 2] | €XB | X% | X% | X.X | X.X | [Rating] |
| [Peer 3] | €XB | X% | X% | X% | X.X | [Rating] |
**Competitive Assessment:** [Is this the best company in the sector?]
---
## 📈 Financial Health Analysis
### Quality Metrics vs. Benchmarks
| Metric | Current | 1Y Ago | 3Y Ago | 5Y Ago | Target | Status |
|--------|---------|--------|--------|--------|--------|--------|
| ROE | X% | X% | X% | X% | >15% | [✓/✗] |
| Profit Margin | X% | X% | X% | X% | >15% | [✓/✗] |
| Gross Margin | X% | X% | X% | X% | >30% | [✓/✗] |
| Revenue Growth | X% | X% | X% | X% | >0% | [✓/✗] |
| Debt/Revenue | X.X | X.X | X.X | X.X | <1.0 | [✓/✗] |
| FCF | €XM | €XM | €XM | €XM | Positive | [✓/✗] |
### Advanced Financial Health Scores
**Piotroski F-Score: X/9** [Excellent 8-9 / Good 6-7 / Adequate 4-5 / Weak 0-3]
*Profitability:* X/4
- ROA positive: [✓/✗]
- Operating CF positive: [✓/✗]
- ROA improving: [✓/✗]
- CF > Net Income: [✓/✗]
*Leverage:* X/3
- Debt decreasing: [✓/✗]
- Current ratio improving: [✓/✗]
- No dilution: [✓/✗]
*Efficiency:* X/2
- Margin improving: [✓/✗]
- Turnover improving: [✓/✗]
**Assessment:** [Detailed interpretation of F-Score]
**Altman Z-Score: X.XX** [Safe >2.99 / Grey 1.81-2.99 / Distress <1.81]
- **Bankruptcy Risk:** [Low / Moderate / High]
- **Interpretation:** [Explanation of Z-Score and financial stability]
**Beneish M-Score: X.XX** [Clean <-1.78 / Warning >-1.78]
- **Earnings Quality:** [High / Moderate / Questionable]
- **Red Flags:** [List any concerning indicators or state "None"]
**Max Drawdown (5Y): -X%** [Low <20% / Moderate 20-40% / High 40-60% / Extreme >60%]
- **Volatility Assessment:** [Low/Moderate/High volatility explanation]
- **Peak price:** €X.XX ([Date])
- **Trough price:** €X.XX ([Date])
### Consolidated Scores
**Strength Score: X/100** (Financial power and market position)
**Integrity Score: X/100** (Earnings quality and transparency)
**Predictability Score: X/100** (Business consistency)
**Data Quality Score: X/100** (Information completeness)
**Overall Quality Rating: [Elite / Strong / Good / Adequate / Weak]**
### Financial Trends (5-10 Year View)
**Revenue:**
- [Trend description: growth rate, consistency, drivers]
- [Any concerning patterns?]
**Margins:**
- Gross margin: [Expanding / Stable / Declining]
- Operating margin: [Trend]
- Net margin: [Trend]
- Drivers: [Why are margins moving this way?]
**Cash Flow:**
- Operating cash flow: [Trend and quality]
- Free cash flow: [Consistency, conversion]
- Capital allocation: [Dividends, buybacks, capex, acquisitions]
**Balance Sheet:**
- Debt levels: [Conservative / Moderate / High]
- Liquidity: [Strong / Adequate / Concerning]
- Trend: [Strengthening / Stable / Weakening]
### 🚩 Red Flags
[List any concerning trends or issues, or state "None identified"]
---
## 📉 Technical Analysis & Entry Timing
### Price Action (Last 30-60 Days)
- **Current Price**: €X.XX
- **52-Week Range**: €X.XX - €X.XX
- **30-day Change**: [+/-X%]
- **Trend**: [Uptrend / Downtrend / Range-bound]
- **Volume**: [Increasing / Decreasing / Normal]
### Key Technical Levels
**Support Levels:**
- **Primary Support: €X.XX** - [Significance/reason]
- **Secondary Support: €X.XX** - [Significance/reason]
**Resistance Levels:**
- **Primary Resistance: €X.XX** - [Significance/reason]
- **Secondary Resistance: €X.XX** - [Significance/reason]
### Technical Indicators
**RSI**: X.X [Overbought >70 / Neutral 30-70 / Oversold <30]
**MACD**: [Bullish crossover / Bearish crossover / Neutral]
- Interpretation: [Momentum assessment]
**Moving Averages:**
- 50-day MA: €X.XX - Price is [above/below]
- 200-day MA: €X.XX - Price is [above/below]
- Golden/Death Cross: [Any recent crossovers?]
### Entry Assessment
**Technical Setup: [Bullish / Neutral / Bearish]**
**Optimal Entry Strategy:**
- [Buy now at market / Wait for pullback to €X.XX / Buy on breakout above €X.XX]
- **Ideal Entry Range: €X.XX - €X.XX**
- **Maximum Buy Price: €X.XX** (avoid above this)
**Momentum: [Strong Bullish / Bullish / Neutral / Bearish / Strong Bearish]**
---
## ⚖️ Bull vs. Bear Case
### 🐂 Bull Case
**Potential Upside: €X.XX (+X%)**
1. **[Bull Argument 1]**: [Specific evidence and reasoning]
2. **[Bull Argument 2]**: [Specific evidence and reasoning]
3. **[Bull Argument 3]**: [Specific evidence and reasoning]
**For this to play out:**
- [Required condition 1]
- [Required condition 2]
**Probability: [High / Moderate / Low]**
### 🐻 Bear Case
**Potential Downside: €X.XX (-X%)**
1. **[Bear Argument 1]**: [Specific risk and reasoning]
2. **[Bear Argument 2]**: [Specific risk and reasoning]
3. **[Bear Argument 3]**: [Specific risk and reasoning]
**This happens if:**
- [Risk trigger 1]
- [Risk trigger 2]
**Probability: [High / Moderate / Low]**
### ⚖️ Balance Assessment
**Which case is more probable: [Bull / Bear / Balanced]**
[2-3 paragraph explanation of:
- Weight of evidence for each side
- Historical precedent
- Management track record
- Industry dynamics
- Current valuation
- Risk/reward assessment]
---
## ⚠️ Risk Analysis
**Overall Risk Level: [Low / Moderate / High]**
### Key Risks
**1. [Risk Category - e.g., Competition Risk]**:
[Specific risk and potential impact. Probability: High/Medium/Low]
**2. [Risk Category - e.g., Execution Risk]**:
[Specific risk and potential impact. Probability: High/Medium/Low]
**3. [Risk Category - e.g., Valuation Risk]**:
[Specific risk and potential impact. Probability: High/Medium/Low]
**4. [Risk Category - e.g., Macro Risk]**:
[Specific risk and potential impact. Probability: High/Medium/Low]
### Risk Mitigation
[How does the company/investment address these risks?]
[What reduces the risk in this investment?]
---
## 🎯 Catalysts & Timeline
### Near-Term (0-6 months)
- **[Date]**: [Specific catalyst - earnings, product launch, etc.]
- **[Date]**: [Specific catalyst]
### Medium-Term (6-18 months)
- [Expected development 1]
- [Expected development 2]
### Long-Term (18+ months)
- [Structural trend 1]
- [Structural trend 2]
**Expected Timeline to Target**: [6-12 months / 1-3 years / 3-5+ years]
---
## 💡 Investment Recommendation
### **RECOMMENDATION: [BUY / HOLD / SELL]**
### **Conviction: [Strong Buy / Buy / Hold / Avoid]**
### Rationale
[2-3 paragraph synthesis of entire analysis:
- Why this recommendation?
- What makes it compelling (or not)?
- How does valuation + fundamentals + technicals + catalysts = this conclusion?
- What's the risk/reward?]
---
## 📍 Entry Strategy (if BUY)
**Ideal Entry Price: €X.XX - €X.XX**
- Reasoning: [Why this range?]
**Maximum Acceptable Price: €X.XX**
- Above this: Risk/reward unfavorable
**Approach:**
- [Buy now at market / Wait for pullback to €X.XX / Buy on breakout above €X.XX]
- Reasoning: [Current technical setup justification]
**DO NOT BUY IF:**
- Price exceeds €X.XX without fundamental improvement
- [Other specific condition]
---
## 🎯 Exit Strategy
### Price Targets (12-Month Horizon)
- **Conservative**: €X.XX (+X%)
- **Base Case**: €X.XX (+X%)
- **Optimistic**: €X.XX (+X%)
### Stop Loss
**Stop Loss: €X.XX (-X% maximum loss)**
- Technical: Below €X.XX support
- Fundamental: If [thesis-breaking condition]
### Sell Conditions (Thesis-Breaking)
Exit position if any of these occur:
1. [Specific fundamental deterioration - e.g., "ROE drops below 10% for 2 consecutive quarters"]
2. [Specific competitive threat - e.g., "Loses >5% market share to competitor"]
3. [Specific valuation threshold - e.g., "Reaches €X.XX (>50% above fair value)"]
### Hold Duration
**Expected Timeframe**: [6-12 months / 1-3 years / 3-5+ years]
- Based on: [Investment type - swing trade vs. long-term hold]
---
## 📏 Position Sizing
### Recommended Allocation: X-X% of portfolio
**Specific Recommendation: X%**
**Rationale:**
- Conviction level: [Strong Buy / Buy → drives size]
- Risk level: [Low / Moderate / High → constrains size]
- Diversification: [Sector exposure, correlation with existing holdings]
- Liquidity: [Can exit position easily?]
**Maximum Allocation: X%**
- Risk management limit
- Don't exceed even if highly convicted
### Sizing Guidelines Applied:
- Strong Buy + Low Risk = 5-8% (max 10%)
- Buy + Moderate Risk = 3-5% (max 7%)
- Speculative + High Risk = 1-3% (max 5%)
---
## 🔑 Key Takeaways
### Top 3 Reasons to Invest
1. [Most compelling positive factor]
2. [Second most compelling positive factor]
3. [Third most compelling positive factor]
### Top 3 Concerns
1. [Biggest risk or concern]
2. [Second biggest risk or concern]
3. [Third biggest risk or concern]
### One-Sentence Investment Thesis
[Single sentence capturing the complete investment case - why buy or avoid]
---
## 📚 Research Documentation
**Sources Consulted:**
- 10-K filings: [Fiscal years reviewed - e.g., FY2020-2024]
- 10-Q filings: [Recent quarters - e.g., Q1-Q3 2025]
- Earnings calls: [Dates reviewed]
- Proxy statements: [Years reviewed]
- Management letters: [Years reviewed]
- Competitor analysis: [Companies benchmarked]
**Analysis Depth:**
- Historical period analyzed: [X years]
- Peer companies compared: [Number and names]
- Valuation methods used: [DCF, Relative, Peter Lynch, Asset-based]
**Confidence Level: [High / Medium / Low]**
- **Based on**: [Quality and completeness of available data]
- **Gaps**: [Any areas where information is limited or unavailable]
- **Limitations**: [Any constraints in the analysis]
---
## 🔄 Alternative Candidates (Required if SELL/AVOID)
[If recommending SELL or AVOID, provide 3-5 better investment alternatives with brief rationale for each]
### Alternative 1: [Symbol] - [Company Name]
**Why it's better**: [1-2 paragraph comparison]
**Quick metrics**: [Valuation, growth, margins]
### Alternative 2: [Symbol] - [Company Name]
**Why it's better**: [1-2 paragraph comparison]
**Quick metrics**: [Valuation, growth, margins]
### Alternative 3: [Symbol] - [Company Name]
**Why it's better**: [1-2 paragraph comparison]
**Quick metrics**: [Valuation, growth, margins]
[Continue for 4-5 alternatives if SELL recommendation]
---
**Analysis Date**: [Current Date]
**Next Review**: [Suggested review date based on catalysts or timeline]
**Analyst**: Claude Stock Evaluator
---
## 📊 Quant-Style Dashboard
**FINAL MANDATORY STEP**: Create a React artifact using the standardized quant-style dashboard template with:
**Required Data to Populate:**
- ✅ All 48 metrics across 8 sections (calculated above)
- ✅ Historical price data (5 years, 6-12 points)
- ✅ 1-year price + 6-month forecast (4-6 points)
- ✅ MACD data (3-5 recent points)
- ✅ RSI data (3-5 recent points)
- ✅ Radar chart (12 metrics, normalized 0-100)
- ✅ Bull case (target + 5 points)
- ✅ Bear case (target + 5 points)
- ✅ Entry/exit strategy (5 values)
**Use the EXACT template code provided in the skill instructions above.**
**DO NOT use placeholder values - populate with actual calculated data from this analysis.**
[Create the React artifact here using the quant-style template]
クオンツスタイルのダッシュボード成果物
必須:テキスト分析をすべて完了した後、標準化されたクオンツスタイルのテンプレート形式を使用して、React ダッシュボード成果物を作成します。
ダッシュボードテンプレートの構成
このダッシュボードでは、機関投資家向けの特定の形式を使用します。構成は次のとおりです。
1. ヘッダーセクション(オレンジ色の背景)
- 形式:
TICKER - Company Name
2. 8つの指標セクション(2列グリッド)
| 左列 | 右列 |
|---|---|
| 株価とバリュエーション(青) | 財務パフォーマンス(緑) |
| 成長指標(エメラルド) | リスク指標(赤) |
| 流動性とFCF(シアン) | インサイダーとセンチメント(紫) |
| クオリティスコア(オレンジ) | 競争優位性とその他(グレー) |
各セクションには、値、ラベル、ベンチマーク、色分けを含む指標ボックスが6つあります。
3. チャートセクション(3列グリッド)
-
左:線形株価チャート+MACD
- 株価、本質的価値、市場価値の各ライン
- 過去5年間のデータ
- 下部にMACD指標
-
中央:レーダーチャート+1年間の予測
- 12項目のレーダーチャート(0~100に正規化)
- 統合された助言バッジ
- 1年間の株価予測+6か月間の予測
-
右:対数株価チャート+RSI
- 対数スケールの株価履歴
- 本質的価値との比較
- 下部にRSI(14)指標
4. 重要な注記セクション(展開可能なアコーディオン)
- 3列レイアウト:強気シナリオ | 弱気シナリオ | エントリー/エグジット戦略
- クリックして展開/折りたたみ
5. フッター
- 分析日、データソース、推奨
セクション別の必須指標
株価とバリュエーション(指標6項目):
- 株価、時価総額、実績P/E、予想P/E、サブセクターの標準P/E、PEGレシオ
財務パフォーマンス(指標6項目):
- ROE、ROA、利益率、営業利益率、売上総利益率、ROIC
成長指標(指標6項目):
- 売上高成長率(5年)、利益成長率、EPS(TTM)、予想EPS、アナリストの推奨、目標株価
リスク指標(指標6項目):
- 負債資本比率、統合リスク、Fスコア、Zスコア、Mスコア、最大ドローダウン(5年)
流動性とFCF(指標6項目):
- 流動比率、現金総額、負債総額、FCF成長率(5年)、FCF利回り、配当性向
インサイダーとセンチメント(指標6項目):
- インサイダー買付数(12か月)、インサイダー売却数(12か月)、純株式数(12か月)、RSI(14日)、株式タイプ、セクター
クオリティスコア(指標6項目):
- CQVS、ラベル、バリュエーションスコア、クオリティスコア、強度スコア、誠実性スコア
競争優位性とその他(指標6項目):
- 競争優位性スコア(0~10)、ベータ、予測可能性、データ品質、完全性、配当利回り
レーダーチャートの指標(12項目、0~100に正規化)
- 売上高成長率(正規化:成長率がX%の場合、20%以上を100にスケーリング)
- 営業利益率(正規化:X%の場合、30%以上を100にスケーリング)
- 売上総利益率(正規化:X%の場合、60%以上を100にスケーリング)
- 利益率(正規化:X%の場合、25%以上を100にスケーリング)
- ROE(正規化:X%の場合、30%以上を100にスケーリング)
- リスクスコア(総合リスクの逆数:100 - リスク*100)
- ベータスコア(逆数:ベータ=0.5で100、ベータ=1.5で50、ベータ=2.5以上で0)
- P/市場ディスカウント(100 = 大幅な割安、50 = 適正、0 = 割高)
- 競争優位性スコア(競争優位性の評価 * 10)
- FCF利回り(X%の場合、8%以上を100にスケーリング)
- ROA(X%の場合、20%以上を100にスケーリング)
- 利益成長率(X%の場合、25%以上を100にスケーリング)
色分けのルール
// Green (isGood: true) - Positive indicators
ROE > 20%, ROA > 10%, Margins > 20%, ROIC > 15%
Revenue Growth > 10%, Current Ratio 1-2, Z-Score > 3
M-Score < -1.78, FCF Growth > 0%, Payout < 50%
F-Score >= 7, Quality >= 70, Strength >= 70
// Red (isGood: false) - Warning indicators
Max Drawdown < -50%, Beta > 2, Consolidated Risk > 0.6
Predictability < 50%, F-Score <= 3, Z-Score < 1.81
M-Score > -1.78, Quality < 50
// Yellow (isGood: 'neutral') - Monitor
F-Score 4-6, RSI 30-70, Moat 5-7, Quality 50-70
Beta 1.5-2.0, Predictability 50-70%
完全なテンプレートコード
このテンプレート構造をそのまま使用してください。
import React, { useState } from 'react';
import {
LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip,
ResponsiveContainer, RadarChart, PolarGrid, PolarAngleAxis,
PolarRadiusAxis, Radar, ReferenceLine, Area, ComposedChart, Scatter
} from 'recharts';
const QuantDashboard = () => {
const [showKeyNotes, setShowKeyNotes] = useState(false);
// ============================================================
// POPULATE WITH STOCK-SPECIFIC DATA FROM ANALYSIS
// ============================================================
const ticker = "TICKER"; // Replace
const companyName = "Company Name"; // Replace
const recommendation = "BUY"; // BUY, HOLD, SELL, SPECULATIVE BUY
const analysisDate = "December 6, 2025"; // Current date
const metrics = {
// Price & Valuation - from analysis
price: 100.00,
marketCap: '€10B',
trailingPE: 20.0,
forwardPE: 18.0,
subsectorTypicalPE: 25.0,
peg1Y: 1.2, // NEW: 1-Year Forward PEG
peg5Y: 2.5, // NEW: 5-Year PEG
// Financial Performance - from 5-10 year analysis
roe: 25.0,
roa: 12.0,
profitMargin: 20.0,
opMargin: 25.0,
grossMargin: 50.0,
roic: 18.0,
// Growth Metrics - from historical trends (USE REPORTED, not underlying)
revGrowth: 15.0, // REPORTED revenue growth YoY
earnGrowth: 20.0, // REPORTED earnings growth YoY
epsTTM: 5.00,
forwardEPS: 5.50,
growthCapped: 10.0, // NEW: Capped sustainable growth estimate
growthUncapped: 22.0, // NEW: Headline analyst growth estimate
analystTarget: 120.00,
// Risk Indicators - from advanced metrics section
crs: 0.40, // Consolidated Risk Score (0-1 scale)
debtEquity: 0.50,
fScore: 7, // Piotroski F-Score
zScore: 4.0, // Altman Z-Score
mScore: -2.5, // Beneish M-Score
valueTrapScore: 25, // NEW: 0-100, LOWER = genuine, HIGHER = trap
valueTrapLabel: 'Genuine', // NEW: Genuine/Caution/Trap
maxDrawdown: -30.0, // 5-year max drawdown %
// Liquidity & FCF - from cash flow analysis
currentRatio: 1.5,
totalCash: '€2B',
totalDebt: '€1B',
fcfGrowth5Y: 12.0, // 5-year smoothed growth
fcfYield: 5.0,
fcfMargin: 18.5, // NEW: FCF / Revenue %
payoutRatio: 30.0,
// Insider & Sentiment - from SEC Form 4 or use "N/A" if unavailable
insBuys: 0, // From SEC Form 4 - use actual count or "N/A"
insSells: 0, // From SEC Form 4 - use actual count or "N/A"
netShares: 'N/A', // From SEC Form 4 - use actual or "N/A"
shortInterest: 2.5, // From FINRA/exchange - use actual or "N/A"
newsSentiment: 0.25, // -1 to +1 scale
newsArticleCount: 15, // Recent article count
// Beta & Volatility
beta: 1.0, // Stock beta
vol1Y: 25.0, // 1-Year volatility %
// Quality Scores - from consolidated scoring
cqvs: 75.0, // Consolidated Quality & Valuation Score
label: 'Quality Growth', // Elite/Compounder/Quality Growth/etc
valuation: 70.0, // 0-100
quality: 80.0, // 0-100
strength: 75.0, // 0-100
integrity: 85.0, // 0-100
// Moat & Other
buffettMoat: 8, // 0-10 scale (renamed from moat)
greenblattEY: 6.5, // NEW: Earnings Yield %
greenblattROC: 22.0, // NEW: Return on Capital %
earningsPredict: 70, // Earnings Predictability 0-100
completeness: 85, // Data completeness 0-100
dataQuality: 'High', // High/Medium/Low
divYield: 1.5,
stockType: 'Growth', // Growth/Value/Cyclical/Defensive
sector: 'Technology',
industry: 'Software',
// NEW: Investor Persona Scores (0-10 scale each)
buffettScore: 7.5, // Durable competitive advantage seeker
mungerScore: 6.8, // Inversion thinker, risk avoider
dalioScore: 7.2, // All-weather, cycle resilient
lynchScore: 8.0, // GARP - Growth at Reasonable Price
grahamScore: 5.5, // Deep value, margin of safety
greenblattScore: 6.0, // Magic Formula (EY + ROC)
templetonScore: 4.5, // Contrarian, global value
sorosScore: 3.0, // Reflexivity, macro trends
// NEW: Valuation Lines for Charts
marketValueCurrent: 95.00,
intrinsicValueCurrent: 110.00,
marketValueNextYear: 105.00,
intrinsicValueNextYear: 120.00,
unrestrictedMarketValueCurrent: 125.00,
unrestrictedMarketValueNextYear: 140.00,
// Valuation Assessment (for indicator below forecast)
valuationPercent: 15, // Positive = undervalued, negative = overvalued
valuationLabel: 'Undervalued', // Undervalued/Fairly Valued/Overvalued
};
// TOP NEWS Headlines - Format: pipe-separated with dates at END in brackets
const topNews = [
{ headline: 'Company announces Q4 guidance above expectations', date: '05 Dec 2025' },
{ headline: 'New product launch receives positive analyst coverage', date: '28 Nov 2025' },
{ headline: 'Strategic partnership announced with major cloud provider', date: '15 Nov 2025' },
{ headline: 'Q3 earnings beat estimates, revenue up 18% YoY', date: '02 Nov 2025' },
{ headline: 'Management presents at investor conference, reaffirms outlook', date: '20 Oct 2025' },
];
// Format TOP NEWS as pipe-separated string with dates at END
const topNewsString = topNews.map(n => `${n.headline} [${n.date}]`).join(' | ');
// Historical Price Data (10 years with multiple valuation lines)
const priceHistory = [
{ date: '2016', price: 25, totalReturn: 28, marketValueCurrent: 27, intrinsicValueCurrent: 30, marketValueNextYear: 29, intrinsicValueNextYear: 32, analystTarget: 30, unrestrictedCurrent: 28, unrestrictedNextYear: 31 },
{ date: '2017', price: 35, totalReturn: 40, marketValueCurrent: 38, intrinsicValueCurrent: 42, marketValueNextYear: 40, intrinsicValueNextYear: 45, analystTarget: 42, unrestrictedCurrent: 40, unrestrictedNextYear: 44 },
{ date: '2018', price: 45, totalReturn: 52, marketValueCurrent: 48, intrinsicValueCurrent: 55, marketValueNextYear: 52, intrinsicValueNextYear: 60, analystTarget: 55, unrestrictedCurrent: 52, unrestrictedNextYear: 58 },
{ date: '2019', price: 55, totalReturn: 65, marketValueCurrent: 58, intrinsicValueCurrent: 68, marketValueNextYear: 62, intrinsicValueNextYear: 72, analystTarget: 65, unrestrictedCurrent: 65, unrestrictedNextYear: 72 },
{ date: '2020', price: 50, totalReturn: 62, marketValueCurrent: 55, intrinsicValueCurrent: 65, marketValueNextYear: 60, intrinsicValueNextYear: 70, analystTarget: 62, unrestrictedCurrent: 62, unrestrictedNextYear: 70 },
{ date: '2021', price: 75, totalReturn: 95, marketValueCurrent: 80, intrinsicValueCurrent: 90, marketValueNextYear: 85, intrinsicValueNextYear: 98, analystTarget: 90, unrestrictedCurrent: 92, unrestrictedNextYear: 105 },
{ date: '2022', price: 65, totalReturn: 85, marketValueCurrent: 72, intrinsicValueCurrent: 85, marketValueNextYear: 78, intrinsicValueNextYear: 92, analystTarget: 82, unrestrictedCurrent: 85, unrestrictedNextYear: 95 },
{ date: '2023', price: 80, totalReturn: 105, marketValueCurrent: 85, intrinsicValueCurrent: 100, marketValueNextYear: 92, intrinsicValueNextYear: 108, analystTarget: 98, unrestrictedCurrent: 100, unrestrictedNextYear: 115 },
{ date: '2024', price: 95, totalReturn: 125, marketValueCurrent: 100, intrinsicValueCurrent: 115, marketValueNextYear: 108, intrinsicValueNextYear: 125, analystTarget: 115, unrestrictedCurrent: 120, unrestrictedNextYear: 135 },
{ date: '2025', price: 100, totalReturn: 135, marketValueCurrent: 105, intrinsicValueCurrent: 120, marketValueNextYear: 115, intrinsicValueNextYear: 132, analystTarget: 125, unrestrictedCurrent: 130, unrestrictedNextYear: 145 },
];
// 1 Year Price with 6-Month Forecast, MAs, and Bollinger Bands
const oneYearData = [
{ date: "Jan'25", price: 90, ma50: 88, ma200: 85, upperBand: 98, lowerBand: 82, forecast: null, ci95Upper: null, ci95Lower: null },
{ date: "Mar'25", price: 88, ma50: 89, ma200: 86, upperBand: 96, lowerBand: 80, forecast: null, ci95Upper: null, ci95Lower: null },
{ date: "May'25", price: 95, ma50: 91, ma200: 87, upperBand: 102, lowerBand: 84, forecast: null, ci95Upper: null, ci95Lower: null },
{ date: "Jul'25", price: 92, ma50: 92, ma200: 88, upperBand: 100, lowerBand: 84, forecast: null, ci95Upper: null, ci95Lower: null },
{ date: "Sep'25", price: 98, ma50: 94, ma200: 90, upperBand: 106, lowerBand: 86, forecast: null, ci95Upper: null, ci95Lower: null },
{ date: "Nov'25", price: 100, ma50: 96, ma200: 92, upperBand: 108, lowerBand: 88, forecast: 100, ci95Upper: 108, ci95Lower: 92 },
{ date: "Jan'26", price: null, ma50: null, ma200: null, upperBand: null, lowerBand: null, forecast: 108, ci95Upper: 120, ci95Lower: 96 },
{ date: "Mar'26", price: null, ma50: null, ma200: null, upperBand: null, lowerBand: null, forecast: 115, ci95Upper: 130, ci95Lower: 100 },
];
// NEW: Ichimoku Cloud Data (6-month view with signal markers)
const ichimokuData = [
{ date: 'Jun', price: 88, tenkan: 87, kijun: 85, senkouA: 84, senkouB: 82, chikou: 85, tkCrossMarker: null, kumoTwistMarker: null },
{ date: 'Jul', price: 92, tenkan: 90, kijun: 87, senkouA: 86, senkouB: 84, chikou: 90, tkCrossMarker: 92, kumoTwistMarker: null }, // TK Bullish Cross
{ date: 'Aug', price: 95, tenkan: 93, kijun: 90, senkouA: 89, senkouB: 86, chikou: 93, tkCrossMarker: null, kumoTwistMarker: null },
{ date: 'Sep', price: 98, tenkan: 96, kijun: 93, senkouA: 92, senkouB: 88, chikou: 96, tkCrossMarker: null, kumoTwistMarker: 92 }, // Kumo Twist Bullish
{ date: 'Oct', price: 96, tenkan: 97, kijun: 95, senkouA: 94, senkouB: 90, chikou: 94, tkCrossMarker: null, kumoTwistMarker: null },
{ date: 'Nov', price: 100, tenkan: 98, kijun: 96, senkouA: 95, senkouB: 92, chikou: 98, tkCrossMarker: null, kumoTwistMarker: null },
];
// NEW: Ichimoku Signals Summary
const ichimokuSignals = {
tkCross: 'TK Bullish Cross',
kumoTwist: 'Kumo Twist Bullish',
priceVsCloud: 'Above Cloud (Bullish)',
};
// MACD Data (recent 6 months)
const macdData = [
{ date: 'Jun', macd: 0.5, signal: 0.3, histogram: 0.2 },
{ date: 'Jul', macd: 1.2, signal: 0.6, histogram: 0.6 },
{ date: 'Aug', macd: 1.5, signal: 1.0, histogram: 0.5 },
{ date: 'Sep', macd: 1.8, signal: 1.3, histogram: 0.5 },
{ date: 'Oct', macd: 1.2, signal: 1.4, histogram: -0.2 },
{ date: 'Nov', macd: 0.8, signal: 1.2, histogram: -0.4 },
];
// RSI Data (recent 6 months)
const rsiData = [
{ date: 'Jun', rsi: 45 },
{ date: 'Jul', rsi: 55 },
{ date: 'Aug', rsi: 62 },
{ date: 'Sep', rsi: 68 },
{ date: 'Oct', rsi: 58 },
{ date: 'Nov', rsi: 55 },
];
// Radar Chart Data (normalize all to 0-100 scale)
const radarData = [
{ metric: 'Rev Growth', value: 70, fullMark: 100 },
{ metric: 'Op Margin', value: 75, fullMark: 100 },
{ metric: 'Gross Margin', value: 65, fullMark: 100 },
{ metric: 'Profit Margin', value: 60, fullMark: 100 },
{ metric: 'ROE', value: 70, fullMark: 100 },
{ metric: 'Risk (CRS)', value: 60, fullMark: 100 },
{ metric: 'Beta Score', value: 70, fullMark: 100 },
{ metric: 'P/Market Disc', value: 50, fullMark: 100 },
{ metric: 'Moat', value: 80, fullMark: 100 },
{ metric: 'FCF Growth', value: 55, fullMark: 100 },
{ metric: 'ROA', value: 65, fullMark: 100 },
{ metric: 'Earn Growth', value: 75, fullMark: 100 },
];
// Key Notes Content - from Bull/Bear case analysis
const bullCase = {
target: "€130-150", // Bull case price target
points: [
"Strong revenue growth momentum",
"Expanding margins",
"Market leadership position",
"Favorable industry tailwinds",
"Strong balance sheet"
]
};
const bearCase = {
target: "€70-80", // Bear case price target
points: [
"Valuation compression risk",
"Competitive pressures",
"Macro sensitivity",
"Execution risks",
"Key person dependency"
]
};
const entryStrategy = {
idealEntry: "€90-95", // From Entry Strategy section
currentEntry: "€100 acceptable",
target: "€120 (+20%)", // 12-month target
stopLoss: "€85 (-15%)", // Stop loss
positionSize: "2-3%" // Recommended allocation
};
// ============================================================
// COMPONENT CODE (Standard - use as-is)
// ============================================================
// Helper: Value Trap color (LOWER = genuine = green, HIGHER = trap = red)
const getValueTrapColor = (score) => {
if (score < 40) return 'bg-green-100 border-green-400 text-green-800';
if (score < 60) return 'bg-yellow-100 border-yellow-400 text-yellow-800';
return 'bg-red-100 border-red-400 text-red-800';
};
// Helper: Get label for Value Trap score
const getValueTrapLabel = (score) => {
if (score < 20) return 'Genuine';
if (score < 40) return 'Probably Genuine';
if (score < 60) return 'Caution';
if (score < 80) return 'Likely Trap';
return 'Strong Trap';
};
// Helper: Persona score color
const getPersonaColor = (score) => {
if (score >= 7) return 'bg-green-500';
if (score >= 4) return 'bg-yellow-500';
return 'bg-red-500';
};
// Helper: News sentiment color
const getSentimentColor = (sentiment) => {
if (sentiment > 0.3) return 'text-green-600';
if (sentiment > 0) return 'text-green-500';
if (sentiment > -0.3) return 'text-yellow-600';
return 'text-red-600';
};
// Persona Badge Component
const PersonaBadge = ({ name, score, position }) => (
<div className={`absolute ${position} flex flex-col items-center`}>
<div className={`w-6 h-6 rounded-full ${getPersonaColor(score)} flex items-center justify-center text-white text-[8px] font-bold`}>
{score.toFixed(1)}
</div>
<div className="text-[7px] text-gray-600 mt-0.5">{name}</div>
</div>
);
const MetricBox = ({ label, value, benchmark, isGood, size = 'normal' }) => {
let bgColor = 'bg-gray-50';
if (isGood === true) bgColor = 'bg-green-50 border-green-200';
if (isGood === false) bgColor = 'bg-red-50 border-red-200';
if (isGood === 'neutral') bgColor = 'bg-yellow-50 border-yellow-200';
return (
<div className={`${bgColor} border p-1.5 flex flex-col justify-center items-center`}>
<div className="text-base font-bold text-gray-900">{value}</div>
<div className="text-[9px] text-gray-600 text-center leading-tight">{label}</div>
{benchmark && <div className="text-[8px] text-gray-400">{benchmark}</div>}
</div>
);
};
const SectionHeader = ({ title, bgColor }) => (
<div className={`${bgColor} px-2 py-1 text-[10px] font-bold text-gray-700`}>
{title}
</div>
);
return (
<div className="w-full max-w-7xl mx-auto p-3 bg-white text-xs">
{/* Header */}
<div className="bg-orange-500 text-white px-3 py-2 mb-1 text-lg font-bold text-center">
{ticker} - {companyName}
</div>
{/* TOP NEWS - Pipe separated with dates at END */}
<div className="border border-gray-300 rounded p-2 mb-3 bg-gray-50">
<span className="font-bold text-[10px]">TOP NEWS:</span>
<div className="text-[9px] mt-1">{topNewsString}</div>
</div>
{/* Top 4 sections */}
<div className="grid grid-cols-2 gap-2 mb-3">
{/* Price & Valuation - Updated with dual PEG */}
<div className="border border-gray-300 rounded overflow-hidden">
<SectionHeader title="PRICE & VALUATION" bgColor="bg-blue-100" />
<div className="grid grid-cols-7 gap-px bg-gray-200">
<MetricBox label="Price:" value={`€${metrics.price}`} />
<MetricBox label="Market Cap:" value={metrics.marketCap} />
<MetricBox label="Trailing P/E:" value={metrics.trailingPE} />
<MetricBox label="Forward P/E:" value={metrics.forwardPE} benchmark={`(${metrics.subsectorTypicalPE})`} isGood={metrics.forwardPE < metrics.subsectorTypicalPE} />
<MetricBox label="Subsector P/E:" value={metrics.subsectorTypicalPE} />
<MetricBox label="PEG (1Y):" value={metrics.peg1Y} benchmark="(<1.5)" isGood={metrics.peg1Y < 1.5 ? true : metrics.peg1Y < 2 ? 'neutral' : false} />
<MetricBox label="PEG (5Y):" value={metrics.peg5Y} benchmark="(<2)" isGood={metrics.peg5Y < 2 ? true : metrics.peg5Y < 3 ? 'neutral' : false} />
</div>
</div>
{/* Financial Performance */}
<div className="border border-gray-300 rounded overflow-hidden">
<SectionHeader title="FINANCIAL PERFORMANCE" bgColor="bg-green-100" />
<div className="grid grid-cols-6 gap-px bg-gray-200">
<MetricBox label="ROE:" value={`${metrics.roe}%`} benchmark="(>20%)" isGood={metrics.roe >= 20 ? true : metrics.roe >= 10 ? 'neutral' : false} />
<MetricBox label="ROA:" value={`${metrics.roa}%`} benchmark="(>10%)" isGood={metrics.roa >= 10} />
<MetricBox label="Profit Margin:" value={`${metrics.profitMargin}%`} benchmark="(>20%)" isGood={metrics.profitMargin >= 20 ? true : metrics.profitMargin >= 10 ? 'neutral' : false} />
<MetricBox label="Operative Margin:" value={`${metrics.opMargin}%`} benchmark="(>20%)" isGood={metrics.opMargin >= 20} />
<MetricBox label="Gross Margin:" value={`${metrics.grossMargin}%`} benchmark="(>40%)" isGood={metrics.grossMargin >= 40} />
<MetricBox label="ROIC:" value={`${metrics.roic}%`} benchmark="(>15%)" isGood={metrics.roic >= 15} />
</div>
</div>
</div>
{/* Next 4 sections */}
<div className="grid grid-cols-2 gap-2 mb-3">
{/* Growth Metrics */}
<div className="border border-gray-300 rounded overflow-hidden">
<SectionHeader title="GROWTH METRICS" bgColor="bg-emerald-100" />
<div className="grid grid-cols-7 gap-px bg-gray-200">
<MetricBox label="Revenue (YoY):" value={`${metrics.revGrowth}%`} benchmark="(>10%)" isGood={metrics.revGrowth >= 10} />
<MetricBox label="Earning (YoY):" value={`${metrics.earnGrowth}%`} benchmark="(>0%)" isGood={metrics.earnGrowth >= 0} />
<MetricBox label="EPS (TTM):" value={`€${metrics.epsTTM}`} />
<MetricBox label="Forward EPS:" value={`€${metrics.forwardEPS}`} isGood={metrics.forwardEPS > metrics.epsTTM} />
<MetricBox label="Growth Rates:" value={`Capped: ${metrics.growthCapped}%`} benchmark={`Uncapped: ${metrics.growthUncapped}%`} />
<MetricBox label="Analyst Target:" value={`€${metrics.analystTarget}`} />
</div>
</div>
{/* Risk Indicators */}
<div className="border border-gray-300 rounded overflow-hidden">
<SectionHeader title="RISK INDICATORS" bgColor="bg-red-100" />
<div className="grid grid-cols-6 gap-px bg-gray-200">
<MetricBox label="CRS (0-1):" value={metrics.crs.toFixed(2)} benchmark="(Medium)" isGood={metrics.crs < 0.4 ? true : metrics.crs < 0.6 ? 'neutral' : false} />
<MetricBox label="Debt/Equity (mrq):" value={metrics.debtEquity} benchmark="(0.5-1)" isGood={metrics.debtEquity < 1 ? true : metrics.debtEquity < 2 ? 'neutral' : false} />
<MetricBox label="Piotroski F:" value={metrics.fScore} benchmark="(≥7)" isGood={metrics.fScore >= 7 ? true : metrics.fScore >= 4 ? 'neutral' : false} />
<MetricBox label="Altman Z:" value={metrics.zScore.toFixed(2)} benchmark="(>3)" isGood={metrics.zScore >= 2.99 ? true : metrics.zScore >= 1.81 ? 'neutral' : false} />
<MetricBox label="Beneish M:" value={metrics.mScore.toFixed(2)} benchmark="(<-1.78)" isGood={metrics.mScore < -1.78} />
<MetricBox label="Value Trap:" value={`${metrics.valueTrapScore} (${metrics.valueTrapLabel})`} isGood={metrics.valueTrapScore < 40 ? true : metrics.valueTrapScore < 60 ? 'neutral' : false} />
</div>
</div>
</div>
{/* Next 4 sections */}
<div className="grid grid-cols-2 gap-2 mb-3">
{/* Liquidity & Free Cash Flow */}
<div className="border border-gray-300 rounded overflow-hidden">
<SectionHeader title="LIQUIDITY & FREE CASH FLOW" bgColor="bg-cyan-100" />
<div className="grid grid-cols-7 gap-px bg-gray-200">
<MetricBox label="Current Ratio:" value={metrics.currentRatio.toFixed(2)} benchmark="(1-2)" isGood={metrics.currentRatio >= 1 && metrics.currentRatio <= 2 ? true : 'neutral'} />
<MetricBox label="Cash:" value={metrics.totalCash} />
<MetricBox label="Debt:" value={metrics.totalDebt} />
<MetricBox label="FCF Growth 5Y:" value={`${metrics.fcfGrowth5Y}%`} benchmark="(>5%)" isGood={metrics.fcfGrowth5Y >= 5} />
<MetricBox label="FCF Yield:" value={`${metrics.fcfYield}%`} benchmark="(>4%)" isGood={metrics.fcfYield >= 4} />
<MetricBox label="FCF Margin:" value={`${metrics.fcfMargin}%`} benchmark="(>15%)" isGood={metrics.fcfMargin >= 15 ? true : metrics.fcfMargin >= 10 ? 'neutral' : false} />
<MetricBox label="Payout Ratio:" value={`${metrics.payoutRatio}%`} benchmark="(<50%)" isGood={metrics.payoutRatio < 50} />
</div>
</div>
{/* Insider & Sentiment & Class */}
<div className="border border-gray-300 rounded overflow-hidden">
<SectionHeader title="INSIDER & SENTIMENT & CLASS" bgColor="bg-purple-100" />
<div className="grid grid-cols-7 gap-px bg-gray-200">
<MetricBox label="Buys (12M):" value={metrics.insBuys} isGood={metrics.insBuys > metrics.insSells} />
<MetricBox label="Sells (12M):" value={metrics.insSells} />
<MetricBox label="Net Shares (12M):" value={metrics.netShares} />
<MetricBox label="Short Int (%):" value={`${metrics.shortInterest}%`} isGood={metrics.shortInterest < 5 ? true : metrics.shortInterest < 10 ? 'neutral' : false} />
<MetricBox label="Sentiment / Articles:" value={`${metrics.newsSentiment > 0 ? '+' : ''}${metrics.newsSentiment.toFixed(3)} / ${metrics.newsArticleCount}`} benchmark={metrics.newsSentiment > 0 ? '(Positive)' : '(Negative)'} isGood={metrics.newsSentiment > 0} />
<MetricBox label={`Stock: ${metrics.stockType}`} value={`Div Yield: ${metrics.divYield}%`} />
<MetricBox label="Sector/Industry:" value={`${metrics.sector} /`} benchmark={metrics.industry} />
</div>
</div>
</div>
{/* Last 2 sections */}
<div className="grid grid-cols-2 gap-2 mb-3">
{/* Quality Scores */}
<div className="border border-gray-300 rounded overflow-hidden">
<SectionHeader title="QUALITY SCORES" bgColor="bg-orange-100" />
<div className="grid grid-cols-6 gap-px bg-gray-200">
<MetricBox label="CQVS:" value={metrics.cqvs.toFixed(1)} benchmark="(>70)" isGood={metrics.cqvs >= 70 ? true : metrics.cqvs >= 50 ? 'neutral' : false} />
<MetricBox label="Label:" value={metrics.label} />
<MetricBox label="Valuation:" value={metrics.valuation} isGood={metrics.valuation >= 70} />
<MetricBox label="Quality:" value={metrics.quality} isGood={metrics.quality >= 70 ? true : metrics.quality >= 50 ? 'neutral' : false} />
<MetricBox label="Strength:" value={metrics.strength} isGood={metrics.strength >= 70} />
<MetricBox label="Integrity:" value={metrics.integrity} isGood={metrics.integrity >= 70 ? true : metrics.integrity >= 50 ? 'neutral' : false} />
</div>
</div>
{/* Moat & Other */}
<div className="border border-gray-300 rounded overflow-hidden">
<SectionHeader title="MOAT & OTHER" bgColor="bg-gray-200" />
<div className="grid grid-cols-6 gap-px bg-gray-200">
<MetricBox label="Buffett Moat:" value={metrics.buffettMoat} benchmark="(4-7)" isGood={metrics.buffettMoat >= 7 ? true : metrics.buffettMoat >= 4 ? 'neutral' : false} />
<MetricBox label="Greenblatt (MF):" value={`EY: ${metrics.greenblattEY}%`} benchmark={metrics.greenblattROC ? `ROC: ${metrics.greenblattROC}%` : 'ROC: N/A'} isGood={metrics.greenblattEY >= 8 ? true : metrics.greenblattEY >= 4 ? 'neutral' : false} />
<MetricBox label={`Beta: ${metrics.beta}`} value={`Vol 1Y: ${metrics.vol1Y}%`} isGood={metrics.beta < 1 ? true : metrics.beta < 1.5 ? 'neutral' : false} />
<MetricBox label="Earnings Predict.:" value={`${metrics.earningsPredict}%`} benchmark="(>80%)" isGood={metrics.earningsPredict >= 80 ? true : metrics.earningsPredict >= 60 ? 'neutral' : false} />
<MetricBox label="Drawdown (5Y):" value={`${metrics.maxDrawdown}%`} benchmark={metrics.maxDrawdown > -30 ? '(Low)' : metrics.maxDrawdown > -50 ? '(Mid)' : '(High)'} isGood={metrics.maxDrawdown > -30 ? true : metrics.maxDrawdown > -50 ? 'neutral' : false} />
<MetricBox label={`Completeness: ${metrics.completeness}%`} value={`Data Quality: ${metrics.dataQuality}`} isGood={metrics.dataQuality === 'High' ? true : metrics.dataQuality === 'Medium' ? 'neutral' : false} />
</div>
</div>
</div>
{/* Charts Section - Enhanced with Legends */}
<div className="grid grid-cols-3 gap-2 mb-3">
{/* Linear Price Chart + MACD */}
<div className="border border-gray-300 rounded p-2">
<div className="text-sm font-bold mb-1 text-center">LINEAR PRICE CHART (10Y)</div>
<div className="text-[7px] text-gray-500 mb-1 pl-1">
— Close Price — Total Return<br/>
- - Market Value (Current): €{metrics.marketValueCurrent}<br/>
- - Intrinsic Value (Current): €{metrics.intrinsicValueCurrent}<br/>
- - Analyst Target: €{metrics.analystTarget}
</div>
<ResponsiveContainer width="100%" height={130}>
<LineChart data={priceHistory}>
<CartesianGrid strokeDasharray="3 3" stroke="#e0e0e0" />
<XAxis dataKey="date" tick={{ fontSize: 7 }} />
<YAxis tick={{ fontSize: 7 }} />
<Tooltip contentStyle={{ fontSize: 8 }} />
<Line type="monotone" dataKey="price" stroke="#1f2937" strokeWidth={1.5} dot={false} name="Close" />
<Line type="monotone" dataKey="totalReturn" stroke="#6b7280" strokeWidth={1} strokeDasharray="2 2" dot={false} name="Total Return" />
<Line type="monotone" dataKey="intrinsicValueCurrent" stroke="#16a34a" strokeWidth={1} strokeDasharray="5 5" dot={false} name="IV Current" />
<Line type="monotone" dataKey="analystTarget" stroke="#3b82f6" strokeWidth={1} strokeDasharray="3 3" dot={false} name="Target" />
</LineChart>
</ResponsiveContainer>
<div className="text-xs font-bold mt-1 mb-1 text-center">MACD</div>
<ResponsiveContainer width="100%" height={55}>
<LineChart data={macdData}>
<CartesianGrid strokeDasharray="3 3" stroke="#e0e0e0" />
<XAxis dataKey="date" tick={{ fontSize: 6 }} />
<YAxis tick={{ fontSize: 6 }} />
<ReferenceLine y={0} stroke="#666" />
<Tooltip contentStyle={{ fontSize: 7 }} />
<Line type="monotone" dataKey="macd" stroke="#2563eb" strokeWidth={1} dot={false} name="MACD" />
<Line type="monotone" dataKey="signal" stroke="#dc2626" strokeWidth={1} dot={false} name="Signal" />
</LineChart>
</ResponsiveContainer>
</div>
{/* Radar + Investor Personas + Forecast */}
<div className="border border-gray-300 rounded p-2">
<div className="relative">
<ResponsiveContainer width="100%" height={140}>
<RadarChart data={radarData}>
<PolarGrid />
<PolarAngleAxis dataKey="metric" tick={{ fontSize: 6 }} />
<PolarRadiusAxis angle={30} domain={[0, 100]} tick={{ fontSize: 6 }} />
<Radar name={ticker} dataKey="value" stroke="#2563eb" fill="#3b82f6" fillOpacity={0.3} />
</RadarChart>
</ResponsiveContainer>
{/* Investor Persona Badges */}
<PersonaBadge name="Buffett" score={metrics.buffettScore} position="top-0 left-1/4" />
<PersonaBadge name="Lynch" score={metrics.lynchScore} position="top-0 right-1/4" />
<PersonaBadge name="Munger" score={metrics.mungerScore} position="top-1/4 -left-2" />
<PersonaBadge name="Greenblatt" score={metrics.greenblattScore} position="top-1/4 -right-2" />
<PersonaBadge name="Dalio" score={metrics.dalioScore} position="bottom-1/4 -left-2" />
<PersonaBadge name="Graham" score={metrics.grahamScore} position="bottom-1/4 -right-2" />
<PersonaBadge name="Templeton" score={metrics.templetonScore} position="bottom-0 left-1/4" />
<PersonaBadge name="Soros" score={metrics.sorosScore} position="bottom-0 right-1/4" />
</div>
<div className="text-center my-1">
<span className="bg-green-200 px-2 py-0.5 text-[10px] font-bold rounded border border-green-400">
Advice: {recommendation} (CQVS: {metrics.cqvs.toFixed(1)})
</span>
</div>
<div className="text-[8px] font-bold mb-0.5 text-center">1Y PRICE + 6-MONTH FORECAST</div>
<div className="text-[6px] text-gray-500 mb-0.5 text-center">— Close — 50-Day MA — 200-Day MA ▒ Bollinger Bands - - Forecast</div>
<ResponsiveContainer width="100%" height={70}>
<ComposedChart data={oneYearData}>
<CartesianGrid strokeDasharray="3 3" stroke="#e0e0e0" />
<XAxis dataKey="date" tick={{ fontSize: 6 }} />
<YAxis tick={{ fontSize: 6 }} />
<Tooltip contentStyle={{ fontSize: 7 }} />
<Area type="monotone" dataKey="upperBand" stroke="none" fill="#e0e0e0" fillOpacity={0.5} />
<Area type="monotone" dataKey="ci95Upper" stroke="none" fill="#dbeafe" fillOpacity={0.5} />
<Line type="monotone" dataKey="price" stroke="#1f2937" strokeWidth={1.5} dot={false} />
<Line type="monotone" dataKey="ma50" stroke="#f59e0b" strokeWidth={1} dot={false} />
<Line type="monotone" dataKey="ma200" stroke="#ef4444" strokeWidth={1} dot={false} />
<Line type="monotone" dataKey="forecast" stroke="#16a34a" strokeWidth={1.5} strokeDasharray="5 5" dot={false} />
</ComposedChart>
</ResponsiveContainer>
{/* Valuation Indicator */}
<div className={`text-center text-[10px] font-bold mt-1 ${metrics.valuationPercent > 10 ? 'text-green-600' : metrics.valuationPercent < -10 ? 'text-red-600' : 'text-yellow-600'}`}>
{metrics.valuationLabel} ({metrics.valuationPercent > 0 ? '+' : ''}{metrics.valuationPercent}%)
</div>
</div>
{/* Log Price + RSI */}
<div className="border border-gray-300 rounded p-2">
<div className="text-sm font-bold mb-1 text-center">LOG PRICE CHART (10Y)</div>
<div className="text-[7px] text-gray-500 mb-1 pl-1">
— Close Price — Total Return<br/>
- - Unrestr. Market Value (Current): €{metrics.unrestrictedMarketValueCurrent}<br/>
- - Unrestr. Market Value (Next Year): €{metrics.unrestrictedMarketValueNextYear}
</div>
<ResponsiveContainer width="100%" height={130}>
<LineChart data={priceHistory}>
<CartesianGrid strokeDasharray="3 3" stroke="#e0e0e0" />
<XAxis dataKey="date" tick={{ fontSize: 7 }} />
<YAxis tick={{ fontSize: 7 }} scale="log" domain={['auto', 'auto']} />
<Tooltip contentStyle={{ fontSize: 8 }} />
<Line type="monotone" dataKey="price" stroke="#1f2937" strokeWidth={1.5} dot={false} name="Close" />
<Line type="monotone" dataKey="totalReturn" stroke="#6b7280" strokeWidth={1} strokeDasharray="2 2" dot={false} name="Total Return" />
<Line type="monotone" dataKey="unrestrictedCurrent" stroke="#dc2626" strokeWidth={1} strokeDasharray="5 5" dot={false} name="Unrestr Current" />
<Line type="monotone" dataKey="unrestrictedNextYear" stroke="#f97316" strokeWidth={1} strokeDasharray="5 5" dot={false} name="Unrestr Next" />
</LineChart>
</ResponsiveContainer>
<div className="text-xs font-bold mt-1 mb-1 text-center">RSI (14) = {rsiData[rsiData.length - 1].rsi}</div>
<ResponsiveContainer width="100%" height={55}>
<LineChart data={rsiData}>
<CartesianGrid strokeDasharray="3 3" stroke="#e0e0e0" />
<XAxis dataKey="date" tick={{ fontSize: 6 }} />
<YAxis tick={{ fontSize: 6 }} domain={[0, 100]} />
<Tooltip contentStyle={{ fontSize: 7 }} />
<ReferenceLine y={70} stroke="#ef4444" strokeDasharray="2 2" />
<ReferenceLine y={30} stroke="#22c55e" strokeDasharray="2 2" />
<Line type="monotone" dataKey="rsi" stroke="#f59e0b" strokeWidth={1.5} dot={false} />
</LineChart>
</ResponsiveContainer>
</div>
</div>
{/* NEW: Ichimoku Cloud Chart */}
<div className="border border-gray-300 rounded p-2 mb-3">
<div className="text-sm font-bold mb-1 text-center">ICHIMOKU CLOUD</div>
<div className="flex gap-4 text-[7px] justify-center mb-1">
<span>— Close Price</span>
<span className="text-blue-500">— Tenkan-sen (9)</span>
<span className="text-red-500">— Kijun-sen (26)</span>
<span className="text-gray-400">— Chikou Span</span>
<span className="text-green-500">▒ Senkou Span A/B (Cloud)</span>
<span className="ml-2 font-bold text-yellow-600">◆ TK Cross</span>
<span className="text-purple-600">◆ Kumo Twist</span>
</div>
<ResponsiveContainer width="100%" height={100}>
<ComposedChart data={ichimokuData}>
<CartesianGrid strokeDasharray="3 3" stroke="#e0e0e0" />
<XAxis dataKey="date" tick={{ fontSize: 7 }} />
<YAxis tick={{ fontSize: 7 }} domain={['auto', 'auto']} />
<Tooltip contentStyle={{ fontSize: 8 }} />
<Area type="monotone" dataKey="senkouA" stroke="none" fill="#86efac" fillOpacity={0.3} />
<Area type="monotone" dataKey="senkouB" stroke="none" fill="#fca5a5" fillOpacity={0.3} />
<Line type="monotone" dataKey="price" stroke="#1f2937" strokeWidth={2} dot={false} name="Price" />
<Line type="monotone" dataKey="tenkan" stroke="#3b82f6" strokeWidth={1} dot={false} name="Tenkan" />
<Line type="monotone" dataKey="kijun" stroke="#dc2626" strokeWidth={1} dot={false} name="Kijun" />
<Line type="monotone" dataKey="chikou" stroke="#9ca3af" strokeWidth={1} strokeDasharray="3 3" dot={false} name="Chikou" />
<Scatter dataKey="tkCrossMarker" fill="#9333ea" shape="diamond" name="TK Cross" />
<Scatter dataKey="kumoTwistMarker" fill="#dc2626" shape="diamond" name="Kumo Twist" />
</ComposedChart>
</ResponsiveContainer>
<div className="flex gap-4 text-[8px] justify-center mt-1">
<span className="bg-green-100 px-2 rounded">{ichimokuSignals.tkCross}</span>
<span className="bg-green-100 px-2 rounded">{ichimokuSignals.kumoTwist}</span>
<span className="bg-green-100 px-2 rounded">{ichimokuSignals.priceVsCloud}</span>
</div>
</div>
{/* Key Notes (Expandable) */}
<div className="border border-gray-300 rounded overflow-hidden">
<button
onClick={() => setShowKeyNotes(!showKeyNotes)}
className="w-full bg-gray-100 px-3 py-2 text-left text-sm font-bold flex items-center hover:bg-gray-200"
>
<span className="mr-2">{showKeyNotes ? '▼' : '▶'}</span> Key Notes (Click to Expand)
</button>
{showKeyNotes && (
<div className="p-3 bg-gray-50">
<div className="grid grid-cols-3 gap-4 text-xs">
{/* Bull Case */}
<div>
<div className="font-bold text-green-700 mb-2 text-sm">BULL CASE ({bullCase.target})</div>
<ul className="list-disc list-inside space-y-1">
{bullCase.points.map((point, i) => <li key={i}>{point}</li>)}
</ul>
</div>
{/* Bear Case */}
<div>
<div className="font-bold text-red-700 mb-2 text-sm">BEAR CASE ({bearCase.target})</div>
<ul className="list-disc list-inside space-y-1">
{bearCase.points.map((point, i) => <li key={i}>{point}</li>)}
</ul>
</div>
{/* Entry/Exit Strategy */}
<div>
<div className="font-bold text-blue-700 mb-2 text-sm">ENTRY/EXIT STRATEGY</div>
<ul className="list-disc list-inside space-y-1">
<li><strong>Ideal Entry:</strong> {entryStrategy.idealEntry}</li>
<li><strong>Current:</strong> {entryStrategy.currentEntry}</li>
<li><strong>Target:</strong> {entryStrategy.target}</li>
<li><strong>Stop Loss:</strong> {entryStrategy.stopLoss}</li>
<li><strong>Position Size:</strong> {entryStrategy.positionSize}</li>
</ul>
</div>
</div>
</div>
)}
</div>
{/* Footer */}
<div className="text-xs text-gray-500 text-center mt-3">
Analysis Date: {analysisDate} | Sources: SEC Filings, Company Reports |
<span className="font-bold text-blue-600 ml-1">{recommendation}</span>
</div>
</div>
);
};
export default QuantDashboard;
実装手順
重要な手順:
-
包括的なテキスト分析の中ですべての指標を算出します
-
算出した指標を変数に格納します
-
テキスト分析をすべて完了した後で、React アーティファクトを作成します
-
テンプレート内のすべてのプレースホルダー値を、実際に算出したデータに置き換えます
-
テンプレート構造をそのまま使用します。コンポーネントコードを変更しないでください
-
次の指定されたデータ配列を入力します。
metricsオブジェクト(投資家ペルソナスコアを含む60以上の値)topNews配列(日付付きの最近の見出し5件)priceHistory配列(複数のバリュエーションラインを含む10年間のデータ)oneYearData配列(移動平均線、ボリンジャーバンド、予測を含む)ichimokuData配列(シグナルマーカーを含む6か月分)ichimokuSignalsオブジェクト(一目均衡表の転換線・基準線のクロス、雲のねじれ、価格と雲の位置関係)macdData配列(ヒストグラムを含む直近6ポイント)rsiData配列(直近6ポイント)radarData配列(0~100に正規化した12指標)bullCase.points(強気シナリオ分析からの5項目)bearCase.points(弱気シナリオ分析からの5項目)entryStrategy(エントリー/エグジット戦略からの5つの値)
-
レーダーチャートの値を適切に正規化します。
- 各指標を0~100のスケールにします
- 常に値が高いほど良い状態にします(必要に応じてリスク/ベータを反転します)
- 上記のスケーリング式を使用します
-
値を正しい形式で記述します。
- 通貨:
"€100.00"(デフォルトはユーロです。$ではなく€を使用してください) - 大きな数値:
"€10B"、"€2.5M" - パーセンテージ:
15.0(文字列ではなく数値) - 比率:
1.25(数値) - スコア:
7(整数)または75.0(浮動小数点数)
- 通貨:
-
成長指標:
- 基礎的/オーガニック成長率ではなく、報告済みの売上高成長率を使用します
- 調整後EPS成長率ではなく、報告済みの利益成長率を使用します
-
次のことはしないでください。
- プレースホルダー値を残す
- コンポーネント構造を変更する
- セクションを省略する
- 推定値や推測値を使用する
これが唯一受け入れられるダッシュボード形式です。それ以外のダッシュボード形式はすべて非推奨です。
プロジェクトコンテキストとの統合
ポートフォリオの把握
- プロジェクトのナレッジからポートフォリオデータにアクセスします
- その銘柄をすでに保有しているか確認します(保有している場合は、Portfolio Analyst の利用を提案します)
- 既存の保有銘柄との適合性を評価します(セクターへのエクスポージャー、相関)
- 現在の配分を考慮して、ポジションサイズを検討します
投資プロフィール
- ユーザーの投資期間、リスク許容度、希望はプロジェクトの指示に記載されています
- ユーザーのプロフィールに合わせて推奨内容を調整します
- ユーザーのコンテキストに基づき、税務上の影響を考慮します
- ポートフォリオの規模とリスク許容度に応じて、ポジションサイズを調整します
重複の回避
その銘柄がすでにポートフォリオに含まれている場合:
- 次のように伝えます:「[SYMBOL]はすでに保有しています。既存の保有ポジションを分析するには、Portfolio Analyst スキルを使用してください。」
- ユーザーが改めて評価を希望する場合は、引き続き評価を提供します
- 最初の購入ではなく、「さらに買い増すべきか」という観点で説明します
このスキルを使う場合
Stock Evaluator を使う場合:
- ユーザーが「[stock] は買うべきですか?」と尋ねたとき
- ウォッチリストの候補銘柄を評価したいとき
- 株式の推奨を求められたとき
- ユーザーが「[stock] は良い投資先ですか?」と尋ねたとき
- 複数の投資候補を比較したいとき
- 検討中の銘柄の代替候補を尋ねられたとき
- エントリー価格やポジションサイズの指針を求められたとき
- 「クオンツスタイルのダッシュボード」や「株式の可視化」を求められたとき
このスキルを使わない場合:
- ユーザーが既存のポートフォリオのポジションを確認したいとき → Portfolio Analyst を使う
- ユーザーが一般的な市場解説を求めているとき → 通常のナレッジを使う
- ユーザーが銘柄のスクリーニングや発掘をしたいとき → 別のワークフローを使う
- オプション、デリバティブ、暗号資産について尋ねられたとき → 対象外です
出力内容:
- 包括的なテキスト分析(上記の全セクション)
- クオンツスタイルの React ダッシュボードアーティファクト(標準化されたビジュアル形式)
ベストプラクティス
調査の進め方
- 会社の提出書類から始めます(10-K、10-Q)。ニュース記事から始めてはいけません。
- 5~10年さかのぼります。現在の状況だけでなく、変遷を把握します。
- 同業他社3~5社と比較します。同じ条件で比較します。
- 複数の評価方法を使います。単一の手法に頼ってはいけません。
- 両方の見方を示します。強気と弱気のシナリオを公平に扱います。
- 具体的に述べます。一般論ではなく、実際のデータを使います。
バリュエーションの規律
- 常に最低15%の安全余裕を求めます
- DCF では保守的な前提を使います
- 複数の評価方法を加重して判断します
- 業界固有の基準を考慮します
- 成長に対して過剰な価格を払ってはいけません
リスクへの意識
- リスクを明示し、定量化します
- 発生確率と影響を考慮します
- 不明点を誠実に認めます
- 上昇余地だけに注目してはいけません
コミュニケーション
- 明確な推奨から始めます
- すべての主張を根拠で裏付けます
- 具体的な数値と日付を使います
- 結論を述べるだけでなく、理由を説明します
- 推奨内容を明確に示します
よく見られるパターン
優良企業
- 景気循環を通じて一貫して黒字(5~10年)
- 強固なバランスシート(負債が少なく、現金が多い)
- 競争上の堀(広い、または狭い)
- 株主に配慮した資本配分
- 予測可能なビジネスモデル
バリュートラップ(回避)
- 安いのには理由がある(事業が縮小している)
- キャッシュフローが弱いのに負債が多い
- 一貫して市場シェアを失っている
- 競争優位性がない
- 経営陣の資本配分が不適切
適正価格での成長(GARP)
- 高い売上成長率(15~25%以上)
- 利益率が拡大している
- 潜在市場が大きい
- 競争優位性がある
- 妥当な評価(PEG < 1.5)
再建候補
- 実績のある新しい経営陣
- 主要指標が前四半期比で改善している
- 変化を促すきっかけがある
- 安全余裕を備えた大幅な割安
- 負債の削減またはキャッシュフローの改善
最終確認前の品質チェック
分析を提示する前に、次を確認します。
データ整合性チェック(重要:最初に確認)
- ✅ すべての数値指標に、ウェブ検索で確認した出典が引用されていますか?
- ✅ インサイダー取引を捏造していませんか?(SEC Form 4 または N/A)
- ✅ 空売り残高を捏造していませんか?(FINRA/取引所の情報、または N/A)
- ✅ ROE の基準は正しいですか?(>20% = 緑、10-20% = 黄、<10% = 赤)
- ✅ 標準化された指標ラベルを使っていますか?(例:「Operating」ではなく「Operative Margin」)
- ✅ 利用できないデータにはすべて「N/A」と表示していますか?(ゼロや推定値は絶対に使わない)
- ✅ TOP NEWS の形式は正しいですか?(パイプ区切りで、日付は末尾の角括弧内)
- ✅ 評価指標は予測の下に表示されていますか?(割安/適正価格/割高 +/- %)
- ✅ ベータと Vol 1Y は1つのセルにまとめられていますか?
- ✅ セクターと業種は1つのセルにまとめられていますか?
分析の完全性チェック
- ✅ 必須の成果物をすべて完成しましたか?
- ✅ 複数の評価手法を使用しましたか?
- ✅ 強気ケースと弱気ケースの両方を提示しましたか?
- ✅ 明確な BUY/HOLD/SELL の推奨を示しましたか?
- ✅ 具体的なエントリー価格とポジションサイズを示しましたか?
- ✅ 同業他社を3~5社比較しましたか?
- ✅ 5~10年の財務推移を分析しましたか?
- ✅ ニュースではなく、企業の提出書類に基づいて調査しましたか?
- ✅ 安全余裕を算出しましたか?
- ✅ リスクレベルを評価しましたか?
- ✅ SELL の場合、代替案を3~5件提示しましたか?
- ✅ テクニカル分析によるエントリーポイントを特定しましたか?
- ✅ 高度な指標(Piotroski F、Altman Z、Beneish M、最大ドローダウン)を算出しましたか?
- ✅ すべての金額を €(ユーロ)で表記しましたか?
- ✅ 売上高/利益の成長率は、基礎的・調整後の数値ではなく、報告値を使用しましたか?
- ✅ バリュートラップスコアを算出しましたか(0~100、低いほど本質的な価値がある)?
- ✅ 8つすべての投資家ペルソナスコアを算出しましたか(0~10)?
- ✅ PEGレシオを算出しましたか?
- ✅ FCFマージンを算出しましたか?
- ✅ Greenblatt Magic Formula の指標(EY、ROC)を算出しましたか?
- ✅ ニュースのセンチメントと空売り比率を調査しましたか?
- ✅ シグナルマーカー付きの一目均衡表データを収集しましたか?
- ✅ TOP NEWS セクションに最新の見出しを5件掲載しましたか?
- ✅ バリュエーションライン付きの10年間の株価履歴を利用できますか?
- ✅ 60以上の指標をすべて入力した拡張ダッシュボードを作成しましたか?
最終確認の質問
- ダッシュボード内のすべての数値について、出典を明記できますか?
- トレーニングデータの知識だけに基づく指標はありませんか?(ある場合は、再度検索するか N/A を使用してください)
- インサイダーの売買情報は、SEC Form 4 に基づいていますか?(確認できない場合は N/A を使用してください)
チェック項目が未完了の場合:作業を中止し、追加情報を収集してください。 検索してもデータが見つからない場合:「N/A」を使用してください。決して捏造しないでください。
評価構成の例
[詳細な手順については、EVALUATION-WORKFLOWS.md の完全な例を参照してください]
継続的な改善
評価を行うたびに:
- 推奨の結果を記録する
- うまくいった点、いかなかった点から学ぶ
- バリュエーションの前提を見直す
- パターン認識を改善する
- 業界知識を更新する
目標は、十分な安全余裕と許容可能なリスクを備え、ユーザーのプロフィールに合致する、本当に魅力的な投資機会を見つけることです。