sinastock / README_ORIGINAL.md
Spooker's picture
Upload 16 files
7c3e988 verified

sina-real-time

新浪财经 WebSocket 实时行情采集工具(Rust 实现)

功能

  • 连接 wss://hq.sinajs.cn/wskt 实时推送接口
  • 自动重连(指数退避,最大 30 秒间隔)
  • --chunk-size 拆分为多个并行 WebSocket 连接,支持全量沪深 A 股(5189 只)
  • 数据持久化到本地 CSV,按天轮转(data_YYYY-MM-DD.csv
  • 基于 Tokio 异步运行时,内置缓冲通道解耦采集与存储

实测性能(10 核 / 16 GB / macOS)

股票数 连接数 写入速度
100 1 ~45 条/秒
1000 2 ~440 条/秒
5189 11 ~968 条/秒

股票列表文件

sina-collector/
├── stocks.txt           # 12 只样本(测试用)
├── stocks_100.txt       # 100 只(用 fetch_stocks.py 生成)
├── stocks_1000.txt      # 1000 只
└── stocks_all.txt       # 5189 只全量沪深 A 股(已预生成)

快速开始

cd sina-collector
cargo build --release

# 样本测试(12 只)
./target/release/sina-realtime-collector

# 100 只
./target/release/sina-realtime-collector --stocks stocks_100.txt --output data

# 1000 只
./target/release/sina-realtime-collector --stocks stocks_1000.txt --output data

# 全量沪深 A 股(5189 只,11 个并行连接)
./target/release/sina-realtime-collector --stocks stocks_all.txt --output data

更新股票列表

# 重新从新浪 API 拉取最新股票列表(约 53 次请求,耗时 ~3 秒)
python3 scripts/fetch_stocks.py

# 同时生成 100 只样本
python3 scripts/fetch_stocks.py --sample 100

# 指定输出路径
python3 scripts/fetch_stocks.py -o /path/to/stocks.txt

数据格式

CSV 文件每行:

received_at,code,fields
2026-02-26T14:33:46.037,sh600519,"贵州茅台,昨收,今开,当前,最高,最低,买1,卖1,成交量,成交额,<买5档>,<卖5档>,日期,时间,状态"

fields 列字段顺序: 名称, 昨收, 今开, 当前价, 最高, 最低, 买一价, 卖一价, 成交量(股), 成交额(元), 买5档×(量,价)×5, 卖5档×(量,价)×5, 日期, 时间, 状态

命令行参数

Options:
  -s, --stocks <FILE>        股票列表文件 [default: stocks.txt]
  -o, --output <DIR>         输出目录 [default: data]
      --chunk-size <N>       每个连接的股票数 [default: 500]
      --buffer <N>           通道缓冲容量 [default: 131072]
  -h, --help
  -V, --version

日志级别

RUST_LOG=debug ./target/release/sina-realtime-collector --stocks stocks_all.txt --output data --chunk-size 200  # 详细日志
RUST_LOG=warn  ./target/release/sina-realtime-collector   # 仅告警

后续扩展

storage.rs 中的 mpsc::Receiver<String> 可替换为 broadcast channel, 向下游实时分析模块(Python、数据库写入器等)同时分发数据,无需修改采集层。