【量化】验证《股市操盘宝典》对周期论

起源

在这里插入图片描述

今年7月26日暴跌的时候,葫芦群里有大佬祭出了一张图,通读下来非常震惊,因为这位作者预测了这一次的下跌:

在这里插入图片描述

虽然不是每次都对的上,但群里大佬们都说是神书,好奇之下打开阅读,发现作者提出“A股存在10年周期”的结论,尽管对作者的论证方式不懂,但粗看之下似乎有几分道理,就来验证一下!

作者观点与验证

作者观点

作者提出的观点:中国股市以10年为一个周期,从农历丙年开始一轮牛市,丁年经调整后持续到辛年,壬癸年为熊市,到乙年孕育牛市。

由于作者的计算方法为天干纪年,而天干有10个,因此每一年可以公元纪年的尾数对应,可以整理为该表格:

流年天干公元尾数市场状况
0结构熊
1熊市
2熊市
3熊市
4熊牛转换
5熊牛转换
6
7大牛+熊转换
8大熊
9

验证

初步验证的内容就是作者提出的这个十年周期,并不是前面精确到月份和日的内容,主要是那些东西给人的第一印象就不能是百分百正确的,而这个周期如果有一定大体规律可循的话,对于我们策略的择时还是有很大帮助的。

我的验证思路是:

  1. 下载上证指数和沪深300指数的数据(课程讲了,懒得爬可以去网站下)并将其转换为干支纪年;
  2. 计算每年(以干支纪年分类,下同)的涨跌幅、振幅、上涨天数、下跌天数等指标,结合作者结论进行初步判断;
  3. 画出每年的图表,进行主观上的判断(不是说好了我们是搞量化的吗);
准备工作
  • 爬取指数数据

目前我们可以获取的上证指数最早是1990年12月份的数据(from 新浪财经),沪深300指数最早是2005年4月份的数据。

  • 下载可以转换为农历时间的库

我用的是这个

转换后的沪深300指数是这样的:

在这里插入图片描述

过程

首先咱们按干支纪年对其来个描述性的统计:

df_all = pd.DataFrame()
df_all['year'] = list(set(df001['year']))
for i in list(set(df001['year'])):
    df_all.loc[df_all['year'] == i, 'candle_begin_time'] = df001.loc[df001['year'] == i, 'candle_end_time'].iloc[0]
    df_all.loc[df_all['year'] == i, 'candle_end_time'] = df001.loc[df001['year'] == i, 'candle_end_time'].iloc[-1]
    df_all.loc[df_all['year'] == i, '涨跌幅'] = round(df001.loc[df001['year'] == i, 'close'].iloc[-1] / df001.loc[df001['year'] == i, 'close'].iloc[0] - 1, 2)
    df_all.loc[df_all['year'] == i, '振幅'] = round(df001.loc[df001['year'] == i, 'close'].max() / df001.loc[df001['year'] == i, 'close'].min(), 2)
    df_all.loc[df_all['year'] == i, '上涨天数'] = len(df001.loc[(df001['year'] == i) & (df001['close_change'] >= 0), 'close_change'] )
    df_all.loc[df_all['year'] == i, '下跌天数'] = len(df001.loc[(df001['year'] == i) & (df001['close_change'] < 0), 'close_change'] )
df_all['上涨天数-下跌天数'] = df_all['上涨天数'] - df_all['下跌天数']
df_all.sort_values(['candle_begin_time'])

得到结果如下:

yearcandle_begin_timecandle_end_time涨跌幅振幅上涨天数下跌天数上涨天数-下跌天数
庚午1990/12/191991/2/140.071.0739138
辛未1991/2/191992/1/310.121.1218057123
壬申1992/2/71993/1/227.0910.43691455
癸酉1993/1/271994/2/4-0.312.04129138-9
甲戌1994/2/141995/1/27-0.283.09100146-46
乙亥1995/2/61996/2/160.041.74128138-10
丙子1996/3/41997/1/310.62.2512910623
丁丑1997/2/171998/1/230.241.681379938
戊寅1998/2/91999/2/9-0.131.33118140-22
己卯1999/3/12000/1/280.41.641201119
庚辰2000/2/142001/1/190.231.331369838
辛巳2001/2/52002/2/8-0.251.65123129-6
壬午2002/2/252003/1/29-0.021.311161151
癸未2003/2/102004/1/160.081.24114118-4
甲申2004/1/292005/2/4-0.221.5113143-30
乙酉2005/2/162006/1/25-0.021.31181162
丙戌2006/2/62007/2/161.332.411669175
丁亥2007/2/262008/2/50.512.21508565
戊子2008/2/132009/1/23-0.562.73101135-34
己丑2009/2/22010/2/120.51.7315710255
庚寅2010/2/222011/2/1-0.071.341191145
辛卯2011/2/92012/1/20-0.161.42112124-12
壬辰2012/1/302013/2/80.061.2613312310
癸巳2013/2/182014/1/30-0.161.24110123-13
甲午2014/2/72015/2/170.591.714810840
乙未2015/2/252016/2/5-0.141.9513310429
丙申2016/2/152017/1/260.151.2213010723
丁酉2017/2/32018/2/140.021.1715410450
戊戌2018/2/222019/2/1-0.21.35105129-24
己亥2019/2/112020/1/230.121.2312511213
庚子2020/2/32021/2/100.331.3714011525
辛丑2021/2/182021/7/30-0.081.15458-4

以下是沪深300的情况:

yearcandle_begin_timecandle_end_time沪深300涨跌幅沪深300振幅沪深300上涨天数沪深300下跌天数沪深300上涨天数-下跌天数
乙酉2005/2/162006/1/250.011.231039310
丙戌2006/2/62007/2/161.592.671669175
丁亥2007/2/262008/2/50.822.391518467
戊子2008/2/132009/1/23-0.583.08104132-28
己丑2009/2/22010/2/120.581.841649569
庚寅2010/2/222011/2/1-0.051.411191145
辛卯2011/2/92012/1/20-0.181.48109127-18
壬辰2012/1/302013/2/80.131.321301264
癸巳2013/2/182014/1/30-0.21.27105128-23
甲午2014/2/72015/2/170.591.7514011624
乙未2015/2/252016/2/5-0.151.8813210527
丙申2016/2/152017/1/260.151.2412611115
丁酉2017/2/32018/2/140.181.3214811038
戊戌2018/2/222019/2/1-0.21.39105129-24
己亥2019/2/112020/1/230.211.271211165
庚子2020/2/32021/2/100.571.6514710839
辛丑2021/2/182021/7/30-0.171.2259536

然后我们根据上文那个表格大致看下,我浏览了一遍,基本上大差不差。

比如作者着重强调的,丙丁年是一轮牛市的起点,96年与06年都是50%以上的涨幅,97与07年上指也是20%以上的涨幅,只有16与17年涨幅较小,但也都为正;然后看戊年作为牛市后的回调涨幅都是负的;而己年作为作者指明的牛市,也都是较大的涨幅,但相对来说近年的19年幅度较小;然后看庚年,说是有行情,四次只有一次为负;只有92年的壬申年,本来说是熊市,但市场表现很好,最终的涨幅为7倍(但比较特殊这个年份,具体什么原因也不知道)。

ok,经过第一轮的判断,我们姑且认为作者的结论存在一定的合理性,接下来我们通过图表的形式来进一步认识。

plt.figure(figsize=(15, 38))
var1 = ['丙', '丁', '戊', '己', '庚', '辛', '壬', '癸', '甲', '乙']
var_temp = 0
for o in var1:
    ax = plt.subplot(10, 1, var_temp+1)
    for i in list(filter(lambda x: x.startswith(o), set(df001['year']))):
        temp = df001.loc[df001['year']==i, 'close'].reset_index(drop=True)
        temp['curve'] = (1+temp.pct_change()).cumprod()
        ax.plot(temp['curve'], label=i)
        plt.legend()
    var_temp += 1
    
plt.savefig('picture.png')
plt.show()

得到一张这样的图:

在这里插入图片描述

这是沪深300的:

在这里插入图片描述

到这里我发现,如果想要肯定作者的结论,明显有的年份不支持,如壬申年即92年一飞冲天,而作者提出的壬年为熊市;如果要否定作者的结论,也是证据不足,作者提出的丙丁年都是大牛市、戊年是熊市、己年是牛市的结论也确实都是这样,无非是近几年所谓的牛市涨跌幅比较小,那么也有解释说不同的地支带来的组合强弱不一样,比如作者谈到26年为丙午年,午火为最纯正的火、天干地支都是财,所以是一场很强烈的牛市。

结论

至于对我们的策略有什么用?个人并没有找到特别好的辅助方法,唯一有点用的就是避开丁年大涨后的大跌,即戊年,但作者说的辛壬癸三年的熊市,我看很多策略都是可以赚到钱的,而丙丁年的大牛市也不是各个策略表现最好的时候,作者说的熊牛转换的甲乙年是很多策略赚钱最多的年份。

另外也不是每年的丙丁年都是大牛市,比如最近的就不是,而是14、15的甲乙年构成的牛市,16、17只是从2600走到了3500的小牛。

总之,目前样本数据太少,也就三个周期,而且作者对周期的描述没有非常定量,我们的验证也不能百分百肯定或否定他的结论,完全用他这套做方针也是存在不确定性的,大家仁者见仁智者见智吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值