昨天我们深入研究了一下各种技术指标,发现万变不离其宗,都是拿着量价数据搁这儿来回变化,那么问题来了,我自己能不能造一些技术指标出来呢?是的你可以的。
有个叫WorldQuant的公司就拿机器去组合各种量价指标,然后就搞了个Alpha出来,啥是Alpha呢?之前讲过了,就是超额收益,凡是能获取超额收益的因子,我们都管它们叫做Alpha因子。
论文(Kakushadze,Z.,.formulaicalphas.Wilmott,(84),pp.72-81)大概是这样的:我们来用我高考70分,四级弃考两次的英文水平翻译翻译这个摘要:
本文提出了个经过实证的量化交易Alpha因子,并给出了相应的公式与代码,其平均持股周期约0.6-6.4天,且各因子之间的平均相关性很低,仅为15.9%,股票的收益与其价格波动性密切相关,但对换手率没有显著的依赖性,直接证实了基于更间接实证分析的早期结果(这句话没看懂),我们进一步从经验上发现,换手率对alpha相关性的解释能力很差。
看上去是放弃了换手率这一因子,直接用量价去构建因子,为什么叫短周期因子呢,因为平均持股周期都不到7天,我们来看看他们都构建了个啥:
这里面参与运算的基础因子为:
returns=每日收益
open,close,high,low,volume=开盘价、收盘价、最高价、最低价、成交量
vwap=每日成交量加权平均价格
cap=市值
adv{d}=过去d天的平均每日资金量
同时定义了几个函数:
rank(x)=排名
delay(x,d)=d天前x的值
correlation(x,y,d)=过去d天x和y的相关性
covariance(x,y,d)=过去d天x和y的方差
scale(x,a)=缩放x,使sum(abs(x))=a(默认为a=1)
delta(x,d)=今天的x值减去d天前的x值
decay_linear(x,d)=过去d天的加权移动平均线,线性衰减
ts_min(x,d)=过去d天的时间序列最小值
ts_max(x,d)=过去d天的时间序列最大值
ts_argmax(x,d)=ts_max(x,d)发生在哪一天
ts_argmin(x,d)=ts_min(x,d)发生在哪一天
ts_rank(x,d)=过去d天的时间序列排名
min(x,d)=ts_min(x,d)
max(x,d)=ts_max(x,d)
sum(x,d)=过去d天x的求和
product(x,d)=过去d天x的乘积
stddev(x,d)=过去d天x的标准差
反正就是大概凑出了个因子,他们觉得好,就写了个论文放出来了,但是究竟好不好呢,国泰君安直接放出了《基于短周期价量特征的多因子选股体系》,并甩出了个Alpha:你那Alpha都是美股,来试试Alpha吧,更适合中国宝宝体质的奶粉!
大概意思和Alpha其实差不了多少,反正也是自定义了几个函数,然后一顿乱跑,最后算出了个Alpha。
那么问题来了,怎么知道这些因子到底好不好使呢?此处给出两个指标:IC值和IR值,其实也是老朋友了,一个叫信息系数,也就是相关系数,一个是信息比率,也就是IC均值比上IC方差。和谁相关呢?和t日后收益率啊!
IC即信息系数(InformationCoefficient),表示所选股票的因子值与股票下期收益率的截面相关系数,通过IC值可以判断因子值对下期收益率的预测能力。信息系数的绝对值越大,该因子越有效。IC为负表示因子值越小越好,IC为正表示因子值越大越好。IC的计算方法是:计算全部股票在调仓周期期初排名和调仓周期期末收益排名的线性相关度(Correlation),IC越大的因子,选股能力就越强。(这里先不讲NormalIC和RankIC的区别)
IR即信息比率(InformationRatio),是超额收益的均值与标准差之比,可以根据IC近似计算,IR=IC的多周期均值/IC的标准方差,代表因子获取稳定Alpha的能力。
当IC的绝对值大于0.05时,因子的选股能力较强,当IR大于0.5时因子稳定获取超额收益能力较强,具体公式就不给了,大概理解就行。
老规矩,上平台,今天给大家介绍一个叫bigquant的量化平台,也是我一直常用的量化平台。我们来对Alpha的因子做一些分析。
注册-登陆-编写策略-新建-因子分析-因子研究,多因子。
具体的操作不多说了,可以参考之前的文章FinHack笔记(28)-AI的力量!短线年化97%!,先点击因子分析,把调仓周期改短点,设置成5天。
再点击输入特征列表,把这几个来自Alpha的公式丢进去即可:
(-1*correlation(rank(delta(log(volume_0),1)),rank(((close_0-open_0)/open_0)),6))
-1*delta(((close_0-low_0)-(high_0-close_0))/((high_0-low_0)),1)
sum(((close_0-low_0)-(high_0-close_0))/(high_0-low_0)*volume_0,6)
close_0-delay(close_0,5)
open_0/delay(close_0,1)-1
但是今天我们来点不一样的,搞个打板因子怎么样?
(price_limit_status_0)*turn_0+volatility_60_0
(price_limit_status_1)*turn_0+volatility_60_0
(price_limit_status_2)*turn_0+volatility_60_0
(price_limit_status_3)*turn_0+volatility_60_0
(price_limit_status_4)*turn_0+volatility_60_0
解释一下,price_limit_status_N,BigQuant平台自带的因子,表示某股票前N天的涨跌停状态,涨停是1,跌停是-1,否则是0,就是前N天板了吗?没板就是0,板了就是1,然后我后面再乘个换手率和波动率,所以这几个因子就是今天板了吗?昨天板了吗?前天板了吗?……
丢进去,运行全部,稍等一阵子,结果出来了
IC绝对值0.05,IR绝对值0.5,这不就是我们想要找的优秀因子吗?试试?
新建-股票策略-可视化AI策略,m1代码列表处日期范围填-01-01~-01-01,m9代码列表处日期填-01-01~-03-22,m3特征列表处把打板因子丢进去,先瞅10天的:
(price_limit_status_0)*turn_0+volatility_60_0
(price_limit_status_1)*turn_0+volatility_60_0
(price_limit_status_2)*turn_0+volatility_60_0
(price_limit_status_3)*turn_0+volatility_60_0
(price_limit_status_4)*turn_0+volatility_60_0
(price_limit_status_5)*turn_0+volatility_60_0
(price_limit_status_6)*turn_0+volatility_60_0
(price_limit_status_7)*turn_0+volatility_60_0
(price_limit_status_8)*turn_0+volatility_60_0
(price_limit_status_9)*turn_0+volatility_60_0
同时修改StockRancker的参数如下:
学习算法改成二分类,叶子节点3,每叶子节点最小样本数,树的数量40,学习率0.7,特征值离散化数量。
是的,这就是经过我调参优化了的过拟合模型,效果尚可吧。
今天就先卷到这里了,量化群目前由于经常混入广告,不得已开启了群主邀请的限制,有兴趣参与讨论的同学可以加作者,入群参与讨论,群中将不定期分享量化相关资料。