A股日历效应:5穷6绝7翻身?python10行代码证伪

五穷六绝七翻身,大部分炒股的朋友都有听过这句谚语,指的是5月股市比较凄惨,6月会到绝境,7月会迎来大翻身。

封基老师在最近的文章也贴了一个日历效应,指出6月月底的最后一个交易日大概率会上涨的:

历年6月最后一条的涨幅

上面的数据封基老师用收费的金融软件choice或者wind,拉取得数据。

从上表的确可以看到,最近几年的6月底最后一个交易日,的确红多绿少。

作为一个量化小博主,本着授人与渔的理念,动手利用免费的券商的Ptrade量化平台和10来行代码即可以整理出上表。

本文就带大家使用Ptrade用几行代码演示A日历的日历效应。

除了统计历年6月最后一天的涨跌幅,还可以统计历年5,6,7月的月涨跌分布。

安装Ptrade

Ptrade是券商提供的量化交易软件。

windows上安装ptrade很简单,它是一个exe格式的安装软件,一路点击下一步就可以了,也不用安装本地python和其他第三方依赖。Ptrade上的程序都是在券商服务器运行的。主要它使用是免费的,用于做量化交易,回测,程序自动下单。

api帮助文档和软件下载地址:https://ptradeapi.com

获取数据

因为不涉及程序下单,所以在"研究“模块里面完成本文的所有代码就好了。本文代码亲测运行正常。不多,只有十几二十行。

实际python搞量化,没有什么高深神秘的东西,都是获取数据,计算,下单。

研究模块

data = get_price(security='000001.SS',start_date='20050101',end_date='20240630',frequency='1d')

上面的代码,用于获取上证指数(00001.SS ),2005年到现在的日线数据。返回数据为dataframe,ptrade获取数据速度很快,点完运行就有数据了,不用等待。

20240630155154

上面的返回的数据没有涨幅这个字段,不过有今收,昨收这2个字段,所以需要多一步计算涨跌幅。

data['percent']=(data['close']/data['preclose']-1)*100

然后写个循环遍历2005年到2024年6月最后一天的涨幅,数据存储到end_of_jun_percnet_result_dict

start_year = 2005 # 因为ptrade历史数据从2005年开始
end_year = 2024

end_of_jun_percnet_result_dict = {}

def last_jun_day_percent_func(year):
    full_start_date = '{}-06-25'.format(year)
    full_end_date = '{}-07-01'.format(year)
    jun_data = data[full_start_date:full_end_date]
    end_of_jun = jun_data.iloc[-1]['percent']
    end_of_jun_percnet_result_dict[str(year)]=end_of_jun 
    

for year in range(start_year,end_year+1):
    last_jun_day_percent_func(year)

执行后,得到数据了,打印一下end_of_jun_percnet_result_dict的值:

然后利用pandas的内置的matplotlib绘图,可以简单地绘出分布图。

其中横坐标为年份,纵坐标为6月最后一天的涨幅。

因月份字体颜色和背景都是黑色,不好区分。

把上面的数据导出到excel。

20240630160550

从2005年到今年,20个统计数据,6月最后一天上证指数的涨幅。

上涨的天数有12天,下跌的天数有8天。上涨的概率60%,概率上上涨的概率不是特别高。但如果从12年之后看的话,13年里面有10年都是上涨的,概率高达77%。

由于15年牛市6月的崩盘,15年6月最后一天暴跌-5%+,最近20年的6月底最后一个交易日的平均涨幅是负的,为 -0.163%。而涨幅中位数则是0.099%

20240630161004

如果你想计算国庆假期前一天的统计数据,只需要把上面的代码里面的:

full_start_date = '{}-06-25'.format(year)
full_end_date = '{}-07-01'.format(year)

按葫芦画瓢改成:

full_start_date = '{}-09-25'.format(year)
full_end_date = '{}-10-01'.format(year)

因为不确定最后一个交易日是几号,所以拿到最后1周的数据,然后取最后一个。

也可以换一个指数计算,比如沪深300就用000300.SS 替换上面代码里面的 000001.SS就可以了。

历年的5月,6月,7月的涨幅分布

同理,用上面的日线数据也可以统计出每年5,6,7月的月涨幅。

代码如下:

month = '05' # /替换这里,换成 06,07 等不同月份
montly_percent_dict ={}
def monthly_percent_func(year_month):
    montly_percent_dict[year_month] =  (data[year_month].iloc[0]['close']/data[year_month].iloc[0]['preclose'] -1)*100

for year in range(start_year,end_year):
    full_date = '{}-{}'.format(year,month)
    monthly_percent_func(full_date)

month = ‘05’ # /替换这里,换成 06,07 等不同月份。

计算出5,6,7月份的数据之后绘制柱状图,横轴上方是上涨年份,下方是下跌的年份

历年5月份上证指数月涨幅

历年6月份上证指数月涨幅

历年7月份上证指数月涨幅

把整理到excel

历年的5,6,7月份涨幅

仅仅从概率上来看,反而5月份上证指数上涨的概率最高的。

而6,7月份都在50%附近随机扔骰子。

所以从上面的简单数据统计,就可以证伪上证指数"五穷六绝七翻身"这种说法。

读者朋友也可以动手用代码验证其他指数的规律。

相关资料:

ptrade帮助文档 https://ptradeapi.com

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值