课程  因子投资  机器学习  Python  Poetry  ppw  tools  programming  Numpy  Pandas  pandas  算法  hdbscan  聚类  选股  Algo  minimum  numpy  algo  FFT  模式识别  配对交易  GBDT  LightGBM  XGBoost  statistics  CDF  KS-Test  monte-carlo  VaR  回测  过拟合  algorithms  machine learning  strategy  python  sklearn  pdf  概率  数学  面试题  量化交易  策略分类  风险管理  Info  interview  career  xgboost  PCA  wavelet  时序事件归因  SHAP  Figures  Behavioral Economics  graduate  arma  garch  人物  职场  Quantopian  figure  Banz  金融行业  买方  卖方  story  量化传奇  rsi  zigzag  穹顶压力  因子  ESG  因子策略  投资  策略  pe  ORB  Xgboost  Alligator  Indicator  factor  alpha101  alpha  技术指标  wave  quant  algorithm  pearson  spearman  tushare  因子分析  Alphalens  涨停板  herd-behaviour  momentum  因子评估  review  SMC  聪明钱  trade  history  indicators  zscore  波动率  强化学习  顶背离  freshman  resources  others  AI  DeepSeek  network  量子计算  金融交易  IBM  weekly  LLT  backtest  backtrader  研报  papers  UBL  quantlib  jupyter-notebook  scikit-learn  pypinyin  qmt  xtquant  blog  static-site  duckdb  工具  colors  free resources  barra  world quant  Alpha  openbb  数据  risk-management  llm  prompt  CANSLIM  Augment  arsenal  copilot  vscode  code  量化数据存储  hdf5  h5py  cursor  augment  trae  Jupyter  jupysql  pyarrow  parquet  数据源  quantstats  实盘  clickhouse  notebook  redis  remote-agent  AI-tools  Moonshot  回测,研报,tushare 

factors »

7月:斜率动量因子表现回顾


Table of Content

斜率因子是动量因子中的一种,它由Andreas F. Clenow 首先发表在Stocks on the Move: Beating the Market with Hedge Fund Momentum Strategy一书中。

这个因子比起卡哈特的动量因子更符合人的直觉,特别是喜欢看K线的投资者,因此也得到了很多人的喜爱。其实现在Quantopian和QuantConnect网站上都有文章讨论。

题图:Andreas Clenow的著作: Stock on the Move 封面


Tip

我们简单回顾一下Mark Carhart提出的动量因子,它是计算单个股票过去一年的回报率,排除最近一个月数据(以防股价操纵),再按回报率排序,取前10%的股票作为买入信号,末尾10%的股票作为卖出信号。

在Andreas Clenow的策略中,他使用了过去90天的年化指数的回归斜率作为动量因子。由于信号只响应过去90天的数据,因此,信号就比卡哈特的动量因子更灵敏一些。

不过,我们今天测试的因子,是用过去10天的回归斜率作为动量因子。主要目标是尝试下新的可能性,也是考虑到在A股,动量因子的半衰期一般比较短的缘故。

我们的计算方法如以下代码所示:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
def moving_slope(close: NDArray, win:int, *args):
    # 创建滑动窗口的视图
    shape = (win, close.size - win + 1)
    strides = (close.itemsize, close.itemsize)
    cw = np.lib.stride_tricks.as_strided(close, 
                                         shape=shape, 
                                         strides=strides)

    # 对每个窗口应用linregress,获取斜率
    x = np.arrange(win)
    slopes = np.apply_along_axis(lambda y: linregress(x, y)[0],
                                  axis=0, arr=cw)

    return slopes

测试参数如下:随机抽取2000支,从今年的1月4日,测试到7月31日,计算斜率时,使用过去10天的收盘价;计算收益时,使用开盘价,从次日起。


因子分层如下:

分层收益均值图如下:

显然,10期的斜率因子成了反向指标,也就是短期上涨越快,买入后亏损越多。


既然如此,我们就取斜率因子的负数作为新的因子,再运行一次:

理所当然,这个图只是前面的图的镜像。我们来看看收益:

7个月的累积收益接近15%了,最大回撤5%左右,在今年来看,表现还可以。

Tip

上一篇RSI的因子测试中,我们也对因子构成做了一些微调。有同学认为,微调之后,数据变好,这是过拟合了。今天写这个因子时,想起来在Alpha101中,他们抛弃掉了动量最大前n%的因子,这也是一种修正。警惕过拟合是对的,但不是数据一变好就是过拟合。


再深入到分层累积收益:

可以看出,因子的稳定性比较好,期间没有发生明显的风格转换的情况。

当然这个因子要投入实战的话,可能不适合个人和中小机构。因为从分层图来看,它的收益主要是由做空产生的。

如果我们没有机会做空,因子的表现又将如何?下图是纯多情况下的收益:

这个表现并不出人意料。在2月有一个强反弹,在此期间,因子的表现不错。但随后市场越走越弱,动量因子的半衰期越来越短,单多收益就一路走低。


L50

前天,七八月之交,A股出现一轮牛市,跨越两个月,长达86400秒。随后再次进入休眠状态。这个现象,也许不能用今天的介绍的动量因子来预测,但动量因子表现如此之弱,却能在一定程度上,说明为什么连续上涨未能出现。

另一个结论,正是因为做空的收益比较确定,所以易跌难涨。方主席下岗了,看看后面做空机制上能否有所变化。毕竟,能做空的机构也只是少数。制度应该对所有参与者都公平。

左图是Andreas Clenow的著作,Stocks on the Move: Beating the Market with Hedge Fund Momentum Strategy。Andreas Clenow是一位瑞典裔瑞士籍作家、资产管理人及企业家,现居于苏黎世,在一家家族办公室担任首席投资官。在其辉煌的职业生涯中,他曾是一名科技创业者、金融顾问、对冲基金经理、金融工程师、量化交易员、财务顾问、董事会成员,以及企业中层管理官僚。

在这本书中,Clenow详细解释了动量策略的原理,即买入过去表现优秀的股票,卖出或做空表现不佳的股票,利用市场趋势的持续性来获利。书中对比了技术分析和基本面分析在动量策略中的应用,以及如何结合两者的优势来提高交易效果。