42 lines
1.9 KiB
Markdown
42 lines
1.9 KiB
Markdown
# cryptoChart.ts
|
||
|
||
**路径**:`src/api/cryptoChart.ts`
|
||
|
||
## 功能用途
|
||
|
||
加密货币价格走势图 API,使用 **Binance REST + WebSocket** 实现细粒度(1 分钟)实时走势。当事件类型为加密货币时,详情页可切换显示 YES/NO 分时走势图与加密货币实时价格走势图。
|
||
|
||
## 核心能力
|
||
|
||
- `isCryptoEvent`:判断事件是否为加密货币类型(通过 tags/series slug、ticker)
|
||
- `inferCryptoSymbol`:从事件信息推断币种符号(btc、eth 等)
|
||
- `fetchCryptoChart`:从 Binance 获取 1 分钟 K 线历史(优先),不支持时回退 CoinGecko
|
||
- `subscribeCryptoRealtime`:订阅 Binance **归集交易**(aggTrade)WebSocket,实时推送每笔成交,比 K 线(约 1s)更细;内部 80ms 节流 + RAF 批处理,避免频繁 setOption 卡顿;支持 PING/PONG 保活
|
||
|
||
## 币种映射
|
||
|
||
`COINGECKO_COIN_IDS` 支持:btc、eth、sol、bnb、xrp、doge、ada、avax、matic、dot、link、uni、atom、ltc、near、apt、arb、op、inj、sui、pepe、wif、shib 等。
|
||
|
||
## 使用方式
|
||
|
||
```typescript
|
||
import { isCryptoEvent, inferCryptoSymbol, fetchCryptoChart } from '@/api/cryptoChart'
|
||
|
||
if (isCryptoEvent(eventDetail)) {
|
||
const symbol = inferCryptoSymbol(eventDetail) ?? 'btc'
|
||
const res = await fetchCryptoChart({ symbol, range: '1D' })
|
||
const points = res.data ?? []
|
||
}
|
||
```
|
||
|
||
## 30 秒走势(仅加密货币)
|
||
|
||
- 30S 选项仅在加密货币走势图显示,YES/NO 分时与 EventMarkets 不包含
|
||
- 30S 数据:拉取 1H(60 分钟)走势,过滤保留最近 30 秒内的点展示
|
||
|
||
## 扩展方式
|
||
|
||
- 新增币种:在 `COINGECKO_COIN_IDS` 中追加映射
|
||
- 更换数据源:修改 `fetchCryptoChart` 内部实现,或通过后端代理 CoinGecko 以规避 CORS
|
||
- 实时流参考:[Binance WebSocket 归集交易](https://developers.binance.com/docs/zh-CN/binance-spot-api-docs/web-socket-streams#归集交易)
|