市值风云:在A股熊市里跑出三年12倍的量化模型
前言
量化交易在今天的金融市场上早已不是什么新鲜的名词。即便如此,对于没有一定编程基础的大多数投资者来讲量化交易依然被一层若有似无的神秘面纱笼罩着。
随着近年来金融科技(Fintech)的发展,量化交易对于普通人来说变得越来越触手可及。数据获取的简便程度,编程语言的简化,各种量化平台的兴起,让量化交易正在快速的飞入寻常百姓家。
有人说量化交易是可以旱涝保收、坐收渔利的黑科技;也有人认为量化交易的数学模型无法理解各种影响市场的外在因素的含义,一旦市场发生重大变化,很可能令投资者遭遇滑铁卢式的失败。
根据风云君的理解,量化交易既不是天堂,也不是地狱,它只是一种自动化较高的交易方法而已。
就像股票交易从最初的填写纸质单据,到电话交易,再到网上交易,量化交易也仅仅是一种属于新时代的交易方法。但是量化交易确实给我们提供了两大无可忽视的便利:
其一是数据的获取和处理速度的极大提升。在纯手工操作的情况下,每天都需要花费至少一小时的时间来寻找相关标的并且交易。但是在量化交易的框架下只需要不过数秒的时间。
其二是提供了回测可能性,这是至关重要的一点。以往投资者的所有决策都是建立在经验主义的基础上:“我认为这种投资模式可以”,“我觉得这种走势非常强势”,“经验告诉我应该这么做”。
然而这种经验主义的认知有时与现实存在巨大的偏差,而量化回测可以帮我们验证自己的认知,这无异于让投资从石器时代走入了科学时代。
有鉴于此,风云君希望可以和大家分享一些从量化模型研究中获得的启发,并且尽量不包含代码以及复杂的数学公式以增加文章的易读性。
不过希望读者们注意,文章中的各种收益率其实都是基于过往数据的一种统计结果,并不能代表日后的收益;也希望各位可以更多的把关注点放在相应的思路及启示上,可以有自己的辩证思考。
01 本想做个demo,没想到一下子牛B了一把
书接正文,作为系列的第一个模型,今天我们从一个相对简单的被动型分时交易模型说起。
不知道对于混迹于A股市场多年的资深韭菜们而言,是否能对2015年6月这个这个时间点有些印象?那是上一轮牛市的终点,同时也是本轮熊市的起点。
从2015年6月到2018年年底的区间内,上证指数、深成指的跌幅均在50%左右。
然而,今天风云君要向各位老铁们介绍的这个量化策略,在这种泥沙俱下的市场环境下,依然保持了较高的收益率。在经过优化调参后,其期间总收益率达到1182%,年化收益106.94%。
02 一个好的开始
任何一个量化模型,不管简单还是复杂,都需要告诉电脑以下七个基本信息:买什么样的股票?什么时候买?买多少?组合里已有的股票卖哪只?什么时候卖?卖多少?以及策略多久运行一次?
至于止盈和止损策略,既可以单独列出,也可以糅合进买卖策略。
前文书说道,这次我们准备建立一个相对简单的被动型分时交易模型。之所以选择被动模型是因为被动模型一般逻辑较为简单。
什么叫被动型模型呢?打个简单的比喻,你可以理解为守株待兔。我们只要找一颗稍微粗一点的树桩,确定好附近有足够多的兔子,我们就做好了守株待兔的一切准备工作,相对于四处打猎(主动型模型),这种策略明显要省力很多。
在操作间隔上我们选择了分时作为间隔。交易模型的时间间隔一般可以分为秒级,分时级和日级。秒级策略往往涉及海量的分时数据,对数据的读取和运算能力提出了很高的要求。而日级交易有时会存在反应较慢的缺点,所以分时级别是个较为常用的执行操作间隔。
我们首先已经解决了策略多久运行一次的问题,下面我们还有六个必要参数需要确定。
第二个要确定是买什么的问题。首先我希望交易的股票可以属于一个历史走势不要太差,同时足够活跃的板块(或者类别)。
通过观察行业指数和平时积累的对市场的常识,我们发现次新股这个概念板块似乎不错,次新股指数的表现一直还算不错,而且活跃度也可以满足要求。我们在这里暂且将次新股定义为上市一年内的股票。
但是通过下图我们可以发现,从15年6月到18年底次新股指数总体涨跌幅为-9.17%,离我们1182%的收益率还相差甚远。我们还需要进一步的完善模型。
在《穿越牛熊的神奇指数:申万风格指数》一文中风云君曾经提到,小盘股的历史收益率要好于中盘和大盘股,那我们可以进一步的缩小范围,买入自由流通市值较小的次新股。然后再剔除当日停牌、当日涨跌停的特殊情况。
当然要再提一句,为了尽量模拟真实的交易,风云君本次设置总资金量为10万元,每天限制买入市值最小的四只次新股。这样看来,我们已经确定了选股的方向。
然后就是解决合适买入和卖出的问题,这时候就体现出了被动配置模型的简单。我们将每天的交易时间设置为每天早上十点。具体的操作逻辑是:
1、如果我们投资组合中的股票不在今天选出的四只市值最小的次新股中,则组合中的股票个股全仓卖出。
2、如果上面提到的当日选出的自由流通市值最小的四只股票不在我们的投资组合中,而且账户中还有余额,则将余额平均分配给符合条件的股票,全仓买入。
3、如果投资组合中的股票与选出的股票相等,则维持持仓不变。
写到这里,我们就已经解决了上面提到过的七个关键问题。再将每笔交易的印花税和券商佣金设计好,就可以愉快的开始进行回测了。
通过上面的参数设置,我们得到了区间收益为105.88% 策略,显然这要比次新股板块-9.17%的收益率要高出不少,算是个相当不错的开始。
但是离十倍收益还有相当一段距离,那我们就本着“逢山开路,遇水架桥”的态度继续完善模型。
03 从105.88% 到1182%
接下来的我们就需要打开模型生成的每日持仓明细,通过观察交易明细来判断哪里还有可以提高的地方。
通过观察每日的持仓明细很快可以发现,创业板的个股实在是严重拖累了回报率,亏损排序前几页明显都是300打头的创业板股票。
发现了这个问题就好办了,那就排除所有的创业板股票看一下。
果然,收益率一下子提高到665%,不错,牛皮大发了!离我们的小目标又近了一步。
风云君以前在百乐门代客泊车的时候,听大佬们说过,一个成熟的策略应该有个止盈止损策略才能显得像个样子。好像我们的模型现在确实还显得略显简陋?那我们就活学活用,再加个止损策略。
一个在止损策略和被动策略中比较常用变量叫就是成交量加权平均价格(VWAP),就是以近几个交易日的成交量加权计算出的近期平均价格。比如昨日股价20元,成交10股,今天股价18元,成交20股。则两日的成交加权平均价格(vwap(2))等于:
(20*10+18*20)/(20+10)=18.67元
我们在这里设置如果股价低于20日的vwap,而且当日跌幅达到4%则进行止损。
再来看下结果。止损的策略的效果显然还是不错的,现在的收益率已经离1182%相差不远了。
当收益率达到这个程度的时候其实加不加止盈指令已经影响不大了。不过这说法显然有点事后诸葛亮的感觉,毕竟1182%这个极限(姑且算是极限)数字是后来才知道的,万一加了止盈之后收益率能飚到2000%呢?
不过既然现在的收益率已经比较令人满意了,那么止盈的条件可以设置的相对宽松一点。我们将止盈参数设置为股价高于60日的vwap,且当日涨幅达到7%则止盈。
谢天谢地,止盈参数的设定并没有降低模型的收益,反而还有小幅提升。这里要注意的是,止盈和止损的设置并不是总能提高模型的收益率,有时反而会因为参数设置的过紧而导致收益率下降的情况。
现在风云君终于可以说一句:“做人嘛,不要太贪了”,收益率年化都100%了还要啥自行车。
So be it !
后记
我知道肯定有很多读者会想祭出这幅图,怎么从两个圈就变成一匹马了?
但是风云君并没有指望能在今天教会大家画马,也没指望大家能通过一篇文章就精通量化交易。
不可否认在写文章的过程中风云君也省略了一些步骤,比如为什么止损就使用20日的VWAP,不是5日,或者不是40日。其实背后风云君也是试了很多遍才找到个比较好的参数。
这么牛皮的本领被老板忽悠来当写字狗,写篇文章容易么......打赏!
写作本文的目的,只是希望大家能对量化交易有个初步的认识,知道这也不是什么阳春白雪,是我们这些下里巴人也可以实现的。此外最重要的就是希望没有基础的朋友们可以对模型里参数的选取方法有个初步的认识。
这个模型未来能不能赚钱,或许能,也或许不能。但是有一点可以肯定,那就是历史会重演,但绝对不是简单的重复。结果并不重要,方法才重要。
特别说明:在量化策略中,回测是基于“所参与的资金不会对单只股票的中短期趋势产生影响”的假设而做的。