600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > R语言如何确定股市交易日期 并利用tushare获取数据对事件影响进行回测

R语言如何确定股市交易日期 并利用tushare获取数据对事件影响进行回测

时间:2018-10-09 10:35:31

相关推荐

R语言如何确定股市交易日期 并利用tushare获取数据对事件影响进行回测

最近笔者在研究新闻事件与股票价格的相关关系。由于股市相对比较特殊,事件对于股价的影响时长更需要使用交易日的数据进行衡量,比如春节期间发生的重大事件,由于闭市其影响必须要在其后的交易日内才生显现,所以获取事件发生时是否处于股市的交易日,并研究事件发生后的若干个交易日内的股价变动情况,才能进行有效相应回测。

笔者首先想到的是先获取上证指数的交易信息,将其中的交易日期单独取出,做为交易日的基线。但是这样的做法不够简单明了,且耗时较长,由于股市的开市规则是周末及法定节假日均不开市,于是笔者考虑使用黑名单策略,构建一个函数来判断当前日期是否是工作日。

代码如下:

IsWorkDay<-function(day)

{

day=as.Date(day)

yuanDan18=seq(as.Date('-12-31'),as.Date('-01-02'),by=1)

yuanDan19=seq(as.Date('-12-30'),as.Date('-01-01'),by=1)

chunjie=seq(as.Date('-02-15'),as.Date('-02-21'),by=1)

qingming=seq(as.Date('-04-05'),as.Date('-04-07'),by=1)

laodong=seq(as.Date('-04-29'),as.Date('-05-01'),by=1)

duanwu=seq(as.Date('-06-16'),as.Date('-06-18'),by=1)

guoQing=seq(as.Date('-10-01'),as.Date('-10-07'),by=1)

zhongQiu=seq(as.Date('-09-22'),as.Date('-09-24'),by=1)

holidays=c(yuanDan18,yuanDan19,chunjie,qingming,laodong,duanwu,guoQing,zhongQiu)

result1=weekdays(day)%in%c("星期六","星期天")

result2=day%in%holidays

result=result1|result2

if(result)

{

return(F)

}

else

{

return(T)

}

}

这种做法最简单粗暴,效率也高。那么判断事件后的若干个交易日是哪天,也很简单代码如下:

NextWorkDay<-function(day,i)

{

day=as.Date(day)

gap=0

dayres=day

while(gap<i)

{

dayres=dayres+1

if(IsWorkDay(dayres))

{

gap=gap+1

}

}

return(dayres)

}

接下来介绍下TusharePro,我们知道Tushare做为老牌的量化社区一直是python的踏实拥护者,但是他们最近也开始拥抱R语言了,并开始提供R语言包,具体见https://tushare.pro/register?reg=229559注册获得token后即可运行以下代码。

install.packages('Tushare')

library(Tushare)

api <- Tushare::pro_api(token = '你的token')

api(api_name = 'stock_basic')

bar <- Tushare::pro_bar(token = '你的token')

#假设中国平安十一发生了发布新产品的事件为例,那么这样操作就可以了

startdateTmp='-10-01'

startdate=format(as.Date(startdateTmp),,"%Y%m%d")

enddate=format(NextWorkDay(startdateTmp',14),"%Y%m%d")

testbar=bar(ts_code = '000001.SZ', adj='qfq',start_date = startdate, end_date = enddate)

这样将testbar中的相关交易行情取出来就可以做回测啦。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。