公众号致力于分享量化策略,培训视频,Python,算法研究等相关内容。
大家好,我是Le Chiffre。本篇文章充分讨论策略失效,指数与主连区别,参数优化与过拟合,品种与策略组合,头寸资金管理等实盘相关问题。码字辛苦,强烈建议收藏,转发,点赞后观看,留言区可以参与讨论。
『正文』
ˇ
下面我整理几个近期大家给我发过来的几个问题如下:
A会员朋友:
1、选策略参数,一般是通过策略测试所有的品种,剩下的就开始一个一个参数逐步进行优化,参数步长都是1,基本筛选最优的参数;
2、选品种,就是通过回测近6年的数据,夏普较高的;
3、选策略,策略会先固定参数去测试所有的品种,如果超过10个品种都盈利,那就用,主要就是选普适较好的策略。
问题1,测试优化参数后,较好的品种基本都集中在黑色系,组合就比较偏向了某个板块了,那以后的行情还会像以前表现好?
问题2,按参数逐个优化,会不会形成过拟合,怎么优化才会合理,步长多少合理;
问题3,品种怎么组合才合理,开仓量是按品种的波动性还是按保证金,哪个才较合理。
B朋友:
1、如何挑选品种和对应的策略?
2、怎么确定参数失效?
C朋友:
1、头寸资金管理具体怎么做?
绝大部分朋友:
1、用指数回测和实盘区别大不大?
因为问题实在太多了,我个人时间和精力以及经验着实有限,所以把最为关键的几个问题拿出来分享给大家,也算是做好事儿了吧。
其实说回来,很多人问我,你们分享那么多策略,都打着可以实盘的旗号,你们为什么不自己做,还要拿出来,骗人的意味不明觉厉啊。其实我回答他当时就说了2句话,第一:对于投资谨慎一些总归是好事。第二:曾经一位好朋友就是因为用了我的策略,最后他亏了,我赚了。但我真的没有坑他,天地良心,可是为什么呢?后来这个人就把我拉黑了,当然日后也许有缘再见,或许这辈子再也不见吧。
我想表达的是就算我说了很多,讲了很多,依然是有人不听不看不懂的。就好像曾经20年前,初中老师对我们说的那句话:大考大玩,小考小玩,不考不玩一样。恍惚中20年后才逐渐真正明白话中的哲学意义。
废话不多说了,根据我个人的一些经验标准来给大家分享一下“关于策略组合与头寸资金配比问题的几点思考与总结”。事先声明:本篇文章所述仅仅是个人的经验观点,你可以各种天马行空的变,只要找到符合你自己的需求就可以。这里没有标准答案。
Question1:用指数回测和实盘区别大不大
区别大与小视情况而定。第一:如果这个品种的合约是近远月升贴水特别大,且是滚动的合约,那么指数数据一定是失真的。例如:鸡蛋。这种数据误差是特别大的,不能用。当然这里面有个问题——怎么算特别大?这个问题其实并不好去刻画,因为没有标准。如果有人有靠谱的想法也可以联系我,我也学习学习。我个人是采用主连复权和指数相关系数的方法,相关系数0.8以下判断此阶段行情出现了指数与实际行情的背离。有人说0.8不是高相关性吗?其实这个也是通过在一定的算法前,针对苹果和鸡蛋两个品种曾经的某段背离走势得出的结论。在行情明显背离已经开始了一小段时间后,相关系数接近并且下降到了0.8以下,如下图所示:
上面这幅图是苹果2019年1月-2019年5月的30分钟K线图,大家可明显看到上面主连是震荡向上的,但是下面的指数数据是震荡向下的,而此阶段的相关系数也是波动厉害但是整体往下走的。我们来看一下具体的时间点细节,如下图所示:
在2019年3月份指数的一根阴线跌破了前期的平台,但是主连却远远没有跌倒前期平台,说明过去到此时刻行情已经出来了不一样,而这种不一样也导致了相关系数的走低。0.8也是我个人主观通过这些可视化观察出来的,并没有什么更高级的逻辑。当然还是那句话,如果你有更好逻辑希望不吝赐教,我也学习学习。
关于如何计算两个数据源的相关系数,如下图所示:
通过我们SF21残差量化策略中的线性回归函数,计算出我们所需要的斜率,协方差=斜率*DX,分子=根号下DX*根号下DY,上下乘以根号下DX,最后即可计算出我们想要的相关系数。具体详情见SF29策略函数。
综上所述:一旦我们发现相关系数0.8以下或经常在0.8以下的,我们应该选用主连复权而弃用指数。当然了如果一直在0.8以上,理论上来说是无可厚非的,误差是一定的,但是用指数也可带来另一个好处那就是——过滤行情毛刺。
关于这个问题,很多人不同的认知不一样,所以并不能互相苟同。很大争议的问题这里就不过多讨论了。以上是我对于指数回测和实盘的最根本的看法和浅显的度量。当然,熟悉我的人都知道,我现在基本上都是用主连基本不用指数了,那么有的人会问了,那你还在这儿叨叨啥?直接告诉我们都用主连不就完了,但是吧,指数在和策略组合一起时候,的确可以减少交易次数提高交易胜率,但是这需要具体把控的。
Question2:头寸资金管理具体怎么做
我们先来具体看一下图:
上面这幅图是我分享的第一种方案,按照保证金或者市值约等于的方式进行调配板块和品种的资金头寸。当然通过我们账户的投资分析,我们可以绩效归因主要利润来自于哪些板块,根据绩效归因的比例,给与头寸配比资金一定大或一定小的权重。好的板块给与大一些资金权重,反之亦然。
那么说到这里,又会有人跟我杠精了,你怎么就那么确定未来还会好啊,以前不好的未来也有可能会出现好的动量趋势啊。的确,是有可能,但这种可能只是一种可能,在没有出现任何迹象和背后逻辑原因(包括政策、产业周期与格局、宏观周期等等)我不会去意淫他会变好,那叫赌。或者我换一个逻辑说,有很多人认为中国的白马或消费、白酒、医药等透支了未来3-5年的消费和估值,那么你是预期明天这些公司和股票完蛋还是未来3年5年10年完蛋?不要搞得自己跟个韭菜是的,掐指一算明天必到30,格局小了啊~
第二种,ATR倒数,但是这个倒数把很多人都给忽悠了。如下图所示:
上面就是公式和具体实现代码,怎么样够不够干货?但是实话实说,你要是原封不动拿来做,我保证你死的会很惨。如下图所示:
我们从最近两个月来说,一般往往我们每个人凭感觉也好,计算也罢,大家都知道哪个品种波动大合约大,哪个波动小合约小。上图我们可以看到在5/25和5/27焦炭开了10手,螺纹5手,铁矿石1手,铝5手,苹果6手,这显然是不合理的。因为如果那两天的持仓真是这种结构的话,那么其实整个账户都是在看焦炭表演,这笔单子焦炭亏了,那两天也就砸了买卖了,这显然是不合理的持仓结构和资金组合头寸管理。那么问题来了?海龟不就是这么搞得吗?难道海龟错了吗?其实还有很多其他的因素大家只不过是忽略了,导致了很多人断章取义用错了而已。
其中海龟资金管理法则中还有:每个头寸的大小应当等同于你资本总额的1%,单一品种仓位总计不超过资本总额的4%,高度相关的产品,总仓位不超过资本总额的6%等等条件在里面。
当然了,我们也没必要搞得那么复杂,毕竟谁也不是达里奥搞个期货投资还搞个风险平价出来。在此基础上的修改方案是我们可以根据最大品种合约(一般大合约往往带有大波动)做一个上限头寸额,然后所有品种的上限按照这个上限同比例加上天花板。这样在有天花板的限制下,在根据ATR倒数随机波动开仓头寸。
同时我也要指出,ATR倒数是在该策略在该品种下的一个资金头寸管理,在我个人经验看来,其实并没有考虑整体组合的考量。如果非要说这个理论在组合中的实践应用,我在这里也提出一个自己未曾实践过的想法:我们可以将组合内品种所有的ATR做归一化,然后计算每一个品种ATR倒数的占比,最后根据占比进行头寸资金分配。
第三种固定分数法,这种方法的目的是让策略确定每次交易中投注的资金比例,即:所谓的固定的分数,这一方法是在假定最大承受每笔合约的亏损基础上进行的。可用资金总额的f%为我们的风险资金,用这个数值除以我们设定的止损额度,即可得到我们能开仓手数。
举例说明:
100万本金,2%的品种头寸分配,那就是2万块,假设我们做的螺纹,假设系统止损额是2000块,那么我们可以开10手。
但是这里面有一个问题,那就是你的策略中止损是一个固定值,这就局限了你的策略止损止盈模块的写法。
其实还有很多各种各样的头寸资金管理方法,例如风险平价以及衍生的各种风险平价方法。但是这里面有一个问题就是,风险平价的前提先决条件是运用在能选的大类资产相关性低当中,而在期货当中这块是需要仔细修改和考量的。当然了,绩效曲线相关性低也可以把两个策略组合在一起而无视品种是否相关性高,组合在一起做一个动态的风险平价资金分配。
Question3:如何挑选品种和对应的策略?
这个问题其实比较主观,反正我个人是没有什么比较客观公允的量化方法去刻画和衡量。一般我就是选这个品种中最好的几个策略一起做,当然了,组合在一起有可能并不是最好。因为我们归纳和演绎分析来看,你选的每一个都是最好的,组合在一起肯定不会差,但是组合在一起的互补性并不能保证。而归纳起来看,组合最好的应该是所有策略对不同品种的全局最优的互补。这块具体的实践其实本人较少研究,个人意淫猜测:整体误差应该不会太差,所以基本上都是采用的演绎法。
因为这里面还涉及到策略参数的问题。
Question4:怎么确定参数失效?
这个问题其实有先验和后验的说法,甚至大部分人都是第一反应将这个问题与过拟合连接在一起而不能自拔。什么意思呢,就是说某个策略去匹配某个品种的某个周期,你在进行滚动测试发现,这玩意儿就是需要固定一段时间进行参数的优化与迭代,那么你就按照这个先验结果去做就好了,如果有其他的需求考量可以考虑上与不上,这是先验。
后验其实较为复杂,这不光与参数和过拟合有关,往往也与策略的逻辑有关,例如我们的SF21策略,该策略实际是一个不是很好把控的策略,除了参数以外,你要深刻理解策略开仓的逻辑和变量的计算算法,这些底层的算法与行情的波动结构有密不可分的关系。具体的我们就不举例说明了,因为这种问题要结合具体的策略来讲。
其次我要说一下过拟合的问题,因为确定参数失效也跟拟合有一定的关系,在基于 Bailey、Borwein、López de Prado 和 Zhu 在 2017 年发表的论文《The Probability of Backtest Overfitting》中提出的组合对称交叉验证(CSCV)框架,系统性地介绍回测过 拟合概率的测量方法,并且以实例展示不同类型量化策略的回测过拟合风险。
PBO(Probability of Backtest Overfitting)是定量衡量回测过拟合风险的指标,计算方式 基于 Bailey、Borwein、López de Prado 和 Zhu 在 2017 年提出的组合对称交叉验证 (Combinatorially-Symmetric Cross-Validation,简记为 CSCV)框架。假设以夏普比率 (Sharpe Ratio,简记为 SR)作为框架中的策略评价指标,
那么 PBO 可按如下方式定义:
= [ ∗ < ()]
其中,SR 表示“测试集”各组策略的夏普比率,n*表示“训练集”表现最好(夏普比率 最高)的那组策略,ME 表示中位数。注意到这里的“交叉验证”、“训练集”和“测试集” 并不完全等价于机器学习传统意义上的相关概念,但是有异曲同工之处。
计算步骤如下:
①先求出矩阵M,分别表示每个参数组合在每根K线上的equity_change,大小为T×N阶(T根K线,N种参数组合)
②以行为单位对矩阵M进行分割,分割为S段,本处取10,原因见下部分
③从S段中随机抽出S/2段,作为子集,例如取第[1, 3, 5, 8, 9]段,本处10/2 = 5,共252种组合
④计算λ
生成训练集,S/2段 × N阶
生成测试集,生成S/2段 × N阶
找到训练集中,最优的参数(以夏普为标准)
计算训练集中的最优的参数,在测试集中的排名w(0<= w <= 1)
计算λ = ln(w / (1-w))
⑤共252个λ,计算出λ < 0的个数占比,即得出PBO(PROBABILITY OF BACKTEST OVERFITTING)
具体核心示例代码如下:
CSCV 框架下回测过拟合概率的核心思想是:计算“训练集”夏普比率最高的策略,在“测 试集”中的相对排名,如果相对排名靠前,代表回测过拟合概率较低,反之则代表回测过拟合概率较高。
但是实际实践中我们会发现,无论是机器学习中模型超参数选择不当或者模型过度训练的过拟合,还是在择时策略中是市场规律发生变化,或对回测期数据噪音的过度学习的过拟合,两者计算的其实都是一个概率,对于某种方法过拟合概率的计算,择时策略本质上就是一个“敏感体质”。说一句我个人多年对于所谓普适性策略和万年不变参数的经验之谈,不存在所谓的毕其功于一役,我说的直白点——过拟合≠不赚钱。但是大部分人都没有这种认知,所以也不要一听我这么说就怎么怎么样,毕竟认知有限情况下,你把握不住。
Question5:测试优化参数后,较好的品种基本都集中在黑色系,组合就比较偏向了某个板块了,那以后的行情还会像以前表现好?
其实不用测试大家都知道较好的品种在黑色,我想这个都不用我去解释了。但是你不能说因为选择的策略都黑色好,然后哗哗哗都上的黑色,其他的不上了,你那跟主做黑色系有啥分别?你要是这种操作然后还幻想着多策略多品种多周期组合让曲线平滑那你是痴人说梦,在平滑肯定也不如与有色、化工、农产品组合在一起平滑,除非你的策略在黑色上面的确很厉害,但同样道理,黑色很厉害在其他品种实践上应该也是不会差的。
这就尴尬了,组合测试偏向了黑色,首先说明:可能策略选择有问题或者策略本身就有问题,其次,并不是说化工、有色上面没有跟黑色一样好就不行,因为本身这些品种的确出现动量的概率低,不好做。
以后行情还会像以前一样好吗?我不知道,所以才有了组合一说,如果都知道以后行情跟以前行情表现好,还组合毛线,就好好做黑色不就完了。
Question6:按参数逐个优化,会不会形成过拟合,怎么优化才会合理,步长多少合理
至于你说的优化和过拟合,我想我上面已经说过我的认知了,这里不再赘述。这里我只说一下我所采用的工具和方法——参数稳定有效域。
下图是随意找的一个策略进行的参数寻优测试导出的EXCEL表格。
我们根据净利润为绩效目标,对两个参数字段进行排序组合,如下图所示:
在参数排序且条形图可视化我们可以看出,无论在第二层参数什么情况下,第一层参数均是在60位置净利润最高,且净利润变化不大,从这种定性观察,在第一层60参数情况下,第二层任意参数均可。
但是从另外一个角度来说,如果我们可以遍历出尽可能多的围绕60前后的参数情况,条形图观察出可以得到更完善的信息。
至于说不长,最好不要太过于密。不过过密也无所谓,可以采用我上面的定性方法进行定性测评。
Question7:品种怎么组合才合理,开仓量是按品种的波动性还是按保证金,哪个才较合理。
品种组合还是尽量不要枪打出头鸟,因为组合的目的就是平稳,平稳的本质还是风控。那么如果你每天心里总是揪着这工作区,那说明你的组合就是有问题的,因为你心里没底吗,没底的表现就是风控不到位啊。风控不到位抛开策略和行情,就是头寸和组合问题。
至于说品种筛选,简单的方法,第一:看你这个品种有几个你能看上眼的策略,那个多按照从多到少排序选哪几个,排到最后肯定有你不上的了。第二:看波动率,找波动率排序前几名的。第三:看策略历史最大未创新高时间,或者品种近2-3年创新高或者新低的。另外还有可以从基本面判断的,如下图所示:
综上所述:这即是整体对大家的一些问题的解答。其中有一些问题,说起了着实复杂,甚至有的问题涉及到一些认知和经验,以及很多东西是没有标准答案的。当然这也算是自己以往的一个经验总结和思考吧。以前也没有做过相关的思考,别人问我的时候,基本上也是想起来几点说几点。这一次算是小总结一下,当然并不完善的地方还很多,后面有时间或者朋友们有需要我在进行进一步的分享。
感谢大家。
咨询
本策略仅作学习交流使用,实盘交易盈亏投资者个人负责。
End
咨询详情
长按下方二维码
对话框回复 SF24 咨询源码领取
(俱乐部加入→回复VIP)
算法策略专辑:
8.【算法策略】追涨杀跌+震荡反手,趋势震荡相结合的交易策略
量化视频专辑:
量化研究专栏:
量化研究 | 来聊一下量化交易的人工干预、参数失效、筛选品种
祝点击在看的小伙伴,2021账户长虹