🇨🇳 简体中文
🇺🇸 English
🇯🇵 日本語
Skip to the content.

股票数据模型

概述

股票数据模型用于存储和管理股票交易相关的数据,包括价格、成交量、时间戳等信息。系统支持多周期数据存储(1m/5m/1h/1d)和股票日历管理。

数据模型

StockData (股票数据)

字段名 类型 描述 示例 约束
code string 股票代码 “YINN.US” 必填,唯一标识,包含市场后缀
open float 开盘价 12.34 必填,≥0,保留2位小数
high float 最高价 13.45 必填,≥0,保留2位小数
low float 最低价 11.23 必填,≥0,保留2位小数
close float 收盘价 12.78 必填,≥0,保留2位小数
volume int 成交量 1000000 必填,≥0
turnover float 成交额 12780000.00 必填,≥0,保留2位小数
timestamp int 时间戳 1704067200 必填,UNIX时间戳
trade_session enum 交易时段 “Intraday” 必填,见交易时段枚举

TradeSession (交易时段枚举)

描述
Intraday 盘中交易
Pre 盘前交易
Post 盘后交易
Overnight 夜盘交易

Period (时间周期枚举)

描述 存储方式
1m 1分钟 预存储
5m 5分钟 预存储
1h 1小时 预存储(默认周期)
1d 日线 预存储

运行时聚合周期(从 1m 数据计算):2m, 3m, 10m, 15m, 30m, 2h, 3h, 4h, 1w, 1M, 1Q, 1Y

StockCalendarEntry (股票日历条目)

记录某股票某天的市场状态和各周期数据状态。

字段名 类型 描述 默认值
symbol string 股票代码 必填
date date 日期 必填
market_status MarketStatus 市场状态 必填
data_status_1m DataStatus 1分钟数据状态 not_fetched
data_status_5m DataStatus 5分钟数据状态 not_fetched
data_status_1h DataStatus 1小时数据状态 not_fetched
data_status_1d DataStatus 日线数据状态 not_fetched
bars_1m int 1分钟 bar 数量 0
bars_5m int 5分钟 bar 数量 0
bars_1h int 1小时 bar 数量 0
bars_1d int 日线 bar 数量 0
created_at datetime 创建时间 当前时间
updated_at datetime 更新时间 当前时间

MarketStatus (市场状态枚举)

描述
full_day 全天交易
half_day 半日交易(如感恩节后一天)
closed 休市

DataStatus (数据状态枚举)

描述
complete 数据完整
fetching 拉取中
not_fetched 未拉取
partial 部分拉取
n/a 不适用(休市日)

数据存储

Redis存储结构(多周期)

# 股票数据(多周期格式)
stock_data:{period}:{symbol}:{timestamp}    # 股票数据详情 (Hash)
stock_data:time_index:{period}:{symbol}     # 时间索引 (ZSET)
stock_codes                                  # 股票代码集合 (Set)

# 股票日历
stock_calendar:{symbol}:{date}              # 日历条目 (Hash)
stock_calendar:missing:{period}:{symbol}    # 缺失日期索引 (Set)

# 旧格式(向后兼容)
stock_data:{symbol}:{timestamp}             # 旧格式数据键
stock_data:time_index:{symbol}              # 旧格式时间索引

存储格式说明

  1. 多周期数据键格式: stock_data:{period}:{symbol}:{timestamp}
    • period: 数据周期(1m/5m/1h/1d)
    • symbol: 股票代码(如:YINN.US)
    • timestamp: UNIX 时间戳
  2. 向后兼容: 默认周期 1h 同时支持旧格式键 stock_data:{symbol}:{timestamp}

  3. 数据存储类型: Redis Hash
    • 使用 hset 存储字段-值对
    • 支持字段级别的访问和更新
  4. 时间索引: Redis ZSET
    • 使用 UNIX 时间戳作为 score
    • 支持时间范围查询
  5. 日历条目: Redis Hash
    • 记录市场状态和各周期数据状态
    • 支持按日期快速查询
  6. 缺失索引: Redis Set
    • 按周期记录缺失数据的日期
    • 支持快速查询需要补全的日期

存储示例

多周期数据键: stock_data:1h:YINN.US:1726459200

Hash字段:

symbol: "YINN.US"
open: "12.34"
high: "13.45"
low: "11.23"
close: "12.78"
volume: "1000000"
turnover: "12780000.00"
timestamp: "1726459200"
trade_session: "Intraday"

时间索引: stock_data:time_index:1h:YINN.US

日历条目: stock_calendar:YINN.US:2025-09-16

Hash字段:

symbol: "YINN.US"
date: "2025-09-16"
market_status: "full_day"
data_status_1m: "complete"
data_status_5m: "complete"
data_status_1h: "complete"
data_status_1d: "complete"
bars_1m: "390"
bars_5m: "78"
bars_1h: "7"
bars_1d: "1"
created_at: "2025-09-16T00:00:00"
updated_at: "2025-09-16T16:00:00"

缺失索引: stock_calendar:missing:1h:YINN.US

API接口

股票数据接口

创建股票数据

获取股票数据列表

获取单条股票数据

获取股票代码列表

删除股票数据

数据导入接口

导入股票数据

获取导入任务状态

取消导入任务

股票日历接口

初始化日历

获取日历

获取缺失日期

验证数据完整性

WebSocket 实时日志

导入任务日志

数据同步日志

时区处理

支持的时区

时区转换规则

  1. 前端时间格式: 使用ISO 8601格式带时区信息(如:2025-09-16T00:00:00-04:00)
  2. 后端存储: 统一转换为美东时间存储
  3. 查询转换: 根据用户选择的时区进行时间范围转换
  4. 数据导入: 支持按用户选择的时区进行数据获取和存储

时间格式示例

数据验证

价格字段验证

时间戳验证

交易时段验证

性能优化

索引策略

数据持久化

数据清理

手动清理

日历数据同步