绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
如何用R语言寻找值得长期投资的股票
2020-06-16 16:14:43

写在前面的话

终于开始用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把大数据编程和股票投资联系起来了,两个我原来觉得不太相关的领域,中间的门打通了。两个不同的维度找到了交叉点,甚喜、甚喜、甚喜!!!

分享好友

分享这个小栈给你的朋友们,一起进步吧。

R语言
创建时间:2020-06-15 11:46:51
R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的工具。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 小雨滴
    专家
戳我,来吐槽~