最近这段时间没有搂到啥有趣的量化策略,又不想开空窗,周末闲暇,就来唠唠如何把现有的策略做得更精细化,处理好一些开发细节,让原来的策略更亮眼,无需高深的数据处理和开发技巧,十年多赚200%+。
大道理就不瞎扯了,说多了大伙儿也不爱听,我自己是喜欢比较实操更接地气的东西,就拿之前开发的ETF轮动策略开刀吧,具体的策略构建细节可以看之前的两篇文章《手把手教你构建与改进轮动策略》和《换了量化平台,重新回测,还是十年10倍》。
给新来的但又不想看长篇大论的小伙伴,描述一下这个ETF轮动策略大致的思路,轮动候选池为:红利ETF(510880),创业板ETF(159915),纳指ETF(513100),黄金ETF(518880);每日为候选池当中的所有ETF进行动量强弱打分,ETF强弱得分为“价格序列斜率和决定系数的乘积”,买入得分最高的那个ETF,若得分持续最高则继续持有,否则卖出旧仓买入新的最强,回测绩效如下。
原始策略十年来回测的累计收益率是1040.55%,年化收益是28.74%,夏普率正好是1.0,咱就以这些回测绩效统计指标作为基准,判断之后修改的策略是否起到改进优化作用。
为了保证策略之间的可比性,回测时间依旧保留为2013年9月3日~2023年7月28日,ETF交易费率为万分之3,无印花税,当前交易日出信号,下一个交易日开盘成交,滑点、防未来等设置都与之前的一样。
闲白铺垫完了,下面进入正题,对原始策略第一处改进就是“对数处理”,这一点很常见吧,特别是对于接触过金融数据分析的童鞋。
在金融数据分析当中,通常都会对证券原始的价格序列进行对数处理,将原始价格转化为对数价格,然后再计算收益率等各种分析,为什么要这样做呢?
在统计上,这样能使数据序列更平稳、削弱共线性和异方差~什么~~看不懂~~~犯迷糊?不理解的小伙伴不要着急,接下来会说人话,总之对数处理好处多,我就说说跟这个策略相关的部分。
先举个栗子,假设有个ETF价格是1块钱,第一年先下跌了50%,跌到了0.5元,第二年上涨了50%,涨回到了0.75元,你瞧,平均收益率是0,1*(1-50%)*(1+50%)=0.75,但价格最终却是下跌了25%。
这就是用原始价格计算收益率时的一个弊端——涨跌不对称性,如果计算对数收益率就没有这个烦恼了,对数收益率=ln(原始期末价格/原始期初价格)=ln(原始期末价格) - ln(原始期初价格),ln()是以自然数e为底的对数函数。
第一年对数收益率 = ln(0.5) - ln(1.0) = -69.31%
第二年对数收益率 = ln(0.75) - ln(0.5) = 40.54%
平均对数收益率 = (-69.31% + 40.54%) / 2 = -14.38%
转化为最终的原始价格:exp(-69.31% + 40.54%) = 0.75
可以看到,平均的对数收益率是负数,表明最终的价格是下跌的,第一年下跌的幅度要比第二年上涨的幅度要大,并且,由于对数收益率的计算性质,对数收益率之间具有可加性,不像普通的算术收益率需要加1后连乘才能得到最终的价格。
这种对数化的处理就非常契合轮动策略当中的动量理念,这更加方便咱看价格走势,进而计算出价格走势的斜率了。
为了直观解释,再来举个栗子,简单粗暴假设有个ETF的价格每天都是上涨1%,咱分别画出原始价格的序列曲线和“ln(原始价格)”的曲线。
为了方便对比,我把两条曲线的首尾放到一起,原始价格(黑线)数值看左轴,对数价格(蓝线)看右轴。可以看出,对数价格曲线符合每日固定增长的走势,而原始价格的走势斜率会越来越大(这也印证了复利的威力)。
看完了对数处理的缘由,咱试一下把策略中的原始价格换成是对数价格,再跑一遍回测试一下。
跟原始策略对比,累计收益率从1040.55%提升到了1125.18%,年化收益从28.74%提高到了29.70%,夏普率从1.0提高到了1.04,看来这常规的金融数据处理还是有一丢丢的改进优化作用。
上面针对的是价格走势的处理,那价格是用什么来表示呢?肯定有很多童鞋本能地回答说是收盘价,这也没错,收盘价确实是其中的表示形式之一,咱之前也是怎么做的,但价格的表示不单单只有收盘价。
咱平常看盘的时候,映入眼帘的是K线序列,是一根根K线串联起来的,而收盘价只是K线当中的一个数值点,下面是沪深300指数的K线序列。
红线是最高价,白线是最低价,黄线则是收盘价,K线如果像是一条有一定宽度的布带的话,那收盘价只是这根布带之间的一条线,咱之前就是在用这根线的斜率,去衡量这条布带的走势。
如果是这样,那能不能多用几根线去表征这条布带?答案是肯定的,特别是开发CTA策略的童鞋,计算价格的时候会综合考虑开高低收、成交量、换手率等因素。
我就说其中一种常用且简单的形式,价格 =(最高价+最低价+收盘价)/3,这个平均出来的价格在坊间有很多种称呼,比如平均价格、价格中枢、K线中枢等,这些都是不成文的叫法,大伙儿明白我的意思就行了,下文就称为“K线中枢”吧(其实真正的K线中枢要有逐笔成交数据才能算出来,就当做是极其简化版吧)。
咱就用这个K线中枢,代替原策略当中的原始价格序列,重新回测一遍,看看效果如何。
跟原始策略这个基准比,累计收益率从1040.55%提升到了1233.22%,年化收益从28.74%提高到了30.84%,夏普率从1.0提高到了1.08,看来这K线中枢的改进优化作用比对数处理还要强。
既然对数处理和K线中枢对原策略都有改进优化的作用,那一起用会怎么样呢?
说干就干,先用K线中枢代替原策略当中的原始价格,再对K线中枢进行对数处理,接着的流程就跟原始策略的一模一样了,再来回测一番。
这个双管齐下的策略跟原始策略基准比,累计收益率从1040.55%提升到了1273.95%,十年间多赚了233.4%,年化收益从28.74%提高到了31.25%,多了2.51%,夏普率也从1.0提高到了1.1,比单独使用其中一种改进方式的效果要好很多。
量化策略的细节优化和改进,一般情况下不会带来翻天覆地的收益提升,但改进优化一次比一次好的话,长期累积下来,也是很可观的收益,同时也能减弱一些异常数值的干扰,是一种长期打磨的功夫。
这次唠了对数处理和K线中枢这2种很简单实用接地气的策略细节优化技巧,一般对原策略改动不大,并且有一定的提升作用,开发性价比还是挺高的,感兴趣的小伙伴可以自行尝试一下。
原文首发链接:《唠唠量化策略开发当中的细节优化,十年多赚200%》
标签:唠唠,原始,策略,200%,ln,ETF,对数,量化,价格 From: https://blog.csdn.net/iamquantman/article/details/140750563