关于rolling函数探索,以及对北向资金能否预示股市涨跌的修正

网友投稿 1183 2022-05-28

在北向资金能否预示股市涨跌?中用到了pandas的rolling函数,但只是依葫芦画瓢,对rolling函数的原理并未深入学习,是否正确使用了这个函数决定了我们对北向资金能否预示股市涨跌的判断是否正确。因此,我们先对pandas.DataFrame.rolling函数进行一些探索,进而对北向资金能否预示股市涨跌?进行修正。

1. rolling的入参

rolling(self, window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)

可以看到rolling共有两个必备参数,六个关键字参数(可参见python基础——华为AI学习笔记7)

self

这是对象本身

window

可以是int,offset,或者BaseIndexer的子类。

它主要用来定义移动窗口的大小,每个窗口的大小都是固定的。

如果是int,窗口是以观察值的数量来定义的,比如3个观察值;

如果是offset,窗口是以观察时间段来定义的,比如1个月;

如果是BaseIndexer的子类,则需要结合min_periods、center和closed等参数,通过get_window_bounds来计算窗口的大小。

min_periods

可以是int型,默认为None。

它用来定义计算窗口中观察值的最少个数,如果观察值少于最少个数,结果将为NA。

当window为int时,min_periods默认为window;

当window为offset时,min_periods默认为1。

center

bool型,默认为False。

关于rolling函数的探索,以及对北向资金能否预示股市涨跌的修正

设定当前观察值处于窗口中间,或处于窗口最后,默认为最后。

win_type

str型,默认为None。

包含以下类型:

boxcar:矩形窗口

triang:三角形窗口

blackman:布莱克曼窗口

hamming:汉明窗口

bartlett:

此外,还有parzen、bohman、blackmanharris、nuttall、barthann、kaiser、gaussian、general_gaussian、slepian、exponential等。

on

可以是str型,它是可选参数。

计算日期型或level型时使用。

axis

可以是int或str,默认为0。

closed

可以是right、left、both或neither,默认为None。

如果window为offset时,默认为right。

当固定窗口时,closed只能是both。

2. rolling的出参

rolling的出参是针对特定操作的窗口或rolling子类。

3. 关于rolling的简单案例

先创建一个DataFrame。

import pandas as pd a = pd.DataFrame({'a':[1, 2, 3, 3, 5, 8], 'b':[3, 5, 5, 7, 9, 1]})

简单地求和。

a.rolling(2).sum()

4. 基于rolling的相关系数

a.rolling(2).corr()

a.rolling(3).corr()

a.loc[0:2].corr()

可以看到,这里相关系数是基于每一个窗口去计算的。因此,我们在北向资金能否预示股市涨跌?里的rolling函数的使用明显是错的,它其实只是计算最后的120个北向资金与每个大盘后120项数据的相关系数。

5. 北向资金对股市涨跌的启示修正

从提前一天的北向资金与大盘指数的时间序列出发,阶段性生成代码如下,更多过程请参见北向资金能否预示股市涨跌?。

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

先用rolling来生成滚动累计值。

data_return['north_money10'] = data_return.rolling(10).sum()['north_money'] data_return['north_money20'] = data_return.rolling(20).sum()['north_money'] data_return['north_money30'] = data_return.rolling(30).sum()['north_money'] data_return['north_money60'] = data_return.rolling(60).sum()['north_money'] data_return['north_money120'] = data_return.rolling(120).sum()['north_money'] data_return[['north_money', 'north_money10', 'north_money20', 'north_money30', 'north_money60', 'north_money120']]

计算各滚动累计值与大盘指数的相关性。

c = data_return.loc[:, ['north_money', ] + list(data_return.columns[2:11])].corr().iloc[:2, 1:] c = c.append(data_return.loc[10:, ['north_money10', ] + list(data_return.columns[2:11])].corr().iloc[0, 1:10]) c = c.append(data_return.loc[20:, ['north_money20', ] + list(data_return.columns[2:11])].corr().iloc[0, 1:10]) c = c.append(data_return.loc[30:, ['north_money30', ] + list(data_return.columns[2:11])].corr().iloc[0, 1:10]) c = c.append(data_return.loc[60:, ['north_money60', ] + list(data_return.columns[2:11])].corr().iloc[0, 1:10]) c = c.append(data_return.loc[120:, ['north_money120', ] + list(data_return.columns[2:11])].corr().iloc[0, 1:10]) c.drop('上证指数', inplace=True) c

从结果可以看到,北向资金对于预测股市涨跌几乎没有任何作用,似乎我们仅仅修正了个寂寞。

但是,不管是数据分析还是量化投资,很多规律的探索都不可能一蹴而就,至少我们熟悉了一种新的方法,证伪了一个假设。

参考文献:

https://vimsky.com/zh-tw/examples/usage/python-cusignal.windows.windows.boxcar-rp.html

https://vimsky.com/examples/usage/python-cusignal.windows.windows.triang-rp.html

https://www.cjavapy.com/article/768/

https://vimsky.com/zh-tw/examples/usage/python-cusignal.windows.windows.blackman-rp.html

https://blog.csdn.net/weixin_43773093/article/details/87897876

https://vimsky.com/zh-tw/examples/usage/python-cusignal.windows.windows.bartlett-rp.html

https://blog.csdn.net/chinacmt/article/details/104757646

金融专区

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Linux 操作系统原理 — 系统启动流程
下一篇:Mac OS升级出现报错信息:将安装器信息下载到目标宗卷失败
相关文章