在量化交易当中,如何提前控制策略回撤?

每个人的风险承受能力不一样,导致对策略最大回撤的承受能力也不一样,在策略开发当中,往往是需要回测之后,才能知道一个策略的最大回撤是多少。
策略的最大回撤在你回测完成之前是未知的,那有没有办法可以提前就控制住这个最大回撤呢?也就是说,假设自己就是只能接受本金最多亏损10%,那如何在量化策略设计之初,就能把这个最大回撤控制在10%以内。
那今儿个就来唠唠其中一种金融量化当中的原生态方法——风险价值(VaR,Value at Risk)。
从目前公开的资料来看,VaR是 J.P. Morgan( 摩根大通的前身 )的 蒂尔·古迪曼( Till Guldimann )在上世纪90年代领导发明的,起因是经历了1987年的股灾,差点儿没把摩根整破产,急需风险度量和管理。
当时的摩根CEO丹尼斯·韦瑟斯通(Dennis Weatherstone) 是一个典型的华尔街老登:不喜欢废话,不喜欢弯弯绕,不喜欢几十页精美的部门报告互相矛盾。
他就是要一个非常朴素的东西:每天下午 4:15(美股市场收盘、全球主要市场结算完毕之后),他的办公桌上必须出现一张纸,上面用同一种语言、同一个数字单位,告诉他就在此刻,全摩根的市场风险总共是多少。
为了满足这个要求,摩根内部的风险管理部门主管蒂尔·古迪曼带领团队,开始干一件很工程也很暴力的事儿,把全行各类资产(利率、外汇、股票、大宗商品)的收益分布用一套统一的统计框架拼起来,把不同期限的敞口通过映射到共同的时间轴上,然后把所有不确定性压到一个概率分布的分位数上,这也就是后来被明确定义的第α分位数:VaR。
VaR本质上回答的就是 摩根CEO丹尼斯·韦瑟斯通 那个粗暴但正确的问题:"在日常交易的时间里,我们最多要亏多少?"
在金融百科里,VaR 按字面的解释就是“处于风险状态的价值”,即在一定置信水平和一定持有期内,某一金融工具或其组合在未来资产价格波动下所面临的最大损失额, 用一个简单的中学数学公式表达出来就是:
P(Loss <= VaR) = α
其中,P(*)就是概率值,Loss表示损失额, α就是置信水平。
用人话来 举个栗子吧,例如P(Loss<=50000)=95%,这表示风险价值VaR=5w,置信水平是95%,简单来说,在95%的交易时间里,你所持有的证券最大的损失金额就是5w块钱。你可能会说,95%还不够靠谱,你想可信度再高一点,那你可以提高置信水平,比如说提高到99%。
目前常用的置信水平一般就是95%和99%,没有啥约束的个人投资者用95%就可以了,有严格风控要求的机构很多时候就需要用到99%,比如说私募接了银行的委外资金,清盘线设在了0.97,也就是说净值下跌超过3%就清盘了,这个时候就需要设一个极高的置信水平,容错率更高。
明白了VaR的金融内涵之后,问题就来了,那VaR具体是如何计算出来的呢?
VaR的计算一般有3种方式,分别是历史模拟法、参数法和蒙特卡洛模拟法。这些方法都各有优劣,今儿个讲既简单又实用的参数法,只涉及到中学数学。
了解过正态分布三倍标准差原则的小伙伴都知道,在正态分布当中,有68%的数据落在均值附近1倍标准差的范围内,2倍标准差附近的是95%,3倍标准差范围内的则是99.7%。

只不过在计算VaR当中,并不像三倍标准差原则那样考虑双侧(如[ μ-3 σ, μ+3σ]),因为VaR只在乎亏损,不在乎盈利,因此只考虑单侧(如[μ-3σ, + ∞ ])。

通过查标准正态分布的概率密度表可知,95%置信水平对应的Z值是1.645 ,99%置信水平对应的Z值是2.326。
也就是说, 假设证券的收益率近似服从正态分布,基于历史数据计算出 盈亏金额的 均值 μ和标准差 σ,那么该证券的盈亏金额落在[μ- 1.645 σ, +∞]区间的概率就是95%,有95%的 盈亏金额 比μ-1.645σ要大,有5%的 盈亏金额 比μ-1.645σ要小,于是在95%置信水平下对应的VaR= μ-1.645σ,同理,99%置信水平下对应的VaR=μ- 2.326 σ。
VaR可以计算出来了,如何用它来控制回撤呢?
举个栗子就明白了,假设你有100w,你计算出这个证券的VaR(95%)是要亏损20w,你只能接受的最大回撤是10%,那么(100w ×10% ) / 20w = 50%,也就是说,这个证券你只买入50%仓位,那么有95%概率,你的亏损不会超过10w,也就是最大回撤不会超过10%。
这里需要特殊说明的是,这里的VaR是对应单个持有期的,假设上面的例子是月度VaR,它表示你持有1个月,最大回撤不会超过10%,但可能是这个月回撤9%,下个月回撤7%,下下个月回撤8%,有可能造成累计最大回撤是24%。
因此在实际应用当中,“ 10% ”是你整个策略持有期间(比如说几年)所能承受的最大回撤,这个回撤是由连续下跌N个月完成的,那么你设置的单月回撤应该是“10%/N”。
但怎么知道它会连续下跌多少个月呢,也就是N值是多少呢,这里有个我个人的日常经验值,趋势类策略N=5,反转类策略N=3,因为趋势类策略胜率低赔率高,反转类策略胜率高赔率低。N值的确定在于你对自己策略的了解深度,你可以在我的经验值上做相应增减。
光说不练假把式,可以拿来初步试验一下,就拿群里小伙伴比较喜欢的ETF效率动量轮动策略为例吧,策略原理请见 《 十年多赚2400%,ETF轮动策略都经历了哪些改进? 》 ,先来看一下原始策略的绩效。


该策略是在去年10月发布,当时的年化收益是42.01%,最大回撤是26.05%,如今半年多过去了,目前的年化收益是略有下降,降到了41.46%,最大回撤没有变化。
假设我要跑这个策略,能接受的最大回撤是10%,而目前这个策略的最大回撤是26.05%,怎么办呢?
那就在ETF发生轮动时,用VaR去确定将要买入的ETF的仓位,有剩余资金的话,也不让它睡觉,可以用剩余仓位持有银华日利、国债ETF那些来增强收益,下面的回测绩效是闲置资金持有国债ETF的。


可以看到,最大回撤下降到了11.38%,同时年化收益也下降到了13.39%。为什么最大回撤超过10%了呢,因为目前设置的置信水平是95%,策略运行的10余年间总有5%的黑天鹅发生,导致最大回撤超过预期,如果把置信度水平提高到99%的话。


这回最大回撤就下降到6.59%了,同时年化收益也下降到了9.64%。
从上面的试验可以看出,VaR对策略的最大回撤控制还是有效果的,但是针无两头尖,在控制了回撤的同时,也会削弱收益率,因此这类方法对控制低回撤去追求更高收益的小伙伴更为适用。
好了,改进的方面就说完了,接下来再给想用该策略进行魔改/模拟/实盘的小伙伴的说一说参数设置的要点。

ACCOUNT_ID :就是你自己的股票账户的资金账号,回测的时候可以不填或乱填,实盘的时候一定要填自己正确的账号。
ACCOUNT_TYPE :因为ETF要使用股票账户进行交易,所以该参数固定为“STOCK”。
ACCOUNT_MODE :就是你打算用多少钱来跑这个ETF轮动策略,可选值为MONEY和RATIO。选MONEY就表示按照ACCOUNT_MONEY设定的金额,选RATIO就表示使用总账户ACCOUNT_RATIO那么多比例的资金。
ACCOUNT_MONEY :策略金额,单位是“元”,根据自己的资金情况设置,最低限度为能买得起候选池中任意一手ETF,建议不低于1000元。
ACCOUNT_RATIO :占总账户资金的比例,数值在0~1.0之间,0.3表示占30%比例。
STRATEGY_TRADETIME :策略进行交易的时间,因为ETF轮动策略是日线策略,一天那么长,所以需要指定一个具体的时间进行下单交易,必须是在交易时间段内。
ORDER_TIMEOUT :订单超时时间,默认是60秒,下单后超过60秒没有全部成交就是超时, 策略程序会自动检查出超时的委托单,然后撤单重下 。
STRATEGY_PATH :策略相关文件的存储路径,策略程序会在STRATEGY_PATH这个路径底下再新建一个名为STRATEGY_NAME的文件夹,策略相关的持仓文件和交易日志文件都会保存在这个文件夹底下,这些文件是做仓位隔离和信息回溯的关键。
STRATEGY_NAME :策略名称, 一旦开启实盘之后,策略名称不要随意修改 ,不然就无法识别策略持仓文件,如果在盘中修改然后重启策略的话,就识别不了修改之前下的委托单和成交单。 特别说明就是,策略名称除了中文和英文之外,不要含有任何特殊字符,不然就无法正确识别券商柜台的委托回报。
CODE_LIST :ETF候选池的代码列表,你也可以把自己想轮动的ETF加入进去。
N_DAYS :用来计算ETF价格序列动量和效率系数的交易日天数,默认是20天。
SELECT_NUM :选择几个效率动量趋势最强的ETF,可以选1个,也可以选前面的N个,任君选择。
VAR_POSITION : 是否启用VaR仓位管理,True表示启用,False则表示不启用。
PERIOD_RISK :单个ETF 单个持有期内最大可接受损失比例,0.02表示2%。
CONFIDENCE_LEVEL : VaR置信水平,0.99表示99%。
SUB_CODE : 剩余仓位配置标的,默认是 国债ETF, 设为None则剩余资金闲置,不用来购买任何证券。
本次 ETF效率动量轮动策略VAR版 的回测/实盘源代码,已经分享在『量化达摩院』社群当中,群友请原路径自取,还不会使用QMT进行策略回测和实盘的小伙伴,请参照社群知识库第二章的第3和第4部分进行操作。

根据之前的规则约定,带V1字样的是回测版,仅支持回测,主要是代码少,方便看策略逻辑,带V2字样的是回测实盘一体版,同时兼顾实盘和回测,方便对比回测实盘之间的差异,后缀py的是策略源码文件,rzrk是QMT当中的策略备份文件,在QMT中导入后,除了能看到源码外,还会带有策略回测时的各项参数,因此墙裂建议量化萌新通过rzrk导入的方式使用策略,会非常省心省力。
我是量化君,下期见~
★
往期回顾
★
------量化社群------
------量化策略------
------心得杂谈------
_ Tip:点击关键字可以直接查看对应文章。 _
END
如果对本文有疑惑,或是想聊聊
亦或是围观朋友圈当点赞之交
戳我,让我们一路同行
吃瓜吐槽写代码

![]()
风险提示:市场有风险,投资需谨慎。所有策略思路和策略源码仅供参考和学习,不构成投资建议,策略回测仅代表历史收益,不代表未来收益。
本文由量化君原创。转载时请注明作者及出处。
在微信公众号阅读原文 ↗


