来自WorldQuant的101个Alpha

文章转自来自WorlQuant的101个Alpha

2015年底World Quant发表了论文《101 Formulaic Alpha》,论文中给出了101个现实中的alpha。
We emphasize that the 101 alphas we present here are not “toy” alphas but real-life trading alphas used in production. In fact, 80 of these alphas are in production as of this writing.—-其中强调80%都仍在使用

使用的函数的定义和解释
  • rank(x) 排名函数
  • abs(x) ,log(x) 取绝对值,对数
  • sign(x) 信号函数
  • delay(x,d) 在d天前的x值
  • delta(x,d) 今天的x值减去d天前的x值
  • correlation(x,y,d) 在过去d天,x和y的相关性
  • covariance(x,y,d) 在过去d天,x和y的协方差
  • ts_min(x,d),ts_max(x,d) 时间序列函数,d天内的最小值和最大值
  • ts_argmax(x,d),ts_argmin(x,d) 计算ts_min(x,d)和ts_max(x,d)发生在哪一天
需要输入的数据
  • returns 每日收盘后的收益
  • open,close,high,low,volume 开收高低成交量
  • vwap 成交量加权平均价
  • cap 市值
  • adv(d) d天的平均成交额
Alpha分类
  • 趋势跟随型(trend-following)
  • 均值回归型(mean-reverting)
  • 混合型(trend-following and mean-reverting mixed)
(-1 * correlation(open, volume, 10))  #Alpha6 趋势跟随型
(((sum(high, 20) / 20) < high) ? (-1 * delta(high, 2)) : 0)   #Alpha23 混合型
scale(((correlation(adv20, low, 5) + ((high + low) / 2)) - close))  #Alpha28 趋势跟随型
((-1 * ((low - close) * (open^5))) / ((low - high) * (close^5)))  #Alpha54 趋势跟随型
((close - open) / ((high - low) + .001))  #Alpha101 趋势跟随型
Alpha实现

Alpha2: (-1 * correlation(rank(delta(log(volume), 2)), rank(((close - open) / open)), 6))
- 相关系数x:是成交量的rank(delta(log(volume),2)) 也就是当天成交量的对数和2天前的成交量对数的差值的排名
- 相关系数的y:是rank(((close-open)/open)),收盘价减去开盘价的差去除以开盘价的一个排名

#计算alpha时会使用的函数
def ts_num(df,window=10):
    return df.rolling(window).sum()

def sma(df,window=10):
    return df.rolling(window).mean()

def stddev(df,window=10):
    return df.rolling(window).std()

def correlation(x,y,window=10):
    return x.rolling(window).corr(y)

def covariance(x,y,window=10):
    return x.rolling(window).cov(y)

def rolling_rank(na):
    return rankdata(na)[-1]

def ts_rank(window=10):
    return rolling(window).apply(rolling_rank)

def rolling_prod(na):
    return na.prod(na)

def product(df,window=10):
    return df.rolling(window).apply(rolling_prod)

def ts_min(df,window=10):
    return df.rolling(window).min()

def ts_max(df,window=10):
    return df.rolling(window).max()

def delta(df,period=1):
    return df.diff(period)

def delay(df,period=1):
    return df.shift(period)

def rank(df):
    return df.rank(axis=1,pct=True)

def scale(df,k=1):
    return df.mul(k).div(np.abs(df).sum())

def ts_argmax(df,window=10):
    return df.rolling(window).apply(np.argmax)+1

def ts_argmin(df,window=10):
    return df.rolling(window).apply(np.argmin)+1
# 定义计算alpha值的类
class Alphas(object):
    def __init__(self, pn_data):
        # 获取历史数据
        self.open = pn_data['OpeningPx']
        self.high = pn_data['HighPx']
        self.low = pn_data['LowPx']
        self.close = pn_data['ClosingPx']
        self.volume = pn_data['TotalVolumeTraded']
        self.returns = self.close.pct_change()

    #  alpha002:(-1 * correlation(rank(delta(log(volume), 2)), rank(((close - open) / open)), 6)) 

     def alpha002(self):
        df = -1 * correlation(rank(delta(log(self.volume), 2)), rank((self.close - self.open) / self.open), 6)
        return df.replace([-np.inf, np.inf], 0).fillna(value=0)
# 在交易前计算所有股票alpha因子值,取最高的10组进行买入,这里也可以取最低的10组进行卖空操作
def before_trading(context):
    # 获取当前交易日日期
    date=str(context.now)[0:10]
    # 获取10个交易日前信息,根据选取因子所需计算的日期决定
    for i in range(1,10):
        date=get_previous_trading_date(date)
    # 获取股票历史数据
    pn_data=get_price(context.stock, start_date=date, end_date=None, frequency='1d', fields=None, adjust_type='pre', skip_suspended=False)
    # 实例化Alpha对象
    alpha=Alphas(pn_data)  
    # 用户所选取的因子,返回所有股票的该因子值,这里选取001作为示范,用户可修改为其他自己感兴趣的因子
    alpha_use=alpha.alpha002()
    # 取得交易日前一天的因子值
    result=alpha_use.tail(1)
    # 将空值赋为0
    result[np.isnan(result)] = 0
    result=result.T
    # 获取上一交易日日期
    today=str(context.now)[0:10]
    yesterday=get_previous_trading_date(today)
    # 将前一天因子值排序后取出因子值最高的前10只股股票
    stock=result.sort(columns=yesterday,ascending=True)[-5:]
    # 将前一天因子值排序后取出因子值最低的前10只股股票
    stock_short=result.sort(columns=yesterday,ascending=True)[0:10]
    context.short_weight=stock_short.values/sum(stock.values)
    # 计算每只股票的权重,按照因子大小计算权重
    context.weight=stock.values/sum(stock.values)
    # 将选出的股票加入到待买股票池中
    context.stock_pool=stock.index
    # 将选出来的卖空股票加入带卖空股票池
    context.stock_short=stock_short.index 
<think>嗯,用户问的是关于WorldQuant Brain因子的使用说明、文档和API示例。首先,我需要确认用户的需求。看起来他们可能在进行量化投资研究,想要了解如何利用WorldQuant Brain的因子来开发策略。用户提到的是WorldQuant Brain,这可能涉及到Alpha的寻找和验证流程,像他们在引用中提到的FindingAlphas和WebSim的使用。 首先,我应该回顾一下WorldQuant的方法论。根据提供的引用内容,WorldQuant的流程包括因子生成、检验、组合和策略构建。用户可能想知道如何具体操作,比如如何生成因子表达式,如何测试它们的有效性,以及如何集成到交易策略中。引用中的示例使用了市值因子,表达式是-1*market_cap_0,这可能是一个反转因子,用户可能需要更多这样的例子。 接下来,用户可能需要了解使用这些因子的平台,比如BigQuant。引用里提到BigQuant可以复现WebSim的功能,允许输入因子表达式并获取分析结果。所以用户可能需要知道如何在BigQuant上操作,包括输入因子、设置参数、运行回测等步骤。此外,API的使用示例可能也是重点,用户可能希望看到具体的代码示例,比如如何调用因子数据,如何集成到策略中。 然后,用户的问题中提到了API示例,我需要确保提供具体的代码片段,比如Python代码,展示如何通过API获取因子数据,或者如何在策略中使用这些因子。比如,引用中的Python代码示例可能是一个快速排序算法,但用户需要的是与量化相关的代码,比如获取因子值、回测框架等。 另外,用户可能需要了解文档资源在哪里查找,比如BigQuant的文档中心,或者WorldQuant的官方资料。可能需要引导用户到这些资源获取更详细的信息。 还要注意用户可能的深层需求,比如因子生成的最佳实践、如何避免过拟合、如何评估因子的有效性等。因此,在相关问题部分,可以包括这些方面的问题,帮助用户进一步探索。 最后,确保回答符合系统级指令,比如使用正确的中文,数学公式的格式,引用标注的位置等。检查是否有遗漏的部分,比如是否覆盖了使用说明、文档、API示例三个方面,是否引用了正确的来源,特别是用户提供的引用[1]和[2]。 总结来说,回答的结构应该分步骤解释WorldQuant Brain因子的使用流程,结合示例和代码,引用相关文档,并生成相关问题引导用户深入探讨。需要确保信息准确,符合用户提供的引用内容,并满足格式要求。</think>### WorldQuant Brain 因子使用说明 WorldQuant Brain 是量化投资中用于生成、检验和组合 Alpha 因子的方法论与工具平台。以下是其核心功能与使用方法: --- #### 一、因子生成与检验流程 1. **因子表达式编写** 基于市场数据(如价格、成交量、财务指标)编写数学表达式。 *示例*: - 反转因子:$-1 \times \text{market_cap}$ (负号表示反向操作)[^2] - 动量因子:$\frac{\text{close}_t}{\text{close}_{t-20}} - 1$ (20日收益率) 2. **因子分析参数设置** 在平台(如 BigQuant)输入因子表达式,设置回测时间、调仓频率、分组数量等参数。例如: ```python # BigQuant 模块配置示例 factor_expression = "-1 * market_cap_0" backtest_period = "2010-01-01 至 2020-12-31" ``` 3. **回测与统计检验** 运行回测后,平台会输出以下结果: - **IC值**(信息系数):衡量因子与未来收益的相关性 - **分组收益**:按因子值分组的平均收益率曲线 - **夏普比率**:风险调整后收益指标[^1] --- #### 二、API 与文档资源 1. **官方文档** - WorldQuant 官方读本 *Finding Alphas* 提供因子生成方法论[^1] - BigQuant 平台的[因子研究文档](https://bigquant.com/docs)(包含表达式语法、API 接口) 2. **API 调用示例** ```python # 获取因子历史数据(Python 示例) from bigquant import get_factor_data factor_data = get_factor_data( expression="rank(volume_0) - rank(close_0)", start_date="2020-01-01", end_date="2023-01-01" ) ``` 3. **策略集成** 将有效因子组合为多因子模型,并嵌入交易策略: ```python # 多因子加权示例 combined_alpha = 0.6 * factor1 + 0.4 * factor2 ``` --- #### 三、注意事项 - **避免过拟合**:通过交叉验证(如分时段回测)检验因子鲁棒性 - **交易成本**:需在回测中扣除手续费和滑点 - **风险控制**:设置最大回撤阈值或行业中性约束[^2] ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值