雪球云蒙银行股搬砖策略的实现


雪球转发:122回复:131喜欢:519
本篇文章由JoinQuant官方与用户合作推出,将会被JoinQuant量化课堂收录。
本文已经思路提供者云蒙授权。



作为一个想在金融市场发展的有(du)志(bo)青年,练级打怪的初期想法不多怎么办啊?尤其是空有一身编程的武艺,想找个策略切磋一下都无从下手。这当如何是好?!解决办法之一就是:可以借鉴大V!

什么意思呢?大威嘛,威起来的前提条件就是发了好多干货,分享了好多投资理念,思路,文章!

这些文章呢,有的适合你,有的不适合你;有的很犀利,有的有糟点;有的简明清晰,咔嚓咔嚓两下就写成代码。有的云里雾里,好像不容易把规则抽象出来。不过站稳不慌,有条件可以回测,没条件找小编,小编还是可以开开脑洞,创造条件强行回测的呦。

而且你会发现在这个过程中,你对金融市场越来越熟悉,能力槽也开始飙升,蓝槽max!是不是很high。

今天我们就来举一个例子,把雪球上云蒙mm的思路写成代码。不懂编程的朋友也甭怕,我们已经把代码改好了,如果你愿意,只需要稍微调整就可以实现不同参数的回测。

如果你实在看代码头大,我们还把云蒙银行打分所涉及的银行数据都清洗了一遍,并且弄成excel表格提供给大家。这个价值也是不小的[大笑]

纳尼?把第二章剧透了。怒丢一张流程图掩盖下:

JoinQuant聚宽

云蒙嘛,就是云蒙嘛:

云蒙者,雪球大V也。神采飞扬,以善于投资银行股著称,搬砖运动的倡导者和发扬者。
我们先来看一下云蒙在她的原文咋说的,核心观点见下文,原文请参见链接https://xueqiu.com/3037882447/68184966
JoinQuant聚宽

总结一下,思路就是通过对盈利性指标(加权平均净资产收益率)、资本约束及稳健指标(核心资产充足率)、以及资本回拨系数来对一个公司进行评判,得出一个财务打分。

小编理解,这个财务打分相当于公司的价值。然后将PB看做股票的价格,那么买的时候就是捡便宜的买啦(价值/价格最高者),所谓得分最高的,也就是比价最高的。所谓搬砖捏,也就是在比价发生变化的时候,重新调整持仓。

为了更好的理解云蒙的流程,我们做了一张图(目前逾期贷款的数据暂时不全,所以只用了不良和拨备):
JoinQuant聚宽
看起来也不复杂对不对,公式都摆明了,也就是计算出3个指标相乘。而这3个指标,总共需要6个财务字段。

But!如果我们仅仅回测A股:那么近似来看,总共需要回测16只银行股。假设我们从10年开始回测,那么粗略估计,需要的数据量为6*4*16接近600个季报数据。这个工作量其实不小,扣一家银行一个季报的数据算3分钟好了,也就是1800分钟,30个小时的工作量,耽误点时间一周就过去了。

而这些工作量,我们已经帮你省了。(网盘链接:http://pan.baidu.com/s/1eRZL7WY 密码:g9y9)。有两个excel表格,一个文件(云蒙财务指标梳理.xlsx)包含详细的原始数据,以及一步一步的打分过程。另外一个文件(bankshares.csv),按照一定格式记录的回测结果,我们在平台上回测的时候需要把这个文件导入(具体怎么导入请参见后文)

前者的大概长这个样子:
JoinQuant聚宽
后者大概长这个样子:
JoinQuant聚宽
别看错了哦。








但有了打分就可以直接回测了嘛?naïve啊!

回测规则不难:
每天开盘前检查一下,看看财报打分有没有变动,并且参考昨收价的PB进行打分,把打分排序。

始终保持选择评级最高的num=4只股票加入投资组合(num可自己设置)。要注意,我们只有分数变动k>=5%时才会进行调仓(k可自己设置)。假设原先的前4名是A,B,C,D。现在的前四名是A,B,C,E。为了不频繁调仓,减少摩擦成本,只有当E的打分比D高5%以上时,我们才会进行调仓。

对于这num=4只股票,我们会为它们分配一个权重,初始权重按照评分从高到低为4:3:2:1。即假设一共有100万的资产,则如果当前的四只股票比例为4:3:2:1,则第一只股票买100*4/(1+2+3+4)万元。如果num=5,那么持仓股票的比例为5:4:3:2:1。但注意,同样的,内部调仓也需要满足k>=5%的条件。

稍微操作一下的时候,你考虑周全了吗?这里有两个大坑等着你踩:


第一个坑指的是回测方面的坑:
1.      财务指标公布的时间可不是严格按照季末那个时间点更新哦,而是陆续的披露出来。你的回测也得考虑这个情况,否则提前几天知道了数据会有未来函数。
2.      手续费考虑了吗?分红考虑了吗?停牌考虑了吗?涨停买不上,跌停卖不出去考虑了吗?滑点设置不设置?那些股票在回测期间都上市了吗?
3.      以上我们的回测引擎和代码全考虑了。



第二个坑指的是搬砖规则的坑:
搬砖的原则听起来不难,打分从大到小排序,排排坐,赤裸裸,哦不!吃果果!按照比例分配就好。唯一要注意的是为了减少摩擦成本,只有打分变动5%以上时,才进行调仓。

嘿嘿,不妨稍微考虑几种情况,感受一下这个规则。

下面的图中,竖条的长短表示上一期的持仓数量(4:3:2:1),你看到不是按照从左到右依次递减,说明打分变动,要调仓啦

第一种,最简单的,ABCD变成了ABDC,如果D的打分比C高5%,搬砖!搬一块砖即可。
JoinQuant聚宽
第二种,ABCD变成了ADCB,这时就麻烦啦,你得智能的找出原来是B和D之间分差起了作用,所以如果D比B的分数高5%,直接从D搬到B两块砖
JoinQuant聚宽

再增加点难度,ABCD变成了DACB,这时候你得综合考虑,新的打分出来以后,第4位的砖是不是要挪到第一位上?那么第二位的砖要不要挪到第一位上?

JoinQuant聚宽
还没完,以上的都算形状规整的,但是下面这种捏?
JoinQuant聚宽
什么?你说这种情况怎么可能产生?当然可能产生了,不到5%的时候是不搬砖的嘛,那么七挪八挪,啥形状都有可能。

再何况,如果是5只股票的持仓呢?如果还要考虑其他没有入池的十几只股票呢?(这些可以看成是权重为0的仓位)

综上。穷举法就是死路一条。在每日更新打分的情况下,人工几乎做不到。


好了,以上这些都是铺垫,我真正想说的是,我们研究了一个小算法,专门针对这个搬砖,得到了一个通解。直接拿来用就行。有兴趣的朋友可以自己研究,也欢迎大家交流。






贴个回测结果小结一下:

JoinQuant聚宽

我们选取了打分最高的5只银行股持仓,并且每次分数差必须超过5%。蓝线是我们的持仓收益率,红线是沪深300。从10年回测至16年一季度。

可以看到:
1.      在2012年那波银行股引领的反弹之前,这个策略与沪深300的表现不相上下。
2.      12年银行股开始翻身,搬砖策略稳定的跑赢大盘。
3.      回撤大,是因为一直满仓,相当于从10年之后的阴跌全部吃进去。
4.      总之搬砖是alpha的,每年大概5%左右(凭感觉,没有细究)。从12年之后,银行股表现的也与沪深300有一战之力。最终导致银行搬砖策略未定的超越了大盘。

总之,这个策略整体还是蛮稳定的,不好的时候与沪深300打平,好的时候稳稳跑赢沪深300,如果进一步挖掘,可以尝试往对冲策略方向发展。


如果大家有兴趣,留言中回复,我们可以进行大规模的回测,遍历一下参数。
另外以后有机会与云蒙深度合作,还有新的文章推出,请多关注哦。


未来进步的空间
不论主观交易者,还是量化交易者,假设你现在做出了这个策略,你会怎么想?
如果你就满足了,是没法进步的。

我们这个策略只是alpha0,很多细节有待提高,我们还可以在以下几个方面改进:

银行股自07年集体高潮以后一路向南,12年末雄起了一把,以为独领风骚引领大牛市,结果被13年钱荒教育了一把,告诉你谁才是老大。一帮资金溃不成军,去调戏中小创,你看自此小盘股一路女上位。

但是!重要的话说三遍,我大A股的尿性就是同涨同跌啊,搬砖能搬出什么花来?如果加上我大zi本主义桥头堡,三年中两年不鸟A股的HK市场,那搬起来虎虎生风,说不定战局就逆转了啊。如果善用加杠杆,与创创也有一战之力了啊。

所以,
第一,也是最重要的,把港股加入我们搬砖体系。我相信会大幅提高我们的搬砖alpha。
第二,作为一个投机取巧的人,不一定满仓啊!择时也是我们要研究的一个方向。
第三,如果你不是坚定的银粉,其实可以找点类似的高息,业绩稳定的股票,也参与到搬砖里来啊,构成我们“大搬砖”的体系。



然而
。。。
。。。







你以为这就完了?并没有。这里还有一个附录,也就是手把手教你怎么回测啦。

没有编程基础的朋友也可以试一试,更改参数可以得到不同的回测结果。有兴趣的朋友可以研究下代码。

回测前需要上传文件:
文件名bankshares.csv,记录了09年之后的财报打分情况,先将这个文件导入我们平台
首先进入研究模块:
JoinQuant聚宽
点击upload,选择相应文件。
JoinQuant聚宽
上传文件后,戳这里(https://www.joinquant.com/post/1359),点一键克隆,然后你就可以看到这个页面。点击回测即可:JoinQuant聚宽
更改下图红圈处的参数,可以调整入池数量,以及每次搬砖必须保证的分数差,0.05表示5%

JoinQuant聚宽

Ok,抛砖引玉,我写完了,好累。期待Beta版的搬砖策略吧。


@汪小哟 @风语者_mars @magictit @fai0515 @看空做多就是任性 @Julian-Z @I马甲 @yu4ever @心法不能乱 @过客haiping @lomycat @HIS1963 @掘金者朱 @dafengchui @晴空D @今日话题 @loncf @阳明六道

精彩评论

草帽路飞 2016-05-16 20:25

这么复杂的数据处理也只有专业的量化交易平台可以做了。之前我在聚款做的几次大数据量化处理效果还不错。搞个程序也太费脑了,我现在很少做量化分析了。云蒙你做银行股的量化模型搬砖,找个量化平台相当于开了外挂

括苍传人 2016-05-16 20:50

搞得太复杂没看懂,所谓的量化就是不断把PE高的银行股换成PE低的银行股?然后鲜花被拨完,手上全是野草,满把像中信交行之类的低质量劣质货?感觉太不靠谱

Q七小鱼 2016-05-16 20:14

作为研究过matlab做量化的,这个平台做的很赞。

井冈山洪湖水 2016-05-16 20:13

干的人多了,就不灵了,现在可以抓紧干。

无常狂人 2016-05-16 20:13

这种量化交易只对同质化经营且竞争不太激烈的行业有效,例如: 银行。

而对于别的行业而言,巴菲特式的合理价格买优秀企业的理念是永不过时的。

全部评论

zhojun 2016-05-25 16:00

hopener 2016-05-24 23:38

宏观经济算命师 2016-05-24 21:11

csv读取 的问题,日期得指定字符串“yyyy-mm-dd”

迈克老隆 2016-05-23 08:24

已关注雪球,想要《聪明的投资者》 雪球昵称: 迈克老隆

WANGethan 2016-05-23 07:48

可以调用券商接口直接做交易吗@JoinQuant聚宽

俐小姿 2016-05-22 18:21

你好 我想问一下为什么把bankshare那个数据改了之后 就运行不了了

俐小姿 2016-05-22 15:40

我想问一下这个PB数据采用的是季度pb嘛?

八月奥古 2016-05-21 21:45

哈哈,不错

股市没有内心戏 2016-05-20 17:57

学学策略

齐震宇 2016-05-20 15:43

好文

1 2 3 4 5 6 7 8 9 10 11 12 13 14