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

PTrade 财务选股:利用营运能力表 (operating_ability) 筛选高存货周转率标的

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

问题描述

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

Title: PTrade 财务选股:利用营运能力表 (operating_ability) 筛选高存货周转率标的

Question: 如何使用 PTrade 的 get_fundamentals 函数查询上市公司存货周转率并进行基本面选股?

解决方案

在 PTrade 量化交易平台中,高效的基本面选股依赖于财务数据接口 get_fundamentals。营运能力(operating_ability)是评估企业运营效率的核心维度,其中**存货周转率(inventory_turnover_rate)**衡量了企业存货变现及管理效率。存货周转率越高,说明资产利用效率越高,流动性越强。自由调取该指标可帮助投资者筛选出高质量的运营标的。


一、get_fundamentals 接口调用说明

获取存货周转率需要指定表名为 'operating_ability',并设置业务字段 fields='inventory_turnover_rate'

核心参数说明

  • security: 股票代码或股票列表(如 '600570.SS' 或股票池列表)。
  • table: 财务数据表名,此处为 'operating_ability'
  • fields: 调取的字段,存货周转率对应 'inventory_turnover_rate'
  • date: 查询日期(按日期查询模式),如 '20231231'。在盘中或回测中不传默认取系统/回测当前时间最近的数据。
  • report_types: 财报类型('1':一季报,'2':半年报,'3':三季报,'4':年报)。

二、核心提取代码示例

# 获取单个或多个股票的存货周转率数据
stocks = ['600570.SS', '000001.SZ', '600000.SS']
df = get_fundamentals(
    security=stocks,
    table='operating_ability',
    fields=['inventory_turnover_rate'],
    date='20231231'
)
print(df)

三、完整 PTrade 财务选股策略源码

以下策略在盘前运行阶段(before_trading_start)调取全 A 股的存货周转率指标,筛选出存货周转率最高的 Top 10 标的并更新股票池:

import pandas as pd

def initialize(context):
    # 设置初始股票池
    g.security = ['600570.SS']
    set_universe(g.security)
    # 每天 09:15 运行选股逻辑
    run_daily(context, select_stocks, time='09:15')

def select_stocks(context):
    # 1. 获取当前全 A 股代码列表
    all_stocks = get_Ashares()
    
    # 2. 查询所有 A 股的存货周转率
    try:
        df = get_fundamentals(
            security=all_stocks,
            table='operating_ability',
            fields=['inventory_turnover_rate']
        )
        
        if df is not None and not df.empty:
            # 过滤掉缺失值
            valid_df = df.dropna(subset=['inventory_turnover_rate'])
            
            # 按存货周转率降序排序
            sorted_df = valid_df.sort_values(by='inventory_turnover_rate', ascending=False)
            
            # 取前 10 只标的
            top_stocks = list(sorted_df.index[:10])
            
            # 更新全局股票池
            g.security = top_stocks
            set_universe(g.security)
            log.info("今日筛选出的高存货周转率股票池: %s" % g.security)
    except Exception as e:
        log.error("获取财务数据异常: %s" % e)

def handle_data(context, data):
    # 盘中根据筛选出的股票池进行交易逻辑(示例:调仓买入)
    pass

四、注意事项与优化建议

  1. 流量与频次限制get_fundamentals 接口每秒调用不可超过 100 次,单次最大数据请求量为 500 条。若全市场股票较多,建议分批获取或加 time.sleep(1) 规避流控。
  2. 行业差异:不同行业的存货周转率标准差异巨大(例如零售业远高于重工业),建议结合 get_industry_stocks() 在同行业内部进行相对排名筛选。