文章目录

下载某种股票(例如苹果公司股票)在特定时间段内行情数据,计算CCI指标,指出买入卖出时机,并评估该指标信号成功率(最好用程序计算而非肉眼观察)

以Apple的股票为例 先获取AAPL股票2011~2012年的交易数据,并CCI指标曲线

1
2
3
4
5
> myenv<-new.env()
> getSymbols("AAPL",env=myenv,src="yahoo",from="2011-01-01",to="2012-12-31")
[1] "AAPL"
> chartSeries(get("AAPL",myenv),name="AAPL",type="candlesticks")
> addCCI()

AAPL的蜡烛图和CCI曲线如下, AAPL的蜡烛图和CCI曲线

可以自己计算一下CCI数值,代码如下,

1
2
3
4
5
6
7
8
9
10
> AAPL<-get("AAPL",myenv)
> AAPL.CCI<-CCI(Cl(AAPL))
> head(AAPL.CCI[abs(AAPL.CCI)>100])
cci
2011-02-07 167.4110
2011-02-08 185.3041
2011-02-09 191.5906
2011-02-10 127.2951
2011-02-11 133.7871
2011-02-14 138.8391

根据CCI指标的判定标准,在向上穿过100和向上穿过-100的时候买入,在向下穿过100和向下穿过-100的时候卖出。关于判定标准可以参考这里。由这个标准加以简化成:当前一天的CCI<100并且当天的CCI>100时,买入;当前一天的CCI<-100并且当天的CCI>-100的时候,买入;当前一天的CCI>100并且当天的CCI<100时,卖出;当前一天的CCI>-100并且当天的CCI<-100的时候,卖出。根据CCI获得买点和卖点的代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
> AAPL.buy <- AAPL.CCI[(AAPL.CCI>100 & lag(AAPL.CCI)<100) | (AAPL.CCI> -100 & lag(AAPL.CCI)< -100)]
> head(AAPL.buy)
cci
2011-02-07 167.41103
2011-03-21 -71.17054
2011-04-12 -92.71218
2011-04-18 -90.40401
2011-04-21 105.07637
2011-05-19 -91.89860
> AAPL.sell <- AAPL.CCI[(AAPL.CCI<100 & lag(AAPL.CCI)>100) | (AAPL.CCI< -100 & lag(AAPL.CCI)> -100)]
> head(AAPL.sell)
cci
2011-02-17 80.81100
2011-03-16 -226.77233
2011-04-11 -121.86844
2011-04-15 -150.78366
2011-04-27 98.61009
2011-05-16 -193.65209

为了评估CCI的成功率,我们采用买点之后一周(5个交易日)和一个月(20个交易日)的收益率来判定是否是一次成功的操作。计算周收益率和月收益率的代码如下

1
2
> AAPL.wRet <- Delt(Cl(AAPL), k=5)
> AAPL.mRet <- Delt(Cl(AAPL), k=20)

注意,这里没有采用weeklyReturn和monthlyReturn函数,这是因为这2个函数会隔1周(月)来计算,而不是连续交易日计算。 接下来获取买点上的周收益率和月收益率,卖点的分析类似,代码如下

1
2
3
4
> AAPL.wRetCCI <- merge(AAPL.wRet,AAPL.buy)
> AAPL.mRetCCI <- merge(AAPL.mRet,AAPL.buy)
> AAPL.wBuy<-AAPL.wRetCCI[is.na(AAPL.wRetCCI[,2])==F ]
> AAPL.mBuy<-AAPL.mRetCCI[is.na(AAPL.mRetCCI[,2])==F ]

周收益率和月收益率的统计分析,代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
> ndays(AAPL.wBuy)
[1] 46
> ndays(AAPL.wBuy[AAPL.wBuy[,1]>0])
[1] 27
> ndays(AAPL.wBuy[AAPL.wBuy[,1]<0])
[1] 19
> summary(coredata(AAPL.wBuy[,1]))
Delt.5.arithmetic
Min. :-0.047253
1st Qu.:-0.017919
Median : 0.003219
Mean : 0.008318
3rd Qu.: 0.025278
Max. : 0.141157
> var(coredata(AAPL.wBuy[,1]))
Delt.5.arithmetic
Delt.5.arithmetic 0.001327706
> ndays(AAPL.mBuy[AAPL.mBuy[,1]>0])
[1] 22
> ndays(AAPL.mBuy[AAPL.mBuy[,1]<0])
[1] 24
> summary(coredata(AAPL.mBuy[,1]))
Delt.20.arithmetic
Min. :-0.105763
1st Qu.:-0.036321
Median :-0.001552
Mean : 0.012902
3rd Qu.: 0.051984
Max. : 0.204581
> var(coredata(AAPL.mBuy[,1]))
Delt.20.arithmetic
Delt.20.arithmetic 0.005551901

大致总结一下,买点总共有46个,按周收益率判定,买点后1周内,收益率>0的有27个,占比58.7%,均值0.8318%,方差0.1327706%;按月收益率判定,买点后1个月内,收益率>0的有22个,占比47.8%,均值1.2902%,方差0.5551901%。由于CCI是短线操作的超买超卖判定指标,所以短期的收益率应该比较能判定这个指标的性能,因此周收益率应该作为主要的参考。

同样的分析可以用于卖点的分析,代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
> AAPL.wRetCCIs <- merge(AAPL.wRet,AAPL.sell)
> AAPL.mRetCCIs <- merge(AAPL.mRet,AAPL.sell)
> AAPL.wSell<-AAPL.wRetCCIs[is.na(AAPL.wRetCCIs[,2])==F ]
> AAPL.mSell<-AAPL.mRetCCIs[is.na(AAPL.mRetCCIs[,2])==F ]
> ndays(AAPL.wSell)
[1] 46
> ndays(AAPL.wSell[AAPL.wSell[,1]>0])
[1] 18
> ndays(AAPL.wSell[AAPL.wSell[,1]<0])
[1] 28
> summary(coredata(AAPL.wSell[,1]))
Delt.5.arithmetic
Min. :-0.10974
1st Qu.:-0.04421
Median :-0.01815
Mean :-0.01892
3rd Qu.: 0.01183
Max. : 0.03638
> var(coredata(AAPL.wSell[,1]))
Delt.5.arithmetic
Delt.5.arithmetic 0.001108976
> ndays(AAPL.mSell[AAPL.mSell[,1]>0])
[1] 20
> ndays(AAPL.mSell[AAPL.mSell[,1]<0])
[1] 26
> summary(coredata(AAPL.mSell[,1]))
Delt.20.arithmetic
Min. :-0.128912
1st Qu.:-0.040139
Median :-0.009042
Mean : 0.010768
3rd Qu.: 0.063386
Max. : 0.194670
> var(coredata(AAPL.mSell[,1]))
Delt.20.arithmetic
Delt.20.arithmetic 0.006016731

总结一下卖点的分析数据,卖点总共有46个,按周收益率判定,卖点后1周内,收益率<0的有28个,占比60.9%,均值-1.892%,方差0.1108976%;按月收益率判定,卖点后1个月内,收益率<0的有26个,占比56.5%,均值1.0768%,方差0.6016731%。

总体而言,CCI的判定效果对于AAPL股票并没有很高的成功率,对于算法交易而言,成功率>70%以上的操作才有实用价值。这也说明了,当一个技术指标已经被大众所熟知的时候,就已经难以发挥其原先的效果了。

文章目录

欢迎来到Valleylord的博客!

本博的文章尽量原创。