跳转到正文

行情、订阅与交易日历 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_symbolsstr | 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_idstr | Instrument,必填已加载且在当前时点已经上市的标的;可查询已退市合约历史
bar_countint,必填请求最大条数,须大于0,不保证实际历史足够
frequencystr,必填本数据源使用1d或1m;日频回测不能查分钟历史
fieldsstr | list[str] | None,默认None单字段 / 多字段;None请求datetime/open/high/low/close/volume
skip_suspendedbool,默认True股票基金无bar的停牌日不会被补出,False也不制造停牌行
include_nowbool,默认False分钟查询是否含当前分钟;日线查询边界同时受回调与回测频率约束,见时间边界
adjust_typestr,默认prepre、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/closefloat,所请求价格口径的 OHLC
prev_closefloat,昨收参考价
limit_up/limit_downfloat,当日涨跌停价;缺失行为按资产规则
volumefloat,股票股数、基金份数、期货手数
total_turnoverfloat,成交额元
settlement/prev_settlementfloat,期货结算价/昨结算价;当前分钟 settlement 为 NaN
open_interestfloat,期货持仓量
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 / symbolstr代码 / 名称
instrumentInstrument合约对象
datetimedatetime.datetime当前bar自然时间,不是history_bars的整数时间
open/close/high/low/lastfloat原始价格;普通bar.last为close,竞价last为open且没有close/high/low
volume/total_turnover数值数量与金额,单位见行情字段
prev_close/limit_up/limit_downfloat昨收参考价、涨跌停价;缺失可为NaN
settlement/prev_settlement/open_interestfloat,期货结算价 / 昨结算价 / 持仓量;分钟settlement为NaN
trading_date整数YYYYMMDD,期货分钟夜盘对应的交易日;其他场景使用context.trading_date
isnanbool当前bar缺失;执行交易前判断目标bar是否有效
is_tradingbool,普通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_symbolstr,必填已加载代码

返回: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上述日期类型,必填查询日期
nint,默认1向前/向后交易日数,至少1

返回:pandas.Timestamp — 单个交易日,通常严格早于/晚于输入日期,输入休息日时从最近交易日起计数。

注意:超出已加载日历边界时会返回日历首/末日,不能据此推算范围外日期,也不能假定结果始终严格跨过输入日。策略需要后续执行日时,应加载足够日历并核对返回值。周/月调度对完整周期的要求见定时任务。

is_suspended ​

摘要:查询标的在指定交易日数内的停牌状态。

python
is_suspended(order_book_id, count=1)
参数类型 / 默认说明
order_book_idstr,必填已加载代码
countint,默认1向前查询的交易日数,使用正整数

返回:bool | list[bool] — 停牌状态:

情况返回
count为1bool
count大于1按日期升序的 list[bool]

注意:本数据源以无日线判断停牌,不复原停牌公告;不能据该结果认定某根分钟bar一定存在。

get_dividend ​

摘要:按公告日期筛选股票基金分红记录。

python
get_dividend(order_book_id, start_date)
参数类型 / 默认说明
order_book_idstr,必填股票基金代码
start_date上述日期类型,必填开始日期;晚于当前交易日前一自然日时报错

返回:numpy.ndarray | None — 从start_date到当前交易日前一自然日,含两端:

情况返回
标的有原始记录结构化 numpy.ndarray,筛选后无匹配时为空数组
标的无原始记录None

数组字段如下:

字段说明
announcement_date/book_closure_date/ex_dividend_date/payable_date整数YYYYMMDD,公告/登记/除息/到账日期
dividend_cash_before_taxfloat,每round_lot股/份税前分红金额
round_lot数值,分红金额对应的数量;本数据源为1

注意:它是分红查询,不是持仓分红到账流水;实际到账及再投资见结果数据。不根据此查询重复给账户加钱。

get_yield_curve ​

摘要:查询指定日期和期限的收益率曲线。

python
get_yield_curve(date=None, tenor=None)
参数类型 / 默认说明
date上述日期类型或 None,默认None默认前一交易日,不允许请求晚于前一交易日的数据
tenorstr | 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返回空列表,不能当作真实分类。完整限制见数据限制。

localquant documentation