数据API

策略的核心是「取数据 → 算信号 → 下单」。本章聚焦取数据这一环,覆盖行情、财务、因子、合约信息、成分股、交易日历等常用 API。米筐的数据已内置在平台中,直接调用即可。

一、行情数据

history_bars —— 取历史 bar(策略内推荐)

history_bars(order_book_id, bar_count, frequency, fields=None, skip_suspended=True)

获取指定合约往前回溯 N 根 bar 的数据,返回 ndarray,效率高,适合直接喂给 talib 等计算库。

# 取最近 5 天的日线收盘价
closes = history_bars('000001.XSHE', 5, '1d', 'close')
# 取最近 10 根 5 分钟线的开高低收
bars = history_bars(context.s1, 10, '5m', ['open', 'high', 'low', 'close'])
参数含义
bar_count回溯的 bar 数量
frequency'1d' 日线、'1m' 分钟线、'5m' 5 分钟线
fieldsopen/high/low/close/volume/total_turnover/datetime 等;期货还有 open_interest/settlement
skip_suspended是否跳过停牌,默认 True
adjust_type复权方式,默认 pre(动态前复权),可选 none / post

get_price —— 按区间取数据(研究环境推荐)

get_price(order_book_ids, start_date, end_date=None, frequency='1d', fields=None, adjust_type='pre')

按起止日期区间获取行情,返回 pandas DataFrame/Panel,适合在投资研究中使用。

# 在投资研究中取一段日线
df = get_price('000001.XSHE', start_date='2015-04-01', end_date='2015-04-12')

在策略代码中推荐用 history_bars(更快、返回 ndarray);get_price 更适合研究环境探索数据。

current_snapshot —— 当前快照

current_snapshot('000001.XSHE')

获取当前时点的市场快照(开盘至今的累计行情),只能在日内交易阶段调用。

二、合约信息

函数含义用法
all_instruments(type=None)全市场合约基础信息all_instruments('CS') 取所有股票;'ETF'/'Future'/'Option'
instruments(id_or_symbols)单个/多个合约详情instruments('000001.XSHE').round_lot 取一手股数
get_dominant_future(symbol)期货主力合约get_dominant_future('IF')'IF1608'
get_future_contracts(symbol)期货可交易合约列表get_future_contracts('IF')['IF1612', ...]
# 查询合约已上市天数、距到期天数
instruments('000001.XSHE').days_from_listed()
instruments('IF1701').days_to_expire()
# 查询期货保证金率
instruments('RB2010').margin_rate

合约类型代码:CS 股票、ETFLOFINDX 指数、Future 期货、Option 期权、Convertible 可转债、Spot 现货。

三、因子与财务

get_factor —— 因子数据

get_factor(order_book_ids, factors, count=1, universe=None)

获取股票截止 T-1 日的因子数据,支持财务衍生指标、alpha101 因子、技术因子等。

# 取沪深 300 成分股的市盈率和营收
stocks = index_components('000300.XSHG')
df = get_factor(stocks, ['pe_ratio', 'revenue'])

get_pit_financials_ex —— 季度财务(point-in-time)

get_pit_financials_ex(order_book_ids, fields, count, statements='latest')

以报告期回溯方式获取过去 N 个季度的三大报表数据,避免未来数据(look-ahead bias)。

df = get_pit_financials_ex(
    ['000001.XSHE'], fields=['revenue', 'net_profit'], count=0, statements='latest'
)

四、成分股、行业、板块

函数含义
index_components(order_book_id, date=None)指数成分股列表
industry(code)按国民经济行业分类取股票,如 industry('A01') 农业股
sector(code)按 MSCI 板块取股票,如 sector('Financials') 金融股
concept(*names)按概念取股票,如 concept('国企改革', '民营医院')
get_instrument_industry(ids, level=1, source='citics')个股行业分类(中信/聚源)
# 取上证 50 成分股
stocks = index_components('000016.XSHG')

五、交易日历与辅助

函数含义
get_trading_dates(start_date, end_date)区间内的交易日列表
get_previous_trading_date(date, n=1)前 n 个交易日
get_next_trading_date(date, n=1)后 n 个交易日
is_suspended(order_book_id)是否全天停牌
is_st_stock(order_book_id)是否为 ST 股
get_yield_curve(date, tenor)国债收益率曲线(无风险利率)
get_dividend(order_book_id, start_date)分红数据
get_turnover_rate(order_book_id, count)历史换手率
# 判断持仓股是否停牌,停牌则跳过
if is_suspended(context.s1):
    return

小结

  • 策略内取行情首选 history_bars(快、返回 ndarray);研究探索用 get_price(区间、返回 DataFrame)。
  • all_instruments / instruments 查合约信息,get_dominant_future 取期货主力。
  • get_factor 取因子,get_pit_financials_ex 取 point-in-time 财务,避免未来数据。
  • index_components / industry / sector / concept 构建股票池。
  • get_trading_dates / is_suspended / is_st_stock 是常用的辅助判断。

数据取到了,接下来学习如何下单:交易API