如何用R語言尋找值得長期投資的股票

寫在前面的話

終於開始用R語言進行我一直感興趣的股票投資實踐,真是激動人心、心潮澎湃啊。^_^^_^^_^

動手開始實踐之前,先談談我對A股投資的幾點看法。系統學習股票投資一段時間以來,我是堅持認為股票投資是目前國內理財方式中比較不錯的理財方式。但前提是你必須學習學習再學習,具備相關理財知識後再進入該領域。你開個飯店,還要學習經營管理,甚至研究廚藝;某寶買個衣服還要貨比三家,而股市中真金白銀的買來買去,僅僅靠感覺嗎?當然不行,必須的有理財知識和風險意識。一定要建立自己的交易系統,否則還是謹慎進入。這是忠告,也是我的血的教訓。

提到交易系統,再多說幾句。所謂自己的交易系統,就是要選擇適合自己的投資方式。選擇騰訊、谷歌這樣的高成長性公司,長期持有其股票是交易系統,靠的是耐心;股市裡低買高賣,頻繁操作獲取利差,也是交易系統,靠的是對技術指標的熟練應用;研究國家政策和行業特點,對ST的國企分析其改革重組的機率,獲取高額的回報,也是交易系統,靠的是對宏觀政策的敏銳解讀和企業基本面的獨特研究;持有交通銀行這樣的巨無霸股票,吃股息和分紅收益,同時進行無風險的打新策略,也是交易系統,靠的是穩定的心態。仁者見仁智者見智,交易系統沒有優劣,只有適合與否。巴菲特靠價值投資聞名於世,無數後人追捧;而索羅斯靠市場投機同樣掙的盆滿缽滿,孰對孰錯呢?

股票交易是零和遊戲不假,你掙的錢肯定是某個人或某些人虧的錢。但它完全不同於賭博,股票買賣想要實現盈利就是控制好風險,持續做大概率事件,而不是靠運氣。從邏輯上分析,買入成長性的公司並長期持有,大概率是會掙錢的,這點毋庸置疑。

但在具體操作層面,股票操作還是很考驗人性的,能有一筆十年不動的資金放那、能夠買入後半年甚至一年關注下股價,能夠容忍自己買入股票後兩年還是當初的價格甚至更低(巴菲特還經常買入後被套好幾年)…………大家可以捫心自問下,當遇到這些情況時你是不是會有賣掉不做的衝動。就好比減肥,誰都知道少吃多運動就會瘦,可現實生活中做到的人比例卻是極低。

在這裡我想說的是,買入成長性公司並長期持有,這是「道」的層面,屬宏觀指導;具體投資還需掌握基本面分析、量價關係、左側和右側的不同趨勢交易、甚至K線等等「術」的層面知識,要會制定微觀操作策略。「道」與「術」相結合,採用定投等策略,最好投資美股(政策性影響較小,你懂的)。這是我的一點投資心得,也是我正努力的方向。與大家共勉。

廢話不敘,現在開始我的R語言實踐之旅:在R語言中用Quantmod金融包分析股票波動及長期持有的收益

1、選擇標的

選取A股中能夠稱得上價值投資的品種貴州茅台(600159),機械類龍頭三一重工(600031)和養殖概念股正邦科技(002157)。時間跨度從2007年1月至2017年8月底,看看一直持有這三隻股票收益會如何。同時這十年也是房價狂飆突進的十年,對比下收益,看看能有什麼結果。

說明:正邦科技是從2007年8月17日上市,時間稍稍短一點。

2、計算持有三支股票10年的收益

(1)讀入股票數據並存檔

在R語言中運用quantmod包讀取三隻股票數據,下載的股票數據當然的存檔了。代碼如下:

###讀取股票數據並存檔library(quantmod)library(dplyr)library(stringr)data1 <- getSymbols("600519.ss",src="yahoo",from="2007-01-01",to="2017-08-31",auto.assign = FALSE)#chartSeries(`600519.SS`)data2 <- getSymbols("600031.ss",src="yahoo",from="2007-01-01",to="2017-08-31",auto.assign = FALSE)data3 <- getSymbols("002157.sz",src="yahoo",from="2007-01-01",to="2017-08-31",auto.assign = FALSE)write.csv(data1,file = "G:/統計概率學習實踐/第三關實踐作業/data/600519.csv")write.csv(data1,file = "G:/統計概率學習實踐/第三關實踐作業/data/600031.csv")write.csv(data1,file = "G:/統計概率學習實踐/第三關實踐作業/data/002157.csv")

(2)持有這些股票10年的收益如何

股票投資中,收益率的計算公式為:

收益率=凈利潤/成本={(賣價-買價)*股份-手續費} /(買價*股份+買時費用)

假設我們買入後持有10年不動,假設股份沒有變化,在不考慮手續費時,計算公式可簡化為:

收益率=凈利潤/成本=(賣價-買價)/買價

###(1)用收盤價計算十年來收益率#首先轉化為周數據MT <- to.weekly(data1)SY <- to.weekly(data2)ZB <- to.weekly(data3)MTclose <- Cl(MT)MTrate10 <- (as.numeric(MTclose[546,1]) - as.numeric(MTclose[1,1]))*100/as.numeric(MTclose[1,1])MTrate10 <- round(MTrate10,2)SYclose <- Cl(SY)SYrate10 <- (as.numeric(SYclose[546,]) - as.numeric(SYclose[1,]))*100/as.numeric(SYclose[1,])SYrate10 <- round(SYrate10,2)ZBclose <- Cl(ZB)ZBrate10 <- (as.numeric(ZBclose[515,]) - as.numeric(ZBclose[1,]))*100/as.numeric(ZBclose[1,])ZBrate10 <- round(ZBrate10,2)

用2017年8月31日的收盤價來計算三隻股票的十年收益,分別為:茅台是657.76%,三一是180.61%,正邦是109.87%。

特別申明:以上收益只是以下載的數據進行簡單計算,可能會跟實際有出入(這個數據沒有經過除權)。因為茅台有股息分紅,十年時間跨度來衡量的話收益會更高;正邦在2016年9月有過高送轉,相當於總股本數會增多,實際收益也遠比109.87%高。三一不太了解,不多評述。

總的來說,2007年1月投資這三隻股票並持有超過十年的話,投資資金至少會翻倍,買入茅台的話收益會在6倍以上。大家可以對比下自己所在城市的房價漲幅,如果十年前投資房產收益又如何呢?反正我所在中部城市房價這十年也就是翻一倍而已,單從投資角度來看股票投資還是很划算的。畢竟房子是大筆資金,如果分期的話還得計算還銀行的利息。北上廣深房價漲幅大,可能投資房產收益會高些。

(3)股價波動告訴我們的投資策略

用quantmod包的chart_series()函數分別繪製三隻股票的收盤價波動曲線圖。

###(2)繪製周線的圖形並分析波動規律chart_Series(Cl(MT),name = "貴州茅台")chart_Series(Cl(SY),name = "三一重工")chart_Series(Cl(ZB),name = "正邦科技")

由圖可以看出,從10年投資跨度來看,貴州茅台投資價值最高,正邦科技次之,三一重工最差。簡單分析其原因是因為三一重工屬於工程基建行業,而基建投資跟國家的經濟周期有很大關係,隨著經濟周期的波動其業績也會有波動,反映在股市中就是股價起伏波動較大。相信有色和煤炭類的股票這種波動性更大。

由此得出的一點粗淺結論就是:如果長期持有投資的話,應避開周期類股票,盡量選擇消費類或成長類的白馬股票。

3、分析10年內三支股票的波動規律

(1)繪製月K線圖

把三隻股票日交易數據轉化成月數據,在R語言中用chartSeries()函數繪製包含最高、最低、開盤和收盤四個價格的月K線圖,看其波動情況。

(2)分別用ATR和ADX指標進行分析

採用ATR和ADX指標進行分析股價波動大小和趨勢強弱。

ATR是「真實波動浮動均值」。常態時,ATR波幅圍繞均線上下波動,極端行情時波幅上下幅度劇烈加大。一般認為,ATR指標越高,價格趨勢逆轉的幾率越大。作為一個波動性的指標,ATR只提供波動性啟示,無法預測股價方向。

ADX是平均趨向指標。它是另一種常用的趨勢衡量指標。它無法告訴你趨勢的發展方向,但如果趨勢存在可以衡量趨勢的強度。百度相關資料是這麼表述的。

添加ATR線和ADX線的月K線圖。代碼如下:

chartSeries(to.monthly(data1),name = "貴州茅台",theme = "white")addATR()addADX()chartSeries(to.monthly(data2),name = "三一重工",theme = "white")addATR()addADX()chartSeries(to.monthly(data3),name = "正邦科技",theme = "white")addATR()addADX()

三支股票添加ATR線和ADX線的月K線圖分別如下:

貴州茅台的ATR指標基本反映股票的波動大小。但在2014~2015年和2016年下半年,ATR波動較股價大,有所失真。

ADX指標基本反映貴州茅台股票的趨勢,但在2010~2012年和2014~2015年上半年,兩個時間段股價相似,但前後兩個時間段趨勢強弱卻不同。

三一重工的ATR指標跟股價波動大小非常吻合。但ADX指標在2015年上半年有所失真,指標大小表示的趨勢強度遠沒實際股價走勢強勁。

正邦科技的ATR指標和ADX指標都跟股價比較吻合。

粗淺結論是:長線投資來看,ATR和ADX指標只是起參考作用,不適合作為實際操作依據。長線來說,簡單的定投即可。

此外,還可以添加addMA,addMACD等等指標,這些功能常規券商軟體都可查看使用。普通投資者了解這些技術指標後,能夠對基金等理財產品加以判斷,選擇更好的產品即可,沒必要糾結於技術本身。很多理財產品的投資組合都是對數據提取和線性規劃求解後,做出相應的投資組合。我們只要「知其然」就可以了,不必追求「其所以然」。

4、三隻股票間以及與上證指數的相關性分析

股票市場中投資,雖然會有不同板塊輪動、大盤下跌某些股票仍然逆市上漲等現象。但從十年時間跨度來說,三支股票的漲跌彼此之間以及它們與上證指數之間有無相關性呢?

10年(2007年8月31日至2017年8月31日)時間段內,用R語言對三隻股票和上證指數(000001)的日調整數據進行了相關性分析。採用psych包的corr.test()函數進行積差相關關係的分析。

###(3)分析三支股票和上證指數日調整價格的相關性ss <- getSymbols(c("000001.ss","600519.ss","600031.ss","002157.sz"),src="yahoo",from="2007-08-31",to="2017-08-31")AD <- cbind(Ad(`000001.SS`),Ad(`600519.SS`),Ad(`600031.SS`),Ad(`002157.SZ`))AD <- as.data.frame(AD)library(psych)corr.test(AD)

由結果可知:與上證指數相比,貴州茅台和正邦科技相關係數分別為0.22和0.25,有一定的相關性;而三一重工跟上證指數相關係數為0.06,基本沒相關性。

與貴州茅台相比,正邦科技的相關係數為0.76,二者相關性較好;三一重工跟它倆都沒啥相關性。究其原因,貴州茅台和正邦科技雖然不屬於同一板塊,但都是與人們生活消費相關的股票,其業績跟消費能力有關,背後增長邏輯有一定相似性。而三一重工的業績增長跟它們倆的邏輯就不同。

粗淺結論:從長期來看,不是所有股票都跟上證指數有相關性的。長期投資的關鍵是選好標的,首選有成長性、有業績支撐的公司,一定要有背後邏輯支撐其股價長期上漲才行。這也是我本次實踐時新的感悟。

幾點說明和思考

(1)分析中用的數據未經除權處理,僅作為編程實踐使用。實際上貴州茅台加上分紅的收入的話已遠超股價成本,復權後初期股價已經成負值了。

(2)股票案例分析重在R語言編程實踐,不作為投資建議。投資理念倒是有借鑒之處。

(3)Quantmod包主要是抓數據和圖形顯示等技術分析。如果只是用這些技術指標作為投資參考,建議選用各大券商軟體,功能齊全、數據準確。畢竟想喝牛奶不用非得自己養頭牛嘛。

(4)如果想建立自己的投資量化模型或優化投資組合,Quantmod包是遠遠不夠的,還需不同的包來配合。感覺這是屬於金融領域範疇知識了。

(5)應用Quantmod包後感覺推開了另一扇門,進入了量化交易的領域。但埋頭趕路不要忘了抬頭看路,千萬別進入盲目學習的誤區。為了用而學,而不是為了學而學。金融包Quantmod也是如此,了解其功能後當做使用工具即可。因為價值投資、技術分析、量化交易分屬不同門派,孰好孰壞投資領域已經爭論百年,且沒有定論,關鍵的關鍵是研究後不一定能掙錢

(6)投資一定要關注背後的邏輯,然後堅守自己的邏輯並不斷修正。而現實卻是大部分人根本就沒有自己的邏輯。

本次實踐最讓我感到欣慰,也是最大的收穫是:金融包Quantmod把大數據編程和股票投資聯繫起來了,兩個我原來覺得不太相關的領域,中間的門打通了。兩個不同的維度找到了交叉點,甚喜、甚喜、甚喜!!!

推薦閱讀:

你們怎麼看待知乎 @如初 對股票的分析?一扯就是8到18個月,這正常嗎?
股票市場頭部是怎麼走出來的?
長期炒股的人有哪些經驗教訓?
歐奈爾的canslim法則怎麼樣?

TAG:R编程语言 | 股票分析 | 价值投资 |