Skip to content

行情数据

获取历史行情

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)

获取指定日期范围内的历史行情,支持股票、指数、债券、场内基金、期货。可一次查询多个标的、多个字段。

参数

参数名类型必填说明
securitystr / list[str]标的代码或标的列表,如 'sz000001' / ['sz000001','sh600000']
start_datedatetime.date / datetime.datetime / str / int开始时间。支持:date/datetime、字符串 'YYYY-MM-DD'/'YYYY-MM-DD HH:MM:SS'、时间戳(秒/毫秒)。与 count 互斥
end_datedatetime.date / datetime.datetime / str / int截止时间。规则同 start_date;不传时默认回测当前时间
frequencystr频率:'daily'(等同'1d')、'minute'(等同'1m')、'5m'、'2d'、'3w'、'1M'、'1q'、'1y' 等
fieldslist[str] / None字段列表。常用:['time','open','close','high','low','volume','money','pre_close','status']
skip_pausedbool是否跳过非交易日(停牌/未上市/退市后)。默认 False
fqstr / None复权方式:'pre' 前复权;'none'/None 不复权;'post' 后复权
fq_ref_datedatetime.date / datetime.datetime / str / int / None复权基准日期,影响复权结果(见“注意事项-复权”)
countint取 end_date 之前最近 count 根K线;与 start_date 互斥
fill_suspendbool停牌日价格填充方式。True 用昨收填充;False 用 NaN 填充(停牌区间更明显)
dfbool返回格式:默认为False,False 返回 numpy 结构化数组;True 返回 DataFrame

返回

重要:如需返回 DataFrame,必须显式设置 df=True

参数设置返回类型说明
df=False(默认)numpy.ndarray结构化数组,time 为秒级时间戳(10位),其他字段为 float/int
df=Truepandas.DataFrame单标的:列通常为 time + fields;多标的:返回”长表”结构(包含 security 列)

时间字段差异

  • df=True 时,time 列为 datetime(如 2024-06-04 14:58:00)
  • df=False 时,time 为 秒级 Unix 时间戳(如 1717484160)

⚠️ 重要限制

  • start_datecount 互斥,同时传入会抛异常: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线数据。支持多标的,但只能取单字段

参数

参数名类型必填说明
countint取最近 count 根K线
frequencystr频率:'daily'/'1d'、'minute'/'1m'、'5m'、'2d' 等
fieldstr单字段:'open'/'close'/'high'/'low'/'volume'/'money'
securitylist[str] / None标的列表;None 表示使用 context.universe
dfbool默认为 True;True 返回 DataFrame;False 返回单标的 ndarray / 多标的 dict
skip_pausedbool是否跳过非交易日;默认 False
fqstr复权方式:'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数据,支持股票、指数、债券、场内基金、期货。

参数

参数名类型必填说明
securitystr / list[str]标的代码或标的列表,如 'sz000001' / ['sz000001','sh600000']
datedatetime / None指定时刻;返回离该时刻最近的一条tick。None表示回测当前时刻
dfbool默认为 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取最近若干条。

⚠️ 使用本函数前需要先下载快照数据,否则可能无法获取数据。

参数

参数名类型必填说明
securitystr / list[str]标的代码或标的列表
start_datedatetime.date / datetime.datetime / str / int开始时间。支持date/datetime、字符串'YYYY-MM-DD'/'YYYY-MM-DD HH:MM:SS'、时间戳(秒/毫秒)。与count互斥
end_datedatetime.date / datetime.datetime / str / int截止时间。规则同start_date;不传时默认回测当前时间
countint取end_date之前最近count条tick;与start_date互斥
fieldslist[str]字段列表。默认仅['time','current','high','low','volume','money'];如需盘口字段(a1_v~a5_v、b1_p~b5_p等)需自行添加
dfbool默认为 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期权。

⚠️ 使用本函数前需要先下载快照数据,否则可能无法获取数据。

参数

参数名类型必填说明
securitystr / list[str]标的代码或标的列表
start_datedatetime.date / datetime.datetime / str / int开始时间;截取到日期;默认回测当前时间
end_datedatetime.date / datetime.datetime / str / int截止时间;截取到日期;默认回测当前时间
fieldslist[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
# ...