Appearance
行情数据
获取历史行情
get_price-获取指定日期范围内的历史行情
python
get_price(security,
start_date=None,
end_date=None,
frequency='daily',
fields=None,
skip_paused=False,
fq='pre',
fq_ref_date=None,
count=0,
fill_suspend=True,
df=False)获取指定日期范围内的历史行情,支持股票、指数、债券、场内基金、期货。可一次查询多个标的、多个字段。
参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| security | str / list[str] | 是 | 标的代码或标的列表,如 'sz000001' / ['sz000001','sh600000'] |
| start_date | datetime.date / datetime.datetime / str / int | 否 | 开始时间。支持:date/datetime、字符串 'YYYY-MM-DD'/'YYYY-MM-DD HH:MM:SS'、时间戳(秒/毫秒)。与 count 互斥 |
| end_date | datetime.date / datetime.datetime / str / int | 否 | 截止时间。规则同 start_date;不传时默认回测当前时间 |
| frequency | str | 否 | 频率:'daily'(等同'1d')、'minute'(等同'1m')、'5m'、'2d'、'3w'、'1M'、'1q'、'1y' 等 |
| fields | list[str] / None | 否 | 字段列表。常用:['time','open','close','high','low','volume','money','pre_close','status'] |
| skip_paused | bool | 否 | 是否跳过非交易日(停牌/未上市/退市后)。默认 False |
| fq | str / None | 否 | 复权方式:'pre' 前复权;'none'/None 不复权;'post' 后复权 |
| fq_ref_date | datetime.date / datetime.datetime / str / int / None | 否 | 复权基准日期,影响复权结果(见“注意事项-复权”) |
| count | int | 否 | 取 end_date 之前最近 count 根K线;与 start_date 互斥 |
| fill_suspend | bool | 否 | 停牌日价格填充方式。True 用昨收填充;False 用 NaN 填充(停牌区间更明显) |
| df | bool | 否 | 返回格式:默认为False,False 返回 numpy 结构化数组;True 返回 DataFrame |
返回
⚡ 重要:如需返回 DataFrame,必须显式设置 df=True
| 参数设置 | 返回类型 | 说明 |
|---|---|---|
| df=False(默认) | numpy.ndarray | 结构化数组,time 为秒级时间戳(10位),其他字段为 float/int |
| df=True | pandas.DataFrame | 单标的:列通常为 time + fields;多标的:返回”长表”结构(包含 security 列) |
时间字段差异
- df=True 时,time 列为 datetime(如 2024-06-04 14:58:00)
- df=False 时,time 为 秒级 Unix 时间戳(如 1717484160)
⚠️ 重要限制
start_date与count互斥,同时传入会抛异常:get_price 不能同时指定 start_date 和 count 两个参数
举例
python
# 1) df=True:DataFrame,time 为 datetime
df = get_price('sh600000',
end_date='2024-06-04 11:00:00',
frequency='1m',
fields=['time','close'],
count=5,
df=True)
log.info(df.tail(3))
# 输出示例:
# time close
# 2 2024-06-04 14:58:00 9.69
# 3 2024-06-04 14:59:00 9.69
# 4 2024-06-04 15:00:00 9.69
# 2) df=False:numpy 结构化数组,time 为秒级时间戳
arr = get_price('sh600000',
end_date='2024-06-04 11:00:00',
frequency='1m',
fields=['time','close'],
count=5,
df=False)
log.info(arr[:3])
# 输出示例:
# [(1717484160, 7.6 ) (1717484220, 7.59) (1717484280, 7.58)]
# 3) 分钟频率:取上一根分钟线收盘价作为最新价(count=1取最近1根,即上一分钟收盘)
df = get_price('sh600000',
end_date='2024-06-04 10:30:00',
frequency='1m',
fields=['time','close'],
count=1,
df=True)
last_close = df['close'].iloc[-1]
log.info(f"上一分钟收盘价: {last_close}")
# 输出示例:
# 上一分钟收盘价: 9.69获取历史数据
history-从当前时间开始获取历史数据
python
history(count,
frequency='daily',
field='close',
security=None,
df=True,
skip_paused=False,
fq='pre')从“当前回测时刻/当前运行时刻”向前取 count 根K线数据。支持多标的,但只能取单字段。
参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| count | int | 是 | 取最近 count 根K线 |
| frequency | str | 否 | 频率:'daily'/'1d'、'minute'/'1m'、'5m'、'2d' 等 |
| field | str | 否 | 单字段:'open'/'close'/'high'/'low'/'volume'/'money' |
| security | list[str] / None | 否 | 标的列表;None 表示使用 context.universe |
| df | bool | 否 | 默认为 True;True 返回 DataFrame;False 返回单标的 ndarray / 多标的 dict |
| skip_paused | bool | 否 | 是否跳过非交易日;默认 False |
| fq | str | 否 | 复权方式:'pre'/'none'/'post' |
返回
- 默认 df=True:pandas.DataFrame
- 行索引为时间(回测中通常为时间戳或可转为 datetime 的时间)
- 列为标的代码
- 设置 df=False:
- 单标的:numpy.ndarray
- 多标的:dict[str, list](key=标的,value=序列)
注意事项
- 注意事项-面向回测时刻
- history 的“当前时间”来自策略运行时刻(如 run_daily(time='open') 的触发点),避免在日频策略里误以为是“当天收盘后”
- 注意事项-与 get_price 的关系
- history 更偏“取最近N根”,get_price 更偏“按时间区间/截止时间取数”
举例
python
# 多标的,取最近10天收盘价,返回 DataFrame
df = history(count=10,
frequency='1d',
field='close',
security=['sz000001','sh600000'],
df=True,
skip_paused=False,
fq='pre')
log.info(df.tail(3))
# 输出示例(形状示意):
# sz000001 sh600000
# 1734332400000 11.208 9.64
# 1734418800000 11.168 9.53
# 1734485100000 11.218 9.56获取当前数据
get_current_data-获取当前单位时间的行情状态
python
get_current_data()获取当前单位时间(回测中为当前 bar 的时间点;实盘为当前时刻)下的行情快照:涨跌停价、是否停牌、当日开盘价等。返回一个 dict。
返回
- dict[str, Bar]
- key:标的代码
- value:Bar 对象(包含 last_price、high_limit、low_limit、paused、pre_close、day_open 等字段,具体以 Bar 对象定义为准)
⚠️ 重要说明
get_current_data() 返回的是一个懒加载对象,必须通过 [股票代码] 的方式访问才会真正取数。
错误写法
python
# 错误:直接判断是否在 get_current_data() 中
code = 'sh600000'
if code not in get_current_data(): # 始终为 False,不会触发取数
pass
# 错误:先赋值再判断 key 是否存在
data = get_current_data()
if code not in data: # 不会触发取数,判断无意义
pass正确写法
python
# 正确:通过 [股票代码] 直接访问
bar = get_current_data()['sh600000']
log.info(bar.last_price)
# 批量获取多只股票的行情
data = get_current_data()
for code in ['sh600000', 'sz000001']:
bar = data[code] # 通过 [] 访问才会触发取数
log.info(f"{code}: {bar.last_price}")举例
python
data = get_current_data()
log.info(data['sh600000'].last_price)
# 输出示例:
# 9.69获取当前单位时间的tick数据
get_current_tick-获取当前单位时间的tick数据
python
get_current_tick(security,
date=None,
df=False)获取指定时刻(或回测当前时刻)最近的一条tick数据,支持股票、指数、债券、场内基金、期货。
参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| security | str / list[str] | 是 | 标的代码或标的列表,如 'sz000001' / ['sz000001','sh600000'] |
| date | datetime / None | 否 | 指定时刻;返回离该时刻最近的一条tick。None表示回测当前时刻 |
| df | bool | 否 | 默认为 False;False 返回 Tick 对象;True 返回 DataFrame |
返回
⚡ 注意:如需返回 DataFrame,必须显式设置 df=True
- 默认 df=False:
- security 为单标的:返回 Tick 对象
- security 为多标的(list):返回 dict(key 为标的代码,value 为 Tick 对象)
- 设置 df=True:
- security 为单标的:返回 pandas.DataFrame(通常为1行)
- security 为多标的(list):返回 dict(key 为标的代码,value 为 DataFrame)
- 当天截至指定时刻未产生tick时返回None
举例
python
from datetime import datetime
log.info(get_current_tick('sh600000', date=datetime(2025,2,20,10,0,0)))
# 输出示例:
# {'sh600000': Tick(2025-02-20 09:59:58, sh600000, 10.359999656677246, 10.420000076293945,
# 10.479999542236328, 10.34000015258789, 8381100.0, 87157104.0)}获取标的实时及历史tick数据
get_ticks-获取标的实时及历史tick数据
python
get_ticks(security,
start_date=None,
end_date=None,
count=None,
fields=['time','current','high','low','volume','money'],
df=False)获取标的实时及历史tick数据,支持股票、指数、债券、场内基金、期货。可按时间区间或按count取最近若干条。
⚠️ 使用本函数前需要先下载快照数据,否则可能无法获取数据。
参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| security | str / list[str] | 是 | 标的代码或标的列表 |
| start_date | datetime.date / datetime.datetime / str / int | 否 | 开始时间。支持date/datetime、字符串'YYYY-MM-DD'/'YYYY-MM-DD HH:MM:SS'、时间戳(秒/毫秒)。与count互斥 |
| end_date | datetime.date / datetime.datetime / str / int | 否 | 截止时间。规则同start_date;不传时默认回测当前时间 |
| count | int | 否 | 取end_date之前最近count条tick;与start_date互斥 |
| fields | list[str] | 否 | 字段列表。默认仅['time','current','high','low','volume','money'];如需盘口字段(a1_v~a5_v、b1_p~b5_p等)需自行添加 |
| df | bool | 否 | 默认为 False;False 返回 numpy 结构;True 返回 pandas.DataFrame |
返回
⚡ 注意:如需返回 DataFrame,必须显式设置 df=True
- 默认 df=False:numpy.ndarray(结构化tick数据)
- 设置 df=True:pandas.DataFrame
举例
python
d = get_ticks('sh600000',
start_date='2025-02-01',
end_date='2025-02-27',
fields=['time','current','high','low','volume','money'],
df=True)
log.info(d)
# 输出示例(节选):
# time current high low volume money
# sh600000 0 1738718102000 0.00 0.00 0.00 0.0 0.0
# ...
# 77016 1740553199000 10.21 10.32 10.12 54717504.0 559261632.0
# [77017 rows x 6 columns]获取每天集合竞价数据
get_call_auction-获取每天集合竞价数据
python
get_call_auction(security,
start_date=None,
end_date=None,
fields=None)获取指定时间区间内交易日集合竞价(09:25)数据,支持股票、场内基金、指数和上交所ETF期权。
⚠️ 使用本函数前需要先下载快照数据,否则可能无法获取数据。
参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| security | str / list[str] | 是 | 标的代码或标的列表 |
| start_date | datetime.date / datetime.datetime / str / int | 否 | 开始时间;截取到日期;默认回测当前时间 |
| end_date | datetime.date / datetime.datetime / str / int | 否 | 截止时间;截取到日期;默认回测当前时间 |
| fields | list[str] / None | 否 | 字段列表(类似tick字段)。不传则返回默认字段 |
字段说明
| 字段名 | 说明 | 类型 |
|---|---|---|
| time | 时间 | datetime |
| current | 当前价 | float |
| volume | 累计成交量(股) | float |
| money | 累计成交额(元) | float |
| b1_v~b5_v | 五档买量(股) | float |
| b1_p~b5_p | 五档买价 | float |
| a1_v~a5_v | 五档卖量(股) | float |
| a1_p~a5_p | 五档卖价 | float |
返回
- pandas.DataFrame
举例
python
d = get_call_auction(['sz000001', 'sz000002'],
start_date='2019-01-01',
end_date='2019-10-10',
fields=['time', 'current', 'a1_v', 'b1_v'])
log.info(d)
# 输出示例(节选):
# security time current a1_v b1_v
# 0 sz000001 2019-01-02 09:25:03 9.3900 13400.0 183300.0
# ...