Metadata-Version: 2.4
Name: metal-analyzer
Version: 0.0.4
Summary: A tool for analyzing prices with technical indicators and top-down analysis.
Author-email: Nishizumi <daiman003@yahoo.co.jp>
License: MIT License
        
        Copyright (c) 2026 Nishizumi
        
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:
        
        The above copyright notice and this permission notice shall be included in all
        copies or substantial portions of the Software.
        
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
        SOFTWARE.
        
Project-URL: Homepage, https://github.com/nishizumi-lab/metal-analyzer
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.7
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: pandas
Requires-Dist: matplotlib
Requires-Dist: numpy
Requires-Dist: scipy
Requires-Dist: mplfinance
Dynamic: license-file

# Metal Analyzer

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

## 特徴

特徴|説明
--|--
独自のチャート分析ロジック|4つの主要次元（基調トレンド、モメンタム、ボラティリティ、パターン）を 0-10 のスコアで定量的に評価。
マルチタイムフレーム対応|月・週・日・4時・1時・15分足の計6種類の時間足を作成。EMA 20/50/200とボリンジャーバンドを描画し、トレンドを可視化。
独自の中期理論のモデル化|ボラティリティ環境に応じた「雪崩」理論等を実装。高ボラティリティ時の押し目買いや警戒シグナルを定量提示。
長期トレンド・ポートフォリオ|マクロ経済指標（実質金利、通貨価値）と相対価値（金銀レシオ等）に基づき、長期的な推奨配分を算出。


## インストール

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

## クイックスタート


 [`demo.py`](examples/demo.py) 
 
```python
"""yfinanceライブラリを用いて最新のゴールド価格データを取得し、
主要時間足のチャート生成と、刷新された定量トレンド予測を実行します。
"""

import yfinance as yf
import os
import pandas as pd
from metal_analyzer import MetalAnalyzer

def run_multi_timeframe_demo():
    """最新データに基づいた全時間足チャートと定量分析デモを実行する。"""
    print("=== Metal Analyzer 総合分析デモ ===")
    
    ticker = "GC=F"
    analyzer = MetalAnalyzer(ticker=ticker)
    output_dir = os.path.join("examples", "outputs", "candles")
    
    # 取得対象の時間足設定 (名前, 取得インターバル, 期間)
    # 4Hスコア算出のために 1h からリサンプリング用に多めに取得
    timeframes = [
        ("Monthly", "1mo", "15y"),
        ("Weekly", "1wk", "5y"),
        ("Daily", "1d", "2y"),
        ("4H", "1h", "3mo"),
        ("1H", "1h", "2mo"),
        ("15M", "15m", "1mo"),
    ]

    print(f"\n[1] データ取得およびチャート生成中...")
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    for name, interval, period in timeframes:
        print(f"--- {name} ({interval}) を処理中 ---")
        data = yf.download(ticker, period=period, interval=interval, progress=False)
        if data.empty: continue
        
        # yfinanceのマルチインデックス対応（単一銘柄の場合の階層削除）
        if isinstance(data.columns, pd.MultiIndex):
            data.columns = data.columns.get_level_values(0)
            
        # 4Hの場合は1Hからリサンプリング
        if name == "4H":
            data = data.resample('4h').agg({
                'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last', 'Volume': 'sum'
            }).dropna()
            
        analyzer.add_timeframe_data(name, data)
        # 主要な時間足のみチャート画像を生成
        if name in ["Daily", "1H", "15M"]:
            analyzer.plot_candlestick(name, filename=os.path.join(output_dir, f"chart_{name.lower()}.png"))

    # [2] 短期トレンド分析 (刷新された総合ダッシュボード)
    analyzer.analyze_short_trend()

    print(f"=== 全工程が完了しました ===")

if __name__ == "__main__":
    run_multi_timeframe_demo()

```

### 結果の出力例
```text
【月足】
上昇： 7
下降： 1
EMA乖離度 : 10
ボラティリティ : 10
エントリーリスク: 1
トレンド：上昇傾向7
Wトップ：検知なし
Wボトム：検知なし
--------------------------------------------------
【週足】
上昇： 5
下降： 0
EMA乖離度 : 10
ボラティリティ : 4
エントリーリスク: 1
トレンド：上昇傾向5
Wトップ：検知なし
Wボトム：検知なし
--------------------------------------------------
【日足】
上昇： 3
下降： 1
EMA乖離度 : 10
ボラティリティ : 3
エントリーリスク: 6
トレンド：上昇傾向3
Wトップ：検知なし
Wボトム：検知なし
--------------------------------------------------
【4時間足】
上昇： 5
下降： 2
EMA乖離度 : 3
ボラティリティ : 7
エントリーリスク: 4
トレンド：上昇傾向5
Wトップ：形成中 (ネックライン: 4805.50)
Wボトム：形成中 (ネックライン: 4868.70)
--------------------------------------------------
【1時間足】
上昇： 5
下降： 2
EMA乖離度 : 0
ボラティリティ : 3
エントリーリスク: 4
トレンド：上昇傾向5
Wトップ：形成中 (ネックライン: 4804.60)
Wボトム：完成 (ネックライン突破: 4828.20) (2026-04-17 20:00)
--------------------------------------------------
【15分足】
上昇： 3
下降： 6
EMA乖離度 : 4
ボラティリティ : 6
エントリーリスク: 4
トレンド：下降傾向6
Wトップ：完成 (ネックライン割れ: 4874.60) (2026-04-17 20:45)
Wボトム：形成中 (ネックライン: 4903.10)
--------------------------------------------------
【総合評価】
上昇: 1
下降: 0
エントリーリスク: 8
トレンド：上昇傾向1

=== 全工程が完了しました ===
```

## プロジェクト構成

パス | ファイル | 説明
--|--|--
`core/` | [`analyzer.py`](metal_analyzer/core/analyzer.py) | メインクラス。全時間足の管理、分析、描画。
`models/` | [`chart_analysis.py`](metal_analyzer/models/chart_analysis.py) | 定量チャート分析エンジン（0-10スコアリング）。
`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) | マルチタイムフレーム環境認識。
`patterns/` | [`double_top.py`](metal_analyzer/patterns/double_top.py) | ダブルトップ検知ロジック。
`patterns/` | [`double_bottom.py`](metal_analyzer/patterns/double_bottom.py) | ダブルボトム検知ロジック。
`indicators/` | `sma.py`, `rsi.py`, `bollinger_bands.py` | 各種インジケーター計算。

## ライセンス

MIT
