🚀 AI 一键生成 ptrade 策略代码
立即体验

如何利用 ptrade 的 get_fundamentals 接口获取营运能力表数据筛选龙头股票?

ptrade | 发布时间: 2026/8/1
以下内容由 EasyQuant 生成。

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: ptrade 基本面选股:基于营运能力指标(存货周转率)的选股实战

Question: 如何利用 ptrade 的 get_fundamentals 接口获取营运能力表数据筛选龙头股票?

解决方案

在 ptrade 量化交易平台中,可以通过 get_fundamentals 接口获取上市公司的财务基本面数据。若要基于营运能力(如存货周转率 inventory_turnover_rate)进行龙头股票筛选,需要查询 operating_ability 财务数据表。

1. 接口说明与关键参数

get_fundamentals 接口支持查询营运能力指标表:

  • table: 'operating_ability'(营运能力表)
  • fields: 支持选取的字段,例如 'inventory_turnover_rate'(存货周转率)、'accounts_receivables_turnover_rate'(应收账款周转率)、'total_asset_turnover_rate'(总资产周转率)等。
  • security: 股票代码列表,支持传入单只或多只股票代码。
  • date: 查询日期(格式如 '20231231',回测中不传默认取当前回测日日期)。

2. 选股策略实现步骤

  1. 标的池获取:在盘前 before_trading_start 中获取股票池(如沪深300或全A股)。
  2. 财务数据获取:调用 get_fundamentals 获取股票池中所有标的的 inventory_turnover_rate
  3. 数据清洗与排序:剔除 NaN 缺失值,并按存货周转率从高到低排序。
  4. 调仓执行:选取排名靠前的标的,在 handle_data 中进行等权重调仓买入。

3. Python 策略代码示例

def initialize(context):
    # 设置参考基准
    set_benchmark('000300.SS')
    # 设定持仓股票数量
    g.hold_count = 5
    g.target_stocks = []

def before_trading_start(context, data):
    # 1. 获取沪深300成分股列表作为选股基础池
    stocks = get_index_stocks('000300.XBHS')
    
    # 2. 查询营运能力数据表中的存货周转率指标
    df_fundamentals = get_fundamentals(
        security=stocks,
        table='operating_ability',
        fields=['inventory_turnover_rate'],
        date=None
    )
    
    if df_fundamentals is not None and not df_fundamentals.empty:
        # 3. 过滤空值并按存货周转率降序排列
        df_clean = df_fundamentals.dropna(subset=['inventory_turnover_rate'])
        df_sorted = df_clean.sort_values(by='inventory_turnover_rate', ascending=False)
        
        # 4. 选取存货周转率最高的前 N 只龙头股票
        g.target_stocks = list(df_sorted.index[:g.hold_count])
        log.info("最新筛选出的营运能力龙头标的: %s" % g.target_stocks)

def handle_data(context, data):
    if not g.target_stocks:
        return
        
    # 卖出不在目标池中的股票
    for stock in list(context.portfolio.positions.keys()):
        if stock not in g.target_stocks:
            order_target(stock, 0)
            log.info("卖出标的: %s" % stock)
            
    # 等权重买入目标标的
    position_count = len(g.target_stocks)
    if position_count > 0:
        target_value = context.portfolio.portfolio_value / position_count
        for stock in g.target_stocks:
            order_target_value(stock, target_value)
            log.info("构建持仓标的: %s,目标金额: %s" % (stock, target_value))

4. 调优与注意事项

  1. 流控限制get_fundamentals 接口每秒调用不可超过 100 次,单次最大返回量限制为 50000 条单元格。如果对全市场 A 股进行全量查询,建议结合 time.sleep(1) 或按板块分批获取。
  2. 未来函数规避:回测中不传 date 参数时,系统默认按财报实际发布日期(publ_date)进行匹配,可有效避免数据前瞻偏误。