您的位置 首页 基金债券

基金的涨跌跟季节有关吗?

这个问题提出的起因是上个月的一次大盘意外下跌(11月22日)。据事后分析,那一天原本受到基金热捧的白马股的大幅…

这个问题提出的起因是上个月的一次大盘意外下跌(11月22日)。据事后分析,那一天原本受到基金热捧的白马股的大幅收跌是由于一众基金公司年终业绩考核提前到11月底,导致许多基金为锁定前期的收益以及布局明年而集中调仓换股。我不知道这种分析是否有道理,但却产生了一个新的问题:公募基金的这种每年年底考核/排名的制度是否会对其在一年中的各个时段的相对表现造成一定的影响?换句话说,基金哪个季度相对表现更好,哪个季度相对更差,是否有规律可循?为此我找来了2009年10月1日至2019年9月30日这完整的10年,40个季度的所有偏股型和混合型场外基金的每日复权净值数据。并且拿着同期的沪深300指数作为基准,来比较他们之间的相对表现。

先上结论:无论从近十年还是从近五年的数据来看,这种规律都是存在的,并且前三个季度的基金平均收益率均高于同期沪深300指数收益率,但到了第四季度基金的平均收益率就落后于沪深300指数了。

先看近五年数据,把2014年10月1日至2019年9月30日的平均收益率按季节分组做成折线图:

上图中蓝色折线为基金各季度平均收益率,黄色折线是同期沪深300指数的收益率,我们忽略掉两条折线的绝对值,只看他们的相对位置。很明显可以发现,前三个季度基金表现都好于沪深300,而且差异保持非常恒定的水平,说明基金的超额收益非常稳定,而第四季度情况出现了反转,两条折线出现交叉,基金收益大幅落后于同期沪深300指数。

把数据周期拉长到从2009年开始的近十年的数据,情况也非常类似:

股票型基金 为何涨跌_股票型基金怎么操作_股票型基金

继续细化到按月度收益率分组比较,仍然表现出同样的趋势:

可以看到蓝色折线大部分时候都在黄色折线之上,只有10月和12月明显地低于黄色折线。

进一步打印出每个季度基金收益率和沪深300指数收益率的差值,统计得出10年中有4年第四季度基金收益率相对于其他三个季度来说都是最差的,另有4年第四季度也是表现不佳的。

股票型基金怎么操作_股票型基金_股票型基金 为何涨跌

这个现象的一种可能的解释是:临近年终业绩考核,基金经理更倾向于保守操作,以锁定前期的收益,因而造成了基金净值增长减慢;此外还有一种可能,就是国内公募基金的投资者大多是机构投资者,他们有很多到了年底就要出货从而对基金净值造成负面影响。为了验证假设,我又翻出了这几年的每季度基金规模报告,并且加总了所有基金的数据,最终按季度分组。可以发现,Q4也就是10月到12月的第四季度基金规模是四个季度中最低的,而且基金规模在一年中是逐季度降低的。

那么这个发现对于现实中投资有什么指导意义呢?如果你有定投主动型基金的习惯,可以考虑减少第四季度定投的数额,并增加前三个季度的数额。

股票型基金_股票型基金怎么操作_股票型基金 为何涨跌

最后,以近十年的数据样本为例附上数据分析的python代码:

# 获取所有偏股型基金和混合基金的名称数据
df1 = get_all_securities(types=['stock_fund'], date=None)
df2 = get_all_securities(types=['mixture_fund'], date=None)
df_fund_list = pd.concat([df1, df2])
len(df_fund_list)
# 一共得到4831支基金。
# 去除含有“指数”关键字的基金,目的是考察主动性基金相较于基准指数的业绩差异,因此要剔除被动基金的数据。
bool = df_fund_list['display_name'].str.contains('指数')
df_fund_list_no_index = df_fund_list[-bool]
len(df_fund_list_no_index)
# 剔除指数基金后还剩4266支基金。
# 考察从2009-10-01到2019-9-30近10年的数据表现,这里选取上市日期早于2009-10-1的基金。
df_fund_list_tgt = df_fund_list_no_index[df_fund_list_no_index['start_date']<'2009-10-01']
len(df_fund_list_tgt)
# 这一步后只剩下了319支基金。我们发现绝大多数基金都是近5年,甚至是3年内发行的。
# 获取这些基金近10年的累计净值
security_list = list(df_fund_list_tgt.index)
day1 = '2009-10-01'
day2 = '2019-09-30'
df_fund_net_value = get_extras('adj_net_value', security_list, start_date=day1, end_date=day2, df=True, count=None)
# 删除包含NaN(即中途退市的基金)的列
df_fund_net_value.dropna(axis=1, how='any', inplace=True)
df_fund_net_value.shape
# 这一步后还剩292支基金,需要注意的是这里为了计算方便,除去了中途退市的基金,引入了未来函数,也就是幸存者偏差。虽然不够严谨但由于这里是研究基金之于指数的相对表现,因此作者作出取舍后仍使用了这种方法。
# 计算292支基金的日平均对数收益率,便于后续计算
df_fund_net_value['sum_change_ratio'] = 0
for i in range(0, 292):
    df_fund_net_value['sum_change_ratio']+=np.log(df_fund_net_value.iloc[:,i]/df_fund_net_value.iloc[:,i].shift(1))
df_fund_net_value['avg_change_ratio']=df_fund_net_value['sum_change_ratio']/292
df_fund_net_value.fillna(0, inplace=True)
# 对数收益率由于具有可加性,因此在投资收益率计算中非常常见。
# 给出日期对应的季节和月份
df_fund_net_value['month'] = df_fund_net_value.index.month
lookup = {
    1: 'Q1',
    2: 'Q1',
    3: 'Q1',
    4: 'Q2',
    5: 'Q2',
    6: 'Q2',
    7: 'Q3',
    8: 'Q3',
    9: 'Q3',
    10: 'Q4',
    11: 'Q4',
    12: 'Q4'
}
df_fund_net_value['quarter'] = df_fund_net_value['month'].apply(lambda x: lookup[x])

至此我们经过处理得到了以下三列数据以便于后续的计算:

# 获取近10年沪深300指数数据作为基准
security_list = '000300.XSHG'
day1 = '2009-10-01'
day2 = '2019-09-30'
df_300 = get_price(security_list, start_date=day1, end_date=day2, frequency='daily', fields=None, skip_paused=False, fq='pre', count=None)['close']
len(df_300)
# 10年的总交易天数2430,和前面的基金净值列表的行数相等,说明数据质量没有问题。
# 同样计算日对数收益率,并给出交易日所属月份和季度
df_300 = pd.DataFrame(df_300)
df_300['change_ratio']=np.log(df_300['close']/df_300['close'].shift(1))
df_300['month']=df_300.index.month
df_300['quarter']=df_300.month.apply(lambda x:lookup[x])
df_300.fillna(0, inplace=True)
df_300.head()

股票型基金怎么操作_股票型基金_股票型基金 为何涨跌

得到的数据表如下:

# 先看季度的影响,分别画图
q_fund = df_fund_net_value.groupby('quarter')['avg_change_ratio'].sum()/*100
q_300 = df_300.groupby('quarter')['change_ratio'].sum()/10*100
q_fund.plot()
q_300.plot()
plt.xticks(range(0,4), ['Q1','Q2','Q3','Q4'])
plt.xlabel('Quarter')
plt.ylabel('Return Rate (%)')
plt.legend(['fund_avg', '300'], loc='best')

股票型基金怎么操作_股票型基金 为何涨跌_股票型基金

# 再来看分月的数据,同样画折线图
m_fund = df_fund_net_value.groupby('month')['avg_change_ratio'].sum()/10*100
m_300 = df_300.groupby('month')['change_ratio'].sum()/10*100
m_fund.plot()
m_300.plot()
plt.xticks(range(1,13),)
plt.ylabel('Return Rate (%)')
plt.legend(['fund_avg', '300'], loc='best')

# 最后计算基金平均收益率与沪深300指数的差值df_diff
df_diff=pd.DataFrame(df_fund_net_value['avg_change_ratio']-df_300['change_ratio'])
df_diff.rename(columns={0:'diff_change_ratio'}, inplace=True)
df_diff['year']=df_diff.index.year
df_diff['month']=df_diff.index.month
df_diff['quarter']=df_diff.month.apply(lambda x: lookup[x])
df_diff.head(5)
# 看看每年每季度基金的相对表现如何
df_diff.groupby(['year','quarter'])['diff_change_ratio'].sum()

# 计算2019-10-01至2019-09-30之间所有基金的每季度基金规模。
n=0
for i in range(0,309):
    fcode = df_fund_list_tgt.index[i][:6]
    q=query(finance.FUND_PORTFOLIO.code,
                      finance.FUND_PORTFOLIO.name,
                      finance.FUND_PORTFOLIO.pub_date,
                      finance.FUND_PORTFOLIO.stock_rate,
                      finance.FUND_PORTFOLIO.fixed_income_rate,
    finance.FUND_PORTFOLIO.total_asset).filter(finance.FUND_PORTFOLIO.code==fcode).order_by(finance.FUND_PORTFOLIO.pub_date.desc()).limit(40)
    df=finance.run_query(q)
    df.rename(columns={'total_asset': df['code'][0]}, inplace=True)
    df['actual_date']=df['pub_date'].apply(lambda x: x-datetime.timedelta(days=60))
    df['year']=df['actual_date'].apply(lambda x: str(x.year))
    df['quarter']=df['actual_date'].apply(lambda x: lookup[x.month])
    df['period']=df['year'].str.cat(df['quarter'], sep='-')
    df.set_index('period', inplace=True)
    df=df.iloc[:,5]
    #df.dropna(how='all', inplace=True)
    #df=pd.DataFrame(df)
    if df.isnull().values.any():
        continue
    if i==0:
        df_all=df
    elif (len(df)==40) & (df.index[-1]=='2009-Q4'):
        df_all=df_all+df
        n+=1
 
# 按季度分组并计算总规模
df_ttl = pd.DataFrame(df_all)
df_ttl.rename(columns={0: 'ttl_value'}, inplace=True)
df_ttl.reset_index(inplace=True)
df_ttl['quarter'] = df_ttl['period'].apply(lambda x: x[-2:])
df_ttl.iloc[3:-1,].groupby('quarter').sum()

本文来自网络,不代表伊好股票网立场,转载请注明出处:https://www.yhaow.com/jjzq/2166.html

作者: 伊好股票网

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

联系我们

0898-88881688

在线咨询: QQ交谈

邮箱: email@wangzhan.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部