外观
行情、订阅与交易日历 API
除另有说明外从 localquant.apis 导入。API只能访问本次已加载的数据;订阅不会扩充行情范围。合约查询与资金参数见Instrument参考。
除另有限制的接口外,可在init及日常策略回调使用。
update_universe、subscribe 与 unsubscribe
摘要:替换、增加或移除订阅池中的标的。
- update_universe替换订阅池;空列表清空订阅。
- subscribe增加订阅;重复代码不重复订阅。
- unsubscribe移除订阅;本次未订阅但已加载的代码可移除。
python
update_universe(id_or_symbols)
subscribe(id_or_symbols)
unsubscribe(id_or_symbols)三个接口参数相同:
| 参数 | 类型 / 默认 | 说明 |
|---|---|---|
id_or_symbols | str | Instrument | Iterable[str | Instrument],必填 | 单个代码str、Instrument,或由它们组成的可迭代集合 |
返回:None — 三个接口均无返回值。
注意:例中两只标的都须已加载。订阅用于遍历bar_dict;code in bar_dict只判断订阅,不证明当前有行情。已加载但未订阅的代码仍可被显式查询;期货分钟事件由相关合约实际分钟决定,见分钟回调。
python
from localquant.apis import update_universe, subscribe, unsubscribe
def init(context):
update_universe(["600000.SH"])
subscribe("510300.SH")
unsubscribe("600000.SH")history_bars
摘要:查询指定标的的历史行情。
python
history_bars(order_book_id, bar_count, frequency, fields=None,
skip_suspended=True, include_now=False, adjust_type="pre")| 参数 | 类型 / 默认 | 说明 |
|---|---|---|
order_book_id | str | Instrument,必填 | 已加载且在当前时点已经上市的标的;可查询已退市合约历史 |
bar_count | int,必填 | 请求最大条数,须大于0,不保证实际历史足够 |
frequency | str,必填 | 本数据源使用1d或1m;日频回测不能查分钟历史 |
fields | str | list[str] | None,默认None | 单字段 / 多字段;None请求datetime/open/high/low/close/volume |
skip_suspended | bool,默认True | 股票基金无bar的停牌日不会被补出,False也不制造停牌行 |
include_now | bool,默认False | 分钟查询是否含当前分钟;日线查询边界同时受回调与回测频率约束,见时间边界 |
adjust_type | str,默认pre | pre、none、post;各资产实际支持的复权字段见行情字段 |
返回:numpy.ndarray | None — 按时间升序的历史行情:
| 情况 | 返回 |
|---|---|
| 单字段 | 一维普通 numpy.ndarray |
| 多字段 | 一维结构化 numpy.ndarray |
| 未提供该标的分钟序列 | 可能返回 None |
时机:不能在init调用,可在盘前、竞价、handle_bar、盘后及scheduler中查询。
注意:
- 不是二维矩阵或DataFrame。历史不足时条数较少或为空数组。
- post查询股票基金时必须显式选close或datetime/close;不能省略fields。分红、折算和复权约定见资产页。
python
from localquant.apis import history_bars
def before_trading(context):
closes = history_bars("600000.SH", 20, "1d", "close", adjust_type="post")
# closes形如array([10.1, 10.2, ...]),以下检查决定预热是否足够。
context.ready = closes is not None and len(closes) == 20
if context.ready:
context.mean_close = float(closes.mean())
rows = history_bars("600000.SH", 2, "1d", ["datetime", "close"], adjust_type="post")
# rows.dtype.names为('datetime', 'close');按列读取rows['close']。历史行情的时间边界
| 回测频率 / 查询频率 | 调用位置 | 可见范围 |
|---|---|---|
| 日线 / 日线 | before_trading、open_auction | 截至前一交易日 |
| 日线 / 日线 | handle_bar、after_trading | 包含当日,include_now 不改变此行为 |
| 分钟 / 日线 | 盘前、竞价;盘中默认参数 | 截至前一交易日 |
| 分钟 / 日线 | after_trading | 包含当日 |
| 分钟 / 分钟 | 盘中 include_now=False,默认 | 严格早于当前分钟 |
| 分钟 / 分钟 | 盘中 include_now=True | 包含当前已完成分钟 |
股票基金分钟盘中请求日线时,include_now=True 会暴露当日完整日线,不能用于当时的决策;期货分钟直接拒绝该请求。输入分钟标签沿用数据时间,不自动平移到下一分钟;信号、下单与撮合的先后由策略和成交模型确定。
行情字段
history_bars 中的字段类型与单位:
| 字段 | 说明 |
|---|---|
datetime | 整数 YYYYMMDDHHMMSS;日线时分秒为零 |
open/high/low/close | float,所请求价格口径的 OHLC |
prev_close | float,昨收参考价 |
limit_up/limit_down | float,当日涨跌停价;缺失行为按资产规则 |
volume | float,股票股数、基金份数、期货手数 |
total_turnover | float,成交额元 |
settlement/prev_settlement | float,期货结算价/昨结算价;当前分钟 settlement 为 NaN |
open_interest | float,期货持仓量 |
trading_date | 期货分钟专用整数 YYYYMMDD,与自然时间分开 |
股票基金日线 post 仅支持 close 或 datetime/close;期货系列日线 post 支持 datetime、OHLC、prev_close、settlement、prev_settlement、volume、total_turnover、open_interest,不提供后复权涨跌停。期货量额及持仓量不做价格复权。期货系列分钟不支持 post;月合约价格不复权。
bar_dict[code] 使用属性访问,bar.datetime 为 datetime 对象,bar.isnan 表示当前行情是否缺失;普通 bar 使用原始价格。股票基金日线/分钟 bar.prev_close 来源于日线 pre_close,可能是交易所除权参考价;竞价 bar 与日线快照的 prev_close 为此前有效不复权收盘。这两个分母不能混用。
竞价 bar 提供开盘和涨跌停,不提供当日 close/high/low;但 volume/total_turnover 来自全天日线,不能作为已知竞价量额参与信号、排序或仓位计算。日线竞价快照中的全天高低价及量额同样不能用于开盘决策。
Bar 与 bar_dict
handle_bar(context, bar_dict)中的bar_dict是行情映射,keys()/values()/items()遍历订阅池。bar_dict[code]返回BarObject;open_auction传入的值是PartialBarObject,只提供竞价可用的属性。
| 属性 | 类型 | 说明 |
|---|---|---|
order_book_id / symbol | str | 代码 / 名称 |
instrument | Instrument | 合约对象 |
datetime | datetime.datetime | 当前bar自然时间,不是history_bars的整数时间 |
open/close/high/low/last | float | 原始价格;普通bar.last为close,竞价last为open且没有close/high/low |
volume/total_turnover | 数值 | 数量与金额,单位见行情字段 |
prev_close/limit_up/limit_down | float | 昨收参考价、涨跌停价;缺失可为NaN |
settlement/prev_settlement/open_interest | float,期货 | 结算价 / 昨结算价 / 持仓量;分钟settlement为NaN |
trading_date | 整数YYYYMMDD,期货分钟 | 夜盘对应的交易日;其他场景使用context.trading_date |
isnan | bool | 当前bar缺失;执行交易前判断目标bar是否有效 |
is_trading | bool,普通bar | 当前bar成交量是否大于0,不是下单一定成功的保证 |
python
def handle_bar(context, bars):
bar = bars["RB.SHF"]
if bar.isnan:
return
signal_price = bar.close快照和bar都不能替代历史完整性检查。无bar时账户可能沿用此前估值,不能用持仓last_price证明目标时刻有可成交报价。
current_snapshot
摘要:查询指定标的的当前快照。
python
current_snapshot(id_or_symbol)| 参数 | 类型 / 默认 | 说明 |
|---|---|---|
id_or_symbol | str,必填 | 已加载代码 |
返回:TickObject — 快照。快照字段last/open/high/low/prev_close、volume/total_turnover、limit_up/limit_down沿用上面的类型与单位,datetime为自然时间;期货另有open_interest/prev_settlement。
时机:可在盘前、竞价、handle_bar、盘后及scheduler调用,不能在init调用。
注意:
- 不提供可用于盘口策略的真实逐档委托信息。
- 日频盘前为前一交易日日线;竞价last为开盘价;收盘及盘后last为收盘价。竞价快照的高低价与量额包含全天数据,不能作为开盘已知信号。
- 股票基金不支持盘中分钟快照。期货分钟快照累计当前交易日至当前自然时刻的已知分钟记录,当日尚无记录时报错;盘前、盘后使用对应日线。它不代表支持tick回测。
交易日历
日期参数接受 str(推荐YYYY-MM-DD)、datetime.date、datetime.datetime或pandas.Timestamp,不传带时区的盘中时间。返回范围受加载日历约束。
get_trading_dates
摘要:查询起止日期内的交易日。
python
get_trading_dates(start_date, end_date)| 参数 | 类型 / 默认 | 说明 |
|---|---|---|
start_date | 上述日期类型,必填 | 开始日期 |
end_date | 上述日期类型,必填 | 结束日期 |
返回:pandas.DatetimeIndex — 按时间升序,包括起止日期内已有的交易日;没有匹配为空索引。
get_previous_trading_date 与 get_next_trading_date
摘要:查询指定日期向前或向后的交易日。
python
get_previous_trading_date(date, n=1)
get_next_trading_date(date, n=1)| 参数 | 类型 / 默认 | 说明 |
|---|---|---|
date | 上述日期类型,必填 | 查询日期 |
n | int,默认1 | 向前/向后交易日数,至少1 |
返回:pandas.Timestamp — 单个交易日,通常严格早于/晚于输入日期,输入休息日时从最近交易日起计数。
注意:超出已加载日历边界时会返回日历首/末日,不能据此推算范围外日期,也不能假定结果始终严格跨过输入日。策略需要后续执行日时,应加载足够日历并核对返回值。周/月调度对完整周期的要求见定时任务。
is_suspended
摘要:查询标的在指定交易日数内的停牌状态。
python
is_suspended(order_book_id, count=1)| 参数 | 类型 / 默认 | 说明 |
|---|---|---|
order_book_id | str,必填 | 已加载代码 |
count | int,默认1 | 向前查询的交易日数,使用正整数 |
返回:bool | list[bool] — 停牌状态:
| 情况 | 返回 |
|---|---|
| count为1 | bool |
| count大于1 | 按日期升序的 list[bool] |
注意:本数据源以无日线判断停牌,不复原停牌公告;不能据该结果认定某根分钟bar一定存在。
get_dividend
摘要:按公告日期筛选股票基金分红记录。
python
get_dividend(order_book_id, start_date)| 参数 | 类型 / 默认 | 说明 |
|---|---|---|
order_book_id | str,必填 | 股票基金代码 |
start_date | 上述日期类型,必填 | 开始日期;晚于当前交易日前一自然日时报错 |
返回:numpy.ndarray | None — 从start_date到当前交易日前一自然日,含两端:
| 情况 | 返回 |
|---|---|
| 标的有原始记录 | 结构化 numpy.ndarray,筛选后无匹配时为空数组 |
| 标的无原始记录 | None |
数组字段如下:
| 字段 | 说明 |
|---|---|
announcement_date/book_closure_date/ex_dividend_date/payable_date | 整数YYYYMMDD,公告/登记/除息/到账日期 |
dividend_cash_before_tax | float,每round_lot股/份税前分红金额 |
round_lot | 数值,分红金额对应的数量;本数据源为1 |
注意:它是分红查询,不是持仓分红到账流水;实际到账及再投资见结果数据。不根据此查询重复给账户加钱。
get_yield_curve
摘要:查询指定日期和期限的收益率曲线。
python
get_yield_curve(date=None, tenor=None)| 参数 | 类型 / 默认 | 说明 |
|---|---|---|
date | 上述日期类型或 None,默认None | 默认前一交易日,不允许请求晚于前一交易日的数据 |
tenor | str | None,默认None | 期限;None返回全部期限。支持期限:0S、1M、2M、3M、6M、9M、1Y~10Y、15Y、20Y、30Y、40Y、50Y |
返回:pandas.DataFrame — 日期索引、期限列,值为年化小数,例如0.02表示2%。单一期限仍返回DataFrame。
注意:插值、日期填充与零曲线开关见无风险利率。
不支持的查询
本数据源不提供 get_price/index_components/index_weights/get_factor/get_split 等上游行情查询接口,也不支持tick、基金净值字段或TWAPOrder/VWAPOrder。所需因子与成分数据应在回测前另行准备。
is_st_stock恒为False,industry/sector返回空列表,不能当作真实分类。完整限制见数据限制。