长久以来在我脑海中一直萦绕着一个问题:新股在连续拉涨停板以后终于开板了,是追还是不追呢?有的开板以后连续回调甚至跌停,有的开办以后回调一下还会继续冲高,如果要追,在什么时间追赢面最大? 很久以来只是凭一个印象,在初步掌握了python以后,终于可以挑战一下做一个统计。 这里面用到了很多之前没用过的语句,百度函数到手疼! 先看统计! (1)大部分新股在开板以后的收益情况是在0附近对称的,这里的对称是指;翻倍 (2)和腰斩(-0.5)是对称的。跌幅超过50%的确实也不少! (3)我们看一下开板当天的统计情况:基本也显示出一定的对称性和随机性,不过直观感觉跌的比涨到要多一些,且幅度更大。 统计结果是开板当天,上涨和下跌的只数是基本相同的,但由于开盘大多是涨的,所以基本是以阴线居多,而当天的平均收益是-0.52%。假如有人在这个随机开板的日子里,涨停价买入,平均概率是要亏掉10%的。 (4)这个统计最有趣:开板后第N个交易日的涨幅情况。这里声明一下,由于上市越早的新股,统计的交易日越多,反之则越少,所以这张图越往后面的统计结果,越不准确,因为上市早的股票占据了过大的比重(新上市的没数据)。所以这张图越往左,统计样本越多,越有说服力。 可以看到,开板以后的10个交易日之内平均是亏得,但是从10-40个交易日左右的时间中,是次新股炒作的时期。随后开始下跌,在3-4个月之后,有可能迎来第二波炒作(警惕越往后面数据说服力越低) 可以看到次新股有一波小的和大的U型周期! 感觉python越来越无所不能啦,快到起飞! 详细注释: (1)解决中文编码问题:8-10行 (2)引入pandas,numpy,和画图函数:11-14行 (3)解决中文显示乱码问题:16行 (4)读取数据文件:19-24行。header=0意味着从第一行数据读起,header=3以为从第二行开始。 数据的基本格式为: df1:基本资料 df2:时间序列股价信息 用这两个数据我们能做很多事情,但今天只研究新股这个事 (5)筛选数据: 提取2016年以后上市的股票的股价信息用了三行代码: 25行:在基本资料中只保留2016年以后上市的公司的数据。df.iloc[:,2]>'2016-01-01',即df中的第二列的值大于2016年。 26行:从筛选后的数据中截取股票代码,存为Series格式。 27行:从时间序列数据中根据股票代码No筛选出新股的数据。 (6)数据筛选完以后就开始处理数据,最重要的是找到开板的那一天。 分以下几步: a.把收盘价数据变为收益率数据:36-38行。shift(1)的意思是把所有的行向下移动一行。移动完的数据在变为array格式,作为被除数。 b.得出日收益率数据dfreturn以后,会发现有很多空值,我这里把空值都赋值为0.11作为提示,后面会被筛选掉。 c.针对日收益率数据,把所有涨停板和控制的数据单元都删除:这里用了一个嵌套的for循环语句。第一层循环i是对列进行循环,第二层循环j是对行进行循环。如果i列j行的数据大于0.098,那认定为涨停板,把该数据删掉,下面的数据网上提一行。如果不是,继续寻找下一行数据。 d.整个循环做完以后,第一行的数据就是第一个非涨停板的数据。整个表格就是所有新股从第一个涨停版往后所有的日收益率数据。 (7)把日收益率数据转化为累计收益率数据
第一天(K==0)的日收益率数据就是累计收益率数据 第二天及以后的累计收益率数据就是用前一日的累计收益率数据进行累计计算即可。 这样得到累计收益率数据dfreturn1 (8)增加一列平均值:列名为mean,mean(1)表示是行数据的平均,mean()是列数据的平均。 (9)专门把开办第一天的数据提取出来,存为w。并算了一下均值。 (10)剩下的就是画图,这个在第(3)节中曾经有过介绍。 (11)数据统计:76-77行。使用了lambda,就是计算了一下第一天开板数据中的上涨家数和下跌家数。len是计算长度的函数。 所有程序和原始数据已经免费开放。关注公众号“韭菜说投资社区”(文末图示),从菜单栏中获取。 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
|
|