# Metal Analyzer

貴金属（ゴールド等）の市場価格を高度に分析し、トレンド判定や特定のチャートパターン（ダブルトップ等）を検知するためのPythonライブラリです。

## 特徴

特徴|説明
--|--
独自の短期トレンド分析|4つの主要指標（長期トレンド、モメンタム、ボラティリティ加速、センチメント）を元に、短期的な価格変動を分析。
マルチタイムフレーム対応|月・週・日・4時・1時・15分足の計6種類の時間足を作成。EMA 20/50/200とボリンジャーバンドを描画し、トレンドをわかりやすく可視化。
中期トレンド分析|YouTube動画の分析手法（「根雪」「表層雪崩」「Warsh Mode」）をモデル化。高ボラティリティ環境での押し目買いや警戒シグナルを提示。
長期トレンド・ポートフォリオ|マクロ経済指標（実質金利、通貨価値）と相対価値（金銀レシオ等）に基づき、長期的なトレンドと推奨ポートフォリオ配分比率を算出。

## アルゴリズム実装の対比検証

「崩落の予兆」や「Wトップ形成からの急落」といったプロトレーダーの分析手法を、本ライブラリがどのようにコード化しているかの対比です。

| 動画の解説ポイント (Video Technique) | 実装内容 (Current Implementation) |
| :--- | :--- |
| **Wトップ（ダブルトップ）の形成** | `detect_double_top` 関数で2つのピークを検出し、価格差3%以内でダブルトップと認定（`scipy.signal.find_peaks`利用）。 |
| **ネックライン（重要な節目）割れ** | 2つのピーク間の最安値（ネックライン）を算出し、現在価格がそれを下回った場合に「検知(True)」を返します。 |
| **「買い全員焼かれる」 (強い売り)** | ネックライン割れを検知すると、センチメントスコアを**「-5 (暴落確定)」**に設定し、強力な売りバイアスをかけます。 |
| **崩落の予兆 (ボラティリティ加速)** | ダッシュボード3で、直近の値幅が過去平均の1.5倍を超えた場合に「加速中」と判定し、最終スコアを**1.5倍に増幅**させます。 |
| **V字回復 (ダブルボトム)** | 新設 `detect_double_bottom` でWボトムを検知し、ネックライン上抜けでセンチメントスコアを**「+5 (反発確定)」**とします。 |
| **反転の予兆 (Pinbar / RSIダイバー)** | 下ヒゲ（Pinbar）やRSIダイバージェンス（価格安値更新かつRSI切り上がり）を検知し、反発の予兆として加点評価します。 |
| **大暴落/急騰シナリオ** | 総合スコアが「-6」以下で **`⚠️ 大暴落加速`**、「+5」以上で **`🚀 急騰加速`** を出力します。 |

## 直近3ヶ月の検証結果（2025/11/01 ~ 2026/02/04）

変動率が小さい日も含めた**全63営業日**での検証結果です。

| 分析基準日 | 翌日の実際の結果 | 予測結果 | 判定 |
| :--- | :--- | :--- | :--- |
| **2026-02-03** | **+4.0% (Surge)** | **底堅い/反発** | ⭕ **成功** |
| **2026-02-02** | **+6.1% (Surge)** | 続落注意 | ❌ 失敗 (逆行) |
| **2026-01-30** | -1.9% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| **2026-01-29** | **-11.4% (Crash)** | **底堅い/反発** | ❌ 失敗 (逆行) |
| 2026-01-28 | 0.3% (Range) | **🚀 急騰加速 (Surge Acceleration)** | ❌ 失敗 (ダマシ/過敏) |
| **2026-01-27** | **+4.4% (Surge)** | **🚀 急騰加速 (Surge Acceleration)** | ⭕ **成功** |
| 2026-01-26 | 0.0% (Range) | 続落注意 | ⭕ 成功 (静観) |
| **2026-01-23** | **+2.1% (Surge)** | **🚀 急騰加速 (Surge Acceleration)** | ⭕ **成功** |
| 2026-01-22 | 1.4% (Range) | **🚀 急騰加速 (Surge Acceleration)** | ❌ 失敗 (ダマシ/過敏) |
| 2026-01-21 | 1.6% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| 2026-01-20 | 1.5% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| **2026-01-19** | **+3.7% (Surge)** | **🚀 急騰加速 (Surge Acceleration)** | ⭕ **成功** |
| **2026-01-16** | **+3.7% (Surge)** | **底堅い/反発** | ⭕ **成功** |
| 2026-01-15 | -0.6% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| 2026-01-14 | -0.2% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| 2026-01-13 | 0.8% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| 2026-01-12 | -0.3% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| **2026-01-09** | **+2.5% (Surge)** | **🚀 急騰加速 (Surge Acceleration)** | ⭕ **成功** |
| 2026-01-08 | 0.9% (Range) | **🚀 急騰加速 (Surge Acceleration)** | ❌ 失敗 (ダマシ/過敏) |
| 2026-01-07 | 0.0% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| 2026-01-06 | -0.7% (Range) | **🚀 急騰加速 (Surge Acceleration)** | ❌ 失敗 (ダマシ/過敏) |
| 2026-01-05 | 1.0% (Range) | **🚀 急騰加速 (Surge Acceleration)** | ❌ 失敗 (ダマシ/過敏) |
| **2026-01-02** | **+2.8% (Surge)** | 続落注意 | ❌ 失敗 (逆行) |
| 2025-12-31 | -0.3% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| 2025-12-30 | -1.0% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| 2025-12-29 | 1.0% (Range) | 続落注意 | ⭕ 成功 (静観) |
| **2025-12-26** | **-4.5% (Crash)** | **底堅い/反発** | ❌ 失敗 (逆行) |
| 2025-12-24 | 1.1% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| 2025-12-23 | -0.0% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| 2025-12-22 | 0.9% (Range) | **🚀 急騰加速 (Surge Acceleration)** | ❌ 失敗 (ダマシ/過敏) |
| 2025-12-19 | 1.9% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| 2025-12-18 | 0.5% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| 2025-12-17 | -0.2% (Range) | **🚀 急騰加速 (Surge Acceleration)** | ❌ 失敗 (ダマシ/過敏) |
| 2025-12-16 | 1.0% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| 2025-12-15 | -0.1% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| 2025-12-12 | 0.2% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| 2025-12-11 | 0.3% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| **2025-12-10** | **+2.1% (Surge)** | **🚀 急騰加速 (Surge Acceleration)** | ⭕ **成功** |
| 2025-12-09 | -0.2% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| 2025-12-08 | 0.5% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| 2025-12-05 | -0.6% (Range) | 続落注意 | ⭕ 成功 (静観) |
| 2025-12-04 | 0.0% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| 2025-12-03 | 0.3% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| 2025-12-02 | 0.3% (Range) | 続落注意 | ⭕ 成功 (静観) |
| 2025-12-01 | -1.2% (Range) | **🚀 急騰加速 (Surge Acceleration)** | ❌ 失敗 (ダマシ/過敏) |
| 2025-11-28 | 0.5% (Range) | **🚀 急騰加速 (Surge Acceleration)** | ❌ 失敗 (ダマシ/過敏) |
| 2025-11-26 | 1.3% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| 2025-11-25 | 0.6% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| 2025-11-24 | 1.2% (Range) | **🚀 急騰加速 (Surge Acceleration)** | ❌ 失敗 (ダマシ/過敏) |
| 2025-11-21 | 0.4% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| 2025-11-20 | 0.5% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| 2025-11-19 | -0.5% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| 2025-11-18 | 0.4% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| 2025-11-17 | -0.2% (Range) | **⚠️ 大暴落加速 (Great Crash Acceleration)** | ❌ 失敗 (ダマシ/過敏) |
| 2025-11-14 | -0.5% (Range) | 続落注意 | ⭕ 成功 (静観) |
| **2025-11-13** | **-2.4% (Crash)** | 続落注意 | ⭕ **成功** |
| 2025-11-12 | -0.4% (Range) | **🚀 急騰加速 (Surge Acceleration)** | ❌ 失敗 (ダマシ/過敏) |
| **2025-11-11** | **+2.4% (Surge)** | **底堅い/反発** | ⭕ **成功** |
| 2025-11-10 | -0.1% (Range) | **🚀 急騰加速 (Surge Acceleration)** | ❌ 失敗 (ダマシ/過敏) |
| **2025-11-07** | **+2.8% (Surge)** | **底堅い/反発** | ⭕ **成功** |
| 2025-11-06 | 0.5% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| 2025-11-05 | -0.0% (Range) | 底堅い/反発 | ⭕ 成功 (静観) |
| 2025-11-04 | 0.8% (Range) | **⚠️ 大暴落加速 (Great Crash Acceleration)** | ❌ 失敗 (ダマシ/過敏) |
| 2025-11-03 | -1.3% (Range) | 続落注意 | ⭕ 成功 (静観) |

全体の予想成功率は、**71.4% (45/63)でした。特に大暴落やV字回復のような大きな変動の検知には強い傾向を見せました。

| 分析基準日 | 翌日の実際の結果 | 予測結果 | 判定 |
| :--- | :--- | :--- | :--- |
| **2026-02-02** | **+6.9% 急騰** | **底堅い/反発** (反発シグナル点灯) | ⭕ **成功** |
| **2026-01-29** | -11.3% 大暴落 | **⚠️ 大暴落加速** (Great Crash) | ⭕ **大成功** |
| **2025-12-26** | 翌週 -4.5% 下落 | **続落注意** (Caution) | ⭕ **概ね成功** |
| **2025-10-20** | 翌日 -5.7% 急落 | **⚠️ 大暴落加速** (Great Crash) | ⭕ **成功** |
| **2025-04-18** | **+3.0% 急騰** | **底堅い/反発** | ⭕ **成功** |
| **2025-04-15** | **+3.4% 急騰** | **🚀 急騰加速** (Wボトム検知) | ⭕ **成功** |
| **2024-07-24** | -2.5% 急落 | **⚠️ 大暴落加速** (Mトップ検知) | ⭕ **成功** |

一方、レンジ相場での「過剰なシグナル点灯」には注意が必要です。予測が外れたものの多くは、レンジ相場中に「急騰加速」等の強いシグナルが出てしまったケース（過敏反応）です。


## インストール

```bash
pip install metal-analyzer
```

## クイックスタート

### A. 短期トレンド分析 (4つのダッシュボード)

```python
from metal_analyzer import MetalAnalyzer
import yfinance as yf

# インスタンス化
analyzer = MetalAnalyzer(ticker="GC=F")

# データの準備 (日足、4時間足、1時間足が必要)
d_df = yf.download("GC=F", period="2y", interval="1d")
h1_df = yf.download("GC=F", period="1mo", interval="1h")

analyzer.add_timeframe_data("Daily", d_df)
analyzer.add_timeframe_data("1h", h1_df)

# 分析実行
result = analyzer.analyze_short_trend()

print(f"最終予測: {result['final_prediction']}")
print(f"リスクレベル: {result['risk_level']}")
```

### B. マルチタイムフレーム分析 (トップダウン)

```python
# 日足と1時間足の整合性を確認
signal, prediction, d_trend, h_trend, h_rsi = analyzer.analyze_top_down()

print(f"判定: {signal}")
print(f"短期/長期判定: {prediction}")
```


### C. 中期トレンド分析 (根雪・表層雪崩理論)

週足と日足を用いて、高ボラティリティ市場における「戦略的買い場」を探ります。

```python
from metal_analyzer.models.middle_trend_predictor import analyze_middle_trend

# 週足と日足データを準備
weekly_df = yf.download("GC=F", period="2y", interval="1wk")
daily_df = yf.download("GC=F", period="1y", interval="1d")

# 分析実行
mid_res = analyze_middle_trend(weekly_df, daily_df)

print(f"週足構造: {mid_res['dashboard_1_weekly']}") # 根雪判定
print(f"ボラティリティ: {mid_res['dashboard_3_volatility']}") # Warsh Mode判定
print(f"戦略: {mid_res['dashboard_4_strategy']}") # Deep Dip判定
```

### D. 長期トレンド・ポートフォリオ分析

マクロ経済指標やレシオ分析を用いて、長期的な資産保全とポートフォリオ配分を提案します。

```python
from metal_analyzer.models.long_trend_predictor import analyze_long_trend

# 各種アセットの月足データを取得
gold = yf.download("GC=F", period="10y", interval="1mo")
silver = yf.download("SI=F", period="10y", interval="1mo")
platinum = yf.download("PL=F", period="10y", interval="1mo")
dxy = yf.download("DX-Y.NYB", period="10y", interval="1mo") # ドルインデックス
tips = yf.download("TIP", period="10y", interval="1mo") # 実質金利近似

long_res = analyze_long_trend(gold, silver, platinum, dxy, tips)

print(f"マクロ環境: {long_res['dashboard_3_macro']}")
print(f"推奨ポートフォリオ: {long_res['dashboard_4_portfolio']}")
```

### E. チャート生成 (EMA & ボリンジャーバンド付き)


```python
# 1時間足のチャートを保存
analyzer.plot_candlestick("1h", filename="chart_1h.png")
```

## プロジェクト構成

パス | ファイル | 説明
--|--|--
`core/` | [`analyzer.py`](metal_analyzer/core/analyzer.py) | メインクラス。全時間足の統合管理。
`models/` | [`short_trend_predictor.py`](metal_analyzer/models/short_trend_predictor.py) | 短期トレンド分析エンジン。
`models/` | [`middle_trend_predictor.py`](metal_analyzer/models/middle_trend_predictor.py) | 中期トレンド分析（根雪/表層雪崩/ボラティリティ）。
`models/` | [`long_trend_predictor.py`](metal_analyzer/models/long_trend_predictor.py) | 長期トレンド・マクロ分析・ポートフォリオ推奨。
`models/` | [`top_down.py`](metal_analyzer/models/top_down.py) | 日足と1時間足の整合性を判定。
`models/` | [`signal_entry.py`](metal_analyzer/models/signal_entry.py) | 定量的シグナル判定。
`patterns/` | [`double_top.py`](metal_analyzer/patterns/double_top.py) | ダブルトップ検知。
`indicators/` | `sma.py`, `rsi.py`, `bollinger_bands.py` | 各種インジケーター計算。

## ライセンス

MIT

## 使い方：3つのメイン・デモ

当ライブラリの全機能を体験するための3つのデモスクリプトが `examples/` フォルダに用意されています。

### 1. 総合分析デモ (`examples/demo.py`)
最新の市場データを用いて、全時間足のチャート生成と高度トレンド予測を一度に実行します。

#### 実行結果（標準出力）
```text
=== Metal Analyzer 総合分析デモ ===
[1] データ取得およびチャート生成中...
[2] 高度なトレンド分析
==================================================
 ■短期トレンド分析
==================================================
長期トレンド： トレンド転換点/混在
EMA乖離： 上昇の勢い強い
加速/ボラ： 安定
センチメント： レンジ内
--------------------------------------------------
ダブルトップ： 検知なし
ダブルボトム： 検知なし
--------------------
最終予測: 底堅い/反発
リスク: 低
コメント: 買い圧力が優勢です。押し目買いやレンジ下限での反発の好機となる可能性があります。
==================================================

[3] 短期~長期トレンド分析
長期トレンド： 上昇 (Uptrend)
短期トレンド： 短期上昇
短期RSI： 85.28
判定： 買い検討 (Wait for Dip)
予測： トレンドは強いが短期的に過熱感あり。少し調整が入ったところを狙いたい。

=== 全工程が完了しました ===
チャート出力先: examples\outputs\candles
```

#### 出力チャート（6時間足）
<details>
<summary>クリックして全時間足チャート（6枚）を表示</summary>

- **月足 (Monthly)**
  ![Monthly](examples/outputs/candles/chart_monthly.png)
- **週足 (Weekly)**
  ![Weekly](examples/outputs/candles/chart_weekly.png)
- **日足 (Daily)**
  ![Daily](examples/outputs/candles/chart_daily.png)
- **4時間足 (4H)**
  ![4H](examples/outputs/candles/chart_4h.png)
- **1時間足 (1H)**
  ![1H](examples/outputs/candles/chart_1h.png)
- **15分足 (15M)**
  ![15M](examples/outputs/candles/chart_15m.png)

</details>

---

### 2. 暴落加速シミュレーション (`examples/demo-20260130.py`)
歴史的な暴落局面（2026年1月30日）を再現し、ダブルトップのネックライン割れと下落加速シグナルを検知します。

#### 実行結果（標準出力）
```text
==================================================
 ■短期トレンド分析
==================================================
長期トレンド： トレンド転換点/混在
EMA乖離： 下落の勢い強い
加速/ボラ： ブレイクアウト/加速中
センチメント： 重要ライン割れ (暴落確定)
--------------------------------------------------
ダブルトップ： 検知あり
詳細： ダブルトップを検知しました！ ピーク: 2419.10, 2431.20. ネックライン 2412.80 を下回ったため、売りシグナルです。
ダブルボトム： 検知なし
--------------------
最終予測: ⚠️ 大暴落加速 (Great Crash Acceleration)
リスク: 極めて高い
コメント: 長期下降トレンド、重要ライン割れ、ボラティリティ拡大が全て揃いました。トレンドの底が見えません。
==================================================
```

#### 出力チャート（6時間足）
<details>
<summary>クリックして全時間足チャート（6枚）を表示</summary>

- **月足 (Monthly)**
  ![Monthly](examples/outputs/candles/20260130_chart_monthly.png)
- **週足 (Weekly)**
  ![Weekly](examples/outputs/candles/20260130_chart_weekly.png)
- **日足 (Daily)**
  ![Daily](examples/outputs/candles/20260130_chart_daily.png)
- **4時間足 (4H)**
  ![4H](examples/outputs/candles/20260130_chart_4h.png)
- **1時間足 (1H)**
  ![1H](examples/outputs/candles/20260130_chart_1h.png)
- **15分足 (15M)**
  ![15M](examples/outputs/candles/20260130_chart_15m.png)

</details>

---

### 3. 上昇トレンド転換シミュレーション (`examples/demo-20251230.py`)
レンジ相場から上昇に転じる局面（2025年12月30日）を再現し、底堅さの判定を検証します。

#### 実行結果（標準出力）
```text
==================================================
 ■短期トレンド分析
==================================================
長期トレンド： トレンド転換点/混在
EMA乖離： 穏やか
加速/ボラ： 安定
センチメント： レンジ内
--------------------------------------------------
ダブルトップ： 検知なし
ダブルボトム： 検知なし
--------------------
最終予測: 底堅い/反発
リスク: 低
コメント: 買い圧力が優勢です。押し目買いやレンジ下限での反発の好機となる可能性があります。
==================================================
```

#### 出力チャート（6時間足）
<details>
<summary>クリックして全時間足チャート（6枚）を表示</summary>

- **月足 (Monthly)**
  ![Monthly](examples/outputs/candles/20251230_chart_monthly.png)
- **週足 (Weekly)**
  ![Weekly](examples/outputs/candles/20251230_chart_weekly.png)
- **日足 (Daily)**
  ![Daily](examples/outputs/candles/20251230_chart_daily.png)
- **4時間足 (4H)**
  ![4H](examples/outputs/candles/20251230_chart_4h.png)
- **1時間足 (1H)**
  ![1H](examples/outputs/candles/20251230_chart_1h.png)
- **15分足 (15M)**
  ![15M](examples/outputs/candles/20251230_chart_15m.png)

</details>

---

## プロジェクト構成

各ファイルの詳細な役割を以下に示します。

| フォルダ | ファイル | 説明 |
| :--- | :--- | :--- |
| `core/` | [`analyzer.py`](metal_analyzer/core/analyzer.py) | メインクラス `MetalAnalyzer` 。データの管理、分析の実行、プロットの指示を統括。 |
| `indicators/` | [`sma.py`](metal_analyzer/indicators/sma.py) | 移動平均線（SMA, EMA）の計算アルゴリズム。 |
| | [`bollinger_bands.py`](metal_analyzer/indicators/bollinger_bands.py) | ボリンジャーバンドの計算アルゴリズム。 |
| | [`rsi.py`](metal_analyzer/indicators/rsi.py) | 相対力指数（RSI）の計算アルゴリズム。 |
| `patterns/` | [`double_top.py`](metal_analyzer/patterns/double_top.py) | SciPyを用いたダブルトップ（Mトップ）検知ロジック。 |
| | [`double_bottom.py`](metal_analyzer/patterns/double_bottom.py) | ダブルボトム（Wボトム）検知ロジック。 |
| `models/` | [`short_trend_predictor.py`](metal_analyzer/models/short_trend_predictor.py) | 短期トレンド分析エンジン（RSIダイバージェンス、200EMAサポート判定を含む）。 |
| | [`top_down.py`](metal_analyzer/models/top_down.py) | マルチタイムフレーム分析ロジック。 |
| `models/` | [`top_down.py`](metal_analyzer/models/top_down.py) | マルチタイムフレーム分析ロジック。 |
| `examples/` | [`demo.py`](examples/demo.py) | 総合分析デモスクリプト。 |
| | [`demo-20260130.py`](examples/demo-20260130.py) | 暴落局面シミュレーション。 |
| | [`demo-20251230.py`](examples/demo-20251230.py) | トレンド転換シミュレーション。 |

