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

joinquant 平台如何导入并调用 jqlib.alpha191 快速计算短周期阿尔法因子?

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

问题描述

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

Title: joinquant 因子库应用:如何使用 jqlib.alpha191 快速计算与筛选股票?

Question: 如何在 joinquant 策略中导入并调用 jqlib.alpha191 库计算短周期阿尔法因子?

解决方案

在 JoinQuant 中使用 jqlib.alpha191 计算阿尔法因子

在聚宽(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 因子函数说明与参数

Alpha191 中的因子函数(如 alpha_001, alpha_007 等)通常接收以下参数:

  • code: 股票代码列表,支持 liststr 格式。
  • end_date: 查询日期,格式为 'YYYY-MM-DD'。在回测中,建议传入 context.previous_date 以避免使用未来数据。
  • 返回值: 返回包含各股票因子值的 Series 或 Dict,Key/Index 为股票代码,Value 为计算得到的因子数值。

三、策略实战示例:基于 Alpha191 选股并调仓

以下是一个在 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)

四、使用注意事项

  1. 避免未来函数: 计算因子时,end_date 参数应传入当前交易日之前的时间(如 context.previous_date)。
  2. 数据依赖限制: 部分因子内部包含较长的历史回溯窗口(如 504 个交易日),对于上市时间较短的新股可能会返回 NaN,在策略中需使用 .dropna() 进行过滤。
  3. 回测模式设置: 建议开启动态复权 set_option('use_real_price', True),以确保价格与成交量算出的因子数据更符合真实市场状况。