昨天在论坛看到有网友的一个提问:

 

按年份处理数据集python python按月统计数据_数据

 

对于很多投资来说,印象中最近这几年,尤其是前面的2016~2018年,周四跌的概率是比较大的,有时候会被戏谑为“法定砸盘日”。

 

好奇百度了一下:

按年份处理数据集python python按月统计数据_数据分析_02

 

前面几条都是指向了星期四。

 

实际情况是怎样的呢?笔者也是挺感兴趣的,因为作为一名赌徒,对概率统计这些数据还是挺感兴趣的。那么我们使用python对数据进行回测。 感兴趣的读者也可以跟着我在一些回测平台上练习,代码很少,不超过50行哈。

当然,如果有本地数据的读者,也可以在自己本地电脑上参数。

1.获取数据

start='20100101'
end='20201027'
df = DataAPI.MktIdxdGet(indexID=u"",ticker=u"000300",tradeDate=u"",beginDate=start,endDate=end,exchangeCD=u"XSHE,XSHG",field=u"",pandas="1")

时间区间使用2010年1月1日到2020年10月27日,跨度为10年,样本足够大了,标的指数为沪深300,平时笔者很少使用上证指数或者上证50作为回测,原因是里面权重中GJD占比过多,有种被操纵的痕迹,当然,读者也可以尝试使用这些指数进行回测统计,只需要把ticker=u"000300" 替换为 "000001" 就可以了。

 

得到的数据格式是dataframe:

按年份处理数据集python python按月统计数据_按年份处理数据集python_03

解释:上面展示了10条数据,可以看到每天的开盘,收盘,成交量,换手率,涨跌幅很多指标,在这个回测中,我们只需要2个指标就够了,一个是日期,用来判断当天是星期几,一个是涨跌幅,用来统计当天是涨还是跌。

 

2.  判读某天是星期几

import datetime
def weekday(day_str):
    return datetime.datetime.strptime(day_str,'%Y-%m-%d').strftime('%w')

 

创建上面的weekday函数用于判断某一天是星期几。

 

我们可以简单测试下,以2020-10-28测试:

按年份处理数据集python python按月统计数据_数据分析_04

看到返回的是3,说明结果正确,今天就是星期三。

 

然后我们把这个函数应用到全部的行,通过传入每一行的tradeDate 交易日字段,计算出改行的星期X 中的X。

df['weekday']=df['tradeDate'].map(weekday)

 

按年份处理数据集python python按月统计数据_概率统计_05

看到最后红框位置,多了一列,那个就是当他属于星期几。

 

3. 数据分析统计

接下来就是数据分析了,对日期进行聚合,意思是把星期一的数据合在一起,星期二的数据和一起,然后同理星期三,星期四,星期五,最后会有五堆数据。

df.groupby('weekday')

 

就使用这一句语句就可以了。

 

然后分组统计:

for day,df_day in df.groupby('weekday'):
    print('星期{}'.format(day))
    raise_count= len(df_day[df_day['CHGPct']>0])
    drop_count = len(df_day[df_day['CHGPct']<0])
    ratio = (raise_count-drop_count)*1.00/(raise_count+drop_count)*100
    print('涨的天数: {}'.format(raise_count))
    print('跌的天数: {}'.format(drop_count))
    print('涨跌比: {:.2f}'.format(ratio))
    print('')

 

上面根据每一组中,涨跌幅的个数统计一个比例ratio,表示在星期X中上涨占比,如果是正的,说明星期X的上涨概率比较大的,反之当天下跌的概率较大。

然后运行一下,很快结果就出来了:

 

按年份处理数据集python python按月统计数据_概率统计_06

 

上面结果显示:周四下跌的天数的确要比上涨的天数多了100天!!涨跌比为 -17% , 所有星期四的总天数为219+300 = 519 天

 

但是,but,周五上涨的概率是最大的,ratio值为15%, 周五上涨的概率最大!这个数据与平时印象很不一样,一般人都认为周四周五一般跌比较多,所以有时候个人感觉会受很多因素影响的,感觉未必准,所以才有数据量化分析,数据不会说谎。(前提不要拿到被造了假的数据来分析哈)

 

如下面这张图,在正方形的顶点加了个白色和灰色的加号后,你是否觉得画布被扭曲了呢。所以眼见不一定为实,途听不一定为真。

按年份处理数据集python python按月统计数据_概率统计_07

上面的分析只是从统计分析来看待星期一到五哪一天上涨/下的的概率大, 只供参考,并没有实际指导你在哪天买卖意义,意思是亏钱了你别来找我,嘻嘻。