作者的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 结果

结果和讨论详情放在了我的公众号里了,这里不再阐述,有兴趣的可以点击下面链接查看

https://mp.weixin.qq.com/s?__biz=Mzg4MTA0MzcxMg==&mid=2247483758&idx=1&sn=908a6e082e28e2e1c6a11c7caea2643f&chksm=cf6ab101f81d38172608c733b1430f1175602af82061839b2c9641feec55e893f200b9b4005b#rdicon-default.png?t=M276https://mp.weixin.qq.com/s?__biz=Mzg4MTA0MzcxMg==&mid=2247483758&idx=1&sn=908a6e082e28e2e1c6a11c7caea2643f&chksm=cf6ab101f81d38172608c733b1430f1175602af82061839b2c9641feec55e893f200b9b4005b#rd本人公众号:宇宙k王

作者的tushare ID:456548

Logo

专业量化交易与投资者大本营

更多推荐