美文网首页Road to Skill
股市真有黑色星期四吗?

股市真有黑色星期四吗?

作者: 混沌边缘的伊卡洛斯 | 来源:发表于2019-04-28 14:13 被阅读16次

    一直以来,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年左右的数据应该还是很有说服力的,我还发现另外两个亮点:

    1. 周二的行情最好,基本上上涨天数占到了55%左右,上证达到了57%,这是不是可以总结出一个红色星期二呢?😄
    2. 上证板块明显强于创业板,所以……你懂的

    有兴趣的看官还可以自行检测一下沪深300和中小板的数据,情况应该差不多

    相关文章

      网友评论

        本文标题:股市真有黑色星期四吗?

        本文链接:https://www.haomeiwen.com/subject/insdnqtx.html