🇨🇳 简体中文
🇺🇸 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. 数据导入: 支持按用户选择的时区进行数据获取和存储

时间格式示例

数据验证

价格字段验证

时间戳验证

交易时段验证

性能优化

索引策略

数据持久化

数据清理

手动清理

日历数据同步