3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在聚宽(JoinQuant)量化平台上,jqlib.alpha191 提供了基于国泰君安数量化研究报告的 191 个短周期交易型阿尔法因子(Alpha Factors)。通过该内置库,投资者可以方便地计算个股的因子值并进行多因子选股。
调用 Alpha191 因子非常简单,只需导入模块后指定股票池和查询日期即可:
# 1. 导入 Alpha191 库
from jqlib.alpha191 import *
# 2. 获取股票列表(例如所有 A 股股票)
end_date = '2023-01-01'
codes = list(get_all_securities(['stock'], date=end_date).index)
# 3. 调用指定的 alpha 因子(如 alpha_007)
factor_values = alpha_007(codes, end_date=end_date)
# 4. 查看特定股票的因子值
print(factor_values['000001.XSHE'])
Alpha191 中的因子函数(如 alpha_001, alpha_007 等)通常接收以下参数:
list 或 str 格式。'YYYY-MM-DD'。在回测中,建议传入 context.previous_date 以避免使用未来数据。以下是一个在 JoinQuant 策略中按月/按周计算 alpha_007 因子并买入因子值最大前 10 只股票的完整示例:
import jqdata
from jqlib.alpha191 import *
def initialize(context):
# 设定基准
set_benchmark('000300.XSHG')
# 开启动态复权模式(真实价格)
set_option('use_real_price', True)
# 设置交易手续费
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')
def rebalance(context):
# 1. 获取沪深300成分股作为股票池
stocks = get_index_stocks('000300.XSHG', date=context.current_dt)
# 2. 计算 Alpha191 中的 alpha_007 因子
# 使用 previous_date 避免未来函数
factor_series = alpha_007(stocks, end_date=context.previous_date)
# 3. 剔除 NaN 值并按因子值降序排序
valid_factors = factor_series.dropna().sort_values(ascending=False)
# 4. 选取因子值最大的前 10 只股票
target_stocks = list(valid_factors.index[:10])
# 5. 卖出不在目标池中的持仓
for stock in context.portfolio.positions:
if stock not in target_stocks:
order_target(stock, 0)
log.info("卖出股: %s" % stock)
# 6. 等权重买入目标股票
if len(target_stocks) > 0:
weight_cash = context.portfolio.available_cash / len(target_stocks)
for stock in target_stocks:
order_value(stock, weight_cash)
log.info("买入股: %s" % stock)
end_date 参数应传入当前交易日之前的时间(如 context.previous_date)。NaN,在策略中需使用 .dropna() 进行过滤。set_option('use_real_price', True),以确保价格与成交量算出的因子数据更符合真实市场状况。