ss <- read.csv("~/Desktop/ss.endmonth.csv", header=FALSE)
# 导入数据,数据来源于谷歌(见下方链接)
# https://www.google.com/finance/historical?cid=7521596&startdate=Jan%2031%2C%202012&enddate=Dec%2031%2C%202014&num=30&gl=us&ei=X6AgVpGvNMLCiQLJt4LIBQ&start=690
#总共有36个观测值
ss  
##      V1      V2
## 1  1201 2292.61
## 2  1202 2428.49
## 3  1203 2262.79
## 4  1204 2396.32
## 5  1205 2372.23
## 6  1206 2225.43
## 7  1207 2103.63
## 8  1208 2047.52
## 9  1209 2086.17
## 10 1210 2068.88
## 11 1211 1980.12
## 12 1212 2269.13
## 13 1301 2385.42
## 14 1302 2365.59
## 15 1303 2236.62
## 16 1304 2177.91
## 17 1305 2300.59
## 18 1306 1979.21
## 19 1307 1993.80
## 20 1308 2098.38
## 21 1309 2174.66
## 22 1310 2141.61
## 23 1311 2220.50
## 24 1312 2115.98
## 25 1401 2033.08
## 26 1402 2056.30
## 27 1403 2033.31
## 28 1404 2026.36
## 29 1405 2039.21
## 30 1406 2048.33
## 31 1407 2201.56
## 32 1408 2217.20
## 33 1409 2363.87
## 34 1410 2420.18
## 35 1411 2682.83
## 36 1412 3234.68
r=c()
for (i in 2:36){
  r[i]=(ss[i,2]-ss[i-1,2])/ss[i-1,2]
}
#计算涨跌幅r,其中r[1]为NA缺失值
r
##  [1]           NA  0.059268694 -0.068231700  0.059011221 -0.010052914
##  [6] -0.061882701 -0.054730996 -0.026672942  0.018876494 -0.008287915
## [11] -0.042902440  0.145955801  0.051248716 -0.008313001 -0.054519169
## [16] -0.026249430  0.056329233 -0.139694600  0.007371628  0.052452603
## [21]  0.036351852 -0.015197778  0.036836772 -0.047070480 -0.039178064
## [26]  0.011421095 -0.011180275 -0.003418072  0.006341420  0.004472320
## [31]  0.074807282  0.007104053  0.066151001  0.023821107  0.108524986
## [36]  0.205696969
m=c()
for (i in 2:36){
  if (r[i] > 0.01){
    m[i]=1
  }
  else if (r[i]< -0.01){
    m[i]=3
  }
  else 
    m[i]=2
}
#计算Markov链m,为了方便后续计算概率,将上涨记为1,持平记为2,下跌记为3
m
##  [1] NA  1  3  1  3  3  3  3  1  2  3  1  1  2  3  3  1  3  2  1  1  3  1
## [24]  3  3  1  3  2  2  2  1  2  1  1  1  1
n1=matrix(nrow = 3,ncol = 3,data = c(0))
for (i in 2:36){
  n1[m[i],m[i+1]]=n1[m[i],m[i+1]]+1
}
#计算市场状态一步转移的频数表n1
n1
##      [,1] [,2] [,3]
## [1,]    5    3    6
## [2,]    3    2    2
## [3,]    6    2    5
n2<-n1
for (i in 1:3){
  n2[i,]=n2[i,]/sum(n2[i,])
  }
colnames(n2)<-c("rise","fair","fall")
rownames(n2)<-c("rise","fair","fall")
#计算一步转移概率矩阵n2,更改行列名称
n2
##           rise      fair      fall
## rise 0.3571429 0.2142857 0.4285714
## fair 0.4285714 0.2857143 0.2857143
## fall 0.4615385 0.1538462 0.3846154