# 第8号の計算と制約

調査・取得：2026-11-06 UTC。提供元はBitstamp公式BTC/USD OHLC API。対象はUTC日付2013-01-01〜2026-11-05。
Unix timestampは日足区間開始。closeはそのUTC日足の終値（翌日00:00 UTC、日本時間09:00境界）。
別取引所の瞬間価格、high/low、JPYを混ぜない。3日分は24時間足の最終closeとも照合。

## 保存データと採否

- 元応答6個をraw/に保存。各URL・取得日時・ハッシュはsources.json。
- APIは短い最終区間でもlimit=1000を返した。943重複行は全フィールド完全一致を確認して重複排除し、宣言した期間へ絞った。
- CSVは5,057暦日、欠損・重複なし。出来高ゼロ2015-01-06/07/08の返却closeは実取引価格として使わない。
- これら3行を除外した5,054日を極値・回復判定へ使い、長期グラフは当該3日をnull/NaNとして途切れさせる。前後値で補間しない。
- 価格CSVは保存された応答と全行全フィールド照合する。価格の後日訂正はあり得るため、再取得は別ディレクトリへ。
- 単一市場の履歴は全市場を代表しない。取引停止中の市場全体の極値は判定しない。

## 期間と抽出

期間は2013-01-01〜2015-12-31、2017-01-01〜2018-12-31、2020-01-01〜2020-03-31、
2021-01-01〜2022-12-31、2024-01-01〜2026-11-05。
各期間内でrunning maximum closeを使い、close/running maximum−1が最小になるピークと底を取る。
先にピーク、後に底という順序を守る。高値同値は最初の日、下落率同値も最初の底。
底の後で、そのピークのclose以上に初めて戻った有効日を回復日とする。
回復探索は各抽出期間の末日を越え、データ最終日まで継続する。
日数はUTC日付の暦日差（経過日数）。ピーク→底、ピーク→回復、底→回復を別列にする。
未回復はnull、経過日数はunrecovered_days。回復まで0日とは扱わない。

これは対象5期間内の比較であり、全暴落の完全な順位ではない。
2020年局面は局所高値基準で、2017年高値基準とは異なる。区間は統計的に独立な5標本ではない。
回復した局面だけを用いた将来回復時期の予測・保証はしない。

## 算数・独立監査

本体はDecimalによる走査。監査は別実装の整数セントとFractionで、各底候補の過去全終値を探索し極値を再計算。
全日付・終値・下落率・期間・初回回復・未回復・100万円モデルを照合。
ピーク/底/回復/最終日の15点はlimit=1で独立再取得。3点は時間足24本の最終終値も確認。
監査済み応答はraw/point-*、取得記録はpoint-checks.json。
100万円モデルは為替固定、税金・手数料・スプレッドなし。1,000,000×底close/ピークclose、表示1円四捨五入（half-up）。
円建て実投資実績ではない。必要上昇率は(ピークclose/底close−1)×100で、将来予測ではない。

## グラフ

chart-data.jsonはCSVと計算結果から自動生成。long_priceは日付・close、除外日はnull。
図は長期価格（USD対数軸）、5期間下落率（%）、回復暦日数、100万円モデル（万円）、半減期時系列（年）の5種。
未回復バーは観測打切り・斜線で示す。graph-audit.jsonでグラフ入力とSVG/PNGのハッシュを検証する。
半減期日はBitcoin.orgの実績4件（2012/2016/2020/2024）。時系列の一致を因果の証明としない。

## 再現

```sh
python scripts/analyze_bitcoin_crashes.py --check
python scripts/audit_bitcoin_crashes.py
python -m unittest discover -s tests -v
```

表・結果・配布コード生成：`python scripts/analyze_bitcoin_crashes.py`
図再生成（matplotlib必要）：`MPLCONFIGDIR=/tmp/topic-base-mpl python scripts/analyze_bitcoin_crashes.py --plots`
新しい保存先への再取得：`python scripts/fetch_bitcoin_crashes.py --output /tmp/topic-base-new-prices`
新旧データに差があれば採用前に再監査。テストはネットワーク不要。外部資料は別途GET検証。
