股市真有黑色星期四吗?
一直以来,A股流行黑色星期四的说法,这个说法是否只是大家的感觉还是真有数据支持?带着这个问题,今天就用数据来检验一下
首先需要取到每日数据,幸好现在日收盘价的数据不难获得,tushare
还有免费的公开接口,我取从2000年开始到今天的数据,指数收盘价,然后计算一下每日的收益率
import pandas as pd
import numpy as np
import tushare as ts
start_d = '2000'
end_d = '2019-5'
bk = 'sh' # sh=上证指数 sz=深圳成指 hs300=沪深300指数 sz50=上证50 zxb=中小板 cyb=创业板
shIdx = ts.get_k_data(bk, start=start_d, end=end_d)[['date','close']]
shIdx['ret'] = np.log(shIdx.close/shIdx.close.shift(1))
shidx = shIdx.set_index('date')
这里有一个小窍门,收益率要取对数,为什么呢?一般来说如果今天的价格比昨天低,收益就是负的,但是直接用今天的价格除以昨天的价格,得到的只是一个小于1
的数,比如0.8之类的,虽然明白小于1就是亏损了,但是如果不统计为负数就比较麻烦,特别是进行收益率累加的时候,明明亏损了,加出来的还是一个正数,还要除以最初的资本才知道亏了,这就不方便,用对数就会将小于1的变为负数,看一下计算的结果就明白了
In [1]: shidx.tail()
Out[1]:
close ret
date
2019-04-22 3215.04 -0.017195
2019-04-23 3198.59 -0.005130
2019-04-24 3201.61 0.000944
2019-04-25 3123.83 -0.024594
2019-04-26 3086.40 -0.012054
In [2]: shidx.tail().ret.sum()
Out[2]: -0.0580292401363575
对照股市行情看,25日和26日分别跌了2.4%和1.2%,这一周也跌了5个多点,很好地反应了真实情况。
有了每日收益率,接下来能不能只看星期四的收益情况呢?这个也是可以的,pandas
的时间序列支持频率选择,具体细节可以看pandas.date_range
的帮助文档,先产生一个固定的周时间序列,可以只有星期一或星期二、星期三、星期四……,例如我只留下周五的序列,可以这样做
In [19]: rng = pd.date_range(start_d, end_d, freq='w-fri')
In [20]: rng
Out[20]:
DatetimeIndex(['2000-01-07', '2000-01-14', '2000-01-21', '2000-01-28',
'2000-02-04', '2000-02-11', '2000-02-18', '2000-02-25',
'2000-03-03', '2000-03-10',
...
'2019-02-22', '2019-03-01', '2019-03-08', '2019-03-15',
'2019-03-22', '2019-03-29', '2019-04-05', '2019-04-12',
'2019-04-19', '2019-04-26'],
dtype='datetime64[ns]', length=1008, freq='W-FRI')
然后从全部数据中用reindex
进行选择过滤,留下的就只有星期五的数据了,再剩下的工作就非常简单,统计一下大于0
的(上涨)和总体的比率就能算出上涨概览,我这里写出代码供各位看官参考
def up_ratio(freq):
# 获得时间序列
rng = pd.date_range(start_d, end_d, freq=freq)
d = [str(d)[:10] for d in rng]
# 过滤选择
ret_f = shidx.reindex(d).ret
ret_f.dropna(inplace=True) # 无效的数据要清除,即使是周一也会有放假
# 返回:总交易天数,上涨的天数,上涨天数/总天数
c = ret_f.count()
u = ret_f[ret_f > 0].count()
r = u/c
return c, u, r
# 统计从周一到周五的情况
w = ['w-mon', 'w-tue', 'w-wed', 'w-thu', 'w-fri']
[print(up_ratio(x)) for x in w]
代码写完了,看看结果,先看上证的情况(将bk
设置为sh
),很明显,周四的上涨天数明显很少,比率只有45.8%
(917, 513, 0.559432933478735)
(939, 541, 0.5761448349307774)
(947, 503, 0.5311510031678986)
(939, 430, 0.4579339723109691)
(936, 492, 0.5256410256410257)
再看深证成指的情况(将bk
设置为sz
),周四仍然是最低的45.7%
(917, 481, 0.52453653217012)
(939, 517, 0.5505857294994675)
(947, 488, 0.515311510031679)
(939, 429, 0.45686900958466453)
(936, 490, 0.5235042735042735)
最后再看看创业板的情况(将bk
设置为cyb
),周四也是最低,是44.6%
(419, 231, 0.5513126491646778)
(434, 238, 0.5483870967741935)
(439, 228, 0.5193621867881549)
(437, 195, 0.4462242562929062)
(434, 214, 0.4930875576036866)
结论
看来传说中的黑色星期四并不是空穴来风,这20年左右的数据应该还是很有说服力的,我还发现另外两个亮点:
- 周二的行情最好,基本上上涨天数占到了55%左右,上证达到了57%,这是不是可以总结出一个红色星期二呢?😄
- 上证板块明显强于创业板,所以……你懂的
有兴趣的看官还可以自行检测一下沪深300和中小板的数据,情况应该差不多