価格帯分析・ボリンジャーバンド機能(v1.3) #4

Closed
opened 2026-09-14 15:03:43 +00:00 by joe · 1 comment
Owner

価格変動とボリンジャーバンドで相場を把握する機能。

要件

  • price_history テーブル新設(車両ごとの価格推移)
  • ボリンジャーバンド計算(20日移動平均 ± 2σ)
  • 相場チャート表示(WebUI)
  • 価格上限の動的調整への展開

前提

  • クローラーv2の安定稼働(#3)が前提
  • 車両1レコード化(car_profiles)が前提のため、価格履歴は car_id 単位で記録可能
価格変動とボリンジャーバンドで相場を把握する機能。 ## 要件 - price_history テーブル新設(車両ごとの価格推移) - ボリンジャーバンド計算(20日移動平均 ± 2σ) - 相場チャート表示(WebUI) - 価格上限の動的調整への展開 ## 前提 - クローラーv2の安定稼働(#3)が前提 - 車両1レコード化(car_profiles)が前提のため、価格履歴は car_id 単位で記録可能
Author
Owner

実装完了(2026-09-28)

実装内容

  1. price_history テーブル新設(migrate_price_history.py)
    • car_id × 日次で1レコード(UNIQUE(car_id, recorded_date)、同日初回値固定)
    • 既存車両520件を backfill
    • upsert_cars 内に record_price_history() 追加:
      • 新規INSERT時に初回価格を記録
      • 既存車両の価格変化検出時に新行記録 + 価格変更 履歴追加
    • db_init.py の SCHEMA にも追加(新環境対応)
  2. API 追加(routers/api_price.py)
    • GET /api/price-history/{car_id}: 車両ごとの価格推移
    • GET /api/price-stats: モデル別日次相場 + ボリンジャーバンド(20日MA ± 2σ)
      • データ点が window 未満でも部分窓で計算
      • band_position_pct(%B): 0%=下バンド、100%=上バンド、100超=突破
  3. 相場チャートUI: static/price-history.html
    • モデル・期間を選択し SVGチャート(平均線・20日MA・±2σバンド)
    • 相場判定表示(下位圏=チャンス / 中央圏 / 上位圏 / 突破=要注意)
    • メイン画面に 📈 ボタン追加
  4. テスト: tests/test_price_api.py 6テスト追加(計78テスト全パス)

検証

  • uvicorn再起動済み、/api/price-stats(ノート・30日: 7日分・current 119.6万円・band位置103.9%=突破圏)
  • /static/price-history.html 200

残課題(将来)

  • 価格上限の動的調整(チャートデータをクローラーの棄却判定にフィードバック)
  • 実運用データの蓄積後のチャート確認(needs-verification)
## 実装完了(2026-09-28) ### 実装内容 1. **price_history テーブル新設**(`migrate_price_history.py`) - car_id × 日次で1レコード(UNIQUE(car_id, recorded_date)、同日初回値固定) - 既存車両520件を backfill - upsert_cars 内に `record_price_history()` 追加: - 新規INSERT時に初回価格を記録 - 既存車両の価格変化検出時に新行記録 + `価格変更` 履歴追加 - db_init.py の SCHEMA にも追加(新環境対応) 2. **API 追加**(`routers/api_price.py`) - `GET /api/price-history/{car_id}`: 車両ごとの価格推移 - `GET /api/price-stats`: モデル別日次相場 + **ボリンジャーバンド(20日MA ± 2σ)** - データ点が window 未満でも部分窓で計算 - `band_position_pct`(%B): 0%=下バンド、100%=上バンド、100超=突破 3. **相場チャートUI**: `static/price-history.html` - モデル・期間を選択し SVGチャート(平均線・20日MA・±2σバンド) - 相場判定表示(下位圏=チャンス / 中央圏 / 上位圏 / 突破=要注意) - メイン画面に 📈 ボタン追加 4. **テスト**: `tests/test_price_api.py` 6テスト追加(計78テスト全パス) ### 検証 - uvicorn再起動済み、`/api/price-stats`(ノート・30日: 7日分・current 119.6万円・band位置103.9%=突破圏) - `/static/price-history.html` 200 ### 残課題(将来) - 価格上限の動的調整(チャートデータをクローラーの棄却判定にフィードバック) - 実運用データの蓄積後のチャート確認(needs-verification)
joe 2026-09-28 04:07:41 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
joe/findcar#4
No description provided.