股票几个指数周收益率和月收益率的计算
在金融数据挖掘分析中经常会遇到不同时间维度的分析。本案例主要目的是介绍如何通过交易日历表和日交易数据,转化为统计的周交易数据和月交易数据,并实现周收益率和月收益率的计算。在本案例中,我们介绍了利用交易日历表寻找每周最小交易日和最大交易日、每月最小交易日和最大交易日两个算法,希望对读者有所启示。
计算上证
A
股指数(代码:
000002
)
2017
年的周收益率和月收益率指标数据。其中周收益率和月收益率指标计算公式如下:
周收益率=
(周最大交易日收盘指数
-
周最小交易日收盘指数)
/
周最小交易日收盘指数。
月收益率=
(月最大交易日收盘指数
-
月最小交易日收盘指数)
/
月最小交易日收盘指数
。
本案例使用的交易日历表(表名:
TRD_Cale
)和指数日交易数据表(表名:
IDX_Idxtrd
)数据均来源于
CSMAR
国泰安数据库,其表结构如下:
由于我们获取的数据为日行情交易数据,无法直接计算周收益率,需要对交易日历数据进行处理,即找出每周的最大交易日和最小交易日。从交易日历表的星期( Daywk )字段可以看出,当前星期值比下一个星期值大,其对应的交易日即为本周的最大交易日,下一个星期值对应的交易日即为下周的最小交易日。因此,寻找周最大交易日和最小交易日的算法如下:
由于我们获取的数据为日行情交易数据,无法直接计算周收益率,需要对交易日历数据进行处理,即找出每周的最大交易日和最小交易日。从交易日历表的星期( Daywk )字段可以看出,当前星期值比下一个星期值大,其对应的交易日即为本周的最大交易日,下一个星期值对应的交易日即为下周的最小交易日。因此,寻找周最大交易日和最小交易日的算法如下:
输入:交易日历数据表
date
输出:周最小交易日和最大交易日列表
list1
和
list2
Step1
:定义空的列表
list1
和
list2
,将交易日历表中的首个交易日添加到
list1
中
Step2
:从第
2
个交易日开始至倒数第
2
个交易日,如果其星期值大于下一个交易日的星期值,则将其交易日添加到
list2
中,下一个交易日添加到
list1
中。
Step3
:将最后的交易日添加到
list2
中。
代码如下:
i
mport pandas as
pd
x=
pd.read_excel
('TRD_Cale.xlsx')
list1=['2017-01-03']
list2=[]
for t in range(1,len(x)-1):
p=
x.iloc
[t-1,[2]][0]
q=
x.iloc
[t,[2]][0]
if q<p:
list1.append(
x.iloc
[t,[1]][0])
list2.append(
x.iloc
[t-1,[1]][0])
获得每周的最小交易日列表list1
和最大交易日列表
list2
后,就可以通过循环的方式,依次取最大交易日和最小交易日对应的收盘指数,利用前面介绍的公式计算即可获得周收益率指标数据。
data=
pd.read_excel
('IDX_Idxtrd.xlsx')
import
numpy
as np
r=
np.zeros
(
len
(list1))
for
i
in range(
len
(list1)):
p1=
data.loc
[data['Idxtrd01'].values==list1[
i
],'Idxtrd05'].values
p2=
data.loc
[data['Idxtrd01'].values==list2[
i
],'Idxtrd05'].values
r[
i
]=(p2-p1)/p1