3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在聚宽(JoinQuant)平台中,开发者无需手动实现复杂的数学公式,即可通过内置的 jqlib.alpha101 模块直接调用 WorldQuant 提出的 101 个 Alpha 因子。本文将详细介绍 Alpha101 因子的调用方法,并提供一个完整的选股策略示例。
在策略代码顶部导入 jqlib.alpha101 模块后,即可直接传入日期与股票池/指数代码调用因子函数:
# 导入 Alpha101 库
from jqlib.alpha101 import *
# 获取沪深300成分股在指定日期的 alpha_001 因子值
factor_df = alpha_001('2023-01-01', '000300.XSHG')
以下策略展示了如何在每个月第一个交易日调用 alpha_001 因子,选取因子值最高的前 10 只股票进行调仓建仓:
import pandas as pd
from jqdata import *
from jqlib.alpha101 import *
def initialize(context):
# 设置沪深300作为基准
set_benchmark('000300.XSHG')
# 开启动态复权模式(真实价格)
set_option('use_real_price', True)
# 设置交易手续费:买入万三,卖出万三加千一印花税,最低5元
set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
# 每月第一个交易日开盘前进行因子选股与调仓
run_monthly(rebalance, monthday=1, time='09:30', reference_security='000300.XSHG')
def rebalance(context):
# 1. 获取沪深300成分股作为目标股票池
stocks = get_index_stocks('000300.XSHG')
# 2. 调用 alpha_001 因子计算股票池中所有股票的因子值
# alpha_001 返回一个 Series,Index 为股票代码,值为因子值
calc_date = str(context.previous_date)
alpha_scores = alpha_001(calc_date, '000300.XSHG')
# 3. 过滤无效值并按因子值降序排序,选取前 10 只股票
valid_scores = alpha_scores.dropna()
top_stocks = list(valid_scores.sort_values(ascending=False).head(10).index)
# 4. 卖出不再持仓列表中的股票
for stock in list(context.portfolio.positions.keys()):
if stock not in top_stocks:
order_target(stock, 0)
log.info("卖出剔除股: %s" % stock)
# 5. 等权重买入目标股票
if len(top_stocks) > 0:
target_value = context.portfolio.total_value / len(top_stocks)
for stock in top_stocks:
order_target_value(stock, target_value)
log.info("调仓买入: %s" % stock)
initialize 中开启 set_option('use_real_price', True) 动态复权模式,以保证历史交易撮合的准确性。run_monthly / run_weekly)中使用,避免按日或按分钟高频调用。NaN,在选股前务必使用 .dropna() 清理无效数据。