[.設定所需的函式庫(libraries)以及載入資料]

library(quantmod)
getSymbols("AAPL")
## [1] "AAPL"
#"getSymbols("AAPL")"是直接取用Yahoo Finance 裡蘋果(AAPL)股價的歷史資料。

[補充].你也可以抓台灣的資料,比如說:

library(quantmod)
getSymbols("2330.TW")
## [1] "2330.TW"
TSMC<-get("2330.TW")
chartSeries(TSMC, theme="white")

1.股價基本資料與畫出線圖

head(AAPL)
##            AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume
## 2007-01-03  86.28998  86.57999 81.90000   83.80001   309579900
## 2007-01-04  84.04998  85.94999 83.82003   85.65998   211815100
## 2007-01-05  85.77002  86.20003 84.39998   85.05000   208685400
## 2007-01-08  85.96000  86.53001 85.28002   85.47000   199276700
## 2007-01-09  86.45000  92.98002 85.15003   92.57003   837324600
## 2007-01-10  94.74997  97.80001 93.45000   96.99998   738220000
##            AAPL.Adjusted
## 2007-01-03      11.24516
## 2007-01-04      11.49475
## 2007-01-05      11.41289
## 2007-01-08      11.46925
## 2007-01-09      12.42201
## 2007-01-10      13.01647
tail(AAPL)
##            AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume
## 2015-05-13    126.15    127.19   125.87     126.01    34322000
## 2015-05-14    127.41    128.95   127.16     128.95    44487500
## 2015-05-15    129.07    129.49   128.21     128.77    37921200
## 2015-05-18    128.38    130.72   128.36     130.19    50176600
## 2015-05-19    130.69    130.88   129.64     130.07    44351200
## 2015-05-20    130.00    130.98   129.34     130.06    35965000
##            AAPL.Adjusted
## 2015-05-13        126.01
## 2015-05-14        128.95
## 2015-05-15        128.77
## 2015-05-18        130.19
## 2015-05-19        130.07
## 2015-05-20        130.06
#包含每天開盤價(AAPL.Open)、最高價(AAPL.High)、最低價(AAPL.Low)、收盤價(AAPL.Close)、成交量(AAPL.Volume)、(還原權值)AAPL.Adjusted。

chartSeries(AAPL)

chartSeries(AAPL["2012-01::2014-12"],theme="white") #我只要看此段區間的資料,同時把版面調成白色

2.畫出20日平均線(月線),60日平均線(季線)

#AAPL[,4]代表蘋果股價每日的收盤價(AAPL.Close),因為收盤價放在第四行所以這樣表示。runMean這個函數以即n=20表示計算過去20天的平均數。因此。ma_20是一個時間序列,每一時間點表示過去20天的收盤平均。
ma_20<-runMean(AAPL[,4],n=20)

#過去60天的收盤平均
ma_60<-runMean(AAPL[,4],n=60)

#將20日均線(ma_20)的圖形,用藍色線條加到目前K線圖上
addTA(ma_20,on=1,col="blue")

#將60日均線(ma_60)的圖形,用紅色線條加到目前K線圖上
addTA(ma_60,on=1,col="red")

3.進行策略回測

#為了方便講解回測,我們用最普通的均線策略:當20ma大於60ma時,全壓買進;當20ma小於60ma時,空手。

#position為一個時間序列,以日為單位,如果20ma大於60ma,設值為1;否則設值為0。由於我們是日資料,訊號發生時只能隔天做交易,故將這向量全部往後遞延一天。
position<-Lag(ifelse(ma_20>ma_60, 1,0))

#ROC計算:log(今天收盤價/昨天收盤價),乘上poistion代表。若1則持有,若0則空手。
return<-ROC(Cl(AAPL))*position

#由於我們策略條件是60ma>20ma之後才會交易,故統計值從2007-03-20開始;另外APPLE在2004年有配發股利,故我們只統計2007年到2014年的資料
return<-return['2007-03-30/2014-12-31']

#cumsum計算累計值,即將每一分量之前的值累加起來。取exp函數是要計算累計損亦。(這裡運用國中數學:log(a)+log(b)=log(ab),exp(log(ab))=ab)
return<-exp(cumsum(return))

#將累計損益圖畫出來。此策略的損益圖形如下,橫軸為時間軸,縱軸為報酬率,1代表原始自有資金100%。
plot(return)

4 .布靈通道

chartSeries(AAPL["2012-01::2015-04"],theme="white") #我只要看此段區間的資料

addBBands()

addBBands(draw="p")#另外加上Bollinger%b的圖形: Bollinger%b = (Close-LowerBound) / (UpperBound-LowerBound)