以下示範用R套件來做:
- 下載個股的交易資料
- 畫線圖、加趨勢線
- 下載某一群股票的歷史股價
- 算出某一群股票的報酬率
- 設定投資限制條件
- 畫出效率前緣 (Efficient Frontier)
- 算出最佳投資組合
- 從投資網站下載個股評論
- 對個股評論做情緒分析
載入套件
options(digits=4, scipen=100)
rm(list=ls(all=T))
Sys.setlocale('LC_ALL', 'C')
library(fPortfolio)
library(tseries)
library(quantmod)
下載線上交易資料
getSymbols('MSFT',from=as.Date('2016-07-01'),to=as.Date('2017-01-01'))
[1] "MSFT"
畫線圖、加趨勢線
chartSeries(MSFT)

addMACD() ; addBBands()


下載道瓊成分股的歷史股價
DJIA = c('MMM', 'AXP', 'AAPL', 'BA', 'CAT', 'CVX',
'CSCO', 'KO', 'DD', 'XOM', 'GE', 'GS',
'HD', 'IBM', 'INTC', 'JNJ', 'JPM', 'MCD',
'MRK', 'MSFT', 'NKE', 'PFE', 'PG', 'TRV',
'UNH', 'UTX', 'VZ', 'V', 'WMT', 'DIS')
dd = as.Date(c('2015-04-01','2017-03-31'))
算出道瓊成分股的報酬率
mx = sapply(DJIA, function(x) {
G = getSymbols(x,from=dd[1],to=dd[2],auto.assign=F)
as.numeric(Delt(G[,6])) })[-1,]
names(mx) = DJIA
ts = as.timeSeries(mx)
設定投資限制條件
cons = c('LongOnly')
spec = portfolioSpec()
setNFrontierPoints(spec) = 25
setSolver(spec) = "solveRquadprog"
frontier = portfolioFrontier(ts, spec, cons)
畫出效率前緣 (Efficient Frontier)
par(cex=0.7)
tailoredFrontierPlot(frontier)

算出最佳投資組合
par(cex=0.8)
weightsPlot(frontier,col=rainbow(length(DJIA)))

從投資網站下載個股評論
#library(devtools)
#install_github("mannau/tm.plugin.sentiment")
#install.package("tm.plugin.webmining")
library(tm.plugin.sentiment)
library(tm.plugin.webmining)
aapl = WebCorpus(GoogleFinanceSource("AAPL"))
對個股評論做情緒分析
aapl <- score(aapl)
sentixts <- metaXTS(aapl)
chartSentiment(sentixts)

LS0tDQp0aXRsZTogIlIg6LKh6YeR5aWX5Lu256S656+EIg0KYXV0aG9yOiAiVG9ueSBDaHVvIg0KZGF0ZTogIjIwMTflubQ15pyIMTbml6UiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQo8YnI+DQoNCuS7peS4i+ekuuevhOeUqFLlpZfku7bkvoblgZrvvJoNCg0KKyDkuIvovInlgIvogqHnmoTkuqTmmJPos4fmlpkNCisg55Wr57ea5ZyW44CB5Yqg6Lao5Yui57eaDQorIOS4i+i8ieafkOS4gOe+pOiCoeelqOeahOatt+WPsuiCoeWDuQ0KKyDnrpflh7rmn5DkuIDnvqTogqHnpajnmoTloLHphaznjocNCisg6Kit5a6a5oqV6LOH6ZmQ5Yi25qKd5Lu2DQorIOeVq+WHuuaViOeOh+WJjee3oyAoRWZmaWNpZW50IEZyb250aWVyKQ0KKyDnrpflh7rmnIDkvbPmipXos4fntYTlkIgNCisg5b6e5oqV6LOH57ay56uZ5LiL6LyJ5YCL6IKh6KmV6KuWDQorIOWwjeWAi+iCoeipleirluWBmuaDhee3kuWIhuaekA0KDQotIC0gLQ0KPGJyPg0KDQoNCiMjIyDovInlhaXlpZfku7YNCg0KYGBge3J9DQpvcHRpb25zKGRpZ2l0cz00LCBzY2lwZW49MTAwKQ0Kcm0obGlzdD1scyhhbGw9VCkpDQpTeXMuc2V0bG9jYWxlKCdMQ19BTEwnLCAnQycpDQpsaWJyYXJ5KGZQb3J0Zm9saW8pDQpsaWJyYXJ5KHRzZXJpZXMpDQpsaWJyYXJ5KHF1YW50bW9kKQ0KYGBgDQoNCiMjIyDkuIvovInnt5rkuIrkuqTmmJPos4fmlpkNCg0KYGBge3J9DQpnZXRTeW1ib2xzKCdNU0ZUJyxmcm9tPWFzLkRhdGUoJzIwMTYtMDctMDEnKSx0bz1hcy5EYXRlKCcyMDE3LTAxLTAxJykpDQpgYGANCg0KIyMjIOeVq+e3muWcluOAgeWKoOi2qOWLoue3mg0KDQpgYGB7cn0NCmNoYXJ0U2VyaWVzKE1TRlQpDQphZGRNQUNEKCkgOyBhZGRCQmFuZHMoKSANCmBgYA0KDQojIyMg5LiL6LyJ6YGT55OK5oiQ5YiG6IKh55qE5q235Y+y6IKh5YO5DQoNCmBgYHtyfQ0KREpJQSA9IGMoJ01NTScsICAnQVhQJywgICdBQVBMJywgJ0JBJywgICdDQVQnLCAnQ1ZYJywNCiAgICAgICAgICdDU0NPJywgJ0tPJywgICAnREQnLCAgICdYT00nLCAnR0UnLCAgJ0dTJywNCiAgICAgICAgICdIRCcsICAgJ0lCTScsICAnSU5UQycsICdKTkonLCAnSlBNJywgJ01DRCcsDQogICAgICAgICAnTVJLJywgICdNU0ZUJywgJ05LRScsICAnUEZFJywgJ1BHJywgICdUUlYnLA0KICAgICAgICAgJ1VOSCcsICAnVVRYJywgICdWWicsICAgJ1YnLCAgICdXTVQnLCAnRElTJykNCmRkID0gYXMuRGF0ZShjKCcyMDE1LTA0LTAxJywnMjAxNy0wMy0zMScpKQ0KYGBgDQoNCiMjIyDnrpflh7rpgZPnk4rmiJDliIbogqHnmoTloLHphaznjocNCg0KYGBge3J9DQpteCA9ICBzYXBwbHkoREpJQSwgZnVuY3Rpb24oeCkgew0KICBHID0gZ2V0U3ltYm9scyh4LGZyb209ZGRbMV0sdG89ZGRbMl0sYXV0by5hc3NpZ249RikNCiAgYXMubnVtZXJpYyhEZWx0KEdbLDZdKSkgfSlbLTEsXQ0KbmFtZXMobXgpID0gREpJQQ0KdHMgPSBhcy50aW1lU2VyaWVzKG14KQ0KYGBgDQoNCiMjIyDoqK3lrprmipXos4fpmZDliLbmop3ku7YNCg0KYGBge3J9DQpjb25zID0gYygnTG9uZ09ubHknKQ0Kc3BlYyA9IHBvcnRmb2xpb1NwZWMoKQ0Kc2V0TkZyb250aWVyUG9pbnRzKHNwZWMpID0gMjUNCnNldFNvbHZlcihzcGVjKSA9ICJzb2x2ZVJxdWFkcHJvZyINCmZyb250aWVyID0gcG9ydGZvbGlvRnJvbnRpZXIodHMsIHNwZWMsIGNvbnMpDQpgYGANCg0KIyMjIOeVq+WHuuaViOeOh+WJjee3oyAoRWZmaWNpZW50IEZyb250aWVyKQ0KDQpgYGB7cn0NCnBhcihjZXg9MC43KQ0KdGFpbG9yZWRGcm9udGllclBsb3QoZnJvbnRpZXIpDQpgYGANCg0KIyMjIOeul+WHuuacgOS9s+aKleizh+e1hOWQiA0KDQpgYGB7cn0NCnBhcihjZXg9MC44KQ0Kd2VpZ2h0c1Bsb3QoZnJvbnRpZXIsY29sPXJhaW5ib3cobGVuZ3RoKERKSUEpKSkNCmBgYA0KDQojIyMg5b6e5oqV6LOH57ay56uZ5LiL6LyJ5YCL6IKh6KmV6KuWDQoNCmBgYHtyfQ0KI2xpYnJhcnkoZGV2dG9vbHMpDQojaW5zdGFsbF9naXRodWIoIm1hbm5hdS90bS5wbHVnaW4uc2VudGltZW50IikNCiNpbnN0YWxsLnBhY2thZ2UoInRtLnBsdWdpbi53ZWJtaW5pbmciKQ0KbGlicmFyeSh0bS5wbHVnaW4uc2VudGltZW50KQ0KbGlicmFyeSh0bS5wbHVnaW4ud2VibWluaW5nKQ0KYWFwbCA9IFdlYkNvcnB1cyhHb29nbGVGaW5hbmNlU291cmNlKCJBQVBMIikpDQpgYGANCg0KIyMjIOWwjeWAi+iCoeipleirluWBmuaDhee3kuWIhuaekA0KDQpgYGB7cn0NCmFhcGwgPC0gc2NvcmUoYWFwbCkNCnNlbnRpeHRzIDwtIG1ldGFYVFMoYWFwbCkNCmNoYXJ0U2VudGltZW50KHNlbnRpeHRzKQ0KYGBgDQoNCg0KDQo=