🚀 AI 一键生成 ptrade 策略代码

ptrade单因子策略:get_factor_values() 函数的作用是什么?如何实现?

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

问题描述

单因子策略demo里边定义的get_factor_values()函数是什么作用?

/

解决方案

在量化交易的单因子策略demo中,get_factor_values() 通常是一个自定义的封装函数,其核心作用是获取指定股票池在特定时间点的因子数值,以便后续根据这些数值进行排序、筛选和调仓。

需要注意的是,在 ptrade 官方 API 文档中,并没有直接提供名为 get_factor_values 的内置函数。这通常是策略编写者为了代码整洁和逻辑清晰,自己定义的一个辅助函数。

get_factor_values() 的通用作用

在一个标准的单因子策略中,该函数通常承担以下任务:

  1. 数据获取:调用底层 API 获取股票的财务数据(如 PE、PB、ROE)或量价数据(如动量、换手率)。
  2. 数据清洗:处理获取到的数据中的缺失值(NaN)、异常值(极值处理)。
  3. 数据标准化/中性化:有时为了消除行业或市值的影响,会在该函数内对因子值进行标准化(Z-score)或行业/市值中性化处理。
  4. 返回结果:返回一个结构化的数据(如 Pandas DataFrame 或 Series),供 handle_data 或定时任务函数使用,决定买卖哪些股票。

在 ptrade 中如何实现类似功能?

在 ptrade 平台中,如果你想实现 get_factor_values 的功能,通常需要结合 get_fundamentals(获取基本面/估值因子)或 get_history(获取量价因子)来编写。

示例:自定义一个获取 PE(市盈率)因子的函数

以下是一个在 ptrade 中自定义 get_factor_values 函数的示例,用于获取股票池的动态市盈率(pe_dynamic),并过滤掉亏损(PE < 0)的股票:

import pandas as pd

def initialize(context):
    # 设置股票池为沪深300成分股
    g.security = get_index_stocks('000300.SS')
    set_universe(g.security)
    # 每天 9:31 运行调仓逻辑
    run_daily(context, my_rebalance, time='9:31')

def get_factor_values(stock_list, date):
    """
    自定义的获取因子值函数
    :param stock_list: 股票代码列表
    :param date: 查询日期
    :return: 包含因子值的 Series,按因子值从小到大排序
    """
    # 使用 ptrade 的 get_fundamentals 获取估值表中的动态市盈率
    # 注意:valuation 表支持按天查询
    df = get_fundamentals(stock_list, 'valuation', fields='pe_dynamic', date=date)
    
    if df is None or df.empty:
        return pd.Series(dtype=float)
        
    # 提取 pe_dynamic 列
    factor_data = df['pe_dynamic']
    
    # 数据清洗:过滤掉 PE 为负数(亏损)或 NaN 的股票
    factor_data = factor_data[factor_data > 0].dropna()
    
    # 按 PE 从小到大排序(低估值因子)
    factor_data = factor_data.sort_values(ascending=True)
    
    return factor_data

def my_rebalance(context):
    # 获取前一交易日的日期(格式 YYYYMMDD)
    pre_date = context.previous_date.strftime('%Y%m%d')
    
    # 调用自定义的 get_factor_values 函数获取因子数据
    factor_series = get_factor_values(g.security, pre_date)
    
    if factor_series.empty:
        return
        
    # 选出 PE 最低的 10 只股票作为目标持仓
    target_stocks = factor_series.head(10).index.tolist()
    log.info(f"今日选股结果: {target_stocks}")
    
    # 后续可以编写卖出不在 target_stocks 中的股票,并买入 target_stocks 的逻辑
    # ...

def handle_data(context, data):
    pass

总结

get_factor_values() 是单因子策略中用于提取和预处理因子信号的核心逻辑块。在 ptrade 中,你需要利用 get_fundamentals 等数据接口自行封装此函数,以实现你的选股逻辑。