3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化交易的单因子策略demo中,get_factor_values() 通常是一个自定义的封装函数,其核心作用是获取指定股票池在特定时间点的因子数值,以便后续根据这些数值进行排序、筛选和调仓。
需要注意的是,在 ptrade 官方 API 文档中,并没有直接提供名为 get_factor_values 的内置函数。这通常是策略编写者为了代码整洁和逻辑清晰,自己定义的一个辅助函数。
get_factor_values() 的通用作用在一个标准的单因子策略中,该函数通常承担以下任务:
handle_data 或定时任务函数使用,决定买卖哪些股票。在 ptrade 平台中,如果你想实现 get_factor_values 的功能,通常需要结合 get_fundamentals(获取基本面/估值因子)或 get_history(获取量价因子)来编写。
以下是一个在 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 等数据接口自行封装此函数,以实现你的选股逻辑。