数据获取函数

策略的核心是「拿数据 → 算信号 → 下单」。聚宽提供了丰富的数据 API,本章按用途分组,讲清每个函数取什么、怎么用。

一、行情数据 — get_price

最通用的行情获取函数,支持单只或多只标的、按天或按分钟、多个字段:

get_price(security, start_date=None, end_date=None, frequency='daily',
          fields=None, skip_paused=False, fq='pre', count=None, panel=True)
  • security:单个代码字符串或代码列表。
  • countstart_date 二选一:count 取 end_date 往前 N 根,start_date 取区间。
  • frequency'daily''1m''5m''1w' 等。
  • fq:复权,'pre' 前复权(默认)、None 不复权、'post' 后复权。
  • fields:默认 ['open','close','high','low','volume','money'],还支持 factorhigh_limitlow_limitavgpre_closepaused
# 取平安银行最近 5 根日线
df = get_price('000001.XSHE', count=5, end_date='2024-06-01')

# 取多只股票、分钟数据、指定字段
df = get_price(['000001.XSHE','600000.XSHG'],
               start_date='2024-05-01', end_date='2024-05-31 15:00',
               frequency='1m', fields=['open','close'])

取多只标的时建议设 panel=False(pandas 已移除 Panel),返回按字段组织的 DataFrame。

二、历史快查 — history / attribute_history

这两个是回测中高频使用的轻量函数:

函数特点适用场景
history(count, unit, field, security_list, df)取多只标的的单个字段批量取某字段做横截面
attribute_history(security, count, unit, fields, df)取单只标的的多个字段看单只票近期明细
# 取股票池过去 5 天的均价(不含当天)
h = history(5, unit='1d', field='avg', security_list=['000001.XSHE','000002.XSHE'])

# 取平安银行近 5 天的开收量
ah = attribute_history('000001.XSHE', 5, '1d', ['open','close','volume'])
ma5 = ah['close'].mean()

重要:取天数据时不含当天(即使收盘后);分钟数据不含当前分钟,避免未来函数。

三、多周期 Bar — get_bars

需要非标准周期(如 5 分钟、周线、月线)或快照数据时用 get_bars

get_bars(security, count, unit='1d', fields=['date','open','high','low','close'],
         include_now=False, end_dt=None, fq_ref_date=None, df=False)
# 取近 5 周的周线数据
bars = get_bars('600507.XSHG', 5, unit='1w',
                fields=['date','close'], include_now=False, df=True)

四、当前时刻数据 — get_current_data

回测中其他 API 取的是上一单位时间的数据。要取当天的开盘价、涨跌停、是否停牌,必须用:

def handle_data(context, data):
    cur = get_current_data()
    if cur['000001.XSHE'].paused:        # 当天停牌
        return
    if cur['000001.XSHE'].high_limit:    # 涨停价
        pass

返回对象的常用属性:last_pricehigh_limitlow_limitpausedis_stday_openname

五、财务数据 — get_fundamentals

用 SQLAlchemy 的 query 对象查询估值、利润、资产负债等表:

q = query(valuation.code, valuation.market_cap, valuation.pe_ratio
    ).filter(valuation.market_cap > 1000,
             valuation.pe_ratio < 15
    ).order_by(valuation.market_cap.desc()
    ).limit(50)
df = get_fundamentals(q, date='2024-06-03')
内容常用字段
valuation市值估值market_cappe_ratiopb_ratioturnover_ratio
income利润表total_operating_revenuenet_profitbasic_eps
balance资产负债cash_equivalentstotal_assets
cash_flow现金流goods_sale_and_service_render_cash
indicator财务指标epsroe
  • date:查该日收盘后能看到的最新数据(无未来函数,推荐)。
  • statDate:如 '2024q1''2024',查指定报告期。

六、成分股与交易日

函数含义
get_index_stocks('000300.XSHG', date)指数成分股列表
get_industry_stocks(industry_code)行业成分股
get_concept_stocks(concept_code)概念成分股
get_all_securities(['stock'], date)所有标的(股票/基金/期货/指数)
get_security_info(code)单只标的的上市/退市信息
get_trade_days(start_date, end_date)指定范围交易日
get_industries(name='sw_l1')行业列表(申万/聚宽/证监会)
stocks = get_index_stocks('000300.XSHG')   # 沪深 300 成分
days = get_trade_days(start_date='2024-01-01', end_date='2024-06-30')

七、其他常用数据

  • get_extras(info, security_list, ...):基金净值、期货结算价/持仓量、是否 ST。
  • get_money_flow(security_list, ...):资金流向(主力/超大单/大单净额)。
  • get_billboard_list(stock_list, start_date, end_date):龙虎榜数据。

小结

行情用 get_price,历史快查用 history / attribute_history,当天数据用 get_current_data,财务用 get_fundamentals + query,成分股用 get_index_stocks。注意取天数据不含当天,避免未来函数。下一步学怎么下单:交易函数