[读书笔记]Finding Alphas
文章目录
- 定义
- Definition of alpha
- Efficient-Market Hypothesis (EMH)
- IC information coefficient
- 指标
- Alpha种类:
- 一个好的alpha标准
- 软指标
- 风险层面的评价 @Page74
- 硬指标
- Alpha的构建过程
- Alpha修正技巧
- 数学技巧:
- Alpha注意事项
- 为什么你的α\alphaα知道的人越少越好?
- 风险分析 @12 The relationship between alpha and portfolio risk @ 13 Risk and Drawdowns
- 降低风险的策略:
- 技术面技巧
- 基本面技巧 @ 7 Fundamental Analysis
- 可以寻找的数据源
- 好的资料书籍
Igor Tulchinsky是worldquant的创始人,从苏联逃到美国,在Mellinium内部做了几年后成为PM,创造出独有的量化公司组织形式
本书针对如何寻找、评价、优化α\alphaα进行了描述,同时给出了一些简单的alpha例子,基于WebSim给出了许多API介绍。
知乎某同人也有阅读笔记,链接如下:https://zhuanlan.zhihu.com/p/93618059
定义
Definition of alpha
- α\alphaα是一组数学公式,计算机代码及参数的集合,通过对于历史数据的应用实现对金融工具未来的预测
- α\alphaα是对于每种金融工具未来收益值得预测
- α\alphaα基于基本面的表达观点
Efficient-Market Hypothesis (EMH)
- weak:当前的价格已经将过去的公开信息反映出来
- semi-strong:过去的和当前的公开信息已经表现在价格之上
- strong:无论公开还是非公开信息已经全部表现在价格之上了
IC information coefficient
correlation of predicted return and realized return (对于个股的预测准确度)
IR=IC×sqrt(breadth)IR = IC \times sqrt(breadth)IR=IC×sqrt(breadth)
指标
- booksize:总的资金量,对于WebSim中,赚到的和赔了的钱均会被补偿,即不存在利滚利的现象,每天资金重新注入
- PbL: profit and loss:
dailypnl=∑(position×DailyReturn)daily pnl = \sum (position \times Daily Return)dailypnl=∑(position×DailyReturn)
dailyreturn=closetcloset−1−1daily return = \frac{close_t}{close_{t-1}} - 1 dailyreturn=closet−1closet−1 - Annual Return: 因为多空策略,因此booksize减半
Annualreturn=AnnualizedPnL/HalfBookSizeAnnual return = Annualized PnL / Half BookSize Annualreturn=AnnualizedPnL/HalfBookSize - Sharpe:
sharpe=E(return)std(return)=256×IR=256×E(DailyPnl)std(DailyPnl)sharpe = \frac{E(return)}{std(return)} = \sqrt{256} \times IR = \sqrt{256} \times \frac{E(Daily Pnl)}{std(Daily Pnl)}sharpe=std(return)E(return)=256×IR=256×std(DailyPnl)E(DailyPnl) - Max Drawdown: 最大回撤
- Profitable days:盈利天数占比
- Daily turnover: ratio of the value traded over the shares held。由于多空策略,volume要除以二
- Profit per traded:
PnLDollarsTraded\frac{PnL}{Dollars Traded}DollarsTradedPnL
Alpha种类:
- intraday, daily alphas, weekly/monthly根据不同频率划分
- 技术面(Price, Volume, Vwap等信息,通常频率较高); 基本面(Financial Statement,现金流,负债表,频率通常较低);宏观经济(针对industry级别的侧重);新闻及社交媒体(市场情绪及最新消息)
一个好的alpha标准
软指标
- idea比较单纯和简单
- 数学表达和代码比较典雅
- 对于数据的变化和参数的变化比较鲁棒
- Drawdown的时间比较短
- 它近期的收益比以前更高
- margin要求比较高,这样对于交易手续费会比较低(即收入远大于交易手续费)
- 在多个universe(TOP3000, TOP2000)均有效
- 在不同的地区的市场上均有效
- IR/tvr越大越好,不会受到市场短期的冲击
- 可解释性:要避免alpha构建的时候将不同单位的东西加起来,比如volume + price没有解释意义
- 对极端市场情况的高适应性,能够对压力测试表现良好
风险层面的评价 @Page74
- 策略垂直于某些风险空间,这样的策略无论风险如何冲击都不会影响到策略的收益
- 一个好的alpha能够在多个行业、多只股票上都表现优秀(降低个股或个别行业风险
- 一个好的alpha需要对收益的各个Quantil有着好的预测性,高收益高alpha,低收益团体中alpha均值较低。如果只在某些Quantile中表现较好,或者头部Quantile表现较差,我们可能需要重新调整alpha,或者(逼不得已)缩小universe。
硬指标
- drawdown要小于10%
- IS的sharpe表现较好,在worldquant内部,只有sharpe达到2.5以上才值得上交。 Sharpe描述了策略的confidence interval
- OS的表现同样较好
- 和现有alpha表现不同,即alpha信号及Daily PnL的correlation均比较小(<0.7)
评价 | Delay 1 Sharpe | Delay 0 Alpha Sharpe |
---|---|---|
极佳 | > 4.5 | > 6.0 |
很棒 | > 3.5 | > 5.25 |
好 | >3.0 | >4.5 |
一般 | > 2.5 | > 3.95 |
较弱 | > 1.0 | > 1.0 |
较差 | < 1.0 | < 1.0 |
Sharpe定义可以理解为年化的information ratio,关系可以定义为Sharpe=252IRSharpe = \sqrt{252}IRSharpe=252IR
Alpha的构建过程
收集、理解数据数据;获取关键信息;阅读论文->形成Idea->转换为数学表达式->通过operation对源Alpha进行装饰,增强鲁棒->测试
Alpha修正技巧
- 如果不想持仓的股票,最好把值设置为Nan,否则作Neutral的时候,0可能会被算入
- 市场中性,行业中性来避免市场风险、行业风险
- 使用ranking来避免数值的极端性
- 对于同样有效的信号,Universe越大,IR表现就越好,通常IR和交易产品种类的开方数值成相关性
- 利用人为的Prior降低fitting的程度
数学技巧:
- Fisher Transform formular,将数据强行拉到normal的形状
- Z-score,减去均值除以方差
- truncation
- winsorizing (trancate by quantile)
- ranking后重新线性变换[0,1],使得alpha更加stable,也可以缩小数值上的巨大差异。例如将correlation换成spearman模式
- Quantile分组,对Quantile进行回归或者approximation能够让结果更加稳定
- 低通和高通(Butterworth, 1930)使得平滑或者高频
- moving average, decay来使得曲线变平滑,降低noise的影响,降低tvr
Alpha注意事项
- 一定要避免过拟合,减小搜索空间,加入惩罚正则
- 对于outlier一定要谨慎处理
- 回测陷阱,回测假设市场流动性是无穷的,交易是免费的
- 交易中换手率的成本一个是在于交易费用,另一个是spread cost,也就是高低价格必须一方妥协才能真正成交,大的换手率对于流动性好的股票还可以接受,但是对于小盘流动性差的(特指美股,中国的中小盘交易流动性依然很好)
- 仅仅通过correlation来判别相似度可能会有错觉,因为规模很大的随即走势,也可以有将近0.2以上的correlation
import numpy as np
import seaborn as sns
data = np.random.normal(size=[10000,1000])
corr = np.corrcoef(data)
np.max(corr[np.where(corr<0.9)])ANS: 0.179
做out sample测试的时候有两个误区:
- 使用更新的数据作为训练集,使用老数据作为测试集:错误在于过去的一些经验和知识,或者信号可能已经在未来被发掘了,这样的测试有数据泄露的嫌疑,正常应该是用过往的历史数据来测试更新近的数据
- 使用一部分instrument作为训练集,使用剩下一部分作为测试集:错误在于instruments之间是相互correlated(例如行业之间走势相同),策略的训练也有数据泄露的嫌疑
同data不同的idea还是很经常会有高的corr,因此有时候要多用小众数据
自动搜索的alpha的时候,测试集不宜太古老,因为市场风格在随时间变化
对于自动搜索的alpha一定要对它进行鲁棒测试:不同的时间,不同的时常,不同的subset of data,不同的行业和区域,每一个输入都应该有比较高的贡献值,否则也存在overfit的可能性
为什么你的α\alphaα知道的人越少越好?
- 如果市场完全有效,则一切信息均会表现在市场价格上面,那么就不存在α\alphaα,正因为市场配置的无效使得alpha存在。公开可套利的alpha会使得市场配置更加有效,而这个alpha也会随之失效
- 市场资本是有限的(即市场深度,或者说流动性),对于单一alpha涌入资金增加会使得每单位资本的盈利能力下降
- 去除市场已知风险, less beta, more alpha
- PM的策略来源于:1)因子择时,2)将风险暴露在别人还不知道的领域,因此不会被冲击
风险分析 @12 The relationship between alpha and portfolio risk @ 13 Risk and Drawdowns
- 对于构建的alpha,需要明确或大致知道风险暴露和收益程度
- 恐惧对市场的影响远大于贪婪,因此跌快涨慢
- 对于同一个策略有太多人用的时候风险增加,因为当同策略撤资的时候,如果资金量越大,越难以以高价格撤出来
- 对于一个alpha,也要大致明白他的容量,如果太多资金注入一个前人未知的风险区,也让这个alpha本身成为了风险,也可能使得alpha失效
- 一个好的alpha需要护城河,不能是一个对于新手来讲就很intuitive的东西,否则失去了意义
降低风险的策略:
- 扩大universe来分散风险
- 降低每一只股票上的风险最大暴露
- 降低每一个行业上的风险暴露
- 降低在广为人知的alpha上的暴露
- 降低全市场的风险暴露
技术面技巧
- 放量的增跌往往对信号有确认作用
- 技术面往往是在择时入场,这样的策略往往是喜好Risk的,只有高的波动才有较高的收益
- 趋势效应的原因可能是:1)信息的滞后性,2)从众性,3)人们不愿意调仓
基本面技巧 @ 7 Fundamental Analysis
- liquid assets与liability之间的比值来判断公司的还债能力
- 长期债务越少越好
- 基本面分析通常要和行业内部进行比较
- reserve accounts下降,inventory上升,accounts receivables上升都是预警信号
- 看到企业的增速时,还要考虑增速的质量,Free Cash Flow的保证才是一个健康的增长(Sloan et al. (2011)),Cash Flow对于预测企业健康成长更改有用
- 财报里面角标的数量(footnote)也可能反映企业的好坏,过多的脚标可能是企业在隐藏什么
- 一个财报或者基本面数据的影响时间可能在60天左右
- 对于这类alpha,coverage可能比较小
- 对于分析师数据要小心使用,分析师可能会有幸存者偏差、有从众性、有滞后性、对市场有偏好。但是我们可以从研报中得到分析师的思考逻辑,对于其他行业中是否同样适用。分析师的整体风格偏向乐观,往往对市场有高估情绪
可以寻找的数据源
- Price, Volume等
- 基本面财报
- google trend
好的资料书籍
- Robust Statistics by Peter J. Huber (2004)
- Returns to buying winners and selling losers: implications for stock market efficiency, Jegadeesh, 1993
- SSRN
[读书笔记]Finding Alphas相关推荐
- 《Deep Learning With Python second edition》英文版读书笔记:第十一章DL for text: NLP、Transformer、Seq2Seq
文章目录 第十一章:Deep learning for text 11.1 Natural language processing: The bird's eye view 11.2 Preparin ...
- 《Real-Time Rendering 4th Edition》读书笔记--简单粗糙翻译 第六章 纹理 Texturing
写在前面的话:因为英语不好,所以看得慢,所以还不如索性按自己的理解简单粗糙翻译一遍,就当是自己的读书笔记了.不对之处甚多,以后理解深刻了,英语好了再回来修改.相信花在本书上的时间和精力是值得的. -- ...
- 【Python自然语言处理】读书笔记:第五章:分类和标注词汇
jupyter 版请见我的github:https://github.com/JackKuo666/Python_nlp_notes [Python自然语言处理]读书笔记:第五章:分类和标注词汇 本章 ...
- 《计算之魂》读书笔记 04
<计算之魂>读书笔记 04 1.4 关于排序的讨论 [1.4.3]针对特殊情况,我们是否还有更好的答案? [附录]为什么排序算法的复杂度不可能小于 O(nlogn)O(nlogn)O(nl ...
- 计算复杂性读书笔记(一): 判定问题,P,NP
2019独角兽企业重金招聘Python工程师标准>>> 计算复杂性读书笔记(一): 判定问题,P,NP 比特猪 quanzz1129@gmail.com 首先是版权声明,版 ...
- 《Real-Time Rendering 4th Edition》读书笔记--简单粗糙翻译 第五章 着色基础 Shading Basics
写在前面的话:因为英语不好,所以看得慢,所以还不如索性按自己的理解简单粗糙翻译一遍,就当是自己的读书笔记了.不对之处甚多,以后理解深刻了,英语好了再回来修改.相信花在本书上的时间和精力是值得的. -- ...
- 【读书笔记】知易行难,多实践
前言: 其实,我不喜欢看书,只是喜欢找答案,想通过专业的解答来解决我生活的困惑.所以,我听了很多书,也看了很多书,但看完书,没有很多的实践,导致我并不很深入在很多时候. 分享读书笔记: <高效1 ...
- 读书笔记:编写高质量代码--web前端开发修炼之道(二:5章)
读书笔记:编写高质量代码--web前端开发修炼之道 这本书看得断断续续,不连贯,笔记也是有些马虎了,想了解这本书内容的童鞋可以借鉴我的这篇笔记,希望对大家有帮助. 笔记有点长,所以分为一,二两个部分: ...
- 《编程匠艺》读书笔记
<编程匠艺>读书笔记之一 <编程匠艺>读书笔记之二 <编程匠艺>读书笔记之三 <编程匠艺>读书笔记之四 <编程匠艺>读书笔记之五 <编 ...
最新文章
- linux使用遇到的一些小问题
- 20172313 2017-2018-2 《程序设计与数据结构》第十周学习总结
- 更改Tomcat虚拟内存大小
- Google Chrome浏览器可能在您不知情的情况下破坏了您的测试
- mysql分区表达式_怎么定义 mysql hash分区使用的用 户定义的表达式
- 泰晤士计算机排名2021,THE2021年世界大学专业排名-计算机
- Django 分页器 缓存 信号 序列化
- python 多分类 recall_sklearn多分类问题
- Ubuntu镜像下载地址:Ubuntu-14.04/16.04/18.04
- 树莓派学习(二):摄像头模块的安装和使用
- python调用百度AI语音识别
- C语言用结构体实现串口协议
- Linux 音频系统简析
- 抚躬自问,我该怎样总结我的Q3?
- Graphics2D进行后台绘图
- python自动群发_python---自动群发邮件
- 人体相关的中日英表达
- 巴比特 | 元宇宙每日必读:杭州亚运会组委会将发售“亚运在中国”系列数字藏品;“戏曲元宇宙”戏曲元宇宙”是啥?怎么建?...
- 网络营销十道“羊皮卷”
- python量化 双均线策略(金叉死叉)