量化交易中的因子

什么是Alpha因子?也就是超额收益因子。

我们首先总结一下基本因子:

  • 盈利性:投入资本回报率(ROIC)、已利用资本回报率(ROCE)、净资产收益率(ROE)、总资产收益率(ROA)、边际利润、人居收入、经济利润、投资增额收益。
  • 估值:自由现金流价格比、外部融资总资产比、企业价值与EBITDA比(EV/EBITDA)、市盈率、股息率。
  • 现金流:自由现金流(FCF)和营业收入之比、投入资本现金回报率(ROIC)。
  • 成长性:每股自由现金流、每股盈余。
  • 资产配置:净回购股份与投入资本比、一年流通股减少量、一年长期债务减少量、外部融资和总资产比、三年平均资本支出和投入资本比、收购与投入资产比。
  • 价格动量:相对强弱、价格范围、相对强弱指数。
  • 技术面因子:强弱指标(RSI)、随机指标(KD)、趋向指标(DMI)、平滑异同平均线(MACD)、能量潮(OBV)。

市场中的因子远远不止这些,所有的因子构成一个因子库:

  • 研报因子:基于分析师发表研报的个股因子。
  • 高频因子:继续挖掘日内模式中隐藏的alpha,提取出领先于市场的选股信息。
  • 新闻语料库:建立系统性的新闻语料库,通过高效的算法标注,非监督学习等方法,挖掘市场的舆情信息。
  • 基本面:细节、全面的财报信息分类整理。
  • 宏观因子:通过宏观经济的各类统计量,挖掘市场周期性变化,更为精确的预测市场走势与行情分化。

量价因子、基本面因子和另类因子(数据)三者的区别

量价因子是基于技术分析发展出来的,从简单的日级别技术指标类因子,到复杂一些的分钟级别量价因子,形态类、图形类因子,遗传规划挖出的因子等等,本质是刻画基于行为金融学的人的固定行为模式或是一些共识。基于固定行为模式的因子个人认为是靠谱的,因为宏观环境在变化,不同的风格在轮动,但是人类的决策机制是相对固定的,人类的内在驱动模式是穿着草和树叶与大自然搏斗时长期进化来的,这太靠谱了,不仅经济学,政治学都依赖于人的内在驱动模式稳定可预测。而基于共识的因子就不那么稳定,需要持续地仔细考虑共识是否消失。个人觉得量价因子比基本面因子更适合quant,但是量价因子的可理解性有时候较差,尤其是大批量挖掘时,出货一般较多,这时更需要仔细去理解、分类,来检视统计学上优秀的因子的内在金融逻辑是否靠谱。

基本面因子是基于价值投资发展出来的,主要是多数基本面因子剔除可能存在的随股价变动的部分外,剩余部分基本是季频变动甚至年频变动,若数据年份不长,则太容易过拟合了,而数据年份又不好拉太长,毕竟有很多宏观事件或者市场规则改变显然影响总体,拉太长总体变了,统计学当然就失效了。这里存在一个两难。

另类因子,就是非传统的,别人不容易获得或是不经常使用的因子,这类因子的获取动机或使用动机一般已经具有较强的金融逻辑,若足够幸运,在统计上有效当然是极好的。这类因子的缺点可能就是成本高,真就一铲子一铲子去挖金,姿势还千奇百怪,统计上到底有没有效做完才知道。

### 量化交易中的因子选择方法 在量化交易中,因子的选择对于构建有效的投资组合至关重要。因子可以被定义为能够解释资产回报差异的特征或属性。 #### 小市值效应作为因子之一 小市值公司股票往往表现出较高的波动性和潜在收益。研究表明,在某些市场条件下,小市值公司的表现优于大盘股[^1]。因此,基于市值大小来筛选股票成为一种常见的单因子策略。 #### 移动平均线的应用 移动平均线是一种技术分析工具,用于平滑价格数据并识别趋势方向。通过比较短期与长期移动均线的位置关系,投资者可以在上升趋势初期买入而在下降趋势形成前卖出,从而有效规避大幅下跌风险。 #### 布林带的作用 布林带由三条轨道组成——上轨、下轨以及位于两者之间的简单移动平均线(SMA),它不仅反映了市场价格的变化范围还提供了关于当前行情是否处于超买或超卖状态的信息。当股价触及到上方边界时可能预示着即将回调;反之亦然。这有助于判断市场的波动性及未来走势。 ```python import pandas as pd from matplotlib import pyplot as plt def calculate_bollinger_bands(data, window=20, no_of_std=2): rolling_mean = data['Close'].rolling(window).mean() rolling_std = data['Close'].rolling(window).std() upper_band = rolling_mean + (rolling_std * no_of_std) lower_band = rolling_mean - (rolling_std * no_of_std) bollinger_bands = pd.DataFrame({ 'Upper Band': upper_band, 'Lower Band': lower_band, 'Rolling Mean': rolling_mean }) return bollinger_bands # Example usage with hypothetical stock price DataFrame `stock_prices` bollinger_bands = calculate_bollinger_bands(stock_prices) plt.figure(figsize=(14,7)) plt.plot(bollinger_bands[['Upper Band', 'Lower Band']], color='orange') plt.fill_between(bollinger_bands.index.values, bollinger_bands['Upper Band'], bollinger_bands['Lower Band'], alpha=.1,color='orange') plt.title('Bollinger Bands Over Time'); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值