我国股市一向有“政策市”、“消息市”的美誉。A股小道消息满天飞,各种概念层出不穷,只要站在消息、概念的台风口,落汤鸡也能变成金凤凰,即使是ST股也能连续拉升30多个涨停,还不带喘气的。如果我们能够在大盘趋势图或者个股趋势图上,标注出这些消息,来个众山一览小,是否能有助于我们把握大趋势,喝少少肉汤昵?
证监会对于“政策市”的说法予以断然否认,称这只是与当前我国资本市场结构还不够合理、优化资源配置的功能没有充分发挥、市场约束机制不强、市场运行的体制和机制还存在一些问题有关。但股市的涨跌经常与政府出台政策相关联,因此,很多投资者会形成“证监会对股市涨跌负责”的印象。中国证监会指出,“股市有其内在的运行规律。作为监管部门,证监会的职责是维护市场公开、公平、公正原则,建立良好的竞争秩序。除了人民利益、国家利益、广大投资者的利益之外,证监会没有任何自己的利益。”
事实上A股的部分涨跌情况也能证明前述情况,比如国有股减持、股权分置改革等,都曾引发市场的大涨或大跌。
但A股市场也有不少政策失效的例子,比如证券交易印花税的调整,牛市提高印花税未能起到降温的作用,而熊市降低印花税也未能刺激股市上涨。
那么A股到底是否为政策市?在通常情况下,股市调控传说中的有几大神器有:①宏观调控;②证券交易印花税;③存贷款利率以及存款准备金率。
首先从宏观调控政策来看,如图1. 宏观调控政策对于A股的影响所示,1999年7月2日《证券法》实施,有了近两年的牛市表现,A股上证指数近乎翻了一倍还多;但从2001年7月26日以来,国有股开始减持,A股进入了三年半的漫漫熊途,达到历史最低点998.23点;2005年4月29日,股权分置改革正式拉开帷幕,开启了近两年半的牛气冲天,更是在2007年10月19日达到历史最高点6124.04点;2008年1年10日,次贷危机爆发,A股也未能独善其身,至今仍笼罩在其阴影中,楚楚可怜;2010年3月31日,试点融资融券,A股第一次引入了卖空机制,在次贷危机后稍有起色的股市应声而落,至今仍未能恢复元气。
![图1. 宏观调控政策对于A股的影响 图1. 宏观调控政策对于A股的影响](http://f.dataguru.cn/farattach/forum/201209/24/003300u5ktqep1hzeb153u.png)
其次从股票交易印花税的历次调整来看,如图2. 证券交易印花税对历次调整对A股的影响,牛市提高印花税未能起到降温的作用,而熊市降低印花税也未能刺激股市上涨。但传说中的919行情又该怎么解读昵?2008年9月19日,印花税调整为单边征收,A股大盘涨9.45%,近乎涨停!并从此又开始了一年多的小牛行情。
对于存贷款利率以及存款准备金率的历次调整,或者我没有提到的传说中的股市调控神器,也可以采用上述方法,很形象的将调整时间在A股大盘上标注出来,从此一图在手,A股我有。由此,对证监会的“A股不是政策市”的表态,我们深表遗憾,并保留进一步数据分析的权力!
那么分析A股神器的工具是什么昵?请看大屏幕!那就是大名鼎鼎的金融工具分析包quantmod,R中的战斗机!以及图形包ggplot2,R中的太极剑,招无定式、潜力无穷同时又容易学习!
分析A股大盘,标注关键事件,只需要做两件事:
1、收集关键事件,并整理到文本文件中,文件名称在这里命名为stock1.txt,结构如下:
date keyevent
1999-07-02 证券法实施
2001-07-26 国有股减持
2005-04-29 股权分置改革
2008-01-10 次贷危机爆发
2010-03-31 融资融券试点
2、执行如下R代码:
stocktools<-function(datafile) {
getSymbols('^SSEC',src='yahoo',from = '1997-01-01')
close <- (Cl(SSEC))
time <- index(close)
value <- as.vector(close)
yrng <- range(value)
xrng <- range(time)
data <- data.frame(start=as.Date(c('1997-01-01','2003-01-01')),end=as.Date(c('2002-12-30','2012-09-21')),core=c('jiang','hu'))
stockevent=read.table(datafile,header=TRUE)
stockevent2=stockevent[order(stockevent[,1]),]
timepoint<-as.Date(stockevent2$date)
n=length(timepoint)
for ( xx in 1:n) {
if (weekdays(timepoint[xx])=="星期六") timepoint[xx]<-timepoint[xx]-1
else if (weekdays(timepoint[xx])=="星期日") timepoint[xx]<-timepoint[xx]-2
timepoint[timepoint==as.Date('2008-09-15')]<-timepoint[xx]+1
}
#for (i in 1:n){print(value[time %in% timepoint])}
events<-stockevent2$keyevent
data2 <- data.frame(timepoint,events,stock=value[time %in% timepoint])
p <- ggplot(data.frame(time,value),aes(time,value))
p + geom_line(size=1,colour='turquoise4')+
geom_rect(alpha=0.2,aes(NULL,NULL,xmin = start, xmax = end, fill = core),ymin = yrng[1],ymax=yrng[2],data = data)+
scale_fill_manual(values = c('blue','red'))+
geom_text(aes(timepoint, stock, label = events),data = data2,vjust = -2,size = 3)+
geom_point(aes(timepoint, stock),data = data2,size = 5,colour = 'red',alpha=0.5)
}
library(quantmod)
library(ggplot2)
stocktools('stock1.txt')
另外还要注意,由于关键事件我们要与具体的A股点位对应,因此在代码中对于关键时间点做了处理,时间点是周末的,均将其前推到上个交易日。不过,对于农历的节假日还不支持,此类数据可以进行如下处理,执行如下代码:
for (i in 1:n){print(value[time %in% timepoint])}
如果某个时间未能取到正确的A股点位,那么该时间点不是A股的交易日,需要手工调整。
R代码中的关键技术如下:
1、 从网络获取股票数据
上证指数的符号是SSEC,获取上证指数的代码如下:
getSymbols("^SSEC")
上证指数的代码为000001.ss,其中.ss代表该指数从属于上交所:
getSymbols(“000001.ss”)
万科A股的代码为000002.sz,其中.sz代表该指数从属于深交所:
getSymbols(“000002.sz”)
提取收盘价:
Cl(x)
提取上交所A股上证指数自1997年1月1日的收盘价,数据源于yahoo,其代码如下:
getSymbols('^SSEC',src='yahoo',from ='1997-01-01')
close <- (Cl(SSEC))
2、 使用ggplot2绘制A股大盘折线图,同时在其上面标注关键事件:
ggplot 绘制散点图
geom_line 线段
geom_rect 绘制矩形区域
scale_fill_manual填充区域
geom_text 绘制文字描述
geom_point 点
详细用法可参照ggplot2相关文档,在此不在赘述。
用到的参考资料如下:
ggplot2 Elegant Graphics for Data Analysis (use R)
quantmod-R中的金融分析包