北向资金能否预示股市涨跌?

举报
darkpard 发表于 2022/04/05 16:16:49 2022/04/05
【摘要】 沪深港通已经开通多年,市场一度把北向资金称为聪明钱,用来预示股市的涨跌。那么时至今日,北向资金是否仍然是一个有效的指标?1. 获取北向资金数据首先从tushare获取北向资金的数据。import tushare as tspro = ts.pro_api('your token')严格地验证指标的有效性一般要求跨越牛熊周期,随着A股波动性的加大,牛熊周期也越来越短。这里我们简单地取3年时间做...

沪深港通已经开通多年,市场一度把北向资金称为聪明钱,用来预示股市的涨跌。那么时至今日,北向资金是否仍然是一个有效的指标?

1. 获取北向资金数据

首先从tushare获取北向资金的数据。

import tushare as ts
pro = ts.pro_api('your token')

严格地验证指标的有效性一般要求跨越牛熊周期,随着A股波动性的加大,牛熊周期也越来越短。这里我们简单地取3年时间做个验证。

df=pro.moneyflow_hsgt(start_date=20190330, end_date=20220330)
df

图片

由于tushare的限制,一次只能取300条,所以我们还需要多取几次数据,并把它们合起来。

df1=pro.moneyflow_hsgt(start_date=20190330, end_date=20201216)
df = df.append(df1)
df1=pro.moneyflow_hsgt(start_date=20190330, end_date=20190905)
df = df.append(df1)
df

图片

2. 获取大盘指数

我们可以去tushare获取指数信息。

indexes = pro.index_basic()
len(indexes), ','.join(indexes['name'].to_list())

图片

可以看到,tushare至少提供了8000种指数供选择。

其中如上证指数、深证成指、沪深300、创业板指、上证50、中证500、中小板指、上证180、深证100等都是比较常用的大盘指数。

先找出这些指数的代码。

index_names = ['上证指数','深证成指','沪深300','创业板指','上证50','中证500','中小板指','上证180','深证100']
indexes[indexes['name'].isin(index_names)][['name', 'ts_code']]

图片

我们先来获取上证180的数据。

s180 = pro.index_daily(ts_code=indexes['ts_code'][19], start_date=20190330, end_date=20220330, fields='trade_date, close')
s180

图片

然后我们来结构性地获取大盘指数。

index_names = ['上证指数','深证成指','沪深300','创业板指','上证50','中证500','中小板指','上证180','深证100']
trade_cal = pro.trade_cal(start_date=20190330, end_date=20220330, is_open=1)
index_data = trade_cal[['cal_date']]
index_data.columns = ['trade_date']
for name in index_names:
    index_new = pro.index_daily(ts_code=list(indexes[indexes['name']==name]['ts_code'])[0], start_date=20190330, end_date=20220330, fields='trade_date, close')
    index_new.columns = ['trade_date', name]
    index_data = pd.merge(index_data, index_new, on='trade_date')
index_data

图片

3. 探索性分析

将北向资金与大盘指数通过日期关联起来。

data = pd.merge(df[['trade_date', 'north_money']], index_data, on='trade_date', how='right')
data

注意,这里的how要设置为right,大盘指数用的是上市日历,而北向资金存在数据缺失。

通过正面代码可以看到哪些日期的数据存在缺失。

data[data['north_money'].isna()]

图片

简单地用pandas的默认方法做个插值。

data.interpolate(inplace=True)

可以看到,原来存在缺失的第13行已经完成了线性插值。

图片

将大盘指数表示成收益率维度,并且放弃第一行。

data_return = data.copy()
data_return[data.columns[2:]] = data_return[data.columns[2:]]/data_return[data.columns[2:]].shift(1)-1
data_return.drop(0, axis=0, inplace=True)
data_return

图片

计算北向资金与大盘指数的相关系统。

data_return.corr()

图片

可以看到,从近三年来看,北向资金与各大盘指数的相关性已经非常弱,绝对值已经都在0.1以下。

我们的题目是北向资金能否预示股市涨跌,如果是日线级的预示,需要北向资金领先一天。

data_return = data.copy()
data_return[data.columns[2:]] = data_return[data.columns[2:]]/data_return[data.columns[2:]].shift(1)-1
data_return['north_money'] = data_return['north_money'].shift(1)
data_return.drop(0, axis=0, inplace=True)
data_return

可以看到,相关性虽然有所提升,但仍然非常弱。

图片

参考文献1的设定,我们也来尝试下120日滚动窗口。

data_return[data_return.columns[1:]].rolling(120).corr().tail(10)

图片

可以看到,相关性仍然非常弱,且北向资金跟大部分指数都是负相关的。

事实上,无论是10日、20日、30日、60日,相关性也仍然非常弱。

可见,北向资金已经基本无法预示股市涨跌。当然,也许还有更好的特征提取方法,希望有机会看到。

参考文献:

  1. https://mp.weixin.qq.com/s/Vb9Ecejdtvez_V9oCEK8Vw
  2. https://blog.csdn.net/weixin_43887421/article/details/112508666
  3. https://www.jb51.net/article/151590.htm
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。