量化投资速成营(入门课程)
Python股票量化投资
Python期货量化投资
Python数字货币量化投资
C++语言CTP期货交易系统开发
数字货币JavaScript语言量化交易系统开发
每个策略都有其相适应的行情,如果某一段行情符合策略的逻辑,那么策略就会在这段行情大赚。但是,就如同硬币有正反面,策略在不适应的行情期,也会出现亏损的情况。优秀的策略,在不适应行情期能够做到小亏或者打平,而对于不太理想的策略,在不适应行情期有可能会大亏。第二类策略,是我们在测试过程中或是实盘交易过程中需要尽可能避免的,哪怕已经实盘,也需要在大幅度亏损后的第一时间停止交易,仔细分析交易逻辑。在这篇文章中,我们重点想要讨论的是,第一类策略的仓位选择时机。
纵使第一类策略很优秀,也有一定的概率遇到一段较长时间的不符合行情(历史没有出现,不代表未来不会出现),即使策略在不适应行情只是小亏,但是很多次小亏累积起来,也会逐步增加账户的亏损,从而对量化策略的执行者造成很大的心理压力,容易无法坚持执行策略。下图就是一个典型的例子,特别是在两段黄色框线的区域。
如果看到上图,你可能不会觉得黄色框线区域在执行上有多困难,但是假如策略刚开发完成时,资金曲线下图是这样的。你感觉策略很不错了,准备好资金,放上实盘开始交易。
但是运气不太好,刚开始交易,就遇到了策略的困难时期,不适应的行情造成策略一直在亏损,磨损资金中,甚至破了此前策略的最大回撤(MDD),此时伴随而来的是对策略的怀疑:我是否在策略开发过程中过度拟合?是否策略已经在当前的市场失效?又是否我只是运气不好?随着回撤的时间增加、回撤的幅度增大,就越有可能在丧失信心后修改/停止策略。
就在我们修改/停止策略后,将策略丢弃在一旁,过了一段时间又想起了测试了一把,发现策略居然又创了新高。于是,这样一个优秀的策略,不仅在实盘中没有赚到钱,反而还亏损了。
如果对策略仓位进行一定程度上正确的择时加减,可以减小这种压力和停止策略的遗憾。我们知道,策略表现的好坏,最直观的反应在策略的资金曲线上。以最典型的突破型趋势策略为例,这个大类的策略,一旦遇到震荡行情,资金曲线往往都会走平或者回撤。此时,可以加入一个简单的依据资金曲线择时的逻辑,即在资金曲线走坏时对策略进行减仓,而当资金曲线上升时加仓,或是恢复原本减仓的仓位。(当然也有例外,对于一些高夏普极其稳定的高频策略,如果对自己的策略很有信心,同时也有闲置资金的前提下,可以在回撤时进一步加码。)
本文重点讨论的,是当策略资金曲线走坏,而执行者又没有信心的情况,该如何去做?此时,应当对策略进行减仓,建仓后最直观的好处是:资金曲线的最大回撤比率会适当降低。那么,如何来量化策略的加仓、减仓时机呢,最简单的玩法,对资金曲线再拉一条移动平均线,当策略跌破均线,进行减仓,而当策略回到新高,进行加仓。
如何在程序中加入此类对策略加减仓的逻辑,我们以multicharts(mc)为例,有两种方法:
方法一:使用entryprice,exitprice,计算出每次交易的利润,再根据利润数值计算均值,进行仓位的加减码计算。这个方法的优点是,计算出的净利润可以真实的反应策略原本固定仓位时的利润率,而不会受到仓位变动的影响,因此可以精确的计算出策略加仓、减仓的时机。而相应的缺点是,相对于原始策略逻辑,需要做较大的代码上的改动。
方法二:使用mc内置的netprofit变量,直接做均线运算。该方法的优点是程序实现比较简单,基本上不需要改动原先的主要策略逻辑,只需要加上过滤条件即可,而缺点就与方法一的优点相对应,netprofit幅度会直接受到此前策略加减仓位的影响,造成加减仓位的时机的延迟。
由于方法二的实现较为简便,我们使用方法二,对一个具体的策略进行加减仓,逻辑很简单:在该策略中计算netprofit变量的均线,当netprofit大于均线,仓位是2份,而当netprofit小于均线,仓位是1份。与此同时,我们还有一个对照组,即不论何时,仓位都是2份。一起来看一下两者的对比绩效。(图1减码、图2未减码)
可以看到,两者方法的净利润相差很小,但是减仓绩效的亏大回撤,相比较不减码降低了,从原先的27万多,降低到了22万多,也证实了我们此前的猜想。
除了均线加减仓法,我们还可以把资金曲线当作一个特殊的品种,同样采用顺势的操作:当资金曲线突破N周期高点时,开启策略或者对策略进行加仓;当资金曲线突破N周期低点时,关闭策略或者对策略进行减仓。当然,这个N周期的N参数不能太小,否则就会陷于不断加仓减仓,无故损耗手续费的不利境地中。
同样举一个例子:当资金曲线跌破最近50笔交易累积利润的最小值,则停止交易,而当资金曲线回到50笔交易累积利润的最大值(即资金曲线破前高),则开启交易。先来看资金曲线的对比。
图1是做了加减仓的资金曲线,图2是原始策略的资金曲线,图1的曲线很显著的在策略回撤期,停止了策略,并在策略利润回复时重新开启策略。
对比策略具体绩效参数,也可以看到,与均线加减仓类似,高低点加减仓,同样能够在不显著影响策略净利润的前提下,降低策略的最大回撤值。
通过资金曲线对策略进行加减仓,在大多数情况下,是需要牺牲掉一些策略本身的利润,来换取策略最大回撤的降低,因为本质上和直接应用到金融资产的趋势策略信号一样,每次的进仓、出仓,都需要在确认趋势之后才能进行,会有一定的延后性。
在技术宅看来,尽管有减小利润的弊端,资金曲线加减仓,还是一个值得尝试的方法,因为它可以避免两种情况:
第一,对于优秀的策略,遇到文章开头出现暂时回撤的情况,哪怕使用减仓方式停止了策略,后续策略资金曲线创了新高,也会按照同样的方式加仓回来,这样我们就不会错过真正优秀的策略。
第二,对于回撤美如画,实盘战五渣的策略,我们也不怕,如果策略一直回撤,那我们也只会亏损开始一段的资金,随后只要策略不创新高,就不会承担后续的损失。
一句话总结:资金曲线加减码,相当于给策略加了一道保险。
往期干货分享推荐阅读
数字货币中短线策略(数据+回测+实盘)
量化投资对于数据源、回测、实盘平台的选择
数字货币稳定币对网格做市策略
万物皆可秒——淘宝秒杀Python脚本,扫货618,备战双11!
数字货币资金费策略
数字货币无风险收益率又双叒叕扩大了!
分享一个年化15%以上的无风险套利机会
【数量技术宅|交易系统开发系列分享】网格交易系统开发
通过深度学习股价截面数据分析和预测股票价格
剖析一个数字货币高频策略
数字货币交易信号实时预警推送(含群聊)
Omega System Trading and Development Club内部分享策略Easylanguage源码
量化交易如何选择云服务器,如何在本地远程开发与调试云服务器程序
一个真实数据集的完整机器学习解决方案(下)
一个真实数据集的完整机器学习解决方案(上)
如何使用交易开拓者(TB)开发数字货币策略
股指期货高频数据机器学习预测
如何使用TradingView(TV)回测数字货币交易策略
如何投资股票型基金?什么时间买?买什么?
【数量技术宅|量化投资策略系列分享】基于指数移动平均的股指期货交易策略
AMA指标原作者Perry Kaufman 100+套交易策略源码分享
【 数量技术宅 | 期权系列分享】期权策略的“独孤九剑”
如何获取免费的数字货币历史数据
【数量技术宅|金融数据分析系列分享】套利策略的价差序列计算,恐怕没有你想的那么简单
【数量技术宅|量化投资策略系列分享】成熟交易者期货持仓跟随策略
【数量技术宅|量化投资策略系列分享】多周期共振交易策略
【数量技术宅|金融数据分析系列分享】为什么中证500(IC)是最适合长期做多的指数
大宗商品现货数据不好拿?商品季节性难跟踪?技术宅带你Python爬虫一键解决没烦恼
【数量技术宅|金融数据分析系列分享】如何正确抄底商品期货、大宗商品
【数量技术宅|量化投资策略系列分享】股指期货IF分钟波动率统计策略
【数量技术宅 | Python爬虫系列分享】实时监控股市重大公告的Python爬虫