加载中…
个人资料
德铭资本
德铭资本
  • 博客等级:
  • 博客积分:0
  • 博客访问:121,565
  • 关注人气:80
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

一个简单的均值回归策略(halflife)

(2020-02-16 16:23:26)
分类: 新系统开发
任何策略指定之前都需要知道该策略针对什么市场,什么品种,一个均值回归策略奏效的前提是该策略对应的交易品种或者组合是一个stationarity序列,而同时我们也需要知道该品种均值回归的周期,简单说就是价格平均多长时间会回归均值,这个周期称之为‘halflife’,它就是我们计算平均值和标准差的窗口,通常来说一个序列越接近稳定序列它的回归周期halflife越短,对应的λ系数越小,先看看原理:
一个简单的均值回归策略(halflife)
一个简单的均值回归策略(halflife)

一个均值回归策略的制定第一步是通过基本的统计工具测试计算找到稳定序列,然后根据上面原理计算halflife,之后根据这个作为计算策略指标所需时间窗口,对于任何品种我们不能去计算出其统计特征然后找适合的品种然后用halflife为时间窗口计算其绩效,这样相当于掉入量化交易里面一个典型的陷阱--‘ look-ahead bias’前视偏差,我们必须用滚动预测的方法,即使对一些很简单只用于测试的策略也必须如此,所以下面的py例子就是用滚动预测的方法来避免前视偏差

由于我们已知真实市场的单一品种几乎都是几何随机游走,基本上长期来说没有具备stationariety特征的品种,也就是单一品种来说用均值回归策略的效果并不好,所以本例只是测试真实市场,并不是实战策略

有效的策略基本都是非常简单的,本例就是通过价格和其平均值的差异与其标准差的比值建立一个市场变量mktval,根据这个变量来决定头寸的大小和方向,每日收盘买入次日收盘退出然后根据信号再次建立头寸周而复始,这个策略用py一行就写完了,没有止损也没有算手续费,来源于Algorithmic_Trading_Winning_Strategies_and_Their_Rationale这本书里面的策略,这种傻瓜型策略可以用来检验我们的一些统计工具的效果,没有实战价值的,例如我们现在通过adf,hurst等可以测试一个序列的稳定程度,那么如果用这些统计工具来预测效果如何呢?这就是本文的目的

下面的策略简单来说一下,根据过去10年的全市场数据按照1-9年的跨度进行循环预测,例如2年预测1年,那么每年根据以往两年的数据计算参数为标准交易,3年预测1年同理,为了简便我们的更新周期设定为1年,统计的模式分为halflife, adf和Hurst三种工具,由于是个测试所以py程序我写得有点冗长,边写边改边看,没怎么优化,不过达到目的就行
一个简单的均值回归策略(halflife)

上面这句((mktval.shift())*(dfin-dfin.shift()))/dfin.shift()就是每日的绩效,换成这样更容易理解:
np.where(mktval.shift()>0,mktval.shift().abs()*(dfin/dfin.shift()-1),mktval.shift().abs()*(1-dfin/dfin.shift())),它们结果是一样的,就是根据mktval的方向和绝对值确定次日头寸的规模和买卖方向

一个简单的均值回归策略(halflife)

上面这个就是预测模型,根据三个统计工具在预测期间计算结果选取数值最小的品种(数值越小越接近mean_reverting)然后次年交易该品种,平均和标准差的时间窗口就是预测期间计算的halflife

最后看一下结果
一个简单的均值回归策略(halflife)

总体来说adf的预测效果最好其次是Hurst,三个都很不稳定,随机性很大,而且从绩效来看具备典型均值回归策略的特征,在重大环境改变的年份容易巨亏,三年不亏损亏损当三年就是均值回归策略的特征,和趋势策略相反

0

阅读 收藏 禁止转载 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有