R语言 | 利用tushare找出20年来跑赢GDP的股票,价值投资王者
本文利用tushare下载股票数据并找出了跑赢GDP的股票
作者的tushare ID:456548
20年来跑赢GDP的23只股票
1 引言
2022年股市表现很差,截至3月11日,创业板跌幅-19.78%,沪深300跌幅-12.83%,仅仅3个月,下跌幅度如此大,许多股民心中充满了恐慌,对股市提不起信心,想割肉离场。
要在恐慌中看到希望,回顾每一次大跌,都是黄金坑,低位买入的好机会。但今年很特殊,疫情的复发和俄乌的冲突导致全球不太平,注定是不太平的一年。在这种局势背景下,如果已下定决心不空仓,那么就只剩下一个问题了:买什么股票好呢?
今年的主题是求稳,那么我们今年的方向也应是求稳,要抛弃暴富的幻想。最低的要求就是跑赢通货膨胀,实现财富保值。
由于通货膨胀的数据难以获取,因此采用GDP替代通货膨胀。中国GDP增速一般大于通货膨胀,中国近10年来平均每年的通货膨胀在7%左右,GDP增速则平均每年12%左右。也就是说,如果能跑赢GDP,那么一定能跑赢通货膨胀。
本文利用tushare下载数据,通过分析数据找出了2002~2021年跑赢GDP的股票,并讨论了它们的共同点和它们所属行业的板块轮动情况。
2 方法和数据来源
2.1 跑赢GDP的定义
跑赢GDP指:①2021年收盘价除以2001年收盘价(复权价)大于10.4(因为2021年GDP÷2001年GDP = 10.4);②2002~2021年中至少有11年该股票年涨幅大于当年GDP增速。
上述两个条件都要满足。下面对这两个条件进行解释:2021年GDP为1143670亿元,2001年GDP为109655.2亿元,2021年GDP是2001年GDP的10.4倍,所以股票2021年收盘价除以2001年收盘价(复权价)要大于10.4,才能称为跑赢GDP;为保证选出来的股票有可持续上涨的趋势,要求2002~2021年中该股票至少有11年年涨幅大于当年GDP增速,以剔除只暴涨了几年而达到条件①的股票。
2.2 数据来源
本文所有数据均来源于tushare平台https://www.tushare.pro/(作者id:456548)。tushare平台是免费的股票数据平台,可以通过http、python、matlab和R获取数据,部分数据需要积分,学生注册可以免费获得积分。
代码如下:👇
library('Tushare')
bar <- Tushare::pro_bar(token = '****(你的token)')
api <- Tushare::pro_api(token = '****(你的token)')
#设置接口
gdp <- api(api_name = 'cn_gdp',start_q = "2001Q1", end_q = "2021Q4")
gdp1 <- gdp[which(str_detect(gdp$quarter,'Q4') == T),]
gdp1$year <- rev(2001:2021)
gdp1$zs <- 0
for (i in 1:20) {
gdp1$zs[i] <- (gdp1$gdp[i]-gdp1$gdp[i+1])/gdp1$gdp[i+1]
}
#上述代码利用tushare获取2001-2021年gdp季度数据,转化为年数据,并计算了每年的增速zs
ts_code <- api(api_name = 'stock_basic',list_status = 'L')
ts_code$date <- as.Date(strptime(ts_code$list_date,"%Y%m%d"))
ts_code1 <- ts_code[which(ts_code$date < '2001-10-01'),]
#获取正常上市的所有股票资料,并筛选出2001年10月1日之前上市的股票
a <- c() #储存跑赢GDP的股票代码
for (i in 1:1018) {
df <- bar(ts_code = ts_code1[i,1], asset='E',adj = 'qfq',
start_date = "20011225", end_date = "20211231")
df$date <- as.Date(strptime(df$trade_date,"%Y%m%d"))
df$year <- year(df$date)
if(length(unique(df$year))<21){ #剔除中途暂停上市的股票
next
}
year <- array(dim = c(21,3))
year[21,3] <- 0
year[,1] <- rev(2001:2021)
for (j in rev(2001:2021)) {
year[which(year[,1]==j),2] <- df$close[which(df$date == max(df$date[which(df$year == j)]))] #year[,2]为股票的年线收盘价
}
for (j in 1:20) {
year[j,3] <- (year[j,2]-year[(j+1),2])/year[(j+1),2] #计算股票年涨幅
}
if(sum(ifelse(year[,3]>gdp1$zs,1,0))>=11& #跑赢GDP的条件
year[1,2]/year[21,2]>10.4){
a <- c(a,ts_code1[i,1]) ##储存跑赢GDP的股票代码
}
Sys.sleep(0.1) #sleep防止循环因数据下载频繁而中断
}
3 结果
结果和讨论详情放在了我的公众号里了,这里不再阐述,有兴趣的可以点击下面链接查看
作者的tushare ID:456548
更多推荐
所有评论(0)