数据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 分钟线 |
fields | open/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 股票、ETF、LOF、INDX 指数、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。