Commit 38c0e50
feat(market): add OI time series and multi-timeframe data support
## 問題背景
解決 PR NoFxAiOS#703 Part 1: OI 時間序列數據缺失問題
- AI Prompt 要求檢查「持倉量 OI 近 4 小時變化率 >+3%」
- 系統只提供 Latest/Average 值,無法計算變化率
- 缺少 15m/1h 中期數據,AI 無法分析短期趨勢
## 技術方案
### 1️⃣ OI 時間序列支持 (market/monitor.go, market/types.go)
- **數據結構**: OIData 新增 Change4h, Historical, ActualPeriod
- **歷史緩存**: WSMonitor 新增 oiHistoryMap (sync.Map)
- **定期採樣**: StartOIMonitoring() 每 15 分鐘採集 OI 快照
- **變化率計算**: CalculateOIChange4h() 查找 4 小時前數據點
- 容差 1 小時,冷啟動返回 0%
- 公式: (Latest - OI_4h_ago) / OI_4h_ago × 100
### 2️⃣ 多時間框架數據 (market/data.go, market/monitor.go)
- **15m K線**: MidTermSeries15m (40 個,覆蓋 10 小時)
- **1h K線**: MidTermSeries1h (24 個,覆蓋 1 天)
- **API 支持**:
- APIClient.GetOpenInterest() - 獲取實時 OI
- APIClient.GetOpenInterestHistory() - 獲取歷史 OI(啟動回填)
### 3️⃣ AI 數據格式 (market/data.go)
- Format() 輸出「Change(4h): X.XX%」
- 多時間框架 MACD/RSI/ATR 供 AI 分析
## 實現細節
- **採樣策略**: 每 15 分鐘,保留最近 20 個快照(5 小時)
- **並發安全**: sync.Map 存儲,goroutine 安全
- **向後兼容**: 無需配置更改,漸進式數據積累
- **保留 upstream**: 完整保留 hook 模組功能
## 影響範圍
- ✅ 新增 market/types.go: OIData, MidTermData15m/1h
- ✅ 擴展 market/monitor.go: OI 監控與多時間框架
- ✅ 增強 market/data.go: 整合 OI 變化率與多時間數據
- ✅ 擴展 market/api_client.go: GetOpenInterest(), GetOpenInterestHistory()
## 測試建議
1. 觀察日誌: `✅ 启动 OI 定期监控`
2. 15 分鐘後: `✅ OI快照采集完成`
3. 驗證 AI 輸入包含 `Change(4h): X.XX%`
## 相關 Issue/PR
- 拆分自 PR NoFxAiOS#703 (Part 1/3)
- 基於最新 upstream/dev (3112250)
- 完整保留 hook 模組 (NoFxAiOS#784)
- 依賴: 無
- 後續: Part 2 (數據陳舊性檢測), Part 3 (手續費率傳遞)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <[email protected]>1 parent 3112250 commit 38c0e50
4 files changed
+762
-61
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
158 | 158 | | |
159 | 159 | | |
160 | 160 | | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
0 commit comments