資訊科技瞬息萬變,交易也受到資訊科技的影響在改變。舉例來說,以前黑板報價,現在網路下單,甚至是程式交易。以前把歷史線圖列印出來,每天當線仙日以繼夜研究;現在只需要幾個程式指令,便可做完所有股票的歷史回測。
然而,並不是所有的投資朋友都熟悉軟體操作、程式撰寫,有些朋友甚至不熟悉上網。對這一類電腦恐慌症的朋友來說,接觸資訊設備簡直就是一件比登天還難的事。
太多太多的不確定性,『該學什麼? 該買什麼軟體? 改有怎樣的電腦技能? 』這些都是投資人使用資訊科技的阻礙。
所以牧清華準備開始介紹一系列的資料分析上手課程。我們就從R語言開始。為什麼選擇R語言? 兩個重點:1. R免費。2. R功能可完全取代MultiChart,甚至更有彈性。
你可能沒聽過R語言,但開始接觸後你會愛上他!
R語言是當下最紅的統計程式語言,隨著巨量資料成為顯學,使用R語言將變成基本功夫。牧清華最近很常說一句話:『至少把R安裝後放在電腦桌面,取代"小算盤"也不錯!』我們不囉說,這篇文章就專門寫給程式語言生手,目的是讓你六分鐘就能實際做回測,當然也包括股價歷史資料的下載。下面我們開始介紹。
第一步:下載R語言。http://cran.r-project.org/bin/windows/base/
使用windows的朋友,請點選畫面第一個 "Download R 3.1.2 for Windoes (54 megabytes, 32/64 bit)"
下載後請按執行,不停的 "下一步"、"下一步" 安裝下去。
第二步:安裝套件quantmod
安裝好R語言後,請選"程式套件" => "安裝程式套件" 選擇 "Taiwan(Taipei)" 後按確定。
接著選擇"載入程式套件" => 選擇 "quantmod" 後按確定。
說明:quantmod是R裡面很強大的finance相關套件,其功能對大部分的朋友來說絕對足夠。
第三步:下載股市資料(以APPLE為例)
開啟桌面的R圖示,輸入 "library(quantmod)"後,再輸入 "getSymbols("AAPL")",如下畫面:
說明: "library(quantmod)"是將quantmod套件引進函式庫。"getSymbols("AAPL")"是直接取用Yahoo Finance 裡蘋果(AAPL)股價的歷史資料。
輸入完成後,這時輸入"AAPL",可得到2007-01-03開始的蘋果股價資料,包含每天開盤價(AAPL.Open)、最高價(AAPL.High)、最低價(AAPL.Low)、收盤價(AAPL.Close)、成交量(AAPL.Volume)、(還原權值)AAPL.Adjusted。如下畫面:
這時你可以開始畫蘋果股價的歷史線圖了。quantmod裡的畫圖功能當然不輸一般看盤軟體。最直接的指令便是輸入 "chartSeries(AAPL)",得到圖形如下:
當然,上面圖形沒有很好看,至少背景黑漆漆一片該換成白色;再說,如果我只想要看2012年1月到2012年6月的圖形。chartSeries也提供很方便的指令。輸入指令
chartSeries(AAPL["2012-01::2012-06"],theme="white")
圖形如下:
白色背景,是不是好看且更專業看盤軟體了呢?
輸入指令:
ma_20<-runMean(AAPL[,4],n=20)
說明:AAPL[,4]代表蘋果股價每日的收盤價(AAPL.Close),因為收盤價放在第四行所以這樣表示。runMean這個函數以即n=20表示計算過去20天的平均數。因此。ma_20是一個時間序列,每一時間點表示過去20天的收盤平均。
ma_60<-runMean(AAPL[,4],n=60)
說明:過去60天的收盤平均。
addTA(ma_20,on=1,col="blue")
說明:將20日均線(ma_20)的圖形,用藍色線條加到目前K線圖上。
addTA(ma_60,on=1,col="red")
說明:將60日均線(ma_60)的圖形,用紅色線條加到目前K線圖上。
圖形如下:
第五步:進行策略回測
為了方便講解回測,我們用最普通的均線策略:當20ma大於60ma時,全壓買進;當20ma小於60ma時,空手。輸入指令:
為了方便講解回測,我們用最普通的均線策略:當20ma大於60ma時,全壓買進;當20ma小於60ma時,空手。輸入指令:
position<-Lag(ifelse(ma_20>ma_60, 1,0))
解說:position為一個時間序列,以日為單位,如果20ma大於60ma,設值為1;否則設值為0。由於我們是日資料,訊號發生時只能隔天做交易,故將這向量全部往後遞延一天。
return<-ROC(Cl(AAPL))*position
解說:ROC計算:log(今天收盤價/昨天收盤價),乘上poistion代表。若1則持有,若0則空手。
return<-return['2007-03-30/2013-12-31']
解說:由於我們策略條件是60ma>20ma之後才會交易,故統計值從2007-03-20開始;另外APPLE在2004年有配發股利,故我們只統計2007年到2013年的資料
return<-exp(cumsum(return))
解說:cumsum計算累計值,即將每一分量之前的值累加起來。取exp函數是要計算累計損亦。(這裡運用國中數學:log(a)+log(b)=log(ab),exp(log(ab))=ab)
plot(return)
解說:將累計損益圖畫出來。
此策略的損益圖形如下,橫軸為時間軸,縱軸為報酬率,1代表原始自有資金100%。
解說:ROC計算:log(今天收盤價/昨天收盤價),乘上poistion代表。若1則持有,若0則空手。
return<-return['2007-03-30/2013-12-31']
解說:由於我們策略條件是60ma>20ma之後才會交易,故統計值從2007-03-20開始;另外APPLE在2004年有配發股利,故我們只統計2007年到2013年的資料
return<-exp(cumsum(return))
解說:cumsum計算累計值,即將每一分量之前的值累加起來。取exp函數是要計算累計損亦。(這裡運用國中數學:log(a)+log(b)=log(ab),exp(log(ab))=ab)
plot(return)
解說:將累計損益圖畫出來。
此策略的損益圖形如下,橫軸為時間軸,縱軸為報酬率,1代表原始自有資金100%。
由圖可知,在2007年3月後開始交易到2013年底,用這最簡單的策略,資產整整翻了將近6倍!
(註:這裡只是為了方便解釋使用R語言很容易做策略回測,並不是說這個簡單的交易策略可行,事實上APPLE這幾年長期多頭,隨便買了持有幾乎都會賺錢!)
Quantmod的其他技術指標
當然,套件quantmod也包含了其他的技術指標,最常用的我想就是布靈通道。再畫出股價走勢圖後,再輸入指令 "addBBands()"圖形顯示為
我們也可另外加上Bollinger%b的圖形。
Bollinger%b = (Close-LowerBound) / (UpperBound-LowerBound)
輸入"addBBands(draw="p")"
圖形顯示為
當1.0代表股價碰到布靈通到上緣,0.0代表股價碰到布靈通到下緣。Bollinger%b公式為(Close-LowerBound) / (UpperBound-LowerBound)
打完收工!
星期二;一天一錠,效果一定,歡迎訂閱「幣圖誌Bituzi電子報」
寫程式,玩資料,會上癮。
重點是先跨出第一步,即使是簡單的第一步,小有成就,很快就陷進無法自拔的深淵!
關於quantmod套件的介紹使用,可參考官方網站 http://www.quantmod.com/examples/intro/#data
0 意見:
張貼留言