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

文章配图

每个人的风险承受能力不一样,导致对策略最大回撤的承受能力也不一样,在策略开发当中,往往是需要回测之后,才能知道一个策略的最大回撤是多少。

策略的最大回撤在你回测完成之前是未知的,那有没有办法可以提前就控制住这个最大回撤呢?也就是说,假设自己就是只能接受本金最多亏损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导入的方式使用策略,会非常省心省力。

我是量化君,下期见~


往期回顾

------量化社群------

量化达摩院

量化藏经阁Max

量化藏经阁2026

------量化策略------

桥水全天候策略 风险平价策略

聪明钱 TrendModelSys 张坤策略

RSRS 北向资金 F-Score 鱼身策略

TrendPattern 波动率收敛 RSJ策略

期货Alpha 跨品种套利 GARP策略

MACD形态 导数策略 Trendflex

绩优小市值 漂亮50 操盘手 Rumi

AI择时 K线面积法 零代码策略

贴水策略 概率密度策略 一致预期

RSRS复现1 RSRS复现2 ICU均线

野路子策略 ETF轮动 ETF轮动2

菜场大妈&马科维茨 多赚200%

美债&A股择时 价比斜率套利

黄金价格预测 量化兵器库

十年零回撤 红利策略 数字信号

------心得杂谈------

入门路径 量化书单 量化神作

打开黑箱 量化手册 量化攻略

个人量化 量化误解 高收入背后

西蒙斯 雪球爆仓 量化交易邪术

量化网站1 量化网站2 量化狠人

年化577倍 抄底&摸顶 策略开发

未来函数 回测&过拟合 回测&实盘

Alpha&风险因子 MACD参数

资金流 吃贴水 回测提速 量价背离

自学路径 文章合辑 151个策略

chatGPT选股 量化注册制

5年131倍 量化编程神器

4000因子 因子库 量化神集

量化深坑 老胡炒股 私募上班

机器学习算法Top10 微盘股

量化的一天 失败的Quant

十年8万倍 五穷六绝 一月之殇

_ Tip:点击关键字可以直接查看对应文章。 _

END

如果对本文有疑惑,或是想聊聊

亦或是围观朋友圈当点赞之交

戳我,让我们一路同行

吃瓜吐槽写代码

文章配图

文章配图

风险提示:市场有风险,投资需谨慎。所有策略思路和策略源码仅供参考和学习,不构成投资建议,策略回测仅代表历史收益,不代表未来收益。

— 全文完 —

本文由量化君原创。转载时请注明作者及出处。

在微信公众号阅读原文 ↗