[关闭]
@Channelchan 2017-07-08T15:56:18.000000Z 字数 1395 阅读 32340

Alpha101_rqalpha


WorldQuant根据数据挖掘的方法发掘了101个alpha,据说里面80%的因子仍然还行之有效并运行在他们的投资策略中。Alpha101给出的公式,也就是计算机代码101年真实的定量交易Alpha。他们的平均持有期大约范围0.6-6.4天。平均两两这些Alpha的相关性较低,为15.9%。回报是与波动强相关,但对换手率没有明显的依赖性,直接确认较早的间接经验分析结果。我们从经验上进一步发现换手率对alpha相关性的解释能力很差。


1. 因子组成元素


常用代码

将因子选股结果存成Excel。

  1. import alphalens
  2. factor = DataFrame.stack()
  3. factor_data = alphalens.utils.get_clean_factor_and_forward_returns(factor, prices, quantiles=5)
  4. cond = factor_data['factor_quantile'] == 5
  5. Q5 = factor_data[cond]
  6. stocks = pd.Series(True, index=Q5.index)
  7. stocks = stocks.unstack()
  8. stocks[stocks != True] = False
  9. print(stocks)
  10. stocks.to_excel('alpha.xlsx')

将选股Excel表格导入引擎回测

  1. def init(context):
  2. codes = pd.read_excel('alpha.xlsx')
  3. codes.index = codes.pop('date')
  4. context.codes = codes
  5. scheduler.run_weekly(find_pool, tradingday=1)
  6. def find_pool(context, bar_dict):
  7. codes = context.codes.loc[context.now]
  8. stocks = codes.index[codes == True]
  9. context.stocks = stocks
  10. def handle_bar(context, bar_dict):
  11. pool = context.stocks
  12. if pool is not None:
  13. stocks_len = len(pool)
  14. for stocks in context.portfolio.positions:
  15. if stocks not in pool:
  16. order_target_percent(stocks, 0)
  17. result = []
  18. for codes in pool:
  19. if codes not in result and codes not in context.portfolio.positions:
  20. result.append(codes)
  21. if len(result):
  22. for r in result:
  23. order_target_percent(r, 1.0/stocks_len)

notebook链接:https://github.com/ChannelCMT/QS/tree/master/Class_1_Alpha

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注